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() [noreply]

			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
