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 bellow:
		{
			"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/
							hdp_YYYY/channel_ZZ

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.
