Bluetooth audio service API description
***************************************

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


org.bluez.audio.Manager interface
=================================

Object path	/org/bluez/audio

Methods
		string CreateDevice(string address, array{string} interfaces) [experimental]

			Creates a new audio device object. If not yet done,
			this method will perform a SDP query on the remote
			device and return first when the query is complete,
			so be sure to call this method asynchronously.

			The return parameter is the object path of the newly
			created object. The method will fail if the remote
			device does not support all of the interfaces listed
			in the interfaces parameter.

		void RemoveDevice(string path) [experimental]

			Removes a device from the device tree. If there are
			any connections open to the device they will be closed.			

		array{string} ListDevices(array{string} interfaces) [experimental]

			Retuns an array of strings indicating the object paths
			of available devices which implement as a minimum the
			interfaces given through the parameter.

		string DefaultDevice()

			Returns the object path for the default device.

		void ChangeDefaultDevice(string path)

			Changes the default device.

		array{string} ListHeadsets()

			Returns list of headset objects that are configured.

		string FindDeviceByAddress(string address) [experimental]

			Searches the list of available devices and returns the
			object path of the first device which matchess address.
			If no device is found returns a DoesNotExist error.

		string DefaultHeadset()

			Returns the object path for the default headset device.

		void ChangeDefaultHeadset(string path)

			Changes the default headset.

		string CreateHeadset(string address)

			Create a new headset device and returns its object path
			on return.

		void RemoveHeadset(string path)

			Removes a headset object and all information
			related to it.

Signals
		void DeviceCreated(string path) [experimental]

			Sent when a new device object has been created.

		void DeviceRemoved(string path) [experimental]

			Sent when a device object has been removed.

		void HeadsetCreated(string path)

			Sent when a new headset object has been created.

		void HeadsetRemoved(string path)

			Sent when a headset object has been removed.

		void DefaultHeadsetChanged(string path)

			Sent when the default headset has changed.


org.bluez.audio.Device interface
================================

Object path(s)	/org/bluez/audio/device*

Methods		string GetAddress() [experimental]

			Returns the Bluetooth address of the remote device.

		array{string} GetConnectedInterfaces()	[experimental]

			Returns a string list of interfaces that are in a
			connected state.


org.bluez.audio.Headset interface
=================================

Object path(s)	/org/bluez/audio/device*

Methods		void Connect()

		void Disconnect()

		boolean IsConnected()

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

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

		uint16 GetSpeakerGain()

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

		uint16 GetMicrophoneGain()

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

		void SetSpeakerGain(uint16 gain)

			Changes the current speaker gain if possible.

		void SetMicrophoneGain(uint16 gain)

			Changes the current speaker gain if possible.

Signals		void AnswerRequested()

			Sent when the answer button is pressed on the headset

		void Connected()

			Sent when the device has been connected to.

		void Disconnected()

			Sent when the device has been disconnected from.

		void Stopped()

			Sent when the audio connection is closed

		void Playing()

			Sent when the audio connection is opened

		void SpeakerGainChanged(uint16 gain)

			The speaker gain changed.

		void MicrophoneGainChanged(uint16 gain)

			The microphone gain changed.


org.bluez.audio.Source interface
================================

Object path(s)	/org/bluez/audio/device*


org.bluez.audio.Sink interface
==============================

Object path(s)	/org/bluez/audio/device*
