BlueZ D-Bus GATT API description ******************************** GATT local and remote services share the same high-level D-Bus API. Local refers to GATT based service exported by a BlueZ plugin or an external application. Remote refers to GATT services exported by the peer. BlueZ acts as a proxy, translating ATT operations to D-Bus method calls and Properties (or the opposite). Support for D-Bus Object Manager is mandatory for external services to allow seamless GATT declarations (Service, Characteristic and Descriptors) discovery. Releasing a registered GATT service is not defined yet. Any API extension should avoid breaking the defined API, and if possible keep an unified GATT remote and local services representation. Service hierarchy ================= GATT remote and local service representation. Object path for local services is freely definable. External applications implementing local services must register the services using GattManager1 registration method and must implement the methods and properties defined in GattService1 interface. Service org.bluez Interface org.bluez.GattService1 [Experimental] Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX Properties string UUID [read-only] 128-bit service UUID. array{object} Includes [read-only]: Not implemented Array of object paths representing the included services of this service. Characteristic hierarchy ======================== For local GATT defined services, the object paths need to follow the service path hierarchy and are freely definable. Service org.bluez Interface org.bluez.GattCharacteristic1 [Experimental] Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX/charYYYY Properties string UUID [read-only] 128-bit characteristic UUID. object Service [read-only] Object path of the GATT service the characteristc belongs to. array{byte} Value [read-write] Value read from the remote Bluetooth device or from the external application implementing GATT services. array{string} Flags [read-only, optional] Defines how the characteristic value can be used. See Core spec "Table 3.5: Characteristic Properties bit field", and "Table 3.8: Characteristic Extended Properties bit field". Allowed values: "broadcast" "read" "write-without-response" "write" "notify" "indicate" "authenticated-signed-writes" "reliable-write" "writable-auxiliaries" Characteristic Descriptors hierarchy ==================================== Local or remote GATT characteristic descriptors hierarchy. Service org.bluez Interface org.bluez.GattDescriptor1 [Experimental] Object path [variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/serviceXX/charYYYY/descriptorZZZ Properties string UUID [read-only] 128-bit descriptor UUID. object Characteristic [read-only] Object path of the GATT characteristc the descriptor belongs to. array{byte} Value [read-write] Raw characteristic descriptor value read from the remote Bluetooth device or from the external application implementing GATT services. string Permissions [read-only]: To be defined Defines read/write authentication and authorization requirements. Service Manager hierarchy ============================= Service Manager allows external applications to register GATT based services. Services must follow the API for Service and Characteristic described above. Local GATT services, characteristics and characteristic descriptors are discovered automatically using the D-Bus Object Manager interface. Service org.bluez Interface org.bluez.GattManager1 [Experimental] Object path /org/bluez Methods RegisterService(object service, dict options) Registers remote application service exported under interface GattService1. Characteristic objects must be hierarchical to their service and must use the interface GattCharacteristic1. D-Bus Object Manager is used to fetch the exported objects. "service" object path together with the D-Bus system bus connection ID define the identification of the application registering a GATT based service. Possible errors: org.bluez.Error.InvalidArguments org.bluez.Error.AlreadyExists UnregisterService(object service) This unregisters the service that has been previously registered. The object path parameter must match the same value that has been used on registration. Possible errors: org.bluez.Error.DoesNotExist