Module Name:    src
Committed By:   sborrill
Date:           Fri Nov 27 09:49:42 UTC 2009

Modified Files:
        src/doc [netbsd-5]: CHANGES
        src/share/man/man4 [netbsd-5]: ums.4
        src/sys/dev/usb [netbsd-5]: ums.c

Log Message:
Pull up the following revisions(s) (requested by mbalmer in ticket #1164):
        doc/CHANGES:            revision 1.1320 via patch
        share/man/man4/ums.4:   revision 1.9
        sys/dev/usb/ums.c:      revision 1.77

Add support for USB HID devices that report absolute coordinates instead
of relative movement data, e.g. touchpanels.  Please note that calibration
must be done outside the wscons(4) driver for now.


To generate a diff of this commit:
cvs rdiff -u -r1.1142.2.9 -r1.1142.2.10 src/doc/CHANGES
cvs rdiff -u -r1.8 -r1.8.4.1 src/share/man/man4/ums.4
cvs rdiff -u -r1.73.8.1 -r1.73.8.2 src/sys/dev/usb/ums.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/doc/CHANGES
diff -u src/doc/CHANGES:1.1142.2.9 src/doc/CHANGES:1.1142.2.10
--- src/doc/CHANGES:1.1142.2.9	Sat Sep 26 19:52:08 2009
+++ src/doc/CHANGES	Fri Nov 27 09:49:41 2009
@@ -1,4 +1,4 @@
-# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.1142.2.9 $>
+# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.1142.2.10 $>
 #
 #
 # [Note: This file does not mention every change made to the NetBSD source tree.
@@ -1164,3 +1164,4 @@
 	dhcpcd(8): Import dhcpcd-5.0.1 [roy 20090510]
 	hdaudio(4): New standards-compliant Intel High Definition Audio driver
 		written to replace azalia(4). [sborrill 20090906]
+	ums(4):	Add touchpanel support. [mbalmer 20091127]

Index: src/share/man/man4/ums.4
diff -u src/share/man/man4/ums.4:1.8 src/share/man/man4/ums.4:1.8.4.1
--- src/share/man/man4/ums.4:1.8	Wed Apr 30 13:10:54 2008
+++ src/share/man/man4/ums.4	Fri Nov 27 09:49:42 2009
@@ -1,4 +1,4 @@
-.\" $NetBSD: ums.4,v 1.8 2008/04/30 13:10:54 martin Exp $
+.\" $NetBSD: ums.4,v 1.8.4.1 2009/11/27 09:49:42 sborrill Exp $
 .\"
 .\" Copyright (c) 1999, 2001 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,20 +27,20 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd July 12, 1998
+.Dd November 27, 2009
 .Dt UMS 4
 .Os
 .Sh NAME
 .Nm ums
-.Nd USB mouse support
+.Nd USB mouse and touchpanel support
 .Sh SYNOPSIS
 .Cd "ums*     at uhidev? reportid ?"
 .Cd "wsmouse* at ums?"
 .Sh DESCRIPTION
 The
 .Nm
-driver provides support for USB mice.
-Access to the mouse is through the
+driver provides support for USB mice and touchpanels.
+Access to the movement data is through the
 .Xr wscons 4
 driver.
 .Sh SEE ALSO
@@ -53,3 +53,5 @@
 driver
 appeared in
 .Nx 1.4 .
+Touchpanel support was added in
+.Nx 5.1 .

Index: src/sys/dev/usb/ums.c
diff -u src/sys/dev/usb/ums.c:1.73.8.1 src/sys/dev/usb/ums.c:1.73.8.2
--- src/sys/dev/usb/ums.c:1.73.8.1	Fri Nov 27 08:54:13 2009
+++ src/sys/dev/usb/ums.c	Fri Nov 27 09:49:42 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: ums.c,v 1.73.8.1 2009/11/27 08:54:13 sborrill Exp $	*/
+/*	$NetBSD: ums.c,v 1.73.8.2 2009/11/27 09:49:42 sborrill Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ums.c,v 1.73.8.1 2009/11/27 08:54:13 sborrill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ums.c,v 1.73.8.2 2009/11/27 09:49:42 sborrill Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -96,6 +96,7 @@
 #define UMS_SPUR_BUT_UP	0x02	/* spurious button up events */
 #define UMS_REVZ	0x04	/* Z-axis is reversed */
 #define UMS_W		0x08	/* w direction/tilt available */
+#define UMS_ABS		0x10	/* absolute position, touchpanel */
 
 	int nbuttons;
 
@@ -106,7 +107,6 @@
 };
 
 #define MOUSE_FLAGS_MASK (HIO_CONST|HIO_RELATIVE)
