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()
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()
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, )
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
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