diff options
author | thompsa <thompsa@FreeBSD.org> | 2010-05-12 22:43:33 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2010-05-12 22:43:33 +0000 |
commit | 6903fb5ec365756d5bf9e830b0dcd21195468a32 (patch) | |
tree | 8cb3b13beebf25bfe8a04b4cc58f8a11c6356d3a /sys | |
parent | f61fd930ea6d4ab1f68a77846ad3ce133636197c (diff) | |
download | FreeBSD-src-6903fb5ec365756d5bf9e830b0dcd21195468a32.zip FreeBSD-src-6903fb5ec365756d5bf9e830b0dcd21195468a32.tar.gz |
Enable support for mouse panning wheels.
Submitted by: Henry Hu
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/usb/input/ums.c | 12 | ||||
-rw-r--r-- | sys/dev/usb/usbhid.h | 3 |
2 files changed, 15 insertions, 0 deletions
diff --git a/sys/dev/usb/input/ums.c b/sys/dev/usb/input/ums.c index e1e37be..a41ddaa 100644 --- a/sys/dev/usb/input/ums.c +++ b/sys/dev/usb/input/ums.c @@ -286,6 +286,12 @@ ums_intr_callback(struct usb_xfer *xfer, usb_error_t error) DPRINTFN(6, "x:%d y:%d z:%d t:%d w:%d buttons:0x%08x\n", dx, dy, dz, dt, dw, buttons); + /* translate T-axis into button presses until further */ + if (dt > 0) + buttons |= 1UL << 3; + else if (dt < 0) + buttons |= 1UL << 4; + sc->sc_status.button = buttons; sc->sc_status.dx += dx; sc->sc_status.dy += dy; @@ -454,6 +460,12 @@ ums_hid_parse(struct ums_softc *sc, device_t dev, const uint8_t *buf, if ((flags & MOUSE_FLAGS_MASK) == MOUSE_FLAGS) { info->sc_flags |= UMS_FLAG_T_AXIS; } + } else if (hid_locate(buf, len, HID_USAGE2(HUP_CONSUMER, + HUC_AC_PAN), hid_input, index, &info->sc_loc_t, + &flags, &info->sc_iid_t)) { + + if ((flags & MOUSE_FLAGS_MASK) == MOUSE_FLAGS) + info->sc_flags |= UMS_FLAG_T_AXIS; } /* figure out the number of buttons */ diff --git a/sys/dev/usb/usbhid.h b/sys/dev/usb/usbhid.h index 4c5f313..885a9b0 100644 --- a/sys/dev/usb/usbhid.h +++ b/sys/dev/usb/usbhid.h @@ -156,6 +156,9 @@ struct usb_hid_descriptor { #define HUD_ERASER 0x0045 #define HUD_TABLET_PICK 0x0046 +/* Usages, Consumer */ +#define HUC_AC_PAN 0x0238 + #define HID_USAGE2(p,u) (((p) << 16) | (u)) #define UHID_INPUT_REPORT 0x01 |