@@ -228,7 +228,7 @@ typedef struct TU_ATTR_PACKED {
228
228
static tinyusb_desc_webusb_url_t tinyusb_url_descriptor = {
229
229
.bLength = 3 ,
230
230
.bDescriptorType = 3 , // WEBUSB URL type
231
- .bScheme = 1 , // URL Scheme Prefix: 0: "http://", 1: "https://", 255: ""
231
+ .bScheme = 255 , // URL Scheme Prefix: 0: "http://", 1: "https://", 255: ""
232
232
.url = ""
233
233
};
234
234
@@ -317,12 +317,11 @@ uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid)
317
317
*/
318
318
uint8_t const * tud_descriptor_bos_cb (void )
319
319
{
320
- //log_d ("");
320
+ //log_v ("");
321
321
return tinyusb_bos_descriptor ;
322
322
}
323
323
324
- __attribute__ ((weak )) bool tinyusb_vendor_control_request_cb (uint8_t rhport , tusb_control_request_t const * request ){ return false; }
325
- __attribute__ ((weak )) bool tinyusb_vendor_control_complete_cb (uint8_t rhport , tusb_control_request_t const * request ){ return true; }
324
+ __attribute__ ((weak )) bool tinyusb_vendor_control_request_cb (uint8_t rhport , uint8_t stage , tusb_control_request_t const * request ){ return false; }
326
325
327
326
/**
328
327
* @brief Handle WebUSB and Vendor requests.
@@ -331,30 +330,26 @@ bool tud_vendor_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_requ
331
330
{
332
331
if (WEBUSB_ENABLED && (request -> bRequest == VENDOR_REQUEST_WEBUSB
333
332
|| (request -> bRequest == VENDOR_REQUEST_MICROSOFT && request -> wIndex == 7 ))){
334
- if (request -> bRequest == VENDOR_REQUEST_WEBUSB ){
335
- // match vendor request in BOS descriptor
336
- // Get landing page url
337
- tinyusb_url_descriptor .bLength = 3 + strlen (WEBUSB_URL );
338
- snprintf (tinyusb_url_descriptor .url , 127 , "%s" , WEBUSB_URL );
339
- return tud_control_xfer (rhport , request , (void * ) & tinyusb_url_descriptor , tinyusb_url_descriptor .bLength );
333
+ // we only care for SETUP stage
334
+ if (stage == CONTROL_STAGE_SETUP ) {
335
+ if (request -> bRequest == VENDOR_REQUEST_WEBUSB ){
336
+ // match vendor request in BOS descriptor
337
+ // Get landing page url
338
+ tinyusb_url_descriptor .bLength = 3 + strlen (WEBUSB_URL );
339
+ snprintf (tinyusb_url_descriptor .url , 127 , "%s" , WEBUSB_URL );
340
+ return tud_control_xfer (rhport , request , (void * ) & tinyusb_url_descriptor , tinyusb_url_descriptor .bLength );
341
+ }
342
+ // Get Microsoft OS 2.0 compatible descriptor
343
+ uint16_t total_len ;
344
+ memcpy (& total_len , tinyusb_ms_os_20_descriptor + 8 , 2 );
345
+ return tud_control_xfer (rhport , request , (void * ) tinyusb_ms_os_20_descriptor , total_len );
340
346
}
341
- // Get Microsoft OS 2.0 compatible descriptor
342
- uint16_t total_len ;
343
- memcpy (& total_len , tinyusb_ms_os_20_descriptor + 8 , 2 );
344
- return tud_control_xfer (rhport , request , (void * ) tinyusb_ms_os_20_descriptor , total_len );
347
+ return true;
345
348
}
346
- return tinyusb_vendor_control_request_cb (rhport , request );
349
+ log_v ("rhport: %u, stage: %u, type: 0x%x, request: 0x%x" , rhport , stage , request -> bmRequestType_bit .type , request -> bRequest );
350
+ return tinyusb_vendor_control_request_cb (rhport , stage , request );
347
351
}
348
352
349
- // bool tud_vendor_control_complete_cb(uint8_t rhport, tusb_control_request_t const * request)
350
- // {
351
- // if(!WEBUSB_ENABLED || !(request->bRequest == VENDOR_REQUEST_WEBUSB
352
- // || (request->bRequest == VENDOR_REQUEST_MICROSOFT && request->wIndex == 7))){
353
- // return tinyusb_vendor_control_complete_cb(rhport, request);
354
- // }
355
- // return true;
356
- // }
357
-
358
353
/*
359
354
* Required Callbacks
360
355
* */
@@ -537,6 +532,9 @@ static void IRAM_ATTR usb_persist_shutdown_handler(void)
537
532
REG_WRITE (RTC_CNTL_OPTION1_REG , RTC_CNTL_FORCE_DOWNLOAD_BOOT );
538
533
} else if (usb_persist_mode == RESTART_BOOTLOADER_DFU ) {
539
534
//DFU Download
535
+ // Reset USB Core
536
+ USB0 .grstctl |= USB_CSFTRST ;
537
+ while ((USB0 .grstctl & USB_CSFTRST ) == USB_CSFTRST ){}
540
538
chip_usb_set_persist_flags (USBDC_BOOT_DFU );
541
539
REG_WRITE (RTC_CNTL_OPTION1_REG , RTC_CNTL_FORCE_DOWNLOAD_BOOT );
542
540
} else if (usb_persist_enabled ) {
0 commit comments