From 7f54a357a433bf8a85853f7db2ed8365697753f0 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Thu, 2 Jul 2020 02:16:07 +0300 Subject: [PATCH] Change driver attach api and remove DFU from CDC --- cores/esp32/esp32-hal-tinyusb.c | 105 +++++++---------------------- cores/esp32/esp32-hal-tinyusb.h | 4 +- libraries/USB/src/USB.cpp | 33 +++++++++ libraries/USB/src/USB.h | 1 + libraries/USB/src/USBCDC.cpp | 56 ++------------- tools/sdk/esp32s2/lib/libtinyusb.a | Bin 749772 -> 749316 bytes 6 files changed, 66 insertions(+), 133 deletions(-) diff --git a/cores/esp32/esp32-hal-tinyusb.c b/cores/esp32/esp32-hal-tinyusb.c index b7aa3ece..e47fed96 100644 --- a/cores/esp32/esp32-hal-tinyusb.c +++ b/cores/esp32/esp32-hal-tinyusb.c @@ -168,6 +168,8 @@ static tinyusb_desc_webusb_url_t tinyusb_url_descriptor = { /* * Configuration Descriptor * */ + +static tinyusb_descriptor_cb_t tinyusb_loaded_interfaces_callbacks[USB_INTERFACE_MAX]; static uint32_t tinyusb_loaded_interfaces_mask = 0; static uint8_t tinyusb_loaded_interfaces_num = 0; 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_ * Private API * */ -__attribute__ ((weak)) uint16_t tusb_cdc_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } -__attribute__ ((weak)) uint16_t tusb_dfu_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } -__attribute__ ((weak)) uint16_t tusb_hid_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } -__attribute__ ((weak)) uint16_t tusb_msc_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } -__attribute__ ((weak)) uint16_t tusb_midi_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } -__attribute__ ((weak)) uint16_t tusb_vendor_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } - -__attribute__ ((weak)) uint16_t tusb_custom_get_descriptor_len() { return 0; } -__attribute__ ((weak)) uint16_t tusb_custom_load_descriptor(uint8_t * dst, uint8_t * itf) { return 0; } - -static uint16_t tinyusb_load_descriptor(tinyusb_interface_t interface, uint8_t * dst, uint8_t * itf) -{ - switch (interface) { - case USB_INTERFACE_CDC: - return tusb_cdc_load_descriptor(dst, itf); - break; - case USB_INTERFACE_DFU: - return tusb_dfu_load_descriptor(dst, itf); - break; - case USB_INTERFACE_HID: - return tusb_hid_load_descriptor(dst, itf); - break; - case USB_INTERFACE_VENDOR: - return tusb_vendor_load_descriptor(dst, itf); - break; - case USB_INTERFACE_MSC: - return tusb_msc_load_descriptor(dst, itf); - break; - case USB_INTERFACE_MIDI: - return tusb_midi_load_descriptor(dst, itf); - break; - case USB_INTERFACE_CUSTOM: - return tusb_custom_load_descriptor(dst, itf); - break; - default: - - break; - } - return 0; -} - static bool tinyusb_reserve_in_endpoint(uint8_t endpoint){ if(endpoint > 6 || (tinyusb_endpoints.in & BIT(endpoint)) != 0){ return false; @@ -379,6 +340,14 @@ static bool tinyusb_has_available_fifos(void){ return active_endpoints < max_endpoints; } +static uint16_t tinyusb_load_descriptor(tinyusb_interface_t interface, uint8_t * dst, uint8_t * itf) +{ + if(tinyusb_loaded_interfaces_callbacks[interface]){ + return tinyusb_loaded_interfaces_callbacks[interface](dst, itf); + } + return 0; +} + static bool tinyusb_load_enabled_interfaces(){ tinyusb_config_descriptor_len += TUD_CONFIG_DESC_LEN; tinyusb_config_descriptor = (uint8_t *)malloc(tinyusb_config_descriptor_len); @@ -411,7 +380,7 @@ static bool tinyusb_load_enabled_interfaces(){ TUD_CONFIG_DESCRIPTOR(1, tinyusb_loaded_interfaces_num, str_index, tinyusb_config_descriptor_len, USB_DEVICE_ATTRIBUTES, USB_DEVICE_POWER) }; memcpy(tinyusb_config_descriptor, descriptor, TUD_CONFIG_DESC_LEN); - if ((tinyusb_loaded_interfaces_mask & ~(BIT(USB_INTERFACE_CDC) | BIT(USB_INTERFACE_DFU))) == 0) { + if ((tinyusb_loaded_interfaces_mask == (BIT(USB_INTERFACE_CDC) | BIT(USB_INTERFACE_DFU))) || (tinyusb_loaded_interfaces_mask == BIT(USB_INTERFACE_CDC))) { tinyusb_persist_set_enable(true); log_d("USB Persist enabled"); } @@ -493,6 +462,19 @@ static void usb_device_task(void *param) { * PUBLIC API * */ +esp_err_t tinyusb_enable_interface(tinyusb_interface_t interface, uint16_t descriptor_len, tinyusb_descriptor_cb_t cb) +{ + if((interface >= USB_INTERFACE_MAX) || (tinyusb_loaded_interfaces_mask & (1U << interface))){ + log_e("Interface %u not enabled", interface); + return ESP_FAIL; + } + tinyusb_loaded_interfaces_mask |= (1U << interface); + tinyusb_config_descriptor_len += descriptor_len; + tinyusb_loaded_interfaces_callbacks[interface] = cb; + log_d("Interface %u enabled", interface); + return ESP_OK; +} + esp_err_t tinyusb_init(tinyusb_device_config_t *config) { static bool initialized = false; if(initialized){ @@ -518,45 +500,6 @@ esp_err_t tinyusb_init(tinyusb_device_config_t *config) { return err; } -esp_err_t tinyusb_enable_interface(tinyusb_interface_t interface) -{ - uint16_t descriptor_len = 0; - switch (interface) { - case USB_INTERFACE_CDC: - descriptor_len = CFG_TUD_CDC * TUD_CDC_DESC_LEN; - break; - case USB_INTERFACE_DFU: - descriptor_len = CFG_TUD_DFU_RT * TUD_DFU_RT_DESC_LEN; - break; - case USB_INTERFACE_HID: - descriptor_len = CFG_TUD_HID * TUD_HID_INOUT_DESC_LEN; - break; - case USB_INTERFACE_MSC: - descriptor_len = CFG_TUD_MSC * TUD_MSC_DESC_LEN; - break; - case USB_INTERFACE_MIDI: - descriptor_len = CFG_TUD_MIDI * TUD_MIDI_DESC_LEN; - break; - case USB_INTERFACE_VENDOR: - descriptor_len = CFG_TUD_VENDOR * TUD_VENDOR_DESC_LEN; - break; - case USB_INTERFACE_CUSTOM: - descriptor_len = tusb_custom_get_descriptor_len(); - break; - default: - - break; - } - if (descriptor_len) { - tinyusb_config_descriptor_len += descriptor_len; - tinyusb_loaded_interfaces_mask |= (1U << interface); - log_d("Driver %u enabled", interface); - return ESP_OK; - } - log_e("Driver %u not enabled", interface); - return ESP_FAIL; -} - uint8_t tinyusb_add_string_descriptor(const char * str){ if(str == NULL || tinyusb_string_descriptor_len >= MAX_STRING_DESCRIPTORS){ return 0; diff --git a/cores/esp32/esp32-hal-tinyusb.h b/cores/esp32/esp32-hal-tinyusb.h index f75dabd3..1067a940 100644 --- a/cores/esp32/esp32-hal-tinyusb.h +++ b/cores/esp32/esp32-hal-tinyusb.h @@ -73,7 +73,9 @@ typedef enum { USB_INTERFACE_MAX } tinyusb_interface_t; -esp_err_t tinyusb_enable_interface(tinyusb_interface_t interface); +typedef uint16_t (*tinyusb_descriptor_cb_t)(uint8_t * dst, uint8_t * itf); + +esp_err_t tinyusb_enable_interface(tinyusb_interface_t interface, uint16_t descriptor_len, tinyusb_descriptor_cb_t cb); uint8_t tinyusb_add_string_descriptor(const char * str); uint8_t tinyusb_get_free_duplex_endpoint(void); uint8_t tinyusb_get_free_in_endpoint(void); diff --git a/libraries/USB/src/USB.cpp b/libraries/USB/src/USB.cpp index 736ab60a..87726ba5 100644 --- a/libraries/USB/src/USB.cpp +++ b/libraries/USB/src/USB.cpp @@ -15,11 +15,38 @@ #include "esp32-hal-tinyusb.h" #include "USB.h" #if CONFIG_USB_ENABLED +#include "usb_persist.h" extern "C" { #include "tinyusb.h" } +#if CFG_TUD_DFU_RT +static uint16_t load_dfu_descriptor(uint8_t * dst, uint8_t * itf) +{ +#define DFU_ATTR_CAN_DOWNLOAD 1 +#define DFU_ATTR_CAN_UPLOAD 2 +#define DFU_ATTR_MANIFESTATION_TOLERANT 4 +#define DFU_ATTR_WILL_DETACH 8 +#define DFU_ATTRS (DFU_ATTR_CAN_DOWNLOAD | DFU_ATTR_CAN_UPLOAD | DFU_ATTR_MANIFESTATION_TOLERANT) + + uint8_t str_index = tinyusb_add_string_descriptor("TinyUSB DFU_RT"); + uint8_t descriptor[TUD_DFU_RT_DESC_LEN] = { + // Interface number, string index, attributes, detach timeout, transfer size */ + TUD_DFU_RT_DESCRIPTOR(*itf, str_index, DFU_ATTRS, 700, 64) + }; + *itf+=1; + memcpy(dst, descriptor, TUD_DFU_RT_DESC_LEN); + return TUD_DFU_RT_DESC_LEN; +} +// Invoked on DFU_DETACH request to reboot to the bootloader +void tud_dfu_rt_reboot_to_dfu(void) +{ + tinyusb_persist_set_mode(REBOOT_BOOTLOADER_DFU); + esp_restart(); +} +#endif /* CFG_TUD_DFU_RT */ + ESP_EVENT_DEFINE_BASE(ARDUINO_USB_EVENTS); static esp_event_loop_handle_t arduino_usb_event_loop_handle = NULL; @@ -141,6 +168,12 @@ ESPUSB::operator bool() const return _started && tinyusb_device_mounted; } +bool ESPUSB::enableDFU(){ +#if CFG_TUD_DFU_RT + return tinyusb_enable_interface(USB_INTERFACE_DFU, TUD_DFU_RT_DESC_LEN, load_dfu_descriptor) == ESP_OK; +#endif /* CFG_TUD_DFU_RT */ + return false; +} bool ESPUSB::VID(uint16_t v){ if(!_started){ diff --git a/libraries/USB/src/USB.h b/libraries/USB/src/USB.h index 5dfac3e6..ede52791 100644 --- a/libraries/USB/src/USB.h +++ b/libraries/USB/src/USB.h @@ -88,6 +88,7 @@ class ESPUSB { bool webUSBURL(const char * name); const char * webUSBURL(void); + bool enableDFU(); bool begin(); operator bool() const; diff --git a/libraries/USB/src/USBCDC.cpp b/libraries/USB/src/USBCDC.cpp index ee97d738..7bf46a21 100644 --- a/libraries/USB/src/USBCDC.cpp +++ b/libraries/USB/src/USBCDC.cpp @@ -24,29 +24,13 @@ esp_err_t arduino_usb_event_handler_register_with(esp_event_base_t event_base, i extern "C" { #include "tinyusb.h" - -#if CFG_TUD_DFU_RT -uint16_t tusb_dfu_load_descriptor(uint8_t * dst, uint8_t * itf) -{ -#define DFU_ATTR_CAN_DOWNLOAD 1 -#define DFU_ATTR_CAN_UPLOAD 2 -#define DFU_ATTR_MANIFESTATION_TOLERANT 4 -#define DFU_ATTR_WILL_DETACH 8 -#define DFU_ATTRS (DFU_ATTR_CAN_DOWNLOAD | DFU_ATTR_CAN_UPLOAD | DFU_ATTR_MANIFESTATION_TOLERANT) - - uint8_t str_index = tinyusb_add_string_descriptor("TinyUSB DFU_RT"); - uint8_t descriptor[TUD_DFU_RT_DESC_LEN] = { - // Interface number, string index, attributes, detach timeout, transfer size */ - TUD_DFU_RT_DESCRIPTOR(*itf, str_index, DFU_ATTRS, 700, 64) - }; - *itf+=1; - memcpy(dst, descriptor, TUD_DFU_RT_DESC_LEN); - return TUD_DFU_RT_DESC_LEN; } -#endif /* CFG_TUD_DFU_RT */ #if CFG_TUD_CDC -uint16_t tusb_cdc_load_descriptor(uint8_t * dst, uint8_t * itf) +#define MAX_USB_CDC_DEVICES 2 +USBCDC * devices[MAX_USB_CDC_DEVICES] = {NULL, NULL}; + +static uint16_t load_cdc_descriptor(uint8_t * dst, uint8_t * itf) { uint8_t str_index = tinyusb_add_string_descriptor("TinyUSB CDC"); // Interface number, string index, attributes, detach timeout, transfer size */ @@ -58,22 +42,6 @@ uint16_t tusb_cdc_load_descriptor(uint8_t * dst, uint8_t * itf) memcpy(dst, descriptor, TUD_CDC_DESC_LEN); return TUD_CDC_DESC_LEN; } -#endif /* CFG_TUD_CDC */ -} - -#if CFG_TUD_CDC -#define MAX_USB_CDC_DEVICES 2 -USBCDC * devices[MAX_USB_CDC_DEVICES] = {NULL, NULL}; - -#if CFG_TUD_DFU_RT -// Invoked on DFU_DETACH request to reboot to the bootloader -void tud_dfu_rt_reboot_to_dfu(void) -{ - if(devices[0] != NULL){ - devices[0]->_onDFU(); - } -} -#endif /* CFG_TUD_DFU_RT */ void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts) { @@ -103,8 +71,7 @@ static void usb_unplugged_cb(void* arg, esp_event_base_t event_base, int32_t eve } USBCDC::USBCDC(uint8_t itfn) : itf(itfn), bit_rate(0), stop_bits(0), parity(0), data_bits(0), dtr(false), rts(false), connected(false), reboot_enable(true), rx_queue(NULL) { - tinyusb_enable_interface(USB_INTERFACE_CDC); - tinyusb_enable_interface(USB_INTERFACE_DFU); + tinyusb_enable_interface(USB_INTERFACE_CDC, TUD_CDC_DESC_LEN, load_cdc_descriptor); if(itf < MAX_USB_CDC_DEVICES){ devices[itf] = this; arduino_usb_event_handler_register_with(ARDUINO_USB_EVENTS, ARDUINO_USB_STOPPED_EVENT, usb_unplugged_cb, this); @@ -127,12 +94,10 @@ void USBCDC::begin(size_t rx_queue_len) if(!rx_queue){ return; } - tinyusb_persist_set_mode(REBOOT_PERSIST); } void USBCDC::end() { - tinyusb_persist_set_mode(REBOOT_NO_PERSIST); } void USBCDC::_onUnplugged(void){ @@ -145,13 +110,6 @@ void USBCDC::_onUnplugged(void){ } } -void USBCDC::_onDFU(void){ - if(reboot_enable){ - tinyusb_persist_set_mode(REBOOT_BOOTLOADER_DFU); - esp_restart(); - } -} - enum { CDC_LINE_IDLE, CDC_LINE_1, CDC_LINE_2, CDC_LINE_3 }; void USBCDC::_onLineState(bool _dtr, bool _rts){ static uint8_t lineState = CDC_LINE_IDLE; @@ -202,10 +160,6 @@ void USBCDC::_onLineState(bool _dtr, bool _rts){ l.line_state.rts = rts; arduino_usb_event_post(ARDUINO_USB_CDC_EVENTS, ARDUINO_USB_CDC_LINE_STATE_EVENT, &l, sizeof(arduino_usb_cdc_event_data_t), portMAX_DELAY); } else { - //[I][USBSerial.cpp:76] _onLineState(): dtr: 0, rts: 1 - //[I][USBSerial.cpp:76] _onLineState(): dtr: 1, rts: 1 - //[I][USBSerial.cpp:76] _onLineState(): dtr: 1, rts: 0 - //[I][USBSerial.cpp:76] _onLineState(): dtr: 0, rts: 0 log_d("CDC RESET: itf: %u, dtr: %u, rts: %u, state: %u", itf, dtr, rts, lineState); } diff --git a/tools/sdk/esp32s2/lib/libtinyusb.a b/tools/sdk/esp32s2/lib/libtinyusb.a index 4704da611f78db513bd2c2f687037e1450b1b1b9..1d9ca88e3308096d4de25a5bc2ce3d2f547ac0fc 100644 GIT binary patch delta 32381 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 VP9J-FP9H~mP9Nv?oIb9EM*t+YN<{zw delta 32662 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