Skip site navigation (1)Skip section navigation (2)
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>

index | next in thread | previous in thread | raw e-mail

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.


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41BCDE4D.3020902>