Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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))