readBytesReg method

List<int> readBytesReg(
  1. int address,
  2. int register,
  3. int len, [
  4. BitOrder order = BitOrder.msbLast,
  5. RegisterWidth width = RegisterWidth.bits8,
])

Reads len bytes from register of the I2C device with the address.

The optional register parameters bit order/width enables 16-bit register.

Some I2C devices can directly be read without explicit register. The bit order depends on the I2C device.

Implementation

List<int> readBytesReg(int address, int register, int len,
    [BitOrder order = BitOrder.msbLast,
    RegisterWidth width = RegisterWidth.bits8]) {
  var data = <I2Cmsg>[];
  data.add(I2Cmsg.buffer(
      address, [], [..._adjustRegister(register, order, width)]));
  data.add(I2Cmsg(address, [I2CmsgFlags.i2c_m_rd], len));

  var result = transfer(data);
  var msg2 = result._messages[1];
  try {
    var read = msg2.len;
    var ptr = msg2.buf;
    var list = <int>[];
    for (var i = 0; i < read; ++i) {
      list.add(ptr[i]);
    }
    return list;
  } finally {
    result.dispose();
  }
}