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; } }