@@ -168,6 +168,8 @@ static tinyusb_desc_webusb_url_t tinyusb_url_descriptor = {
168
168
/*
169
169
* Configuration Descriptor
170
170
* */
171
+
172
+ static tinyusb_descriptor_cb_t tinyusb_loaded_interfaces_callbacks [USB_INTERFACE_MAX ];
171
173
static uint32_t tinyusb_loaded_interfaces_mask = 0 ;
172
174
static uint8_t tinyusb_loaded_interfaces_num = 0 ;
173
175
static uint16_t tinyusb_config_descriptor_len = 0 ;
@@ -308,47 +310,6 @@ __attribute__ ((weak)) int32_t tud_msc_scsi_cb (uint8_t lun, uint8_t const scsi_
308
310
* Private API
309
311
* */
310
312
311
- __attribute__ ((weak )) uint16_t tusb_cdc_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
312
- __attribute__ ((weak )) uint16_t tusb_dfu_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
313
- __attribute__ ((weak )) uint16_t tusb_hid_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
314
- __attribute__ ((weak )) uint16_t tusb_msc_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
315
- __attribute__ ((weak )) uint16_t tusb_midi_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
316
- __attribute__ ((weak )) uint16_t tusb_vendor_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
317
-
318
- __attribute__ ((weak )) uint16_t tusb_custom_get_descriptor_len () { return 0 ; }
319
- __attribute__ ((weak )) uint16_t tusb_custom_load_descriptor (uint8_t * dst , uint8_t * itf ) { return 0 ; }
320
-
321
- static uint16_t tinyusb_load_descriptor (tinyusb_interface_t interface , uint8_t * dst , uint8_t * itf )
322
- {
323
- switch (interface ) {
324
- case USB_INTERFACE_CDC :
325
- return tusb_cdc_load_descriptor (dst , itf );
326
- break ;
327
- case USB_INTERFACE_DFU :
328
- return tusb_dfu_load_descriptor (dst , itf );
329
- break ;
330
- case USB_INTERFACE_HID :
331
- return tusb_hid_load_descriptor (dst , itf );
332
- break ;
333
- case USB_INTERFACE_VENDOR :
334
- return tusb_vendor_load_descriptor (dst , itf );
335
- break ;
336
- case USB_INTERFACE_MSC :
337
- return tusb_msc_load_descriptor (dst , itf );
338
- break ;
339
- case USB_INTERFACE_MIDI :
340
- return tusb_midi_load_descriptor (dst , itf );
341
- break ;
342
- case USB_INTERFACE_CUSTOM :
343
- return tusb_custom_load_descriptor (dst , itf );
344
- break ;
345
- default :
346
-
347
- break ;
348
- }
349
- return 0 ;
350
- }
351
-
352
313
static bool tinyusb_reserve_in_endpoint (uint8_t endpoint ){
353
314
if (endpoint > 6 || (tinyusb_endpoints .in & BIT (endpoint )) != 0 ){
354
315
return false;
@@ -379,6 +340,14 @@ static bool tinyusb_has_available_fifos(void){
379
340
return active_endpoints < max_endpoints ;
380
341
}
381
342
343
+ static uint16_t tinyusb_load_descriptor (tinyusb_interface_t interface , uint8_t * dst , uint8_t * itf )
344
+ {
345
+ if (tinyusb_loaded_interfaces_callbacks [interface ]){
346
+ return tinyusb_loaded_interfaces_callbacks [interface ](dst , itf );
347
+ }
348
+ return 0 ;
349
+ }
350
+
382
351
static bool tinyusb_load_enabled_interfaces (){
383
352
tinyusb_config_descriptor_len += TUD_CONFIG_DESC_LEN ;
384
353
tinyusb_config_descriptor = (uint8_t * )malloc (tinyusb_config_descriptor_len );
@@ -411,7 +380,7 @@ static bool tinyusb_load_enabled_interfaces(){
411
380
TUD_CONFIG_DESCRIPTOR (1 , tinyusb_loaded_interfaces_num , str_index , tinyusb_config_descriptor_len , USB_DEVICE_ATTRIBUTES , USB_DEVICE_POWER )
412
381
};
413
382
memcpy (tinyusb_config_descriptor , descriptor , TUD_CONFIG_DESC_LEN );
414
- if ((tinyusb_loaded_interfaces_mask & ~ (BIT (USB_INTERFACE_CDC ) | BIT (USB_INTERFACE_DFU ))) == 0 ) {
383
+ if ((tinyusb_loaded_interfaces_mask == (BIT (USB_INTERFACE_CDC ) | BIT (USB_INTERFACE_DFU ))) || ( tinyusb_loaded_interfaces_mask == BIT ( USB_INTERFACE_CDC )) ) {
415
384
tinyusb_persist_set_enable (true);
416
385
log_d ("USB Persist enabled" );
417
386
}
@@ -493,6 +462,19 @@ static void usb_device_task(void *param) {
493
462
* PUBLIC API
494
463
* */
495
464
465
+ esp_err_t tinyusb_enable_interface (tinyusb_interface_t interface , uint16_t descriptor_len , tinyusb_descriptor_cb_t cb )
466
+ {
467
+ if ((interface >= USB_INTERFACE_MAX ) || (tinyusb_loaded_interfaces_mask & (1U << interface ))){
468
+ log_e ("Interface %u not enabled" , interface );
469
+ return ESP_FAIL ;
470
+ }
471
+ tinyusb_loaded_interfaces_mask |= (1U << interface );
472
+ tinyusb_config_descriptor_len += descriptor_len ;
473
+ tinyusb_loaded_interfaces_callbacks [interface ] = cb ;
474
+ log_d ("Interface %u enabled" , interface );
475
+ return ESP_OK ;
476
+ }
477
+
496
478
esp_err_t tinyusb_init (tinyusb_device_config_t * config ) {
497
479
static bool initialized = false;
498
480
if (initialized ){
@@ -518,45 +500,6 @@ esp_err_t tinyusb_init(tinyusb_device_config_t *config) {
518
500
return err ;
519
501
}
520
502
521
- esp_err_t tinyusb_enable_interface (tinyusb_interface_t interface )
522
- {
523
- uint16_t descriptor_len = 0 ;
524
- switch (interface ) {
525
- case USB_INTERFACE_CDC :
526
- descriptor_len = CFG_TUD_CDC * TUD_CDC_DESC_LEN ;
527
- break ;
528
- case USB_INTERFACE_DFU :
529
- descriptor_len = CFG_TUD_DFU_RT * TUD_DFU_RT_DESC_LEN ;
530
- break ;
531
- case USB_INTERFACE_HID :
532
- descriptor_len = CFG_TUD_HID * TUD_HID_INOUT_DESC_LEN ;
533
- break ;
534
- case USB_INTERFACE_MSC :
535
- descriptor_len = CFG_TUD_MSC * TUD_MSC_DESC_LEN ;
536
- break ;
537
- case USB_INTERFACE_MIDI :
538
- descriptor_len = CFG_TUD_MIDI * TUD_MIDI_DESC_LEN ;
539
- break ;
540
- case USB_INTERFACE_VENDOR :
541
- descriptor_len = CFG_TUD_VENDOR * TUD_VENDOR_DESC_LEN ;
542
- break ;
543
- case USB_INTERFACE_CUSTOM :
544
- descriptor_len = tusb_custom_get_descriptor_len ();
545
- break ;
546
- default :
547
-
548
- break ;
549
- }
550
- if (descriptor_len ) {
551
- tinyusb_config_descriptor_len += descriptor_len ;
552
- tinyusb_loaded_interfaces_mask |= (1U << interface );
553
- log_d ("Driver %u enabled" , interface );
554
- return ESP_OK ;
555
- }
556
- log_e ("Driver %u not enabled" , interface );
557
- return ESP_FAIL ;
558
- }
559
-
560
503
uint8_t tinyusb_add_string_descriptor (const char * str ){
561
504
if (str == NULL || tinyusb_string_descriptor_len >= MAX_STRING_DESCRIPTORS ){
562
505
return 0 ;
0 commit comments