code: async def i2c_read_request(self, command):
          
          device_address = int(command[0])
          register = int(command[1])
          number_of_bytes = int(command[2])
  
          if command[3] == "0":
              read_type = Constants.I2C_READ_CONTINUOUSLY
          elif command[3] == "1":
              read_type = Constants.I2C_READ
          elif command[3] == "2":
              read_type = Constants.I2C_READ | Constants.I2C_END_TX_MASK
          elif command[3] == "3":
              read_type = Constants.I2C_READ_CONTINUOUSLY | Constants.I2C_END_TX_MASK
          else:  # the default case stop reading valid request or invalid request
              read_type = Constants.I2C_STOP_READING
  
          await self.core.i2c_read_request(device_address, register, number_of_bytes, read_type,
                                           self.i2c_read_request_callback)
          await asyncio.sleep(.1)
docs: This method sends an I2C read request to Firmata. It is qualified by a single shot, continuous
          read, or stop reading command.
          Special Note: for the read type supply one of the following string values:
  
           "0" = I2C_READ
  
           "1" = I2C_READ | I2C_END_TX_MASK"
  
           "2" = I2C_READ_CONTINUOUSLY
  
           "3" = I2C_READ_CONTINUOUSLY | I2C_END_TX_MASK
  
           "4" = I2C_STOP_READING
  
          :param command: {"method": "i2c_read_request", "params": [I2C_ADDRESS, I2C_REGISTER,
                  NUMBER_OF_BYTES, I2C_READ_TYPE ]}
          :returns: {"method": "i2c_read_request_reply", "params": [DATA]}