esp32: Use shared/tinyusb integration for S2 and S3 USB.
Uses newer TinyUSB synopsys/dwc2 driver for esp32s2 and esp32s3 rather than
the IDF tinyusb component. This allows re-use of other tinyusb integration
code and features shared between ports.
Signed-off-by: Andrew Leech <andrew@alelec.net>
diff --git a/ports/esp32/esp32_common.cmake b/ports/esp32/esp32_common.cmake
index 7c50896..e59e2dc 100644
--- a/ports/esp32/esp32_common.cmake
+++ b/ports/esp32/esp32_common.cmake
@@ -53,6 +53,37 @@
${MICROPY_DIR}/drivers/dht/dht.c
)
+string(CONCAT GIT_SUBMODULES "${GIT_SUBMODULES} " lib/tinyusb)
+if(MICROPY_PY_TINYUSB)
+ set(TINYUSB_SRC "${MICROPY_DIR}/lib/tinyusb/src")
+ string(TOUPPER OPT_MCU_${IDF_TARGET} tusb_mcu)
+
+ list(APPEND MICROPY_DEF_TINYUSB
+ CFG_TUSB_MCU=${tusb_mcu}
+ )
+
+ list(APPEND MICROPY_SOURCE_TINYUSB
+ ${TINYUSB_SRC}/tusb.c
+ ${TINYUSB_SRC}/common/tusb_fifo.c
+ ${TINYUSB_SRC}/device/usbd.c
+ ${TINYUSB_SRC}/device/usbd_control.c
+ ${TINYUSB_SRC}/class/cdc/cdc_device.c
+ ${TINYUSB_SRC}/portable/synopsys/dwc2/dcd_dwc2.c
+ ${MICROPY_DIR}/shared/tinyusb/mp_usbd.c
+ ${MICROPY_DIR}/shared/tinyusb/mp_usbd_cdc.c
+ ${MICROPY_DIR}/shared/tinyusb/mp_usbd_descriptor.c
+ )
+
+ list(APPEND MICROPY_INC_TINYUSB
+ ${TINYUSB_SRC}
+ ${MICROPY_DIR}/shared/tinyusb/
+ )
+
+ list(APPEND MICROPY_LINK_TINYUSB
+ -Wl,--wrap=dcd_event_handler
+ )
+endif()
+
list(APPEND MICROPY_SOURCE_PORT
panichandler.c
adc.c
@@ -100,6 +131,7 @@
${MICROPY_SOURCE_LIB}
${MICROPY_SOURCE_PORT}
${MICROPY_SOURCE_BOARD}
+ ${MICROPY_SOURCE_TINYUSB}
)
list(APPEND IDF_COMPONENTS
@@ -134,6 +166,7 @@
soc
spi_flash
ulp
+ usb
vfs
)
@@ -147,9 +180,11 @@
${MICROPY_SOURCE_DRIVERS}
${MICROPY_SOURCE_PORT}
${MICROPY_SOURCE_BOARD}
+ ${MICROPY_SOURCE_TINYUSB}
INCLUDE_DIRS
${MICROPY_INC_CORE}
${MICROPY_INC_USERMOD}
+ ${MICROPY_INC_TINYUSB}
${MICROPY_PORT_DIR}
${MICROPY_BOARD_DIR}
${CMAKE_BINARY_DIR}
@@ -171,6 +206,7 @@
target_compile_definitions(${MICROPY_TARGET} PUBLIC
${MICROPY_DEF_CORE}
${MICROPY_DEF_BOARD}
+ ${MICROPY_DEF_TINYUSB}
MICROPY_ESP_IDF_4=1
MICROPY_VFS_FAT=1
MICROPY_VFS_LFS2=1
@@ -186,6 +222,10 @@
-Wno-missing-field-initializers
)
+target_link_options(${MICROPY_TARGET} PUBLIC
+ ${MICROPY_LINK_TINYUSB}
+)
+
# Additional include directories needed for private NimBLE headers.
target_include_directories(${MICROPY_TARGET} PUBLIC
${IDF_PATH}/components/bt/host/nimble/nimble