BlueZ D-Bus Health API description
**********************************

	Santiago Carot-Nemesio <sancane@gmail.com>
	José Antonio Santos-Cadenas <santoscadenas@gmail.com>
	Elvis Pfützenreuter <epx@signove.com>

Health Device Profile hierarchy
===============================

Service		org.bluez
Interface	org.bluez.HealthManager
Object path	/org/bluez/

Methods:

	object	CreateApplication(dict config)

		Returns the path of the new registered application.

		Dict is defined as below:
		{
			"DataType": uint16, (mandatory)
			"Role" : ("Source" or "Sink"), (mandatory)
			"Description" : string, (optional)
			"ChannelType" : ("Reliable" or "Streaming")
						(just for Sources, optional)
		}

		Application will be closed by the call or implicitly when the
		programs leaves the bus.

		Possible errors: org.bluez.Error.InvalidArguments

	void	DestroyApplication(object application)

		Closes the HDP application identified by the object path. Also
		application will be closed if the process that started it leaves
		the bus. Only the creator of the application will be able to
		destroy it.

		Possible errors: org.bluez.Error.InvalidArguments
				org.bluez.Error.NotFound
				org.bluez.Error.NotAllowed

--------------------------------------------------------------------------------

Service		org.bluez
Interface	org.bluez.HealthDevice
Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX

Methods:

	dict GetProperties()

		Returns all properties for the interface. See the properties
		section for available properties.

		Posible errors: org.bluez.Error.NotAllowed

	Boolean Echo()

		Sends an echo petition to the remote service. Returns True if
		response matches with the buffer sent. If some error is detected
		False value is returned.

		Possible errors: org.bluez.Error.InvalidArguments
				org.bluez.Error.OutOfRange

	object CreateChannel(object application, string configuration)

		Creates a new data channel.
		The configuration should indicate the channel quality of
		service using one of this values "Reliable", "Streaming", "Any".

		Returns the object path that identifies the data channel that
		is already connected.

		Possible errors: org.bluez.Error.InvalidArguments
				org.bluez.Error.HealthError

	void DestroyChannel(object channel)

		Destroys the data channel object. Only the creator of the
		channel or the creator of the HealtApplication that received the
		data channel will be able to destroy it

		Possible errors: org.bluez.Error.InvalidArguments
				org.bluez.Error.NotFound
				org.bluez.Error.NotAllowed

Signals:

	void ChannelConnected(object channel)

		This signal is launched when a new data channel is created or
		when a known data channel is reconnected.

	void ChannelDeleted(object channel)

		This signal is launched when a data channel is deleted.

		After this signal the data channel path will not be valid and
		its path can be reused for future data channels.

	void PropertyChanged(string name, variant value)

		This signal indicates a changed value of the given property.

Properties:

	object MainChannel [readonly]

		The first reliable channel opened. It is needed by upper
		applications in order to send specific protocol data units. The
		first reliable can change after a reconnection.

--------------------------------------------------------------------------------

Service		org.bluez
Interface	org.bluez.HealthChannel
Object path	[variable prefix]/{hci0,hci1,...}/dev_XX_XX_XX_XX_XX_XX/chanZZZ

Only the process that created the data channel or the creator of the
HealthApplication that received it will be able to call this methods.

Methods:

	dict GetProperties()

		Returns all properties for the interface. See the properties
		section for available properties.

		Posible errors: org.bluez.Error.NotAllowed

	fd Acquire()

		Returns the file descriptor for this data channel. If the data
		channel is not connected it will also reconnect.

		Possible errors: org.bluez.Error.NotConnected
				org.bluez.Error.NotAllowed

	void Release()

		Releases the fd. Application should also need to close() it.

		Possible errors: org.bluez.Error.NotAcquired
				org.bluez.Error.NotAllowed

Properties:

	string Type [readonly]

		The quality of service of the data channel. ("Reliable" or
		"Streaming")

	object Device [readonly]

		Identifies the Remote Device that is connected with. Maps with
		a HealthDevice object.

	object Application [readonly]

		Identifies the HealthApplication to which this channel is
		related to (which indirectly defines its role and data type).
