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

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


Audio Manager hierarchy
=======================

Service		org.bluez.audio
Interface	org.bluez.audio.Manager
Object path	/org/bluez/audio

Methods		array{string} ListHeadsets()

			Returns list of headset objects that
			are configured.

		string DefaultHeadset()

			Returns the object path for the default
			headset device.

		string CreateHeadset(string address)

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

		void RemoveHeadset(string path)

Signals		void HeadsetCreated(string path)

		void HeadsetRemoved(string path)

		void DefaultHeadsetChanged(string path)


Audio Headset hierarchy
=======================

Service		org.bluez.audio
Interface	org.bluez.audio.Headset
Object path	/org/bluez/audio/headset*

Methods		string GetAddress()

		string GetName()

		void Connect()

		void Disconnect()
