diff options
| author | hathach <[email protected]> | 2021-03-10 11:33:03 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2021-03-10 11:33:03 +0700 |
| commit | eeea19c0ab1c6e66c56eabac49e2c0f190e9a080 (patch) | |
| tree | e26998c4995e0c662cbb2645b736801462829eba | |
| parent | 38ebb8502da82e7deb1a3d8360bedc87c4923683 (diff) | |
usbd ack SET_INTERFACE if it is not implemented by class driver.
| -rw-r--r-- | src/device/usbd.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index 911977eb0..ca5a482fc 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -699,13 +699,21 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const // notable requests are: GET HID REPORT DESCRIPTOR, SET_INTERFACE, GET_INTERFACE if ( !invoke_class_control(rhport, driver, p_request) ) { - // 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); + // For GET_INTERFACE and SET_INTERFACE, it is mandatory to respond even if the class + // driver doesn't use alternate settings or implement this + TU_VERIFY(TUSB_REQ_TYPE_STANDARD == p_request->bmRequestType_bit.type); - uint8_t alternate = 0; - tud_control_xfer(rhport, p_request, &alternate, 1); + if (TUSB_REQ_GET_INTERFACE == p_request->bRequest) + { + uint8_t alternate = 0; + tud_control_xfer(rhport, p_request, &alternate, 1); + }else if (TUSB_REQ_SET_INTERFACE == p_request->bRequest) + { + tud_control_status(rhport, p_request); + } else + { + return false; + } } } break; |
