BlueZ D-Bus Media API description
*********************************

Media hierarchy
===============

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

Methods		void RegisterEndpoint(object endpoint, dict properties)

			Register a local end point to sender, the sender can
			register as many end points as it likes.

			Note: If the sender disconnects the end points are
			automatically unregistered.

			possible properties:

				string UUID:

					UUID of the profile which the endpoint
					is for.

				byte Codec:

					Assigned mumber of codec that the
					endpoint implements. The values should
					match the profile specification which
					is indicated by the UUID.

				array{byte} Capabilities:

					Capabilities blob, it is used as it is
					so the size and byte order must match.

		void UnregisterEndpoint(object endpoint)

			Unregister sender end point.

MediaEndpoint hierarchy
=======================

Service		unique name
Interface	org.bluez.MediaEndpoint
Object path	freely definable

Methods		void SetConfiguration(object transport, dict properties)

			Set configuration for the transport.

		array{byte} SelectConfiguration(array{byte} capabilities)

			Select preferable configuration from the supported
			capabilities.

			Returns a configuration which can be used to setup
			a transport.

			Note: There is no need to cache the selected
			configuration since on success the configuration is
			send back as parameter of SetConfiguration.

		void ClearConfiguration(object transport)

			Clear transport configuration.

		void Release()

			This method gets called when the service daemon
			unregisters the endpoint. An endpoint can use it to do
			cleanup tasks. There is no need to unregister the
			endpoint, because when this method gets called it has
			already been unregistered.

MediaTransport hierarchy
========================

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

Methods		dict GetProperties()

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

		fd Acquire(string accesstype)

			Acquire transport file descriptor.

			possible accesstype:

				"r" : Read only access

				"w" : Write only access

				"rw": Read and write access

		void Release(string accesstype)

			Releases file descriptor.

		void SetProperty(string name, variant value)

			Changes the value of the specified property. Only
			properties that are listed a read-write can be changed.

			On success this will emit a PropertyChanged signal.

Signals		void PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

Properties	object Device [readonly]

			Device object which the transport is connected to.

		uint16 IMTU [readonly]

			Transport input MTU.

		uint16 OMTU [readonly]

			Transport output MTU.

		string UUID [readonly]

			UUID of the profile which the transport is for.

		byte Codec [readonly]

			Assigned mumber of codec that the transport support.
			The values should match the profile specification which
			is indicated by the UUID.

		array{byte} Configuration [readonly]

			Configuration blob, it is used as it is so the size and
			byte order must match.

		uint16 Delay [readwrite]

			Optional. Transport delay in 1/10 of milisecond, this
			property is only writeable when the transport was
			acquired by the sender.

		boolean NREC [readwrite]

			Optional. Indicates if echo cancelling and noise
			reduction functions are active in the transport, this
			property is only writeable when the transport was
			acquired by the sender.

		boolean InbandRingtone [readwrite]

			Optional. Indicates if the transport support sending
			ringtones, this property is only writeable when the
			transport was acquired by the sender.
