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()

			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 presense 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.
