code: async def read_tap(self, callback=None):
          
          register = self.MMA8452Q_Register['PULSE_SRC']
          await self.board.i2c_read_request(self.address, register, 1,
                                                 Constants.I2C_READ | Constants.I2C_END_TX_MASK,
                                                 self.data_val, Constants.CB_TYPE_ASYNCIO)
  
          tap_status = await self.wait_for_read_result()
          tap_status = tap_status[self.data_start]
          if tap_status & 0x80:
              tap_status &= 0x7f
          else:
              tap_status = 0
  
          if callback:
              await callback(tap_status)
          await asyncio.sleep(.001)
          return tap_status
docs: This function returns any taps read by the MMA8452Q. If the function
          returns 0, no new taps were detected. Otherwise the function will return the
          lower 7 bits of the PULSE_SRC register.
          :param callback: Callback function
          :returns: 0 or lower 7 bits of the PULSE_SRC register.