summaryrefslogtreecommitdiff
path: root/lib/libusb/usage.c
diff options
context:
space:
mode:
authoraugustss <augustss@NetBSD.org>2000-09-24 02:17:52 +0000
committeraugustss <augustss@NetBSD.org>2000-09-24 02:17:52 +0000
commitcb9f491cfe4f48de2f3776a86994e63cd1bd538c (patch)
tree47fc6c1e0b6758b5d279cde7051ca2b9cc761381 /lib/libusb/usage.c
parent8d014ac8a4b1c5f7507916669cae364f5c6e8fe4 (diff)
llow parsing of usage strings.
Diffstat (limited to 'lib/libusb/usage.c')
-rw-r--r--lib/libusb/usage.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/lib/libusb/usage.c b/lib/libusb/usage.c
index d87afdc88c7..2b98e4333be 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.7 2000/09/24 02:17:52 augustss Exp $ */
/*
* Copyright (c) 1999 Lennart Augustsson <augustss@netbsd.org>
@@ -192,3 +192,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);
+}