BlueZ D-Bus Profile API description
***********************************


Profile Manager hierarchy
=========================

Service		org.bluez
Interface	org.bluez.ProfileManager1
Object path	/org/bluez

		void RegisterProfile(object profile, string uuid, dict options)

			This registers a profile implementation.

			If an application disconnects from the bus all
			its registered profiles will be removed.

			HFP HS UUID: 0000111e-0000-1000-8000-00805f9b34fb

				Default RFCOMM channel is 6. And this requires
				authentication.

			Available options:

				string Name

					Human readable name for the profile

				string Service

					The primary service class UUID
					(if different from the actual
					 profile UUID)

				string Role

					For asymmetric profiles that do not
					have UUIDs available to uniquely
					identify each side this
					parameter allows specifying the
					precise local role.

					Possible values: "client", "server"

				uint16 Channel

					RFCOMM channel number that is used
					for client and server UUIDs.

					If applicable it will be used in the
					SDP record as well.

				uint16 PSM

					PSM number that is used for client
					and server UUIDs.

					If applicable it will be used in the
					SDP record as well.

				boolean RequireAuthentication

					Pairing is required before connections
					will be established. No devices will
					be connected if not paired.

				boolean RequireAuthorization

					Request authorization before any
					connection will be established.

				boolean AutoConnect

					In case of a client UUID this will
					force connection of the RFCOMM or
					L2CAP channels when a remote device
					is connected.

				string ServiceRecord

					Provide a manual SDP record.

				uint16 Version

					Profile version (for SDP record)

				uint16 Features

					Profile features (for SDP record)

			Possible errors: org.bluez.Error.InvalidArguments
			                 org.bluez.Error.AlreadyExists

		void UnregisterProfile(object profile)

			This unregisters the profile that has been previously
			registered. The object path parameter must match the
			same value that has been used on registration.

			Possible errors: org.bluez.Error.DoesNotExist


Profile hierarchy
=================

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

Methods		void Release()

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

		void NewConnection(object device, fd, dict fd_properties)

			This method gets called when a new service level
			connection has been made and authorized.

			Common fd_properties:

			uint16 Version		Profile version (optional)
			uint16 Features		Profile features (optional)

			Possible errors: org.bluez.Error.Rejected
			                 org.bluez.Error.Canceled

		void RequestDisconnection(object device)

			This method gets called when a profile gets
			disconnected.

			The file descriptor is no longer owned by the service
			daemon and the profile implementation needs to take
			care of cleaning up all connections.

			If multiple file descriptors are indicated via
			NewConnection, it is expected that all of them
			are disconnected before returning from this
			method call.

			Possible errors: org.bluez.Error.Rejected
			                 org.bluez.Error.Canceled

		void Cancel()

			This method gets called to indicate that the profile
			request failed before a reply was returned.

			All request are queued and there will be only one
			pending pequest at a time per profile.
