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.
