[dev][usb-hid] Convert to new banjo based USB protocol
TEST: USB keyboard works on NUC
Change-Id: Iaf0fb44d2bae2b2bc8293df89df1dbb468df39e3
diff --git a/system/dev/input/usb-hid/rules.mk b/system/dev/input/usb-hid/rules.mk
index fa30c86..dac9d82 100644
--- a/system/dev/input/usb-hid/rules.mk
+++ b/system/dev/input/usb-hid/rules.mk
@@ -10,13 +10,14 @@
MODULE_SRCS := $(LOCAL_DIR)/usb-hid.c
-MODULE_STATIC_LIBS := system/ulib/ddk system/dev/lib/usb-old \
+MODULE_STATIC_LIBS := system/ulib/ddk system/dev/lib/usb \
system/ulib/pretty system/ulib/sync
MODULE_LIBS := system/ulib/driver system/ulib/zircon system/ulib/c
MODULE_BANJO_LIBS := \
system/banjo/ddk-protocol-hidbus \
+ system/banjo/ddk-protocol-usb \
system/banjo/ddk-protocol-usb-composite \
system/banjo/ddk-protocol-usb-request \
diff --git a/system/dev/input/usb-hid/usb-hid.c b/system/dev/input/usb-hid/usb-hid.c
index f0647fc..d33a5db 100644
--- a/system/dev/input/usb-hid/usb-hid.c
+++ b/system/dev/input/usb-hid/usb-hid.c
@@ -7,7 +7,7 @@
#include <ddk/driver.h>
#include <ddk/binding.h>
#include <ddk/protocol/hidbus.h>
-#include <ddk/protocol/usb-old.h>
+#include <ddk/protocol/usb.h>
#include <ddk/usb/usb.h>
#include <usb/usb-request.h>
#include <zircon/hw/usb/hid.h>
@@ -45,8 +45,8 @@
size_t parent_req_size;
} usb_hid_device_t;
-static void usb_interrupt_callback(usb_request_t* req, void* cookie) {
- usb_hid_device_t* hid = (usb_hid_device_t*)cookie;
+static void usb_interrupt_callback(void* ctx, usb_request_t* req) {
+ usb_hid_device_t* hid = (usb_hid_device_t*)ctx;
// TODO use usb request copyfrom instead of mmap
void* buffer;
zx_status_t status = usb_request_mmap(req, &buffer);
@@ -79,7 +79,11 @@
}
if (requeue) {
- usb_request_queue(&hid->usb, req, usb_interrupt_callback, hid);
+ usb_request_complete_t complete = {
+ .callback = usb_interrupt_callback,
+ .ctx = hid,
+ };
+ usb_request_queue(&hid->usb, req, &complete);
} else {
hid->req_queued = false;
}
@@ -106,7 +110,11 @@
hid->ifc = *ifc;
if (!hid->req_queued) {
hid->req_queued = true;
- usb_request_queue(&hid->usb, hid->req, usb_interrupt_callback, hid);
+ usb_request_complete_t complete = {
+ .callback = usb_interrupt_callback,
+ .ctx = hid,
+ };
+ usb_request_queue(&hid->usb, hid->req, &complete);
}
mtx_unlock(&hid->lock);
return ZX_OK;
@@ -124,8 +132,8 @@
static zx_status_t usb_hid_control(usb_hid_device_t* hid, uint8_t req_type, uint8_t request,
uint16_t value, uint16_t index, void* data, size_t length,
size_t* out_length) {
- zx_status_t status = usb_control(&hid->usb, req_type, request, value, index, data, length,
- ZX_TIME_INFINITE, out_length);
+ zx_status_t status = usb_control(&hid->usb, req_type, request, value, index, length,
+ ZX_TIME_INFINITE, NULL, 0, data, length, out_length);
if (status == ZX_ERR_IO_REFUSED || status == ZX_ERR_IO_INVALID) {
usb_reset_endpoint(&hid->usb, 0);
}
@@ -245,7 +253,7 @@
return ZX_ERR_NO_MEMORY;
}
- zx_status_t status = device_get_protocol(dev, ZX_PROTOCOL_USB_OLD, &usbhid->usb);
+ zx_status_t status = device_get_protocol(dev, ZX_PROTOCOL_USB, &usbhid->usb);
if (status != ZX_OK) {
goto fail;
}
@@ -337,6 +345,6 @@
};
ZIRCON_DRIVER_BEGIN(usb_hid, usb_hid_driver_ops, "zircon", "0.1", 2)
- BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB_OLD),
+ BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_USB),
BI_MATCH_IF(EQ, BIND_USB_CLASS, USB_CLASS_HID),
ZIRCON_DRIVER_END(usb_hid)