-#define MOUSE_FLAGS (HIO_RELATIVE)
 
 Static void ums_intr(struct uhidev *addr, void *ibuf, u_int len);
 
@@ -181,7 +181,13 @@
 		       USBDEVNAME(sc->sc_hdev.sc_dev));
 		USB_ATTACH_ERROR_RETURN;
 	}
-	if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) {
+	switch (flags & MOUSE_FLAGS_MASK) {
+	case 0:
+		sc->flags |= UMS_ABS;
+		break;
+	case HIO_RELATIVE:
+		break;
+	default:
 		aprint_error("\n%s: X report 0x%04x not supported\n",
 		       USBDEVNAME(sc->sc_hdev.sc_dev), flags);
 		USB_ATTACH_ERROR_RETURN;
@@ -193,7 +199,13 @@
 		       USBDEVNAME(sc->sc_hdev.sc_dev));
 		USB_ATTACH_ERROR_RETURN;
 	}
-	if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) {
+	switch (flags & MOUSE_FLAGS_MASK) {
+	case 0:
+		sc->flags |= UMS_ABS;
+		break;
+	case HIO_RELATIVE:
+		break;
+	default:
 		aprint_error("\n%s: Y report 0x%04x not supported\n",
 		       USBDEVNAME(sc->sc_hdev.sc_dev), flags);
 		USB_ATTACH_ERROR_RETURN;
@@ -210,7 +222,7 @@
 
 	zloc = &sc->sc_loc_z;
 	if (hl) {
-		if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) {
+		if ((flags & MOUSE_FLAGS_MASK) != HIO_RELATIVE) {
 			aprint_verbose("\n%s: Wheel report 0x%04x not "
 			    "supported\n", USBDEVNAME(sc->sc_hdev.sc_dev),
 			    flags);
@@ -248,7 +260,7 @@
 	}
 
 	if (hl) {
-		if ((flags & MOUSE_FLAGS_MASK) != MOUSE_FLAGS) {
+		if ((flags & MOUSE_FLAGS_MASK) != HIO_RELATIVE) {
 			aprint_verbose("\n%s: Z report 0x%04x not supported\n",
 			       USBDEVNAME(sc->sc_hdev.sc_dev), flags);
 			zloc->size = 0;	/* Bad Z coord, ignore it */
@@ -368,15 +380,21 @@
 	struct ums_softc *sc = (struct ums_softc *)addr;
 	int dx, dy, dz, dw;
 	u_int32_t buttons = 0;
-	int i;
-	int s;
+	int i, flags, s;
 
 	DPRINTFN(5,("ums_intr: len=%d\n", len));
 
+	flags = WSMOUSE_INPUT_DELTA;	/* equals 0 */
+
 	dx =  hid_get_data(ibuf, &sc->sc_loc_x);
-	dy = -hid_get_data(ibuf, &sc->sc_loc_y);
+	if (sc->flags & UMS_ABS) {
+		flags |= (WSMOUSE_INPUT_ABSOLUTE_X | WSMOUSE_INPUT_ABSOLUTE_Y);
+		dy = hid_get_data(ibuf, &sc->sc_loc_y);
+	} else
+		dy = -hid_get_data(ibuf, &sc->sc_loc_y);
 	dz =  hid_get_data(ibuf, &sc->sc_loc_z);
 	dw =  hid_get_data(ibuf, &sc->sc_loc_w);
+
 	if (sc->flags & UMS_REVZ)
 		dz = -dz;
 	for (i = 0; i < sc->nbuttons; i++)
@@ -390,10 +408,8 @@
 		sc->sc_buttons = buttons;
 		if (sc->sc_wsmousedev != NULL) {
 			s = spltty();
-			wsmouse_input(sc->sc_wsmousedev,
-					buttons,
-					dx, dy, dz, dw,
-					WSMOUSE_INPUT_DELTA);
+			wsmouse_input(sc->sc_wsmousedev, buttons, dx, dy, dz,
+			    dw, flags);
 			splx(s);
 		}
 	}
@@ -440,9 +456,14 @@
     struct lwp * p)
 
 {
+	struct ums_softc *sc = v;
+
 	switch (cmd) {
 	case WSMOUSEIO_GTYPE:
-		*(u_int *)data = WSMOUSE_TYPE_USB;
+		if (sc->flags & UMS_ABS)
+			*(u_int *)data = WSMOUSE_TYPE_TPANEL;
+		else
+			*(u_int *)data = WSMOUSE_TYPE_USB;
 		return (0);
 	}
 

Reply via email to