Bluetooth input service API description
***************************************

Copyright (C) 2006-2007  Marcel Holtmann <marcel@holtmann.org>


Input Manager hierarchy
=======================

Interface	org.bluez.input.Manager
Object path	/org/bluez/input

Methods		array{string} ListDevices()

			Returns an array of available input devices path.

		string CreateDevice(string address)

			Create an input device object. The HID service
			record will be retrieved and the pairing will
			be initiated if needed.

			On success it will return the path of the
			newly created device object.

			Possible errors: org.bluez.input.AlreadyExists
			                 org.bluez.input.NotSupported
			                 org.bluez.input.ConnectionAttemptFailed
			                 org.bluez.input.Failed

		void RemoveDevice(string path)

			Remove the input device object for a given path.

			Possible errors:org.bluez.input.DoesNotExist
					org.bluez.input.Failed

Signals		void DeviceCreated(string path)

		void DeviceRemoved(string path)


Input Device hierarchy
======================

Interface	org.bluez.input.Device
Object path	/org/bluez/input/{keyboard*|mouse*|...}

Methods		string GetAdapter()

			Returns the adapter address.

			Example: "00:11:22:33:44:55"

		string GetAddress()

			Returns the device address.

			Example: "00:11:22:33:44:55"

		string GetName()

			Returns the service name.

		uint16 GetProductId()

			Returns the product id.

		uint16 GetVendorId()

			Returns the vendor id.

		boolean IsConnected()

			Returns the connection status.

		void Connect()

			Connect to the input device.

			Possible errors: org.bluez.input.AlreadyConnected
			                 org.bluez.input.ConnectionAttemptFailed

		void Disconnect()

			Disconnect from the input device.

			Possible errors: org.bluez.input.Failed

Signals		void Connected()

		void Disconnected()
