summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2010-05-17 23:46:08 +0000
committerthompsa <thompsa@FreeBSD.org>2010-05-17 23:46:08 +0000
commite27a64768d4e53fb46cc19ece7ca74d7fa47b675 (patch)
tree5beffd1d27c41a5f1d57c7714c9b89c0aae5dc3a
parentfe6c95ffffdad6c8a1d1dbaba1ec0c84a0497cc2 (diff)
downloadFreeBSD-src-e27a64768d4e53fb46cc19ece7ca74d7fa47b675.zip
FreeBSD-src-e27a64768d4e53fb46cc19ece7ca74d7fa47b675.tar.gz
MFC r208009
Enable support for mouse panning wheels.
-rw-r--r--sys/dev/usb/input/ums.c12
-rw-r--r--sys/dev/usb/usbhid.h3
2 files changed, 15 insertions, 0 deletions
diff --git a/sys/dev/usb/input/ums.c b/sys/dev/usb/input/ums.c
index 2c97de6..515b358 100644
--- a/sys/dev/usb/input/ums.c
+++ b/sys/dev/usb/input/ums.c
@@ -293,6 +293,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;
@@ -461,6 +467,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
OpenPOWER on IntegriCloud