diff options
| author | Ha Thach <[email protected]> | 2020-04-16 21:33:03 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-04-16 21:33:03 +0700 |
| commit | bfec3b44795e92469f5d4ff16f1caf131114d54f (patch) | |
| tree | abeaf6853d3a27a5b1edc459a5143f749410f6e4 /src/device | |
| parent | 33888519dd3a972fdef21ad259d060ff6cef36db (diff) | |
| parent | 2eed58d0962849014ab3166d4a3f0d3677d32c01 (diff) | |
Merge pull request #345 from hathach/add-alt-itf
Implement setInterface(alt) for usb net driver
Diffstat (limited to 'src/device')
| -rw-r--r-- | src/device/usbd.c | 40 |
1 files changed, 9 insertions, 31 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index ad5a32f92..29845ff36 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -571,39 +571,17 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const uint8_t const drvid = _usbd_dev.itf2drv[itf]; TU_VERIFY(drvid < USBD_CLASS_DRIVER_COUNT); - if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD) + // all requests to Interface (STD or Class) is forwarded to class driver. + // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE + if ( !invoke_class_control(rhport, drvid, p_request) ) { - switch ( p_request->bRequest ) - { - case TUSB_REQ_GET_INTERFACE: - { - // TODO not support alternate interface yet - uint8_t alternate = 0; - tud_control_xfer(rhport, p_request, &alternate, 1); - } - break; - - case TUSB_REQ_SET_INTERFACE: - { - uint8_t const alternate = (uint8_t) p_request->wValue; - (void) alternate; + // For GET_INTERFACE, it is mandatory to respond even if the class + // driver doesn't use alternate settings. + TU_VERIFY( TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type && + TUSB_REQ_GET_INTERFACE == p_request->bRequest); - // TODO not support alternate interface yet -// TU_ASSERT(alternate == 0); - tud_control_status(rhport, p_request); - } - break; - - default: - // forward to class driver: "STD request to Interface" - // GET HID REPORT DESCRIPTOR falls into this case - TU_VERIFY(invoke_class_control(rhport, drvid, p_request)); - break; - } - }else - { - // forward to class driver: "non-STD request to Interface" - TU_VERIFY(invoke_class_control(rhport, drvid, p_request)); + uint8_t alternate = 0; + tud_control_xfer(rhport, p_request, &alternate, 1); } } break; |
