code: def i2c_read_request(self, address, register, number_of_bytes, read_type,
                           cb=None, cb_type=None):
          
  
          task = asyncio.ensure_future(self.core.i2c_read_request(address, register,
                                                                  number_of_bytes,
                                                                  read_type,
                                                                  cb,
                                                                  cb_type))
          self.loop.run_until_complete(task)
docs: This method issues an i2c read request for a single read,continuous
          read or a stop, specified by the read_type.
          Because different i2c devices return data at different rates,
          if a callback is not specified, the user must first call this method
          and then call i2c_read_data  after waiting for sufficient time for the
          i2c device to respond.
          Some devices require that transmission be restarted
          (e.g. MMA8452Q accelerometer).
          Use I2C_READ | I2C_RESTART_TX for those cases.
  
          :param address: i2c device
  
          :param register: i2c register number
  
          :param number_of_bytes: number of bytes to be returned
  
          :param read_type:  Constants.I2C_READ, Constants.I2C_READ_CONTINUOUSLY
                             or Constants.I2C_STOP_READING.
  
          Constants.I2C_RESTART_TX may be OR'ed when required
          :param cb: optional callback reference
  
          :param cb_type: Constants.CB_TYPE_DIRECT = direct call or
                          Constants.CB_TYPE_ASYNCIO = asyncio coroutine
  
          :returns: No return value