private void WriteBlock(int blockNumber, int address, byte[] data) { var ops = OperationSequenceGenerator.Generate(_pageSize, address, data.Length); foreach (var op in ops) { var opAddr = (op.AbsoluteMemBlockNumber * _pageSize) + op.BlockOperationStart; var pageData = data.Skip(op.DataOperationStart).Take(_pageSize).ToArray(); WritePage((byte)(_deviceAddress + blockNumber), opAddr, pageData); } }
public byte[] ReadFromAddress(int address, int count) { List <byte> output = new List <byte>(); var ops = OperationSequenceGenerator.Generate(_blockSize, address, count); foreach (var op in ops) { output.AddRange(ReadBlock(op.AbsoluteMemBlockNumber, op.BlockOperationStart, op.OperationBlockSize)); } return(output.ToArray()); }
private byte[] ReadBlock(int blockNumber, int address, int count) { List <byte> output = new List <byte>(); var ops = OperationSequenceGenerator.Generate(_pageSize, address, count); foreach (var op in ops) { var opAddr = (op.AbsoluteMemBlockNumber * _pageSize) + op.BlockOperationStart; output.AddRange(ReadPage((byte)(_deviceAddress + blockNumber), opAddr, op.OperationBlockSize)); } return(output.ToArray()); }
public void WriteToAddress(int address, byte[] data) { if (data.Length + address > _definition.MemorySize / 8) { throw new ApplicationException("Data too long to write at given address!"); } var ops = OperationSequenceGenerator.Generate(_blockSize, address, data.Length); foreach (var op in ops) { var blockData = data.Skip(op.DataOperationStart).Take(_blockSize).ToArray(); WriteBlock(op.AbsoluteMemBlockNumber, op.BlockOperationStart, blockData); } }