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

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


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

Service		org.bluez.input
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.

		void RemoveDevice(string path)

			Remove the input device object for a given path.	

Signals		void DeviceCreated(string path)

		void DeviceRemoved(string path)


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

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

Methods		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.

		void Disconnect()

			Disconnect from the input device.

		void SetTimeout(uint32 timeout)

			Set the idle timeout.
