Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Mar 2009 22:22:41 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 159091 for review
Message-ID:  <200903112222.n2BMMfP8054281@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=159091

Change 159091 by hselasky@hselasky_laptop001 on 2009/03/11 22:21:41

	
	USB CORE: Be less strict on the last HID item usage.
	
	Reported by: Andrey Chernov

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb/usb_hid.c#23 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb/usb_hid.c#23 (text+ko) ====

@@ -68,6 +68,7 @@
 	struct hid_item cur[MAXPUSH];
 	int32_t	usages_min[MAXUSAGE];
 	int32_t	usages_max[MAXUSAGE];
+	int32_t usage_last;	/* last seen usage */
 	uint32_t loc_size;	/* last seen size */
 	uint32_t loc_count;	/* last seen count */
 	uint8_t	kindset;	/* we have 5 kinds so 8 bits are enough */
@@ -183,15 +184,21 @@
 
  top:
 	/* check if there is an array of items */
-	if ((s->icount != s->ncount) &&
-	    (s->iusage != s->nusage)) {
-		dval = s->usages_min[s->iusage] + s->ousage;
-		c->usage = dval;
-		if (dval == s->usages_max[s->iusage]) {
-			s->iusage ++;
-			s->ousage = 0;
+	if (s->icount < s->ncount) {
+		/* get current usage */
+		if (s->iusage < s->nusage) {
+			dval = s->usages_min[s->iusage] + s->ousage;
+			c->usage = dval;
+			s->usage_last = dval;
+			if (dval == s->usages_max[s->iusage]) {
+				s->iusage ++;
+				s->ousage = 0;
+			} else {
+				s->ousage ++;
+			}
 		} else {
-			s->ousage ++;
+			DPRINTFN(1, "Using last usage\n");
+			dval = s->usage_last;
 		}
 		s->icount ++;
 		/* 
@@ -290,14 +297,9 @@
 				} else {
 					s->ncount = 1;
 				}
-				/* make sure we have a usage */
-				if (s->nusage == 0) {
-					DPRINTFN(1, "Using default usage\n");
-					/* use the undefined HID PAGE */
-					s->usages_min[s->nusage] = 0x0000;
-					s->usages_max[s->nusage] = 0xFFFF;
-					s->nusage = s->ncount;
-				}
+				/* set default usage */
+				/* use the undefined HID PAGE */
+				s->usage_last = 0;
 				goto top;
 
 			case 9:	/* Output */



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