[Midnightbsd-cvs] src [8383] trunk/lib/libusbhid: restore handling of third argument as net/openbsd do
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Sep 18 15:17:00 EDT 2016
Revision: 8383
http://svnweb.midnightbsd.org/src/?rev=8383
Author: laffer1
Date: 2016-09-18 15:17:00 -0400 (Sun, 18 Sep 2016)
Log Message:
-----------
restore handling of third argument as net/openbsd do
Modified Paths:
--------------
trunk/lib/libusbhid/descr.c
trunk/lib/libusbhid/parse.c
trunk/lib/libusbhid/usbhid.3
Modified: trunk/lib/libusbhid/descr.c
===================================================================
--- trunk/lib/libusbhid/descr.c 2016-09-18 19:16:15 UTC (rev 8382)
+++ trunk/lib/libusbhid/descr.c 2016-09-18 19:17:00 UTC (rev 8383)
@@ -68,7 +68,7 @@
if ((rep = hid_get_report_desc(fd)) == NULL)
goto use_ioctl;
kindset = 1 << hid_input | 1 << hid_output | 1 << hid_feature;
- for (d = hid_start_parse(rep, kindset, 0); hid_get_item(d, &h); ) {
+ for (d = hid_start_parse(rep, kindset, -1); hid_get_item(d, &h); ) {
/* Return the first report ID we met. */
if (h.report_ID != 0) {
temp = h.report_ID;
Modified: trunk/lib/libusbhid/parse.c
===================================================================
--- trunk/lib/libusbhid/parse.c 2016-09-18 19:16:15 UTC (rev 8382)
+++ trunk/lib/libusbhid/parse.c 2016-09-18 19:17:00 UTC (rev 8383)
@@ -70,6 +70,7 @@
uint8_t iusage; /* current "usages_min/max" index */
uint8_t ousage; /* current "usages_min/max" offset */
uint8_t susage; /* usage set flags */
+ int32_t reportid; /* requested report ID */
};
/*------------------------------------------------------------------------*
@@ -149,7 +150,7 @@
* hid_start_parse
*------------------------------------------------------------------------*/
hid_data_t
-hid_start_parse(report_desc_t d, int kindset, int id __unused)
+hid_start_parse(report_desc_t d, int kindset, int id)
{
struct hid_data *s;
@@ -158,6 +159,7 @@
s->start = s->p = d->data;
s->end = d->data + d->size;
s->kindset = kindset;
+ s->reportid = id;
return (s);
}
@@ -207,8 +209,8 @@
/*------------------------------------------------------------------------*
* hid_get_item
*------------------------------------------------------------------------*/
-int
-hid_get_item(hid_data_t s, hid_item_t *h)
+static int
+hid_get_item_raw(hid_data_t s, hid_item_t *h)
{
hid_item_t *c;
unsigned int bTag, bType, bSize;
@@ -509,6 +511,19 @@
}
int
+hid_get_item(hid_data_t s, hid_item_t *h)
+{
+ int r;
+
+ for (;;) {
+ r = hid_get_item_raw(s, h);
+ if (r <= 0 || s->reportid == -1 || h->report_ID == s->reportid)
+ break;
+ }
+ return (r);
+}
+
+int
hid_report_size(report_desc_t r, enum hid_kind k, int id)
{
struct hid_data *d;
@@ -523,7 +538,7 @@
memset(&h, 0, sizeof h);
for (d = hid_start_parse(r, 1 << k, id); hid_get_item(d, &h); ) {
- if ((h.report_ID == id || id < 0) && h.kind == k) {
+ if (h.kind == k) {
/* compute minimum */
if (lpos > h.pos)
lpos = h.pos;
Modified: trunk/lib/libusbhid/usbhid.3
===================================================================
--- trunk/lib/libusbhid/usbhid.3 2016-09-18 19:16:15 UTC (rev 8382)
+++ trunk/lib/libusbhid/usbhid.3 2016-09-18 19:17:00 UTC (rev 8383)
@@ -144,8 +144,9 @@
.Ss Descriptor Parsing Functions
To parse the report descriptor the
.Fn hid_start_parse
-function should be called with a report descriptor and a set that
-describes which items that are interesting.
+function should be called with a report descriptor, a set that
+describes which items that are interesting, and the desired report
+ID (or -1 to obtain items of all report IDs).
The set is obtained by OR-ing together values
.Fa "(1 << k)"
where
@@ -152,8 +153,6 @@
.Fa k
is an item of type
.Vt hid_kind_t .
-The report ID (if present) is given by
-.Fa id .
The function returns
.Dv NULL
if the initialization fails, otherwise an opaque value to be used
More information about the Midnightbsd-cvs
mailing list