diff --git a/examples/device/webusb/src/main.c b/examples/device/webusb/src/main.c index e6bfe3802..f844e9506 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;