def read_button(self): if config.i2c_handle is None: return packstr = ['>', 'B' if self.register_address_size == 1 else 'H'] unpackstr = ['>', 'B'] if self.register_size == 2: unpackstr[1] = 'H' elif self.register_size == 4: unpackstr[1] = 'I' # Interpret register address as hexadecimal value reg_addr = int(self.register_address, 16) # Interpret device address as hexadecimal value dev_addr = int(config.slave_address, 16) ft.ftI2cWrite(config.i2c_handle, dev_addr, FT260_I2C_FLAG.FT260_I2C_START, struct.pack("".join(packstr), reg_addr)) #Delay for IC to run the commands time.sleep(float(config.delay)/1000) # Register address is send. Can now retrieve register data (ft_status, data_real_read_len, readData, status) = ft.ftI2cRead(config.i2c_handle, dev_addr, FT260_I2C_FLAG.FT260_I2C_START_AND_STOP, self.register_size) if data_real_read_len != len(readData): print("Read {} bytes from ft260 lib, but {} bytes are in buffer".format(data_real_read_len, len(readData))) elif not ft_status == FT260_STATUS.FT260_OK.value: print("Read error : %s\r\n" % ft_status) if not len(readData) == 0: self.register_value = "%#x" % struct.unpack("".join(unpackstr), readData)
def write_button(self): if config.i2c_handle is None: return data_to_write = self.data.split(' ') words = [] packstr = '>' for hex_word in data_to_write: if hex_word != "": words.append(int(hex_word, 16)) packstr += self.word_symbol[self.data_word] (ft_status, data_real_write_len, writeData, status) = ft.ftI2cWrite(config.i2c_handle, int(config.slave_address, 16), FT260_I2C_FLAG.FT260_I2C_START_AND_STOP, struct.pack("".join(packstr), *words) ) unpackstr = ">" + self.word_symbol[self.data_word] * int(len(writeData) / self.data_word) update_str = "" for index, value in enumerate(struct.unpack(unpackstr, writeData)): if index >= data_real_write_len: break update_str = update_str + hex(value) + " " self.data = update_str
def write_button(self): if config.i2c_handle is None: return packstr = ['>', 'B', 'B'] if self.register_address_size == 2: packstr[1] = 'H' if self.register_size == 2: packstr[2] = 'H' elif self.register_size == 4: packstr[2] = 'I' # Interpret register address as hexadecimal value reg_addr = int(self.register_address, 16) # Interpret device address as hexadecimal value dev_addr = int(config.slave_address, 16) # Interpret value to write as hexadecimal value try: reg_value = int(self.register_value, 16) # Single hex value may not be valid for any reason. Just drop execution then. except ValueError: return ft.ftI2cWrite(config.i2c_handle, dev_addr, FT260_I2C_FLAG.FT260_I2C_START_AND_STOP, struct.pack("".join(packstr), reg_addr, reg_value))