diff --git a/boards.txt b/boards.txt index 04d56c5bc..b39c070e8 100755 --- a/boards.txt +++ b/boards.txt @@ -1,4 +1,5 @@ menu.UploadSpeed=Upload Speed +menu.USBMode=USB Mode menu.CDCOnBoot=USB CDC On Boot menu.MSCOnBoot=USB Firmware MSC On Boot menu.DFUOnBoot=USB DFU On Boot @@ -43,6 +44,7 @@ esp32s3.build.core=esp32 esp32s3.build.variant=esp32s3 esp32s3.build.board=ESP32S3_DEV +esp32s3.build.usb_mode=1 esp32s3.build.cdc_on_boot=0 esp32s3.build.msc_on_boot=0 esp32s3.build.dfu_on_boot=0 @@ -66,6 +68,11 @@ esp32s3.menu.EventsCore.1.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=1 esp32s3.menu.EventsCore.0=Core 0 esp32s3.menu.EventsCore.0.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=0 +esp32s3.menu.USBMode.hwcdc=Hardware CDC and JTAG +esp32s3.menu.USBMode.hwcdc.build.usb_mode=1 +esp32s3.menu.USBMode.default=USB-OTG +esp32s3.menu.USBMode.default.build.usb_mode=0 + esp32s3.menu.CDCOnBoot.default=Disabled esp32s3.menu.CDCOnBoot.default.build.cdc_on_boot=0 esp32s3.menu.CDCOnBoot.cdc=Enabled @@ -73,12 +80,12 @@ esp32s3.menu.CDCOnBoot.cdc.build.cdc_on_boot=1 esp32s3.menu.MSCOnBoot.default=Disabled esp32s3.menu.MSCOnBoot.default.build.msc_on_boot=0 -esp32s3.menu.MSCOnBoot.msc=Enabled +esp32s3.menu.MSCOnBoot.msc=Enabled (Requires USB-OTG Mode) esp32s3.menu.MSCOnBoot.msc.build.msc_on_boot=1 esp32s3.menu.DFUOnBoot.default=Disabled esp32s3.menu.DFUOnBoot.default.build.dfu_on_boot=0 -esp32s3.menu.DFUOnBoot.dfu=Enabled +esp32s3.menu.DFUOnBoot.dfu=Enabled (Requires USB-OTG Mode) esp32s3.menu.DFUOnBoot.dfu.build.dfu_on_boot=1 esp32s3.menu.UploadMode.default=UART0 diff --git a/cores/esp32/HWCDC.cpp b/cores/esp32/HWCDC.cpp index 99ce73607..c3db500c8 100644 --- a/cores/esp32/HWCDC.cpp +++ b/cores/esp32/HWCDC.cpp @@ -167,7 +167,8 @@ void HWCDC::begin(unsigned long baud) setRxBufferSize(256);//default if not preset setTxBufferSize(256);//default if not preset - usb_serial_jtag_ll_clr_intsts_mask(USB_SERIAL_JTAG_INTR_SERIAL_IN_EMPTY | USB_SERIAL_JTAG_INTR_SERIAL_OUT_RECV_PKT | USB_SERIAL_JTAG_INTR_BUS_RESET); + usb_serial_jtag_ll_disable_intr_mask(USB_SERIAL_JTAG_LL_INTR_MASK); + usb_serial_jtag_ll_clr_intsts_mask(USB_SERIAL_JTAG_LL_INTR_MASK); usb_serial_jtag_ll_ena_intr_mask(USB_SERIAL_JTAG_INTR_SERIAL_IN_EMPTY | USB_SERIAL_JTAG_INTR_SERIAL_OUT_RECV_PKT | USB_SERIAL_JTAG_INTR_BUS_RESET); if(!intr_handle && esp_intr_alloc(ETS_USB_SERIAL_JTAG_INTR_SOURCE, 0, hw_cdc_isr_handler, NULL, &intr_handle) != ESP_OK){ isr_log_e("HW USB CDC failed to init interrupts"); @@ -179,7 +180,7 @@ void HWCDC::begin(unsigned long baud) void HWCDC::end() { //Disable tx/rx interrupt. - usb_serial_jtag_ll_disable_intr_mask(USB_SERIAL_JTAG_INTR_SERIAL_IN_EMPTY | USB_SERIAL_JTAG_INTR_SERIAL_OUT_RECV_PKT | USB_SERIAL_JTAG_INTR_BUS_RESET); + usb_serial_jtag_ll_disable_intr_mask(USB_SERIAL_JTAG_LL_INTR_MASK); esp_intr_free(intr_handle); intr_handle = NULL; if(tx_lock != NULL) { @@ -379,7 +380,7 @@ void HWCDC::setDebugOutput(bool en) } } -#if ARDUINO_HW_CDC_ON_BOOT //Serial used for USB CDC +#if ARDUINO_USB_CDC_ON_BOOT && ARDUINO_USB_MODE //Serial used for USB CDC HWCDC Serial; #else HWCDC USBSerial; diff --git a/cores/esp32/HWCDC.h b/cores/esp32/HWCDC.h index 528f528db..7a92a68af 100644 --- a/cores/esp32/HWCDC.h +++ b/cores/esp32/HWCDC.h @@ -98,7 +98,7 @@ public: }; -#if ARDUINO_HW_CDC_ON_BOOT //Serial used for USB CDC +#if ARDUINO_USB_CDC_ON_BOOT && ARDUINO_USB_MODE//Serial used for USB CDC extern HWCDC Serial; #else extern HWCDC USBSerial; diff --git a/cores/esp32/HardwareSerial.cpp b/cores/esp32/HardwareSerial.cpp index 4e390b276..96cc603fd 100644 --- a/cores/esp32/HardwareSerial.cpp +++ b/cores/esp32/HardwareSerial.cpp @@ -80,8 +80,6 @@ void serialEvent2(void) {} #if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL) #if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC HardwareSerial Serial0(0); -#elif ARDUINO_HW_CDC_ON_BOOT -HardwareSerial Serial0(0); #else HardwareSerial Serial(0); #endif @@ -96,8 +94,6 @@ void serialEventRun(void) { #if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC if(Serial0.available()) serialEvent(); -#elif ARDUINO_HW_CDC_ON_BOOT - if(Serial0.available()) serialEvent(); #else if(Serial.available()) serialEvent(); #endif diff --git a/cores/esp32/HardwareSerial.h b/cores/esp32/HardwareSerial.h index 796412c8c..59c4da591 100644 --- a/cores/esp32/HardwareSerial.h +++ b/cores/esp32/HardwareSerial.h @@ -123,10 +123,10 @@ extern void serialEventRun(void) __attribute__((weak)); #define ARDUINO_USB_CDC_ON_BOOT 0 #endif #if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC +#if !ARDUINO_USB_MODE #include "USB.h" #include "USBCDC.h" -extern HardwareSerial Serial0; -#elif ARDUINO_HW_CDC_ON_BOOT +#endif extern HardwareSerial Serial0; #else extern HardwareSerial Serial; diff --git a/cores/esp32/USBCDC.cpp b/cores/esp32/USBCDC.cpp index a7b75eada..f9623ce5d 100644 --- a/cores/esp32/USBCDC.cpp +++ b/cores/esp32/USBCDC.cpp @@ -412,7 +412,7 @@ USBCDC::operator bool() const return connected; } -#if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC +#if ARDUINO_USB_CDC_ON_BOOT && !ARDUINO_USB_MODE //Serial used for USB CDC USBCDC Serial(0); #endif diff --git a/cores/esp32/USBCDC.h b/cores/esp32/USBCDC.h index 3dfe7d9e6..4d706e897 100644 --- a/cores/esp32/USBCDC.h +++ b/cores/esp32/USBCDC.h @@ -134,7 +134,7 @@ protected: }; -#if ARDUINO_USB_CDC_ON_BOOT //Serial used for USB CDC +#if ARDUINO_USB_CDC_ON_BOOT && !ARDUINO_USB_MODE //Serial used for USB CDC extern USBCDC Serial; #endif diff --git a/cores/esp32/main.cpp b/cores/esp32/main.cpp index f4e798448..27b92948d 100644 --- a/cores/esp32/main.cpp +++ b/cores/esp32/main.cpp @@ -2,7 +2,7 @@ #include "freertos/task.h" #include "esp_task_wdt.h" #include "Arduino.h" -#if (ARDUINO_USB_CDC_ON_BOOT|ARDUINO_USB_MSC_ON_BOOT|ARDUINO_USB_DFU_ON_BOOT) +#if (ARDUINO_USB_CDC_ON_BOOT|ARDUINO_USB_MSC_ON_BOOT|ARDUINO_USB_DFU_ON_BOOT) && !ARDUINO_USB_MODE #include "USB.h" #if ARDUINO_USB_MSC_ON_BOOT #include "FirmwareMSC.h" @@ -54,16 +54,16 @@ void loopTask(void *pvParameters) extern "C" void app_main() { -#if ARDUINO_USB_CDC_ON_BOOT +#if ARDUINO_USB_CDC_ON_BOOT && !ARDUINO_USB_MODE Serial.begin(); #endif -#if ARDUINO_USB_MSC_ON_BOOT +#if ARDUINO_USB_MSC_ON_BOOT && !ARDUINO_USB_MODE MSC_Update.begin(); #endif -#if ARDUINO_USB_DFU_ON_BOOT +#if ARDUINO_USB_DFU_ON_BOOT && !ARDUINO_USB_MODE USB.enableDFU(); #endif -#if ARDUINO_USB_ON_BOOT +#if ARDUINO_USB_ON_BOOT && !ARDUINO_USB_MODE USB.begin(); #endif loopTaskWDTEnabled = false; diff --git a/platform.txt b/platform.txt index 1cdfe83a1..7be1e3a7c 100644 --- a/platform.txt +++ b/platform.txt @@ -46,7 +46,7 @@ compiler.cpp.flags.esp32s3=-mlongcalls -ffunction-sections -fdata-sections -Wno- compiler.S.flags.esp32s3=-ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -x assembler-with-cpp -MMD -c compiler.c.elf.flags.esp32s3=-T memory.ld -T sections.ld -T esp32s3.rom.ld -T esp32s3.rom.api.ld -T esp32s3.rom.libgcc.ld -T esp32s3.rom.newlib.ld -T esp32s3.rom.version.ld -T esp32s3.peripherals.ld -mlongcalls -Wl,--cref -Wl,--gc-sections -fno-rtti -fno-lto -u _Z5setupv -u _Z4loopv -u esp_app_desc -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u ld_include_highint_hdl -u start_app -u start_app_other_cores -u __ubsan_include -Wl,--wrap=longjmp -u __assert_func -u vfs_include_syscalls_impl -Wl,--undefined=uxTopUsedPriority -u app_main -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -u __cxa_guard_dummy compiler.ar.flags.esp32s3=cr -build.extra_flags.esp32s3=-DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} -DARDUINO_USB_MSC_ON_BOOT={build.msc_on_boot} -DARDUINO_USB_DFU_ON_BOOT={build.dfu_on_boot} +build.extra_flags.esp32s3=-DARDUINO_USB_MODE={build.usb_mode} -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} -DARDUINO_USB_MSC_ON_BOOT={build.msc_on_boot} -DARDUINO_USB_DFU_ON_BOOT={build.dfu_on_boot} # # ESP32S3 Support End # @@ -61,7 +61,7 @@ compiler.cpp.flags.esp32s2=-mlongcalls -ffunction-sections -fdata-sections -Wno- compiler.S.flags.esp32s2=-ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -x assembler-with-cpp -MMD -c compiler.c.elf.flags.esp32s2=-T memory.ld -T sections.ld -T esp32s2.rom.ld -T esp32s2.rom.api.ld -T esp32s2.rom.libgcc.ld -T esp32s2.rom.newlib-funcs.ld -T esp32s2.rom.newlib-data.ld -T esp32s2.rom.spiflash.ld -T esp32s2.peripherals.ld -mlongcalls -Wl,--cref -Wl,--gc-sections -fno-rtti -fno-lto -u _Z5setupv -u _Z4loopv -u esp_app_desc -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u ld_include_highint_hdl -u start_app -u __ubsan_include -Wl,--wrap=longjmp -u __assert_func -u vfs_include_syscalls_impl -Wl,--undefined=uxTopUsedPriority -u app_main -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -u __cxa_guard_dummy compiler.ar.flags.esp32s2=cr -build.extra_flags.esp32s2=-DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} -DARDUINO_USB_MSC_ON_BOOT={build.msc_on_boot} -DARDUINO_USB_DFU_ON_BOOT={build.dfu_on_boot} +build.extra_flags.esp32s2=-DARDUINO_USB_MODE=0 -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} -DARDUINO_USB_MSC_ON_BOOT={build.msc_on_boot} -DARDUINO_USB_DFU_ON_BOOT={build.dfu_on_boot} # # ESP32S2 Support End # @@ -76,7 +76,7 @@ compiler.cpp.flags.esp32c3=-march=rv32imc -ffunction-sections -fdata-sections -W compiler.S.flags.esp32c3=-ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Wno-error=format= -nostartfiles -Wno-format -Os -freorder-blocks -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -x assembler-with-cpp -MMD -c compiler.c.elf.flags.esp32c3=-T memory.ld -T sections.ld -T esp32c3.rom.ld -T esp32c3.rom.api.ld -T esp32c3.rom.libgcc.ld -T esp32c3.rom.newlib.ld -T esp32c3.rom.version.ld -T esp32c3.rom.eco3.ld -T esp32c3.peripherals.ld -nostartfiles -march=rv32imc --specs=nosys.specs -Wl,--cref -Wl,--gc-sections -fno-rtti -fno-lto -u _Z5setupv -u _Z4loopv -u esp_app_desc -u pthread_include_pthread_impl -u pthread_include_pthread_cond_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u start_app -u __ubsan_include -u __assert_func -u vfs_include_syscalls_impl -Wl,--undefined=uxTopUsedPriority -u app_main -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -Wl,--wrap=_Unwind_SetEnableExceptionFdeSorting -Wl,--wrap=__register_frame_info_bases -Wl,--wrap=__register_frame_info -Wl,--wrap=__register_frame -Wl,--wrap=__register_frame_info_table_bases -Wl,--wrap=__register_frame_info_table -Wl,--wrap=__register_frame_table -Wl,--wrap=__deregister_frame_info_bases -Wl,--wrap=__deregister_frame_info -Wl,--wrap=_Unwind_Find_FDE -Wl,--wrap=_Unwind_GetGR -Wl,--wrap=_Unwind_GetCFA -Wl,--wrap=_Unwind_GetIP -Wl,--wrap=_Unwind_GetIPInfo -Wl,--wrap=_Unwind_GetRegionStart -Wl,--wrap=_Unwind_GetDataRelBase -Wl,--wrap=_Unwind_GetTextRelBase -Wl,--wrap=_Unwind_SetIP -Wl,--wrap=_Unwind_SetGR -Wl,--wrap=_Unwind_GetLanguageSpecificData -Wl,--wrap=_Unwind_FindEnclosingFunction -Wl,--wrap=_Unwind_Resume -Wl,--wrap=_Unwind_RaiseException -Wl,--wrap=_Unwind_DeleteException -Wl,--wrap=_Unwind_ForcedUnwind -Wl,--wrap=_Unwind_Resume_or_Rethrow -Wl,--wrap=_Unwind_Backtrace -Wl,--wrap=__cxa_call_unexpected -Wl,--wrap=__gxx_personality_v0 -u __cxa_guard_dummy -u __cxx_fatal_exception compiler.ar.flags.esp32c3=cr -build.extra_flags.esp32c3=-DARDUINO_HW_CDC_ON_BOOT={build.cdc_on_boot} +build.extra_flags.esp32c3=-DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT={build.cdc_on_boot} # # ESP32C3 Support End #