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

Bastien Nocera
2007-06-16T16:44:12Z

Hey Marcel,

On Sat, 2007-06-16 at 09:25 +0200, Marcel Holtmann wrote:
> 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).
> >
> > 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...
>
> after catching up with the IRC, I realized another problem with this HID
> proxy dongles. We can fix that for the original firmwares from CSR that
> are used by Apple, but for the Logitech's (they are slightly modified) I
> am not sure.
>
> So when you switch a HID proxy dongle from HID mode into HCI, you have
> to read its information about stored devices and their link keys. These
> information have then to be put into /var/lib/bluetooth. This leaves out
> the HID report descriptor that we also need. So that needs to be gotten
> while it is still in USB mode.

So it would be:
1) Get info from dongle about its own bdaddr, and the bdaddr of the
attached devices (do you have code to do that for Logitech devices?)
2) Add attached devices' bdaddr as trusted for the device, and get the
HID report descriptor, save it
3) switch the dongle to HCI mode

Would that work? We could even do this in a HAL addon, or udev callback
so that we're sure that newly plugged dongles are handled automatically.

> Getting the HID report descriptor over USB makes always the assumption
> that it is exactly the same as on Bluetooth. This should be checked.

How can I verify that?

Cheers