def write_word_data(self, addr, cmd, val): """write_word_data(addr, cmd, val) Perform SMBus Write Word Data transaction. """ self._set_addr(addr) if SMBUS.i2c_smbus_write_word_data(self._fd, ffi.cast("__u8", cmd), ffi.cast("__u16", val)) == -1: raise IOError(ffi.errno)
def write_byte(self, addr, val): """write_byte(addr, val) Perform SMBus Write Byte transaction. """ self._set_addr(addr) if SMBUS.i2c_smbus_write_byte(self._fd, ffi.cast("__u8", val)) == -1: raise IOError(ffi.errno)
def process_call(self, addr, cmd, val): """process_call(addr, cmd, val) Perform SMBus Process Call transaction. Note: although i2c_smbus_process_call returns a value, according to smbusmodule.c this method does not return a value by default. Set _compat = False on the SMBus instance to get a return value. """ self._set_addr(addr) ret = SMBUS.i2c_smbus_process_call(self._fd, ffi.cast("__u8", cmd), ffi.cast("__u16", val)) if ret == -1: raise IOError(ffi.errno) if self._compat: return ret
def read_word_data(self, addr, cmd): """read_word_data(addr, cmd) -> result Perform SMBus Read Word Data transaction. """ self._set_addr(addr) result = SMBUS.i2c_smbus_read_word_data(self._fd, ffi.cast("__u8", cmd)) if result == -1: raise IOError(ffi.errno) return result
def read_byte_data(self, addr, cmd): """read_byte_data(addr, cmd) -> result Perform SMBus Read Byte Data transaction. """ self._set_addr(addr) res = SMBUS.i2c_smbus_read_byte_data(self._fd, ffi.cast("__u8", cmd)) if res == -1: raise IOError(ffi.errno) return res
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)