summaryrefslogtreecommitdiffstats
path: root/lib/libusbhid/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libusbhid/data.c')
-rw-r--r--lib/libusbhid/data.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/libusbhid/data.c b/lib/libusbhid/data.c
index 3b90ac6..f607737 100644
--- a/lib/libusbhid/data.c
+++ b/lib/libusbhid/data.c
@@ -32,7 +32,10 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <assert.h>
#include <stdlib.h>
+#include <string.h>
+#include <dev/usb/usb_ioctl.h>
#include "usbhid.h"
+#include "usbvar.h"
int32_t
hid_get_data(const void *p, const hid_item_t *h)
@@ -114,3 +117,27 @@ hid_set_data(void *p, const hid_item_t *h, int32_t data)
buf[offs + i] = (buf[offs + i] & (mask >> (i*8))) |
((data >> (i*8)) & 0xff);
}
+
+int
+hid_get_report(int fd, enum hid_kind k, unsigned char *data, unsigned int size)
+{
+ struct usb_gen_descriptor ugd;
+
+ memset(&ugd, 0, sizeof(ugd));
+ ugd.ugd_data = hid_pass_ptr(data);
+ ugd.ugd_maxlen = size;
+ ugd.ugd_report_type = k + 1;
+ return (ioctl(fd, USB_GET_REPORT, &ugd));
+}
+
+int
+hid_set_report(int fd, enum hid_kind k, unsigned char *data, unsigned int size)
+{
+ struct usb_gen_descriptor ugd;
+
+ memset(&ugd, 0, sizeof(ugd));
+ ugd.ugd_data = hid_pass_ptr(data);
+ ugd.ugd_maxlen = size;
+ ugd.ugd_report_type = k + 1;
+ return (ioctl(fd, USB_SET_REPORT, &ugd));
+}
OpenPOWER on IntegriCloud