Пример #1
0
        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);
            }
        }
Пример #2
0
        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());
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
            }
        }