summaryrefslogtreecommitdiffstats
path: root/lib/libusbhid/usage.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>2000-10-16 18:13:59 +0000
committern_hibma <n_hibma@FreeBSD.org>2000-10-16 18:13:59 +0000
commitef4994a1212dd74d2ea9e3be4b586433d2aeb0bd (patch)
treef5bf67808c38fb5703446a339a4b2fbee87bfa91 /lib/libusbhid/usage.c
parentba11a89d00cdc5eb8917da96d66e9feae77dc5e6 (diff)
downloadFreeBSD-src-ef4994a1212dd74d2ea9e3be4b586433d2aeb0bd.zip
FreeBSD-src-ef4994a1212dd74d2ea9e3be4b586433d2aeb0bd.tar.gz
Sync with NetBSD:
K&R -> ANSI Bugfix: 'Keep the bit position even when the report descriptor says POP.' Add hid_use_report_desc, hid_parse_usage_page, hid_parse_usage_in_page. Changed iface for hid_report_size.
Diffstat (limited to 'lib/libusbhid/usage.c')
-rw-r--r--lib/libusbhid/usage.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/lib/libusbhid/usage.c b/lib/libusbhid/usage.c
index 28d8c3b..7e71bff 100644
--- a/lib/libusbhid/usage.c
+++ b/lib/libusbhid/usage.c
@@ -1,4 +1,4 @@
-/* $NetBSD: usage.c,v 1.6 2000/08/13 22:22:02 augustss Exp $ */
+/* $NetBSD: usage.c,v 1.8 2000/10/10 19:23:58 is Exp $ */
/*
* Copyright (c) 1999 Lennart Augustsson <augustss@netbsd.org>
@@ -185,7 +185,8 @@ hid_usage_in_page(unsigned int u)
for (j = 0; j < pages[k].pagesize; j++) {
us = pages[k].page_contents[j].usage;
if (us == -1) {
- sprintf(b, pages[k].page_contents[j].name, i);
+ sprintf(b, "%s %d",
+ pages[k].page_contents[j].name, i);
return b;
}
if (us == i)
@@ -195,3 +196,40 @@ hid_usage_in_page(unsigned int u)
sprintf(b, "0x%04x", i);
return b;
}
+
+int
+hid_parse_usage_page(const char *name)
+{
+ int k;
+
+ if (!pages)
+ errx(1, "no hid table\n");
+
+ for (k = 0; k < npages; k++)
+ if (strcmp(pages[k].name, name) == 0)
+ return pages[k].usage;
+ return -1;
+}
+
+/* XXX handle hex */
+int
+hid_parse_usage_in_page(const char *name)
+{
+ const char *sep = strchr(name, ':');
+ int k, j;
+ unsigned int l;
+
+ if (sep == NULL)
+ return -1;
+ l = sep - name;
+ for (k = 0; k < npages; k++)
+ if (strncmp(pages[k].name, name, l) == 0)
+ goto found;
+ return -1;
+ found:
+ sep++;
+ for (j = 0; j < pages[k].pagesize; j++)
+ if (strcmp(pages[k].page_contents[j].name, sep) == 0)
+ return (pages[k].usage << 16) | pages[k].page_contents[j].usage;
+ return (-1);
+}
OpenPOWER on IntegriCloud