summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorJerzy Kasenberg <[email protected]>2020-05-13 16:45:01 +0200
committerJerzy Kasenberg <[email protected]>2020-05-28 10:11:37 +0200
commit077437b3dc2772ba87e6d43baf906d29b7539ca5 (patch)
tree22d861abfb53d2123147a8af133bf1cef47923e1 /src/device
parentb8783e10a9033ccf7485d4a2ff9e8850421989be (diff)
Add non standard request handling in class
For some reason bluetooth stack implementations send class requests to device instead of interface. To implement HCI interface over USB non device addressed requests for class need to be handled.
Diffstat (limited to 'src/device')
-rw-r--r--src/device/usbd.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 971417a35..3cbd50644 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -507,6 +507,18 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
{
//------------- Device Requests e.g in enumeration -------------//
case TUSB_REQ_RCPT_DEVICE:
+ if ( TUSB_REQ_TYPE_CLASS == p_request->bmRequestType_bit.type )
+ {
+ uint8_t const itf = tu_u16_low(p_request->wIndex);
+ TU_VERIFY(itf < TU_ARRAY_SIZE(_usbd_dev.itf2drv));
+
+ uint8_t const drvid = _usbd_dev.itf2drv[itf];
+ TU_VERIFY(drvid < USBD_CLASS_DRIVER_COUNT);
+
+ // forward to class driver: "non-STD request to Interface"
+ TU_VERIFY(invoke_class_control(rhport, drvid, p_request));
+ return true;
+ }
if ( TUSB_REQ_TYPE_STANDARD != p_request->bmRequestType_bit.type )
{
// Non standard request is not supported