diff options
Diffstat (limited to 'lib/libusb/usage.c')
-rw-r--r-- | lib/libusb/usage.c | 42 |
1 files changed, 40 insertions, 2 deletions
diff --git a/lib/libusb/usage.c b/lib/libusb/usage.c index 28d8c3b..7e71bff 100644 --- a/lib/libusb/usage.c +++ b/lib/libusb/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); +} |