Date: Sun, 12 Dec 2004 16:11:57 -0800 From: Julian Elischer <julian@elischer.org> To: Ian Dowse <iedowse@maths.tcd.ie> Cc: Julian Elischer <julian@freebsd.org> Subject: Re: cvs commit: src/sys/sys mouse.h src/sys/dev/usb ums.c usbhid.h Message-ID: <41BCDE4D.3020902@elischer.org> In-Reply-To: <200412121411.aa89799@salmon.maths.tcd.ie> References: <200412121411.aa89799@salmon.maths.tcd.ie>
next in thread | previous in thread | raw e-mail | index | archive | help
Ian Dowse wrote: > In message <20041212133752.GE68019@tuatara.fishballoon.org>, Scott Mitchell wri > tes: > >>On Sun, Dec 12, 2004 at 12:23:05PM +0000, Ceri Davies wrote: >> >>>On Sat, Dec 11, 2004 at 10:39:10PM -0700, Scott Long wrote: >>> >>>>Julian Elischer wrote: >>>> >>>>> Add support for USB Microsoft Intellimouse >>>>> >>>>> PR: kern/70607 >>>>> Submitted by: Matt Wright <matt@consultmatt.co.uk> >>>>> MFC after: 1 week >>>> >>>>What 'support' does this add? >>> >>>They have another axis on the wheel: you can tilt it from left to right. >>> >>>Ceri >> >>Apart from that, the device in question (wireless Intellimouse 2.0) didn't >>work as any kind of mouse without this patch. >> >> Scott > > > As pointed out in the PR though, it doesn't seem necessary to change > struct mousestatus and the MOUSE_GETSTATUS ioctl API just to make > the device work. All other mouse drivers in the tree will need to > be updated to initialise the new `dt' field. There's also one part > of the patch that looks as if it could easily break other devices: > > ibuf = sc->sc_ibuf; > if (sc->sc_iid) { > - if (*ibuf++ != sc->sc_iid) > - return; > + ibuf++; > } > > + /* The M$ Wireless Intellimouse 2.0 sends 1 extra leading byte of > + * data compared to most USB mice. This byte frequently switches > + * from 0x01 (usual state) to 0x02. I assume it is to allow > + * extra, non-standard, reporting (say battery-life). However > + * at the same time it generates a left-click message on the button > + * byte which causes spurious left-click's where there shouldn't be. > + * This should sort that. */ > + if ((sc->sc_ibuf != ibuf) && (sc->sc_ibuf[0] == 0x02)) > + return; > + > dx = hid_get_data(ibuf, &sc->sc_loc_x); > dy = -hid_get_data(ibuf, &sc->sc_loc_y); > dz = -hid_get_data(ibuf, &sc->sc_loc_z); > > BTW, Anish Mistry has been looking at porting a more recent version > of NetBSD's HID fremework to FreeBSD, which I believe may fix the > real bugs that the above code just tries to work around. > > Ian Yeah I had a quick exchange with Anish. I'm trying to make a small dent on teh HUGE pile of USB PRs we've grown. if you have any thoughts about this, let me know and we can sort it out quickly.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41BCDE4D.3020902>