BlueZ D-Bus Attribute API description
*************************************
Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
Attribute hierarchy
===================
Service org.bluez
Interface org.bluez.Service
org.bluez.Characteristic
Object path [prefix]/{hci0}/{service0}
[prefix]/{hci0}/{device0}/{service0}/{characteristic0,...}
[prefix]/{hci0}/{device0}/{service1}/{characteristic0,...}
Service details
---------------
One service object path for every remote SDP record or service in the
attribute database. One service object path for every local SDP record
or service from attribute database.
Local services are children of the adapter object path. Remote services
are children of the remote device object path. This doesn't solve the
problem where local atttributes can have different instances based on
the remote device.
In general the idea is to also represent SDP records as services so that
new style application can just use the service interfaces to retrieve the
needed information. That way the usage of SDP and GATT would be mostly
fully transparent and a differentiation becomes unimportant in the future.
A service consists of some generic service information and a set of
characteristics. All characteristic are presented as object path as well.
Properties
----------
string Name (mandatory)
General name of service
string Description (optional)
Description of service
string UUID (mandatory)
UUID of service. Service class value for SDP and GATT UUID
for attribute based services.
array{object} Characteristics
This list contains the characteristics owned by this specific
service and other characteristics from service includes. That
way no complicated service includes array is needed.
string UUID
string Name
string Description
struct Format (type, name, exponet etc.)
array{byte} Value
string Representation (of the binary Value)
object Service (the original service in case of includes)
At this point only GetProperties() method call should be
supported for simplicity. Changing characteristics is up
to future support.
The object path of the characteristics might be split
over multiple service objects, because of includes.
array[(object, dict)] GetCharacteristics()
Array of tuples with object path as identifier. An alternativ
is doing dict of dict since the object path is unique and the
order of characteristics is irrelevant. However it might be
good to actually present an order here.
See Characteristics properties for dictionary details.
RegisterCharacteristicsWatcher(object path)
Register a watcher for changes in specific characteristics
to monitor changes.
A watcher will be registered for this service and will
notifier about any changed characteristics in the service.
This also notifies about any included characteristics.
Method for the watch objects still need to be defined.
UnregisterCharacteristicsWatcher(object path)
Unregister a watcher.