From 561502c2da3d06e62db84a0ebedce1bcb5a5d491 Mon Sep 17 00:00:00 2001 From: Graham Sanderson Date: Wed, 2 Jun 2021 13:04:08 -0500 Subject: [PATCH] Move to Tinyusb 0.10.0 (still with RP patches) (#462) Most build related items have moved into /hw/bsp/rp2040/family.cmake which is now the source of truth force merging as same code save submodule was already reviewed --- CMakeLists.txt | 4 + lib/tinyusb | 2 +- pico_sdk_init.cmake | 24 ++++-- .../hardware_uart/include/hardware/uart.h | 6 ++ .../pico_stdio_usb/reset_interface.c | 12 ++- src/rp2_common/tinyusb/CMakeLists.txt | 83 +++---------------- 6 files changed, 46 insertions(+), 85 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b65d8bf..c270649 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,5 +50,9 @@ if (NOT TARGET _pico_sdk_inclusion_marker) # add docs at the end, as we gather documentation dirs as we go add_subdirectory(docs) + + if (NOT PICO_SDK_TOP_LEVEL_PROJECT) + pico_promote_common_scope_vars() + endif() endif() diff --git a/lib/tinyusb b/lib/tinyusb index 11c23f8..fea5cba 160000 --- a/lib/tinyusb +++ b/lib/tinyusb @@ -1 +1 @@ -Subproject commit 11c23f88bf42f64ce14b8a7b0b2a4e207dc4dd12 +Subproject commit fea5cbaf74a033d3f0c462b6bf2d334a67f6a732 diff --git a/pico_sdk_init.cmake b/pico_sdk_init.cmake index b3e054c..f6b6f81 100644 --- a/pico_sdk_init.cmake +++ b/pico_sdk_init.cmake @@ -53,6 +53,7 @@ if (NOT TARGET _pico_sdk_pre_init_marker) message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)") endif() add_subdirectory(${PICO_SDK_PATH} pico-sdk) + pico_is_top_level_project(ISTOP) endmacro() macro(add_sub_list_dirs var) @@ -70,11 +71,24 @@ if (NOT TARGET _pico_sdk_pre_init_marker) endforeach() endmacro() + macro(pico_register_common_scope_var NAME) + if (NOT ${NAME} IN_LIST PICO_PROMOTE_COMMON_SCOPE_VARS) + list(APPEND PICO_PROMOTE_COMMON_SCOPE_VARS ${NAME}) + endif() + endmacro() + + set(PICO_PROMOTE_COMMON_SCOPE_VARS + PICO_INCLUDE_DIRS + PICO_SDK_POST_LIST_DIRS + PICO_SDK_POST_LIST_FILES + PICO_CONFIG_HEADER_FILES + PICO_RP2040_CONFIG_HEADER_FILES + ) + macro(pico_promote_common_scope_vars) - set(PICO_INCLUDE_DIRS ${PICO_INCLUDE_DIRS} PARENT_SCOPE) - set(PICO_SDK_POST_LIST_DIRS ${PICO_SDK_POST_LIST_DIRS} PARENT_SCOPE) - set(PICO_SDK_POST_LIST_FILES ${PICO_SDK_POST_LIST_FILES} PARENT_SCOPE) - set(PICO_CONFIG_HEADER_FILES ${PICO_CONFIG_HEADER_FILES} PARENT_SCOPE) - set(PICO_RP2040_CONFIG_HEADER_FILES ${PICO_RP2040_CONFIG_HEADER_FILES} PARENT_SCOPE) + set(PICO_PROMOTE_COMMON_SCOPE_VARS ${PICO_PROMOTE_COMMON_SCOPE_VARS} PARENT_SCOPE) + foreach(VAR IN LISTS PICO_PROMOTE_COMMON_SCOPE_VARS) + SET(${VAR} ${${VAR}} PARENT_SCOPE) + endforeach() endmacro() endif() diff --git a/src/rp2_common/hardware_uart/include/hardware/uart.h b/src/rp2_common/hardware_uart/include/hardware/uart.h index d37c1b7..02fdd1f 100644 --- a/src/rp2_common/hardware_uart/include/hardware/uart.h +++ b/src/rp2_common/hardware_uart/include/hardware/uart.h @@ -101,6 +101,12 @@ static inline uint uart_get_index(uart_inst_t *uart) { return uart == uart1 ? 1 : 0; } +static inline uart_inst_t *uart_get_instance(uint instance) { + static_assert(NUM_UARTS == 2, ""); + invalid_params_if(UART, instance >= NUM_UARTS); + return instance ? uart1 : uart0; +} + static inline uart_hw_t *uart_get_hw(uart_inst_t *uart) { uart_get_index(uart); // check it is a hw uart return (uart_hw_t *)uart; diff --git a/src/rp2_common/pico_stdio_usb/reset_interface.c b/src/rp2_common/pico_stdio_usb/reset_interface.c index ccd5758..2f2e72b 100644 --- a/src/rp2_common/pico_stdio_usb/reset_interface.c +++ b/src/rp2_common/pico_stdio_usb/reset_interface.c @@ -38,7 +38,10 @@ static uint16_t resetd_open(uint8_t __unused rhport, tusb_desc_interface_t const } // Support for parameterized reset via vendor interface control request -static bool resetd_control_request_cb(uint8_t __unused rhport, tusb_control_request_t const *request) { +static bool resetd_control_xfer_cb(uint8_t rhport, uint8_t stage, tusb_control_request_t const * request) { + // nothing to do with DATA & ACK stage + if (stage != CONTROL_STAGE_SETUP) return true; + if (request->wIndex == itf_num) { #if PICO_STDIO_USB_RESET_INTERFACE_SUPPORT_RESET_TO_BOOTSEL @@ -69,10 +72,6 @@ static bool resetd_control_request_cb(uint8_t __unused rhport, tusb_control_requ return false; } -static bool resetd_control_complete_cb(uint8_t __unused rhport, tusb_control_request_t __unused const *request) { - return true; -} - static bool resetd_xfer_cb(uint8_t __unused rhport, uint8_t __unused ep_addr, xfer_result_t __unused result, uint32_t __unused xferred_bytes) { return true; } @@ -85,8 +84,7 @@ static usbd_class_driver_t const _resetd_driver = .init = resetd_init, .reset = resetd_reset, .open = resetd_open, - .control_request = resetd_control_request_cb, - .control_complete = resetd_control_complete_cb, + .control_xfer_cb = resetd_control_xfer_cb, .xfer_cb = resetd_xfer_cb, .sof = NULL }; diff --git a/src/rp2_common/tinyusb/CMakeLists.txt b/src/rp2_common/tinyusb/CMakeLists.txt index f4dea1c..c4d238d 100644 --- a/src/rp2_common/tinyusb/CMakeLists.txt +++ b/src/rp2_common/tinyusb/CMakeLists.txt @@ -17,93 +17,32 @@ endif() if (EXISTS ${PICO_TINYUSB_PATH}/${TINYUSB_TEST_PATH}) message("TinyUSB available at ${PICO_TINYUSB_PATH}/${TINYUSB_TEST_PATH}; adding USB support.") + pico_register_common_scope_var(PICO_TINYUSB_PATH) + + set(BOARD pico_sdk) + include(${PICO_TINYUSB_PATH}/hw/bsp/rp2040/family.cmake) + add_library(tinyusb_common INTERFACE) - target_link_libraries(tinyusb_common INTERFACE - hardware_structs - hardware_irq - hardware_resets - pico_sync - ) - - target_sources(tinyusb_common INTERFACE - ${PICO_TINYUSB_PATH}/src/tusb.c - ${PICO_TINYUSB_PATH}/src/common/tusb_fifo.c - ) - - set(TINYUSB_DEBUG_LEVEL 0) - if (CMAKE_BUILD_TYPE STREQUAL "Debug") - message("Compiling TinyUSB with CFG_TUSB_DEBUG=1") - set(TINYUSB_DEBUG_LEVEL 1) - endif () - - target_compile_definitions(tinyusb_common INTERFACE - CFG_TUSB_MCU=OPT_MCU_RP2040 - CFG_TUSB_OS=OPT_OS_PICO #seems examples are hard coded to OPT_OS_NONE - CFG_TUSB_DEBUG=${TINYUSB_DEBUG_LEVEL} - ) - - target_include_directories(tinyusb_common INTERFACE - ${PICO_TINYUSB_PATH}/src - ${PICO_TINYUSB_PATH}/src/common - ${PICO_TINYUSB_PATH}/hw - ) + target_link_libraries(tinyusb_common INTERFACE tinyusb_common_base) add_library(tinyusb_device_unmarked INTERFACE) - target_sources(tinyusb_device_unmarked INTERFACE - ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/dcd_rp2040.c - ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/rp2040_usb.c - ${PICO_TINYUSB_PATH}/src/device/usbd.c - ${PICO_TINYUSB_PATH}/src/device/usbd_control.c - ${PICO_TINYUSB_PATH}/src/class/audio/audio_device.c - ${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c - ${PICO_TINYUSB_PATH}/src/class/dfu/dfu_rt_device.c - ${PICO_TINYUSB_PATH}/src/class/hid/hid_device.c - ${PICO_TINYUSB_PATH}/src/class/midi/midi_device.c - ${PICO_TINYUSB_PATH}/src/class/msc/msc_device.c - ${PICO_TINYUSB_PATH}/src/class/net/net_device.c - ${PICO_TINYUSB_PATH}/src/class/usbtmc/usbtmc_device.c - ${PICO_TINYUSB_PATH}/src/class/vendor/vendor_device.c - ) - + target_link_libraries(tinyusb_device_unmarked INTERFACE tinyusb_device_base) target_compile_definitions(tinyusb_device_unmarked INTERFACE # off by default note TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX defaults from PICO_RP2040_USB_DEVICE_ENUMERATION_FIX # TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 ) # unmarked version used by stdio USB - target_link_libraries(tinyusb_device_unmarked INTERFACE tinyusb_common pico_fix_rp2040_usb_device_enumeration) + target_link_libraries(tinyusb_device_unmarked INTERFACE tinyusb_common pico_fix_rp2040_usb_device_enumeration tinyusb_device_base) pico_add_impl_library(tinyusb_device) target_link_libraries(tinyusb_device INTERFACE tinyusb_device_unmarked) - target_compile_definitions(tinyusb_device INTERFACE - RP2040_USB_DEVICE_MODE=1 #define is used by tinyusb still - ) pico_add_impl_library(tinyusb_host) - target_sources(tinyusb_host INTERFACE - ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/hcd_rp2040.c - ${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/rp2040_usb.c - ${PICO_TINYUSB_PATH}/src/host/usbh.c - ${PICO_TINYUSB_PATH}/src/host/usbh_control.c - ${PICO_TINYUSB_PATH}/src/host/hub.c - ${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c - ${PICO_TINYUSB_PATH}/src/class/hid/hid_host.c - ${PICO_TINYUSB_PATH}/src/class/msc/msc_host.c - ${PICO_TINYUSB_PATH}/src/class/vendor/vendor_host.c - ) - - # Sometimes have to do host specific actions in mostly - # common functions - target_compile_definitions(tinyusb_host INTERFACE - RP2040_USB_HOST_MODE=1 #define is used by tinyusb still - ) - - target_link_libraries(tinyusb_host INTERFACE tinyusb_common) + target_link_libraries(tinyusb_host INTERFACE tinyusb_host_base tinyusb_common) pico_add_impl_library(tinyusb_board) - target_sources(tinyusb_board INTERFACE - ${PICO_TINYUSB_PATH}/hw/bsp/raspberry_pi_pico/board_raspberry_pi_pico.c - ) + target_link_libraries(tinyusb_board INTERFACE tinyusb_bsp) + pico_promote_common_scope_vars() endif() -