mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 03:30:14 +01:00
esp32: Fix USB deinit/reinit path via soft reset.
Fixes problems with USB-CDC state after soft reset if USBDevice has been active with the default USB-CDC driver also enabled. This also brings ESP32 behaviour in line with RP2 and other ports, where boot.py is executed before the runtime USB device is initialised. This allows setting up a custom USB device in boot.py. There is still a bug here, because calling tud_disconnect() doesn't cause any UNPLUG or BUS_RESET events to arrive from TinyUSB - which means the USB device state stays out of sync until we call mp_usbd_init() again... This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au> Signed-off-by: Angus Gratton <angus@redyak.com.au>
This commit is contained in:
@@ -107,7 +107,7 @@ void mp_task(void *pvParameter) {
|
||||
#if MICROPY_HW_ESP_USB_SERIAL_JTAG
|
||||
usb_serial_jtag_init();
|
||||
#elif MICROPY_HW_ENABLE_USBDEV
|
||||
usb_init();
|
||||
usb_phy_init();
|
||||
#endif
|
||||
#if MICROPY_HW_ENABLE_UART_REPL
|
||||
uart_stdout_init();
|
||||
@@ -145,6 +145,11 @@ soft_reset:
|
||||
// run boot-up scripts
|
||||
pyexec_frozen_module("_boot.py", false);
|
||||
int ret = pyexec_file_if_exists("boot.py");
|
||||
|
||||
#if MICROPY_HW_ENABLE_USBDEV
|
||||
mp_usbd_init();
|
||||
#endif
|
||||
|
||||
if (ret & PYEXEC_FORCED_EXIT) {
|
||||
goto soft_reset_exit;
|
||||
}
|
||||
@@ -193,7 +198,7 @@ soft_reset_exit:
|
||||
mp_thread_deinit();
|
||||
#endif
|
||||
|
||||
#if MICROPY_HW_ENABLE_USB_RUNTIME_DEVICE
|
||||
#if MICROPY_HW_ENABLE_USBDEV
|
||||
mp_usbd_deinit();
|
||||
#endif
|
||||
|
||||
@@ -219,6 +224,7 @@ soft_reset_exit:
|
||||
|
||||
mp_deinit();
|
||||
fflush(stdout);
|
||||
|
||||
goto soft_reset;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user