BlueZ D-Bus Audio API description
*********************************

Copyright (C) 2004-2010  Marcel Holtmann <marcel@holtmann.org>
Copyright (C) 2005-2007  Johan Hedberg <johan.hedberg@nokia.com>
Copyright (C) 2005-2006  Brad Midgley <bmidgley@xmission.com>

Audio hierarchy
===============

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

This is a generic audio interface that abstracts the different audio profiles.

Methods		void Connect()

			Connect all supported audio profiles on the device.

		void Disconnect()

			Disconnect all audio profiles on the device

		dict GetProperties()

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

Signals		void PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

Properties	string State

			Possible values: "disconnected", "connecting",
			"connected"

			"disconnected" -> "connecting"
				Either an incoming or outgoing connection
				attempt ongoing.

			"connecting" -> "disconnected"
				Connection attempt failed

			"connecting" -> "connected"
				Successfully connected

			"connected" -> "disconnected"
				Disconnected from the remote device

Headset hierarchy
=================

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

Methods		void Connect()

			Connect to the HSP/HFP service on the remote device.

		void Disconnect()

			Disconnect from the HSP/HFP service on the remote
			device.

		boolean IsConnected() {deprecated}

			Returns TRUE if there is a active connection to the
			HSP/HFP connection on the remote device.

		void IndicateCall()

			Indicate an incoming call on the headset
			connected to the stream. Will continue to
			ring the headset about every 3 seconds.

		void CancelCall()

			Cancel the incoming call indication.

		void Play() {deprecated}

			Open the audio connection to the headset.

		void Stop()

			Close the audio connection.

		boolean IsPlaying() {deprecated}

			Returns true if an audio connection to the headset
			is active.

		uint16 GetSpeakerGain() {deprecated}

			Returns the current speaker gain if available,
			otherwise returns the error NotAvailable.

		uint16 GetMicrophoneGain() {deprecated}

			Returns the current microphone gain if available,
			otherwise returns the error NotAvailable.

		void SetSpeakerGain(uint16 gain) {deprecated}

			Changes the current speaker gain if possible.

		void SetMicrophoneGain(uint16 gain) {deprecated}

			Changes the current speaker gain if possible.

		dict GetProperties()

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

			Possible Errors: org.bluez.Error.InvalidArguments

		void SetProperty(string name, variant value)

			Changes the value of the specified property. Only
			properties that are listed a read-write are changeable.
			On success this will emit a PropertyChanged signal.

			Possible Errors: org.bluez.Error.DoesNotExist
					 org.bluez.Error.InvalidArguments

Signals		void AnswerRequested()

			Sent when the answer button is pressed on the headset

		void Connected() {deprecated}

			Sent when the device has been connected to.

		void Disconnected() {deprecated}

			Sent when the device has been disconnected from.

		void Stopped() {deprecated}

			Sent when the audio connection is closed

		void Playing() {deprecated}

			Sent when the audio connection is opened

		void SpeakerGainChanged(uint16 gain) {deprecated}

			The speaker gain changed.

		void MicrophoneGainChanged(uint16 gain) {deprecated}

			The microphone gain changed.

		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

properties	string State [readonly]

			Possible values: "disconnected", "connecting",
			"connected", "playing"

			"disconnected" -> "connecting"
				Either an incoming or outgoing connection
				attempt ongoing.

			"connecting" -> "disconnected"
				Connection attempt failed

			"connecting" -> "connected"
				Successfully connected

			"connected" -> "playing"
				SCO audio connection successfully opened

			"playing" -> "connected"
				SCO audio connection closed

			"connected" -> "disconnected"
			"playing" -> "disconnected"
				Disconnected from the remote device

		boolean Connected [readonly]

			Indicates if there is a active connection to the
			HSP/HFP connection on the remote device.

		boolean Playing  [readonly]

			Indicates if an audio connection to the headset
			is active.

		uint16 SpeakerGain  [readwrite]

			The speaker gain when available.

		uint16 MicrophoneGain  [readwrite]

			The speaker gain when available.


AudioSink hierarchy
===================

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

