diff options
author | Nick Hibma <n_hibma@FreeBSD.org> | 2000-10-16 18:13:59 +0000 |
---|---|---|
committer | Nick Hibma <n_hibma@FreeBSD.org> | 2000-10-16 18:13:59 +0000 |
commit | b425e3194780686c46c4dd3d01f71029a97c0284 (patch) | |
tree | 9b8e09e3ad9ab3bbb217628d1c4e95f88ccf3a03 /lib/libusbhid/usage.c | |
parent | 8b677600f91c08cdb3f76681ce79db1339892613 (diff) | |
download | src-b425e3194780686c46c4dd3d01f71029a97c0284.tar.gz src-b425e3194780686c46c4dd3d01f71029a97c0284.zip |
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.
Notes
Notes:
svn path=/head/; revision=67217
Diffstat (limited to 'lib/libusbhid/usage.c')
-rw-r--r-- | lib/libusbhid/usage.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/lib/libusbhid/usage.c b/lib/libusbhid/usage.c index 28d8c3bcdf36..7e71bff1289d 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); +} |