BlueZ D-Bus Adapter API description
***********************************


Adapter hierarchy
=================

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

Methods		void StartDiscovery()

			This method starts the device discovery session. This
			includes an inquiry procedure and remote device name
			resolving. Use StopDiscovery to release the sessions
			acquired.

			This process will start creating Device objects as
			new devices are discovered.

			During discovery RSSI delta-threshold is imposed.

			Possible errors: org.bluez.Error.NotReady
					 org.bluez.Error.Failed

		void StopDiscovery()

			This method will cancel any previous StartDiscovery
			transaction.

			Note that a discovery procedure is shared between all
			discovery sessions thus calling StopDiscovery will only
			release a single session.

			Possible errors: org.bluez.Error.NotReady
					 org.bluez.Error.Failed
					 org.bluez.Error.NotAuthorized

		void RemoveDevice(object device)

			This removes the remote device object at the given
			path. It will remove also the pairing information.

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

		void SetDiscoveryFilter(dict filter)

			This method sets the device discovery filter for the
			caller. When this method is called with no filter
			parameter, filter is removed.

			Parameters that may be set in the filter dictionary
			include the following:

			array{string} UUIDs

				Filter by service UUIDs, empty means match
				_any_ UUID.

				When a remote device is found that advertises
				any UUID from UUIDs, it will be reported if:
				- Pathloss and RSSI are both empty.
				- only Pathloss param is set, device advertise
				  TX pwer, and computed pathloss is less than
				  Pathloss param.
				- only RSSI param is set, and received RSSI is
				  higher than RSSI param.

			int16 RSSI

				RSSI threshold value.

				PropertiesChanged signals will be emitted
				for already existing Device objects, with
				updated RSSI value. If one or more discovery
				filters have been set, the RSSI delta-threshold,
				that is imposed by StartDiscovery by default,
				will not be applied.

			uint16 Pathloss

				Pathloss threshold value.

				PropertiesChanged signals will be emitted
				for already existing Device objects, with
				updated Pathloss value.

			string Transport (Default "auto")

				Transport parameter determines the type of
				scan.

				Possible values:
					"auto"	- interleaved scan
					"bredr"	- BR/EDR inquiry
					"le"	- LE scan only

				If "le" or "bredr" Transport is requested,
				and the controller doesn't support it,
				org.bluez.Error.Failed error will be returned.
				If "auto" transport is requested, scan will use
				LE, BREDR, or both, depending on what's
				currently enabled on the controller.

			bool DuplicateData (Default: true)

				Disables duplicate detection of advertisement
				data.

				When enabled PropertiesChanged signals will be
				generated for either ManufacturerData and
				ServiceData everytime they are discovered.

			When discovery filter is set, Device objects will be
			created as new devices with matching criteria are
			discovered regardless of they are connectable or
			discoverable which enables listening to
			non-connectable and non-discoverable devices.

			When multiple clients call SetDiscoveryFilter, their
			filters are internally merged, and notifications about
			new devices are sent to all clients. Therefore, each
			client must check that device updates actually match
			its filter.

			When SetDiscoveryFilter is called multiple times by the
			same client, last filter passed will be active for
			given client.

			SetDiscoveryFilter can be called before StartDiscovery.
			It is useful when client will create first discovery
			session, to ensure that proper scan will be started
			right after call to StartDiscovery.

			Possible errors: org.bluez.Error.NotReady
					 org.bluez.Error.NotSupported
					 org.bluez.Error.Failed

		array{string} GetDiscoveryFilters()

			Return available filters that can be given to
			SetDiscoveryFilter.

			Possible errors: None

		object ConnectDevice(dict properties) [experimental]

			This method connects to device without need of
			performing General Discovery. Connection mechanism is
			similar to Connect method from Device1 interface with
			exception that this method returns success when physical
			connection is established. After this method returns,
			services discovery will continue and any supported
			profile will be connected. There is no need for calling
			Connect on Device1 after this call. If connection was
			successful this method returns object path to created
			device object.

			Parameters that may be set in the filter dictionary
			include the following:

			string Address

				The Bluetooth device address of the remote
				device. This parameter is mandatory.

			string AddressType

				The Bluetooth device Address Type. This is
				address type that should be used for initial
				connection. If this parameter is not present
				BR/EDR device is created.

				Possible values:
					"public" - Public address
					"random" - Random address

			Possible errors: org.bluez.Error.InvalidArguments
					 org.bluez.Error.AlreadyExists
					 org.bluez.Error.NotSupported
					 org.bluez.Error.NotReady
					 org.bluez.Error.Failed

Properties	string Address [readonly]

			The Bluetooth device address.

		string AddressType [readonly]

			The Bluetooth  Address Type. For dual-mode and BR/EDR
			only adapter this defaults to "public". Single mode LE
			adapters may have either value. With privacy enabled
			this contains type of Identity Address and not type of
			address used for connection.

			Possible values:
				"public" - Public address
				"random" - Random address

		string Name [readonly]

			The Bluetooth system name (pretty hostname).

			This property is either a static system default
			or controlled by an external daemon providing
			access to the pretty hostname configuration.

		string Alias [readwrite]

			The Bluetooth friendly name. This value can be
			changed.

			In case no alias is set, it will return the system
			provided name. Setting an empty string as alias will
			convert it back to the system provided name.

			When resetting the alias with an empty string, the
			property will default back to system name.

			On a well configured system, this property never
			needs to be changed since it defaults to the system
			name and provides the pretty hostname. Only if the
			local name needs to be different from the pretty
			hostname, this property should be used as last
			resort.

		uint32 Class [readonly]

			The Bluetooth class of device.

			This property represents the value that is either
			automatically configured by DMI/ACPI information
			or provided as static configuration.

		boolean Powered [readwrite]

			Switch an adapter on or off. This will also set the
			appropriate connectable state of the controller.

			The value of this property is not persistent. After
			restart or unplugging of the adapter it will reset
			back to false.

		boolean Discoverable [readwrite]

			Switch an adapter to discoverable or non-discoverable
			to either make it visible or hide it. This is a global
			setting and should only be used by the settings
			application.

			If the DiscoverableTimeout is set to a non-zero
			value then the system will set this value back to
			false after the timer expired.

			In case the adapter is switched off, setting this
			value will fail.

			When changing the Powered property the new state of
			this property will be updated via a PropertiesChanged
			signal.

			For any new adapter this settings defaults to false.

		boolean Pairable [readwrite]

			Switch an adapter to pairable or non-pairable. This is
			a global setting and should only be used by the
			settings application.

			Note that this property only affects incoming pairing
			requests.

			For any new adapter this settings defaults to true.

		uint32 PairableTimeout [readwrite]

			The pairable timeout in seconds. A value of zero
			means that the timeout is disabled and it will stay in
			pairable mode forever.

			The default value for pairable timeout should be
			disabled (value 0).

		uint32 DiscoverableTimeout [readwrite]

			The discoverable timeout in seconds. A value of zero
			means that the timeout is disabled and it will stay in
			discoverable/limited mode forever.

			The default value for the discoverable timeout should
			be 180 seconds (3 minutes).

		boolean Discovering [readonly]

			Indicates that a device discovery procedure is active.

		array{string} UUIDs [readonly]

			List of 128-bit UUIDs that represents the available
			local services.

		string Modalias [readonly, optional]

			Local Device ID information in modalias format
			used by the kernel and udev.
