def write_i2c_block_data(self, addr, cmd, vals): """write_i2c_block_data(addr, cmd, vals) Perform I2C Block Write transaction. """ self._set_addr(addr) data = ffi.new("union i2c_smbus_data *") list_to_smbus_data(data, vals) if SMBUS.i2c_smbus_access(self._fd, int2byte(SMBUS.I2C_SMBUS_WRITE), ffi.cast("__u8", cmd), SMBUS.I2C_SMBUS_I2C_BLOCK_BROKEN, data): raise IOError(ffi.errno)
def block_process_call(self, addr, cmd, vals): """block_process_call(addr, cmd, vals) -> results Perform SMBus Block Process Call transaction. """ self._set_addr(addr) data = ffi.new("union i2c_smbus_data *") list_to_smbus_data(data, vals) if SMBUS.i2c_smbus_access(self._fd, SMBUS.I2C_SMBUS_WRITE, ffi.cast("__u8", cmd), SMBUS.I2C_SMBUS_BLOCK_PROC_CALL, data): raise IOError(ffi.errno) return smbus_data_to_list(data)
def read_block_data(self, addr, cmd): """read_block_data(addr, cmd) -> results Perform SMBus Read Block Data transaction. """ # XXX untested, the raspberry pi i2c driver does not support this # command self._set_addr(addr) data = ffi.new("union i2c_smbus_data *") if SMBUS.i2c_smbus_access(self._fd, int2byte(SMBUS.I2C_SMBUS_READ), ffi.cast("__u8", cmd), SMBUS.I2C_SMBUS_BLOCK_DATA, data): raise IOError(ffi.errno) return smbus_data_to_list(data)
def read_i2c_block_data(self, addr, cmd, len=32): """read_i2c_block_data(addr, cmd, len=32) -> results Perform I2C Block Read transaction. """ self._set_addr(addr) data = ffi.new("union i2c_smbus_data *") data.block[0] = len if len == 32: arg = SMBUS.I2C_SMBUS_I2C_BLOCK_BROKEN else: arg = SMBUS.I2C_SMBUS_I2C_BLOCK_DATA if SMBUS.i2c_smbus_access(self._fd, int2byte(SMBUS.I2C_SMBUS_READ), ffi.cast("__u8", cmd), arg, data): raise IOError(ffi.errno) return smbus_data_to_list(data)