Fix for Logitech DiNovo cordless mouse [PATCH]

John Baldwin jhb at FreeBSD.org
Thu Jun 10 15:22:09 GMT 2004


On Wednesday 09 June 2004 08:16 pm, Anish Mistry wrote:
> On Wednesday 09 June 2004 02:38 pm, Markus Wild wrote:
> > Since yesterday I'm a happy owner of a Logitech dinovo
> > cordless USB keyboard/mouse. The keyboard works fine, however
> > the mouse didn't move a bit. I saw that other people had similar
> > "luck", so I enabled a bit of debugging. This is with FreeBSD-current,
> > btw.
> >
> > The result of the quest was: the hid.c:hid_report_size() function returns
> > a bogus iid value:
> >
> > Jun  9 19:37:06 mothra kernel: ums0: Logitech USB Receiver, rev
> > 1.10/24.04, addr 3, iclass 3/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: bLength=7 bDescriptorType=5
> > bEndpoint Address=2-in bmAttributes=3 wMaxPacketSize=8 bInterval=10
> > Jun  9 19:37:06 mothra kernel: ums0: 7 buttons and Z dir.
> > Jun  9 19:37:06 mothra kernel: ums_attach: sc=0xc23a1800
> > Jun  9 19:37:06 mothra kernel: ums_attach: X    8/12
> > Jun  9 19:37:06 mothra kernel: ums_attach: Y    20/12
> > Jun  9 19:37:06 mothra kernel: ums_attach: Z    32/8
> > Jun  9 19:37:06 mothra kernel: ums_attach: B1   0/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: B2   1/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: B3   2/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: B4   3/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: B5   4/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: B6   5/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: B7   6/1
> > Jun  9 19:37:06 mothra kernel: ums_attach: size=36, id=17
> >
> > Since actual interrupt reports are issed with id 2:
> > Jun  9 18:42:10 mothra kernel: ums_intr: sc=0xc23a1800 status=0
> > Jun  9 18:42:10 mothra kernel: ums_intr: data = 02 00 fa
> >
> > So I added a bit of debugging to the id setting for-loop. It
> > looks like the ID cycles thru the following values at attach() time:
> > Jun  9 19:40:57 mothra kernel: hid_report_size: 00 -> 02
> > Jun  9 19:40:57 mothra kernel: hid_report_size: 02 -> 03
> > Jun  9 19:40:57 mothra kernel: hid_report_size: 03 -> 04
> > Jun  9 19:40:57 mothra kernel: hid_report_size: 04 -> 10
> > Jun  9 19:40:57 mothra kernel: hid_report_size: 10 -> 11
> > (numbers are hex here)
> >
> > With this, my current fix is simple: only set id if it's not
> > set already:
> > diff -u -r1.23 hid.c
> > --- hid.c       24 Aug 2003 17:55:54 -0000      1.23
> > +++ hid.c       9 Jun 2004 18:34:23 -0000
> > @@ -374,9 +374,10 @@
> >         int size, id;
> >
> >         id = 0;
> > +       bzero (&h, sizeof (h));
> >         for (d = hid_start_parse(buf, len, 1<<k); hid_get_item(d, &h); )
> > -               if (h.report_ID != 0)
> > -                       id = h.report_ID;
> > +         if (h.report_ID != 0 && !id)
> > +               id = h.report_ID;
> >         hid_end_parse(d);
> >         size = h.loc.pos;
> >         if (id != 0) {
>
> I've attached at big patch that should fix the problem as well as a bunch
> of updates from the NetBSD sources.  This is a patch against -CURRENT, so
> you may have to massage it a bit if you are on -STABLE.  I won't have an
> offending device to test for at least a week so let me know of any
> problems.

- M_ZERO is preferred to malloc() + memset(), so please don't make that
  change.
- Lots of the changes add style bugs by adding spaces to the end of lines.
  Please remove any trailing whitespace from your files.

Other than that the patch looks cool.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-hardware mailing list