Re: [Bluez-devel] HID initiated connections and input service

Marcel Holtmann
2007-06-16T07:05:40Z

Hi Bastien,

> 2(3) HID devices I own have the same problem with BlueZ when using the
> input service. Both use HID initiated connections, rather than the Host
> initiated connection use case you would see when addind a Bluetooth
> mouse to a laptop for example.
>
> * First device: Logitech MX5000 mouse/keyboard combo
>
> When not switched into HCI mode, the device works as a normal USB HID.
> On boot, hid2hci is run, and the 2 devices (mouse and keyboard) try to
> connect to bluetooth dongle (ex-USB wireless dongle).
> There's no bluetooth-applet, or other services, and the requests are
> dropped to the floor, and I end up with a Bluetooth HCI device, and no
> keyboard or mouse (unplug/replug "fixes" the problem though).

you can do a adapter.SetTrusted(address) call once and no authorization
agent is called.

> Could we integrate hid2hci into the input service, so that it would only
> be started when a session is available? I'm not sure how to handle the
> pairing without a keyboard or mouse though...

I wanna integrate hid2hci somehow, but currently I don't know how.

> * Second device: Sixaxis PS3 Bluetooth joypad
>
> Again, 2 connections modes. Firstly, there's no pairing, the joypad
> knows about the computer when one runs sixpair when the pad is connected
> via USB, as per:
> http://www.pabr.org/sixlinux/sixlinux.en.html
> (Marcel talked about integrating this with udev, which should be pretty
> straight forward)
>
> Once disconnected from USB, and turned on, the device will try to
> connect to the computer. bluetooth-applet will request auth, and ask us
> whether we want to allow the connection. But as the device was never
> discovered/setup using CreateDevice, the get_store_device_info in
> input/server.c will fail.
>
> You can't use CreateDevice with the device, as it's either connecting to
> our computer, or off, and connection requests will fail.

The sixpair.c tool needs to do some nasty tricks. It hast to get its own
Bluetooth address from the controller and then get its HID report
descriptor over USB. Then store them in /var/lib/bluetooth and also set
itself to trusted.

We might wanna integrate that into the input service, but to be honest I
currently don't know how. It also might make more sense to let a HAL
addon handle this kind of authentication instead of at udev level.

Regards

Marcel