usb/90162
Florent Thoumie
flz at xbsd.org
Thu Dec 22 19:10:06 PST 2005
The following reply was made to PR usb/90162; it has been noted by GNATS.
From: Florent Thoumie <flz at xbsd.org>
To: bug-followup at freebsd.org,
iedowse at freebsd.org
Cc:
Subject: Re: usb/90162
Date: Fri, 23 Dec 2005 04:06:53 +0100
--nextPart10775816.KSARUhMy5M
Content-Type: multipart/mixed;
boundary="Boundary-01=_Nn2qDy8KkpvDh3Z"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--Boundary-01=_Nn2qDy8KkpvDh3Z
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
I've reworked your patch and the UMS_T quirk in ums_intr() but I'm still=20
experiencing problems, when I move the mouse it looks like my notebook is=
=20
under heavy load (far from being smooth).
Not sure where it comes from, do you have an idea Ian ?
=2D-=20
=46lorent Thoumie
flz at FreeBSD.org
=46reeBSD Committer
--Boundary-01=_Nn2qDy8KkpvDh3Z
Content-Type: text/x-diff;
charset="us-ascii";
name="ums.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="ums.diff"
=3D=3D=3D=3D //depot/user/flz/usb/src/sys/dev/usb/ums.c#1 - /disks/zero/Wor=
k/perforce/flz_usb/src/sys/dev/usb/ums.c =3D=3D=3D=3D
=2D-- /tmp/tmp.66593.0 Fri Dec 23 04:04:24 2005
+++ /disks/zero/Work/perforce/flz_usb/src/sys/dev/usb/ums.c Fri Dec 23 03:5=
3:29 2005
@@ -97,6 +97,7 @@
=20
struct ums_softc {
device_t sc_dev; /* base device */
+ usbd_device_handle sc_udev; /* USB device */
usbd_interface_handle sc_iface; /* interface */
usbd_pipe_handle sc_intrpipe; /* interrupt pipe */
int sc_ep_addr;
@@ -189,7 +190,8 @@
return (UMATCH_NONE);
=20
if (hid_is_collection(desc, size,
=2D HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_MOUSE)))
+ HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_MOUSE)) ||
+ usbd_get_quirks(uaa->device)->uq_flags & UQ_MS_BAD_CLASS)
ret =3D UMATCH_IFACECLASS;
else
ret =3D UMATCH_NONE;
@@ -214,6 +216,7 @@
=20
sc->sc_disconnected =3D 1;
sc->sc_iface =3D iface;
+ sc->sc_udev =3D uaa->device;
id =3D usbd_get_interface_descriptor(iface);
usbd_devinfo(uaa->device, USBD_SHOW_INTERFACE_CLASS, devinfo);
USB_ATTACH_SETUP;
@@ -324,6 +327,17 @@
sc->sc_disconnected =3D 0;
free(desc, M_TEMP);
=20
+ if (usbd_get_quirks(uaa->device)->uq_flags & UQ_MS_BAD_CLASS) {
+ /* The offset is wrong for this mouse, correct it */
+ sc->sc_loc_x.pos -=3D 40;
+ sc->sc_loc_y.pos -=3D 40;
+
+ if (sc->flags & UMS_Z)
+ sc->sc_loc_z.pos -=3D 40;
+ for (i =3D 1; i <=3D sc->nbuttons; i++)
+ sc->sc_loc_btn[i-1].pos -=3D 40;
+ }
+
#ifdef USB_DEBUG
DPRINTF(("ums_attach: sc=3D%p\n", sc));
DPRINTF(("ums_attach: X\t%d/%d\n",
@@ -455,12 +469,10 @@
* 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.
=2D * Currently it's the only user of UMS_T so use it as an identifier.
=2D * We probably should switch to some more official quirk.
*/
=2D if (sc->flags & UMS_T) {
+ if (usbd_get_quirks(sc->sc_udev)->uq_flags & UQ_MS_LEADING_BYTE) {
if (sc->sc_iid) {
=2D if (*ibuf++ =3D=3D 0x02)
+ if (*ibuf++ =3D=3D 0x02 || *ibuf =3D=3D 0x15)
return;
}
} else {
=3D=3D=3D=3D //depot/user/flz/usb/src/sys/dev/usb/usb_quirks.c#1 - /disks/z=
ero/Work/perforce/flz_usb/src/sys/dev/usb/usb_quirks.c =3D=3D=3D=3D
=2D-- /tmp/tmp.66593.1 Fri Dec 23 04:04:24 2005
+++ /disks/zero/Work/perforce/flz_usb/src/sys/dev/usb/usb_quirks.c Fri Dec =
23 04:01:13 2005
@@ -82,6 +82,12 @@
{ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPOD3G, ANY, { UQ_NO_OPEN_CLE=
ARSTALL }},
{ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPODNANO, ANY, { UQ_NO_OPEN_CL=
EARSTALL }},
{ USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPODVIDEO, ANY, { UQ_NO_OPEN_CL=
EARSTALL }},
+ { USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK,
+ ANY, { UQ_MS_BAD_CLASS | UQ_MS_LEADING_BYTE }},
+ { USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLNOTEBOOK2,
+ ANY, { UQ_MS_BAD_CLASS | UQ_MS_LEADING_BYTE }},
+ { USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE,
+ ANY, { UQ_MS_LEADING_BYTE }},
/* XXX These should have a revision number, but I don't know what they ar=
e. */
{ USB_VENDOR_HP, USB_PRODUCT_HP_895C, ANY, { UQ_BROKEN_BIDIR }},
{ USB_VENDOR_HP, USB_PRODUCT_HP_880C, ANY, { UQ_BROKEN_BIDIR }},
=3D=3D=3D=3D //depot/user/flz/usb/src/sys/dev/usb/usb_quirks.h#1 - /disks/z=
ero/Work/perforce/flz_usb/src/sys/dev/usb/usb_quirks.h =3D=3D=3D=3D
=2D-- /tmp/tmp.66593.2 Fri Dec 23 04:04:24 2005
+++ /disks/zero/Work/perforce/flz_usb/src/sys/dev/usb/usb_quirks.h Fri Dec =
23 04:04:13 2005
@@ -56,7 +56,8 @@
#define UQ_BROKEN_BIDIR 0x2000 /* printer has broken bidir mode */
#define UQ_NO_OPEN_CLEARSTALL 0x4000 /* don't usbd_clear_endpoint_stall() =
*/
/* in usbd_setup_pipe() */
=2D =09
+#define UQ_MS_BAD_CLASS 0x8000 /* doesn't identify properly */
+#define UQ_MS_LEADING_BYTE 0x00010000 /* mouse sends an unknown leading by=
te */
};
=20
extern const struct usbd_quirks usbd_no_quirk;
=3D=3D=3D=3D //depot/user/flz/usb/src/sys/dev/usb/usbdevs#1 - /disks/zero/W=
ork/perforce/flz_usb/src/sys/dev/usb/usbdevs =3D=3D=3D=3D
=2D-- /tmp/tmp.66593.3 Fri Dec 23 04:04:24 2005
+++ /disks/zero/Work/perforce/flz_usb/src/sys/dev/usb/usbdevs Fri Dec 23 03=
:58:33 2005
@@ -1174,6 +1174,9 @@
product MICROSOFT INTELLIEYE 0x0025 IntelliEye mouse
product MICROSOFT INETPRO2 0x002b Internet Keyboard Pro
product MICROSOFT MN110 0x007a 10/100 USB NIC
+product MICROSOFT WLINTELLIMOUSE 0x008c Wireless Optical IntelliMouse
+product MICROSOFT WLNOTEBOOK 0x00b9 Wireless Notebook Optical Mouse
+product MICROSOFT WLNOTEBOOK2 0x00e1 Wireless Notebook Optical Mouse
=20
/* Microtech products */
product MICROTECH SCSIDB25 0x0004 USB-SCSI-DB25
--Boundary-01=_Nn2qDy8KkpvDh3Z--
--nextPart10775816.KSARUhMy5M
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (FreeBSD)
iD8DBQBDq2nTMxEkbVFH3PQRAhQdAJ9Y0h5GO8SPaGn/vV7T6SQCrPok/QCfQfaB
d9SeJfd45yrdDPKKGE5VSFI=
=yyvI
-----END PGP SIGNATURE-----
--nextPart10775816.KSARUhMy5M--
More information about the freebsd-usb
mailing list