예제 #1
0
    async def readDescriptor_(
        self, descriptor: CBDescriptor, use_cached=True
    ) -> NSData:
        if descriptor.value() is not None and use_cached is True:
            return descriptor.value()

        dUUID = descriptor.UUID().UUIDString()

        event = self._descriptor_read_events.get_cleared(dUUID)
        self.peripheral.readValueForDescriptor_(descriptor)
        await event.wait()

        return descriptor.value()
예제 #2
0
    async def readDescriptor_(self,
                              descriptor: CBDescriptor,
                              use_cached=True) -> NSData:
        if descriptor.value() is not None and use_cached is True:
            return descriptor.value()

        dUUID = descriptor.UUID().UUIDString()
        self._descriptor_value_log[dUUID] = False

        self.peripheral.readValueForDescriptor_(descriptor)

        while not self._descriptor_value_log[dUUID]:
            await asyncio.sleep(0.01)

        return descriptor.value()
예제 #3
0
    async def writeDescriptor_value_(self, descriptor: CBDescriptor,
                                     value: NSData) -> bool:
        dUUID = descriptor.UUID().UUIDString()

        event = self._descriptor_write_events.get_cleared(dUUID)
        self.peripheral.writeValue_forDescriptor_(value, descriptor)
        await event.wait()

        return True
예제 #4
0
    def peripheral_didWriteValueForDescriptor_error_(self,
                                                     peripheral: CBPeripheral,
                                                     descriptor: CBDescriptor,
                                                     error: NSError):
        dUUID = descriptor.UUID().UUIDString()
        if error is not None:
            raise BleakError("Failed to write descriptor {}: {}".format(
                dUUID, error))

        logger.debug("Write Descriptor Value")
        self._descriptor_write_log[dUUID] = True
예제 #5
0
    def peripheral_didUpdateValueForDescriptor_error_(self,
                                                      peripheral: CBPeripheral,
                                                      descriptor: CBDescriptor,
                                                      error: NSError):
        dUUID = descriptor.UUID().UUIDString()
        if error is not None:
            raise BleakError("Failed to read characteristic {}: {}".format(
                dUUID, error))

        logger.debug("Read descriptor value")
        self._descriptor_value_log[dUUID] = True
예제 #6
0
    async def writeDescriptor_value_(self, descriptor: CBDescriptor,
                                     value: NSData) -> bool:
        dUUID = descriptor.UUID().UUIDString()
        self._descriptor_write_log[dUUID] = False

        self.peripheral.writeValue_forDescriptor_(value, descriptor)

        while not self._descriptor_write_log[dUUID]:
            await asyncio.sleep(0.01)

        return True
예제 #7
0
    def did_write_value_for_descriptor(
        self, peripheral: CBPeripheral, descriptor: CBDescriptor, error: NSError
    ):
        dUUID = descriptor.UUID().UUIDString()
        if error is not None:
            raise BleakError("Failed to write descriptor {}: {}".format(dUUID, error))

        logger.debug("Write Descriptor Value")
        event = self._descriptor_write_events.get(dUUID)
        if event:
            event.set()
        else:
            logger.warning("Unexpected event didWriteValueForDescriptor")
예제 #8
0
    def peripheral_didUpdateValueForDescriptor_error_(self,
                                                      peripheral: CBPeripheral,
                                                      descriptor: CBDescriptor,
                                                      error: NSError):
        dUUID = descriptor.UUID().UUIDString()
        if error is not None:
            raise BleakError("Failed to read characteristic {}: {}".format(
                dUUID, error))

        logger.debug("Read descriptor value")
        event = self._descriptor_read_events.get(dUUID)
        if event:
            event.set()
        else:
            logger.warning("Unexpected event didUpdateValueForDescriptor")