Example #1
0
    async def readCharacteristic_(self,
                                  characteristic: CBCharacteristic,
                                  use_cached=True) -> NSData:
        if characteristic.value() is not None and use_cached is True:
            return characteristic.value()

        cUUID = characteristic.UUID().UUIDString()

        event = self._characteristic_read_events.get_cleared(cUUID)
        self.peripheral.readValueForCharacteristic_(characteristic)
        await event.wait()

        return characteristic.value()
Example #2
0
    async def readCharacteristic_(self,
                                  characteristic: CBCharacteristic,
                                  use_cached=True) -> NSData:
        if characteristic.value() is not None and use_cached is True:
            return characteristic.value()

        cUUID = characteristic.UUID().UUIDString()
        self._characteristic_value_log[cUUID] = False

        self.peripheral.readValueForCharacteristic_(characteristic)

        while not self._characteristic_value_log[cUUID]:
            await asyncio.sleep(0.01)

        return characteristic.value()
Example #3
0
 def peripheral_didUpdateValueForCharacteristic_error_(
     self, peripheral: CBPeripheral, characteristic: CBCharacteristic, error: NSError
 ):
     logger.debug("peripheral_didUpdateValueForCharacteristic_error_")
     self._event_loop.call_soon_threadsafe(
         self.did_update_value_for_characteristic,
         peripheral,
         characteristic,
         characteristic.value(),
         error,
     )
Example #4
0
    def peripheral_didUpdateValueForCharacteristic_error_(
            self, peripheral: CBPeripheral, characteristic: CBCharacteristic,
            error: NSError):
        cUUID = characteristic.UUID().UUIDString()
        if error is not None:
            raise BleakError("Failed to read characteristic {}: {}".format(
                cUUID, error))

        if (cUUID in self._characteristic_notify_status
                and self._characteristic_notify_status[cUUID]):
            self._characteristic_notify_callbacks[cUUID](
                cUUID, characteristic.value())

        logger.debug("Read characteristic value")
        self._characteristic_value_log[cUUID] = True
Example #5
0
    def did_update_value_for_characteristic(self, peripheral: CBPeripheral,
                                            characteristic: CBCharacteristic,
                                            error: NSError):
        cUUID = characteristic.UUID().UUIDString()
        if error is not None:
            raise BleakError("Failed to read characteristic {}: {}".format(
                cUUID, error))

        notify_callback = self._characteristic_notify_callbacks.get(cUUID)
        if notify_callback:
            notify_callback(cUUID, characteristic.value())

        logger.debug("Read characteristic value")
        event = self._characteristic_read_events.get(cUUID)
        if event:
            event.set()
        else:
            # only expected on read
            pass