async def read_tap(self, callback=None):
        """
        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.
        """
        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