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