BlueZ D-Bus Control API description
***********************************

Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
Copyright (C) 2007-2008  David Stockwell <dstockwell@frequency-one.com>


Control hierarchy
=================

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

Methods		void Connect()

			Connect to remote device (CT or TG).

		void Disconnect()

			Disconnect remote device.

		dict GetProperties()

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

		void VolumeUp()

			Adjust remote volume one step up

		void VolumeDown()

			Adjust remote volume one step down

		boolean SendPassthrough(avc_operation_id key, boolean state,
								string op_data)

			Called to send Passthrough commands. ONLY valid if
			BlueZ device is in CT role.

		boolean SendVendorDependent(string op_data)

			Called to send VendorDependent commands, other than
			Metadata or Events defined in the AVRCP+Metadata
			specification.

		void ChangePlayback(string status, uint32 elapsed)

			The status can be "playing", "stopped", "paused",
			"forward-seek", "reverse-seek" or "error". Elapsed is
			the position within the track in milliseconds.

		void ChangeTrack(dict metadata)

			Called to send the mandated TrackChange event and
			potential metadata information.

			Current defined metadata information are represented
			with the following keys:

				Title		string	(mandatory)
				Artist		string
				Album		string
				Genre		string
				NumberOfTracks	uint32
				TrackNumber	uint32
				TrackDuration	uint32	(in milliseconds)

		void ChangeSetting(string setting, variant value)

			Called to transmit Application Settings, CT Status
			and the like.

			Currenet defined settings are represented with the
			following keys:

				Equalizer	off, on
				Repeat		off, singletrack, alltracks, group
				Shuffle		off, alltracks, group
				Scan		off, alltracks, group
				Battery		normal, warning, critical, external, fullcharge
				System		powered, unpowered, unplugged
				Volume		uint8

Signals		Connected()

			Sent when a successful AVRCP connection has been made
			to the remote device.

		Disconnected()

			Sent when the AVRCP connection to the remote device
			has been disconnected.

		Passthrough(uint8 key, boolean state, int32 company_id,
								string op_data)

			Called when Passthrough command is received from
			connected device.

			NOTE: according to the AV/C Subpanel Spec, company_id
			and op_data are passed ONLY when the key is
			"Vendor_Unique", or 0x7E.

			When the key is NOT 0x7E, the signal returns
			company_id=-1, and zero-length op_data.

		VendorDependentReceived(string op_data)

			Called when VendorDependent message is received from
			connected device (except for Metadata defined in
			Bluetooth SIG AVRCP+Metadata spec).

		TrackChanged(dict metadata)

			Called when Metadata is received from connected device.
			May be multiple meta attribute/element pairs.

		PlaybackChanged(string status, uint32 elapsed)

		SettingChanged(string setting, variant value)

Properties	uint8 SubUnitID [readonly]

			The three-bit Subunit ID from the connected device.

		uint8 SubUnitType [readonly]

			The five-bit Subunit Type from the connected device.

		boolean Connected [readonly]

		array{uint32} CompanyIDs [readonly]

			List of three-byte Company IDs (OUI) supported by the
			connected device. Note that Bluetooth SIG Company
			ID (0x001958) is always included.

		array{string} Capabilities [readonly]

			List of Capabilities provided by the connected device.
