# -*- coding: utf-8 -*- # Created on 2019-03-19 by hbldh """ Interface class for the Bleak representation of a GATT Descriptor """ from __future__ import annotations from typing import TYPE_CHECKING, Any from bleak.uuids import normalize_uuid_16 # avoid circular import if TYPE_CHECKING: from bleak.backends.characteristic import BleakGATTCharacteristic _descriptor_descriptions = { normalize_uuid_16(0x2905): [ "Characteristic Aggregate Format", "org.bluetooth.descriptor.gatt.characteristic_aggregate_format", "0x2905", "GSS", ], normalize_uuid_16(0x2900): [ "Characteristic Extended Properties", "org.bluetooth.descriptor.gatt.characteristic_extended_properties", "0x2900", "GSS", ], normalize_uuid_16(0x2904): [ "Characteristic Presentation Format", "org.bluetooth.descriptor.gatt.characteristic_presentation_format", "0x2904", "GSS", ], normalize_uuid_16(0x2901): [ "Characteristic User Description", "org.bluetooth.descriptor.gatt.characteristic_user_description", "0x2901", "GSS", ], normalize_uuid_16(0x2902): [ "Client Characteristic Configuration", "org.bluetooth.descriptor.gatt.client_characteristic_configuration", "0x2902", "GSS", ], normalize_uuid_16(0x290B): [ "Environmental Sensing Configuration", "org.bluetooth.descriptor.es_configuration", "0x290B", "GSS", ], normalize_uuid_16(0x290C): [ "Environmental Sensing Measurement", "org.bluetooth.descriptor.es_measurement", "0x290C", "GSS", ], normalize_uuid_16(0x290D): [ "Environmental Sensing Trigger Setting", "org.bluetooth.descriptor.es_trigger_setting", "0x290D", "GSS", ], normalize_uuid_16(0x2907): [ "External Report Reference", "org.bluetooth.descriptor.external_report_reference", "0x2907", "GSS", ], normalize_uuid_16(0x2909): [ "Number of Digitals", "org.bluetooth.descriptor.number_of_digitals", "0x2909", "GSS", ], normalize_uuid_16(0x2908): [ "Report Reference", "org.bluetooth.descriptor.report_reference", "0x2908", "GSS", ], normalize_uuid_16(0x2903): [ "Server Characteristic Configuration", "org.bluetooth.descriptor.gatt.server_characteristic_configuration", "0x2903", "GSS", ], normalize_uuid_16(0x290E): [ "Time Trigger Setting", "org.bluetooth.descriptor.time_trigger_setting", "0x290E", "GSS", ], normalize_uuid_16(0x2906): [ "Valid Range", "org.bluetooth.descriptor.valid_range", "0x2906", "GSS", ], normalize_uuid_16(0x290A): [ "Value Trigger Setting", "org.bluetooth.descriptor.value_trigger_setting", "0x290A", "GSS", ], } class BleakGATTDescriptor: """The Bleak representation of a GATT Descriptor""" def __init__( self, obj: Any, handle: int, uuid: str, characteristic: BleakGATTCharacteristic ): """ Args: obj: The backend-specific object for the descriptor. handle: The handle of the descriptor. uuid: The UUID of the descriptor. characteristic: The characteristic that this descriptor belongs to. """ self.obj = obj self._handle = handle self._uuid = uuid self._characteristic = characteristic def __str__(self): return f"{self.uuid} (Handle: {self.handle}): {self.description}" @property def characteristic_uuid(self) -> str: """UUID for the characteristic that this descriptor belongs to""" return self._characteristic.uuid @property def characteristic_handle(self) -> int: """handle for the characteristic that this descriptor belongs to""" return self._characteristic.handle @property def uuid(self) -> str: """UUID for this descriptor""" return self._uuid @property def handle(self) -> int: """Integer handle for this descriptor""" return self._handle @property def description(self) -> str: """A text description of what this descriptor represents""" return _descriptor_descriptions.get(self.uuid, ["Unknown"])[0]