Methods		void Connect()

			Connect and setup a stream to a A2DP sink on the
			remote device.

		void Disconnect()

			Disconnect from the remote device.

		boolean IsConnected() {deprecated}

			Returns TRUE if a stream is setup to a A2DP sink on
			the remote device.

		dict GetProperties()

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

			Possible Errors: org.bluez.Error.InvalidArguments

Signals		void Connected() {deprecated}

			Sent when a successful connection has been made to the
			remote A2DP Sink

		void Disconnected() {deprecated}

			Sent when the device has been disconnected from.

		void Playing() {deprecated}

			Sent when a stream with remote device is started.

		void Stopped() {deprecated}

			Sent when a stream with remote device is suspended.

		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

properties	string State [readonly]

			Possible values: "disconnected", "connecting",
			"connected", "playing"

			"disconnected" -> "connecting"
				Either an incoming or outgoing connection
				attempt ongoing.

			"connecting" -> "disconnected"
				Connection attempt failed

			"connecting" -> "connected"
				Successfully connected

			"connected" -> "playing"
				Audio stream active

			"playing" -> "connected"
				Audio stream suspended

			"connected" -> "disconnected"
			"playing" -> "disconnected"
				Disconnected from the remote device

		boolean Connected [readonly]

			Indicates if a stream is setup to a A2DP sink on
			the remote device.

		boolean Playing  [readonly]

			Indicates if a stream is active to a A2DP sink on
			the remote device.

AudioSource hierarchy
=====================

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

Methods		void Connect()

			Connect and setup a stream to a A2DP source on the
			remote device.

		void Disconnect()

			Disconnect from the remote device.

		dict GetProperties()

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

			Possible Errors: org.bluez.Error.InvalidArguments

Signals		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

properties	string State [readonly]

			Possible values: "disconnected", "connecting",
			"connected", "playing"

			"disconnected" -> "connecting"
				Either an incoming or outgoing connection
				attempt ongoing.

			"connecting" -> "disconnected"
				Connection attempt failed

			"connecting" -> "connected"
				Successfully connected

			"connected" -> "playing"
				Audio stream active

			"playing" -> "connected"
				Audio stream suspended

			"connected" -> "disconnected"
			"playing" -> "disconnected"
				Disconnected from the remote device


HeadsetGateway hierarchy
========================

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

This interface is available for remote devices which can function in the Audio
Gateway role of the HFP profiles.

Methods		void Connect()

			Connect to the AG service on the remote device.

		void Disconnect()

			Disconnect from the AG service on the remote device

		void AnswerCall()

			It has to called only after Ring signal received.

		void TerminateCall()

			Terminate call which is running or reject an incoming
			call. This has nothing with any 3-way situation incl.
			RaH. Just plain old PDH.

		void Call(string number)

			Dial a number 'number'. No number processing is done
			thus if AG would reject to dial it don't blame me :)

		string GetOperatorName()

			Find out the name of the currently selected network
			operator by AG.

		void SendDTMF(string digits)

			Will send each digit in the 'digits' sequentially. Would
			send nothing if there is non-dtmf digit.

		string GetSubscriberNumber()

			Get the voicecall subscriber number of AG

		dict GetProperties()

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

Signals		void Ring(string number)

			Someone's calling from 'number'.
			Caller number is provided as received from AG.

		void CallTerminated()

			Call failed to set up. It means that we tried to call
			someone or someone tried to call us but call was not
			accepted.

		void CallStarted()

			Call set up successfully.

		void CallEnded()

			Call was started and now ended. In contrast with
			CallTerminated where call didn't started

		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

properties	boolean Connected [readonly]

			Indicates if there is an active connection to the
			AG service on the remote device.

		uint16 RegistrationStatus [readonly]

			Service availability indicatior of AG, where:
			0 implies no service. No Home/Roam network available.
			1 implies presence of service. Home/Roam network
			available.

		uint16 SignalStrength [readonly]

			Signal strength indicator of AG, the value ranges from
			0 to 5.

		uint16 RoamingStatus [readonly]

			Roaming status indicator of AG, where:
			0 means roaming is not active
			1 means a roaming is active

		uint16 BatteryCharge [readonly]

			Battery Charge indicator of AG, the value ranges from
			0 to 5.

		uint16 SpeakerGain  [readonly]

			The speaker gain when available.

		uint16 MicrophoneGain  [readonly]

			The speaker gain when available.
