From cdaf455461c5ac5867f5eba2eb8874d1a32f0e82 Mon Sep 17 00:00:00 2001 From: hathach Date: Fri, 26 Jul 2019 20:14:56 +0700 Subject: [PATCH] fix stall response with SET_INTERFACE/GET_INTERFACE webusb work with linux & macos --- examples/device/webusb/src/main.c | 44 +++++++++++++++---------------- src/device/usbd.c | 30 ++++++++++++++++++--- 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/examples/device/webusb/src/main.c b/examples/device/webusb/src/main.c index e6bfe380..f844e950 100644 --- a/examples/device/webusb/src/main.c +++ b/examples/device/webusb/src/main.c @@ -86,6 +86,28 @@ int main(void) return 0; } +// send characters to both CDC and WebUSB +void echo_all(uint8_t buf[], uint32_t count) +{ + // echo to web serial + if ( web_serial_connected ) + { + tud_vendor_write(buf, count); + } + + // echo to cdc + if ( tud_cdc_connected() ) + { + for(uint32_t i=0; ibRequest ) + { + case TUSB_REQ_GET_INTERFACE: + { + // TODO not support alternate interface yet + uint8_t alternate = 0; + tud_control_xfer(rhport, p_request, &alternate, 1); + } + break; - // stall control endpoint if driver return false - return usbd_class_drivers[drvid].control_request(rhport, p_request); + case TUSB_REQ_SET_INTERFACE: + { + uint8_t alternate = (uint8_t) p_request->wValue; + + // TODO not support alternate interface yet + TU_ASSERT(alternate == 0); + + tud_control_status(rhport, p_request); + } + break; + + default: + // forward to class driver + // stall control endpoint if driver return false + usbd_control_set_complete_callback(usbd_class_drivers[drvid].control_complete); + TU_ASSERT(usbd_class_drivers[drvid].control_request(rhport, p_request)); + break; + } } break;