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

Bastien Nocera
2007-06-16T16:35:15Z

Hey Marcel,

On Sat, 2007-06-16 at 09:05 +0200, Marcel Holtmann wrote:
<snip>
> > * 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.

What we could do is:
1) have a HAL addon that will set the device's bdaddr in a property of
the device when plugged into USB
2) have bluetooth-applet (or any other front-end) ask the user whether
to set the device as trusted when it's plugged in (can be switched off
with a config item)
3) Add a method to the input service (AddUSBDevice(string address,
string usbdev) that will get the USB HID report descriptor, and set the
device as trusted along with the rest of the info

I could work on that (it should be pretty straight-forward), except I
don't have any code to get the bdaddr from the device and I don't know
how to get the HID report descriptor from the device either. If you have
some code that does that, feel free to pass it on, I can do the
integration.

Cheers