Exemple #1
0
        public override void WriteRead(byte[] writeBuffer, int writeOffset, int writeLength, byte[] readBuffer, int readOffset, int readLength, out int numWritten, out int numRead)
        {
            numWritten = 0;
            numRead    = 0;

            if (readLength == 0 && writeLength == 0)
            {
                return;
            }
            else if (readLength == 0 && writeOffset == 0)
            {
                numWritten = Execute(Hardware.I2CDevice.CreateWriteTransaction(writeBuffer));
            }
            else if (writeLength == 0 && readOffset == 0)
            {
                numRead = Execute(Hardware.I2CDevice.CreateReadTransaction(readBuffer));
            }
            else if (readOffset == 0 && writeOffset == 0)
            {
                int bytes = Execute(Hardware.I2CDevice.CreateWriteTransaction(writeBuffer), Hardware.I2CDevice.CreateReadTransaction(readBuffer));
                numWritten = Math.Min(bytes, writeLength);
                numRead    = bytes - numWritten;
            }
            else
            {
                Hardware.I2CDevice.I2CTransaction writeTransaction = null;
                Hardware.I2CDevice.I2CTransaction readTransaction  = null;

                Hardware.I2CDevice.I2CTransaction[] transactions = new Hardware.I2CDevice.I2CTransaction[1];

                int count = 0;
                if (writeLength > 0)
                {
                    transactions[0] = writeTransaction = Hardware.I2CDevice.CreateWriteTransaction(writeBuffer);
                    count++;
                }
                if (readLength > 0)
                {
                    if (count > 0)
                    {
                        transactions    = new Hardware.I2CDevice.I2CTransaction[2];
                        transactions[0] = writeTransaction;
                    }

                    transactions[count] = readTransaction = Hardware.I2CDevice.CreateReadTransaction(readBuffer);
                }

                int bytes = Execute(transactions);
                numWritten = Math.Min(bytes, writeLength);
                numRead    = bytes - numWritten;
            }
        }
        public override void WriteRead(byte[] writeBuffer, int writeOffset, int writeLength, byte[] readBuffer, int readOffset, int readLength, out int numWritten, out int numRead)
        {
            numWritten = 0;
            numRead = 0;

            if (readLength == 0 && writeLength == 0)
            {
                return;
            }
            else if (readLength == 0 && writeOffset == 0)
            {
                numWritten = Execute(Hardware.I2CDevice.CreateWriteTransaction(writeBuffer));
            }
            else if (writeLength == 0 && readOffset == 0)
            {
                numRead = Execute(Hardware.I2CDevice.CreateReadTransaction(readBuffer));
            }
            else if (readOffset == 0 && writeOffset == 0)
            {
                int bytes = Execute(Hardware.I2CDevice.CreateWriteTransaction(writeBuffer), Hardware.I2CDevice.CreateReadTransaction(readBuffer));
                numWritten = Math.Min(bytes, writeLength);
                numRead = bytes - numWritten;
            }
            else
            {
                Hardware.I2CDevice.I2CTransaction writeTransaction = null;
                Hardware.I2CDevice.I2CTransaction readTransaction = null;
                
                Hardware.I2CDevice.I2CTransaction[] transactions = new Hardware.I2CDevice.I2CTransaction[1];

                int count = 0;
                if (writeLength > 0)
                {
                    transactions[0] = writeTransaction = Hardware.I2CDevice.CreateWriteTransaction(writeBuffer);
                    count++;
                }
                if (readLength > 0)
                {
                    if (count > 0)
                    {
                        transactions = new Hardware.I2CDevice.I2CTransaction[2];
                        transactions[0] = writeTransaction;
                    }

                    transactions[count] = readTransaction = Hardware.I2CDevice.CreateReadTransaction(readBuffer);
                }

                int bytes = Execute(transactions);
                numWritten = Math.Min(bytes, writeLength);
                numRead = bytes - numWritten;
            }
        }