svn commit: r192055 - head/sys/dev/usb
Andrew Thompson
thompsa at FreeBSD.org
Wed May 13 18:06:53 UTC 2009
Author: thompsa
Date: Wed May 13 18:06:52 2009
New Revision: 192055
URL: http://svn.freebsd.org/changeset/base/192055
Log:
Make sure collections have the usage field set.
Submitted by: Hans Petter Selasky
Modified:
head/sys/dev/usb/usb_hid.c
Modified: head/sys/dev/usb/usb_hid.c
==============================================================================
--- head/sys/dev/usb/usb_hid.c Wed May 13 18:05:40 2009 (r192054)
+++ head/sys/dev/usb/usb_hid.c Wed May 13 18:06:52 2009 (r192055)
@@ -309,6 +309,7 @@ hid_get_item(struct hid_data *s, struct
c->kind = hid_collection;
c->collection = dval;
c->collevel++;
+ c->usage = s->usage_last;
*h = *c;
return (1);
case 11: /* Feature */
@@ -408,6 +409,9 @@ hid_get_item(struct hid_data *s, struct
if (bSize != 4)
dval = (dval & mask) | c->_usage_page;
+ /* set last usage, in case of a collection */
+ s->usage_last = dval;
+
if (s->nusage < MAXUSAGE) {
s->usages_min[s->nusage] = dval;
s->usages_max[s->nusage] = dval;
@@ -630,9 +634,11 @@ hid_is_collection(const void *desc, usb2
if (hd == NULL)
return (0);
- err = hid_get_item(hd, &hi) &&
- hi.kind == hid_collection &&
- hi.usage == usage;
+ while ((err = hid_get_item(hd, &hi))) {
+ if (hi.kind == hid_collection &&
+ hi.usage == usage)
+ break;
+ }
hid_end_parse(hd);
return (err);
}
More information about the svn-src-head
mailing list