mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-23 22:43:49 +00:00
Merge pull request #2127 from hathach/rp2040-cmake-cleanup
Rp2040 cmake cleanup
This commit is contained in:
commit
bc0d6c7e92
2
.idea/cmake.xml
generated
2
.idea/cmake.xml
generated
@ -25,7 +25,7 @@
|
||||
</envs>
|
||||
</ADDITIONAL_GENERATION_ENVIRONMENT>
|
||||
</configuration>
|
||||
<configuration PROFILE_NAME="rp2040" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico" />
|
||||
<configuration PROFILE_NAME="rp2040" ENABLED="true" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=raspberry_pi_pico -DLOG=2 -DLOGGER=RTT" />
|
||||
<configuration PROFILE_NAME="rt1010 evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1010_evk" />
|
||||
<configuration PROFILE_NAME="rt1060 evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1060_evk" />
|
||||
<configuration PROFILE_NAME="rt1064 evk" ENABLED="false" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DBOARD=mimxrt1064_evk" />
|
||||
|
@ -93,12 +93,12 @@ bool __no_inline_not_in_flash_func(get_bootsel_button)(void) {
|
||||
|
||||
static void stdio_rtt_write (const char *buf, int length)
|
||||
{
|
||||
SEGGER_RTT_Write(0, buf, length);
|
||||
SEGGER_RTT_Write(0, buf, (unsigned) length);
|
||||
}
|
||||
|
||||
static int stdio_rtt_read (char *buf, int len)
|
||||
{
|
||||
return SEGGER_RTT_Read(0, buf, len);
|
||||
return (int) SEGGER_RTT_Read(0, buf, (unsigned) len);
|
||||
}
|
||||
|
||||
static stdio_driver_t stdio_rtt =
|
||||
|
@ -1,337 +1,333 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
if (NOT TARGET _rp2040_family_inclusion_marker)
|
||||
add_library(_rp2040_family_inclusion_marker INTERFACE)
|
||||
include_guard()
|
||||
|
||||
if (NOT BOARD)
|
||||
message("BOARD not specified, defaulting to pico_sdk")
|
||||
set(BOARD pico_sdk)
|
||||
endif()
|
||||
|
||||
# add the SDK in case we are standalone tinyusb example (noop if already present)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake)
|
||||
|
||||
# include basic family CMake functionality
|
||||
set(FAMILY_MCUS RP2040)
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
|
||||
|
||||
# TOP is absolute path to root directory of TinyUSB git repo
|
||||
#set(TOP "${CMAKE_CURRENT_LIST_DIR}/../../..")
|
||||
#get_filename_component(TOP "${TOP}" REALPATH)
|
||||
|
||||
if (NOT PICO_TINYUSB_PATH)
|
||||
set(PICO_TINYUSB_PATH ${TOP})
|
||||
endif()
|
||||
|
||||
if (NOT TINYUSB_OPT_OS)
|
||||
set(TINYUSB_OPT_OS OPT_OS_PICO)
|
||||
endif()
|
||||
|
||||
#------------------------------------
|
||||
# Base config for both device and host; wrapped by SDK's tinyusb_common
|
||||
#------------------------------------
|
||||
add_library(tinyusb_common_base INTERFACE)
|
||||
|
||||
target_sources(tinyusb_common_base INTERFACE
|
||||
${TOP}/src/tusb.c
|
||||
${TOP}/src/common/tusb_fifo.c
|
||||
)
|
||||
|
||||
target_include_directories(tinyusb_common_base INTERFACE
|
||||
${TOP}/src
|
||||
${TOP}/src/common
|
||||
${TOP}/hw
|
||||
)
|
||||
|
||||
target_link_libraries(tinyusb_common_base INTERFACE
|
||||
hardware_structs
|
||||
hardware_irq
|
||||
hardware_resets
|
||||
pico_sync
|
||||
)
|
||||
|
||||
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_base INTERFACE
|
||||
CFG_TUSB_MCU=OPT_MCU_RP2040
|
||||
CFG_TUSB_OS=${TINYUSB_OPT_OS}
|
||||
#CFG_TUSB_DEBUG=${TINYUSB_DEBUG_LEVEL}
|
||||
)
|
||||
|
||||
#------------------------------------
|
||||
# Base config for device mode; wrapped by SDK's tinyusb_device
|
||||
#------------------------------------
|
||||
add_library(tinyusb_device_base INTERFACE)
|
||||
target_sources(tinyusb_device_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/rp2040/dcd_rp2040.c
|
||||
${TOP}/src/portable/raspberrypi/rp2040/rp2040_usb.c
|
||||
${TOP}/src/device/usbd.c
|
||||
${TOP}/src/device/usbd_control.c
|
||||
${TOP}/src/class/audio/audio_device.c
|
||||
${TOP}/src/class/cdc/cdc_device.c
|
||||
${TOP}/src/class/dfu/dfu_device.c
|
||||
${TOP}/src/class/dfu/dfu_rt_device.c
|
||||
${TOP}/src/class/hid/hid_device.c
|
||||
${TOP}/src/class/midi/midi_device.c
|
||||
${TOP}/src/class/msc/msc_device.c
|
||||
${TOP}/src/class/net/ecm_rndis_device.c
|
||||
${TOP}/src/class/net/ncm_device.c
|
||||
${TOP}/src/class/usbtmc/usbtmc_device.c
|
||||
${TOP}/src/class/vendor/vendor_device.c
|
||||
${TOP}/src/class/video/video_device.c
|
||||
)
|
||||
|
||||
#------------------------------------
|
||||
# Base config for host mode; wrapped by SDK's tinyusb_host
|
||||
#------------------------------------
|
||||
add_library(tinyusb_host_base INTERFACE)
|
||||
target_sources(tinyusb_host_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/rp2040/hcd_rp2040.c
|
||||
${TOP}/src/portable/raspberrypi/rp2040/rp2040_usb.c
|
||||
${TOP}/src/host/usbh.c
|
||||
${TOP}/src/host/hub.c
|
||||
${TOP}/src/class/cdc/cdc_host.c
|
||||
${TOP}/src/class/hid/hid_host.c
|
||||
${TOP}/src/class/msc/msc_host.c
|
||||
${TOP}/src/class/vendor/vendor_host.c
|
||||
)
|
||||
|
||||
# Sometimes have to do host specific actions in mostly common functions
|
||||
target_compile_definitions(tinyusb_host_base INTERFACE
|
||||
RP2040_USB_HOST_MODE=1
|
||||
)
|
||||
|
||||
#------------------------------------
|
||||
# BSP & Additions
|
||||
#------------------------------------
|
||||
add_library(tinyusb_bsp INTERFACE)
|
||||
target_sources(tinyusb_bsp INTERFACE
|
||||
${TOP}/hw/bsp/rp2040/family.c
|
||||
)
|
||||
# target_include_directories(tinyusb_bsp INTERFACE
|
||||
# ${TOP}/hw/bsp/rp2040)
|
||||
|
||||
# tinyusb_additions will hold our extra settings for examples
|
||||
add_library(tinyusb_additions INTERFACE)
|
||||
|
||||
target_compile_definitions(tinyusb_additions INTERFACE
|
||||
PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1
|
||||
PICO_RP2040_USB_DEVICE_UFRAME_FIX=1
|
||||
)
|
||||
|
||||
if(DEFINED LOG)
|
||||
target_compile_definitions(tinyusb_additions INTERFACE CFG_TUSB_DEBUG=${LOG})
|
||||
endif()
|
||||
|
||||
if(LOGGER STREQUAL "rtt")
|
||||
target_compile_definitions(tinyusb_additions INTERFACE
|
||||
LOGGER_RTT
|
||||
SEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
|
||||
)
|
||||
|
||||
target_sources(tinyusb_additions INTERFACE
|
||||
${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c
|
||||
)
|
||||
|
||||
target_include_directories(tinyusb_additions INTERFACE
|
||||
${TOP}/lib/SEGGER_RTT/RTT
|
||||
)
|
||||
endif()
|
||||
|
||||
#------------------------------------
|
||||
# Functions
|
||||
#------------------------------------
|
||||
|
||||
function(family_configure_target TARGET)
|
||||
pico_add_extra_outputs(${TARGET})
|
||||
pico_enable_stdio_uart(${TARGET} 1)
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib pico_bootsel_via_double_reset tinyusb_board tinyusb_additions)
|
||||
endfunction()
|
||||
|
||||
function(rp2040_family_configure_example_warnings TARGET)
|
||||
if (NOT PICO_TINYUSB_NO_EXAMPLE_WARNINGS)
|
||||
family_add_default_example_warnings(${TARGET})
|
||||
endif()
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
target_compile_options(${TARGET} PRIVATE -Wno-unreachable-code)
|
||||
endif()
|
||||
suppress_tinyusb_warnings()
|
||||
endfunction()
|
||||
|
||||
function(family_configure_device_example TARGET)
|
||||
family_configure_target(${TARGET})
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device)
|
||||
rp2040_family_configure_example_warnings(${TARGET})
|
||||
endfunction()
|
||||
|
||||
function(family_add_pico_pio_usb TARGET)
|
||||
target_link_libraries(${TARGET} PUBLIC tinyusb_pico_pio_usb)
|
||||
endfunction()
|
||||
|
||||
function(family_configure_host_example TARGET)
|
||||
family_configure_target(${TARGET})
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_host)
|
||||
rp2040_family_configure_example_warnings(${TARGET})
|
||||
|
||||
# For rp2040 enable pico-pio-usb
|
||||
if (TARGET tinyusb_pico_pio_usb)
|
||||
# code does not compile with non GCC, or GCC 11.3+
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.3)
|
||||
family_add_pico_pio_usb(${PROJECT})
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(family_configure_dual_usb_example TARGET)
|
||||
family_configure_target(${TARGET})
|
||||
# require tinyusb_pico_pio_usb
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device tinyusb_host tinyusb_pico_pio_usb )
|
||||
rp2040_family_configure_example_warnings(${TARGET})
|
||||
endfunction()
|
||||
|
||||
function(check_and_add_pico_pio_usb_support)
|
||||
# check for pico_generate_pio_header (as depending on environment we may be called before SDK is
|
||||
# initialized in which case it isn't available yet), and only do the initialization once
|
||||
if (COMMAND pico_generate_pio_header AND NOT TARGET tinyusb_pico_pio_usb)
|
||||
#------------------------------------
|
||||
# PIO USB for both host and device
|
||||
#------------------------------------
|
||||
|
||||
if (NOT DEFINED PICO_PIO_USB_PATH)
|
||||
set(PICO_PIO_USB_PATH "${TOP}/hw/mcu/raspberry_pi/Pico-PIO-USB")
|
||||
endif()
|
||||
|
||||
if (EXISTS ${PICO_PIO_USB_PATH}/src/pio_usb.c)
|
||||
add_library(tinyusb_pico_pio_usb INTERFACE)
|
||||
target_sources(tinyusb_device_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c
|
||||
)
|
||||
target_sources(tinyusb_host_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
|
||||
)
|
||||
|
||||
target_sources(tinyusb_pico_pio_usb INTERFACE
|
||||
${PICO_PIO_USB_PATH}/src/pio_usb.c
|
||||
${PICO_PIO_USB_PATH}/src/pio_usb_host.c
|
||||
${PICO_PIO_USB_PATH}/src/pio_usb_device.c
|
||||
${PICO_PIO_USB_PATH}/src/usb_crc.c
|
||||
)
|
||||
|
||||
target_include_directories(tinyusb_pico_pio_usb INTERFACE
|
||||
${PICO_PIO_USB_PATH}/src
|
||||
)
|
||||
|
||||
target_link_libraries(tinyusb_pico_pio_usb INTERFACE
|
||||
hardware_dma
|
||||
hardware_pio
|
||||
pico_multicore
|
||||
)
|
||||
|
||||
target_compile_definitions(tinyusb_pico_pio_usb INTERFACE
|
||||
PIO_USB_USE_TINYUSB
|
||||
)
|
||||
|
||||
pico_generate_pio_header(tinyusb_pico_pio_usb ${PICO_PIO_USB_PATH}/src/usb_tx.pio)
|
||||
pico_generate_pio_header(tinyusb_pico_pio_usb ${PICO_PIO_USB_PATH}/src/usb_rx.pio)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Try to add Pico-PIO_USB support now for the case where this file is included directly
|
||||
# after Pico SDK initialization, but without using the family_ functions (as is the case
|
||||
# when included by the SDK itself)
|
||||
check_and_add_pico_pio_usb_support()
|
||||
|
||||
function(family_initialize_project PROJECT DIR)
|
||||
# call the original version of this function from family_common.cmake
|
||||
_family_initialize_project(${PROJECT} ${DIR})
|
||||
enable_language(C CXX ASM)
|
||||
pico_sdk_init()
|
||||
|
||||
# now re-check for adding Pico-PIO_USB support now SDK is definitely available
|
||||
check_and_add_pico_pio_usb_support()
|
||||
endfunction()
|
||||
|
||||
# This method must be called from the project scope to suppress known warnings in TinyUSB source files
|
||||
function(suppress_tinyusb_warnings)
|
||||
# some of these are pretty silly warnings only occurring in some older GCC versions 9 or prior
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
if (CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
|
||||
set(CONVERSION_WARNING_FILES
|
||||
${PICO_TINYUSB_PATH}/src/tusb.c
|
||||
${PICO_TINYUSB_PATH}/src/common/tusb_fifo.c
|
||||
${PICO_TINYUSB_PATH}/src/device/usbd.c
|
||||
${PICO_TINYUSB_PATH}/src/device/usbd_control.c
|
||||
${PICO_TINYUSB_PATH}/src/host/usbh.c
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c
|
||||
${PICO_TINYUSB_PATH}/src/class/hid/hid_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/hid/hid_host.c
|
||||
${PICO_TINYUSB_PATH}/src/class/audio/audio_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/dfu/dfu_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/dfu/dfu_rt_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/midi/midi_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/usbtmc/usbtmc_device.c
|
||||
${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/hcd_rp2040.c
|
||||
)
|
||||
foreach(SOURCE_FILE IN LISTS CONVERSION_WARNING_FILES)
|
||||
set_source_files_properties(
|
||||
${SOURCE_FILE}
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion")
|
||||
endforeach()
|
||||
endif()
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
|
||||
COMPILE_FLAGS "-Wno-stringop-overflow -Wno-array-bounds")
|
||||
endif()
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion -Wno-cast-qual")
|
||||
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/lwip/src/core/tcp_in.c
|
||||
${PICO_TINYUSB_PATH}/lib/lwip/src/core/tcp_out.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion")
|
||||
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/networking/dnserver.c
|
||||
${PICO_TINYUSB_PATH}/lib/networking/dhserver.c
|
||||
${PICO_TINYUSB_PATH}/lib/networking/rndis_reports.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion -Wno-sign-conversion")
|
||||
|
||||
if (TARGET tinyusb_pico_pio_usb)
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb_device.c
|
||||
${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb.c
|
||||
${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb_host.c
|
||||
${PICO_TINYUSB_PATH}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion -Wno-cast-qual -Wno-attributes")
|
||||
endif()
|
||||
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c
|
||||
COMPILE_FLAGS "-Wno-unreachable-code")
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c
|
||||
COMPILE_FLAGS "-Wno-unreachable-code-fallthrough")
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-cast-qual")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# rp2040 does not support freeRTOS example yet
|
||||
function(family_add_freertos TARGET)
|
||||
endfunction()
|
||||
if (NOT BOARD)
|
||||
message("BOARD not specified, defaulting to pico_sdk")
|
||||
set(BOARD pico_sdk)
|
||||
endif()
|
||||
|
||||
# add the SDK in case we are standalone tinyusb example (noop if already present)
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake)
|
||||
|
||||
# include basic family CMake functionality
|
||||
set(FAMILY_MCUS RP2040)
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
|
||||
|
||||
if (NOT PICO_TINYUSB_PATH)
|
||||
set(PICO_TINYUSB_PATH ${TOP})
|
||||
endif()
|
||||
|
||||
if (NOT TINYUSB_OPT_OS)
|
||||
set(TINYUSB_OPT_OS OPT_OS_PICO)
|
||||
endif()
|
||||
|
||||
#------------------------------------
|
||||
# Base config for both device and host; wrapped by SDK's tinyusb_common
|
||||
#------------------------------------
|
||||
add_library(tinyusb_common_base INTERFACE)
|
||||
|
||||
target_sources(tinyusb_common_base INTERFACE
|
||||
${TOP}/src/tusb.c
|
||||
${TOP}/src/common/tusb_fifo.c
|
||||
)
|
||||
|
||||
target_include_directories(tinyusb_common_base INTERFACE
|
||||
${TOP}/src
|
||||
)
|
||||
|
||||
if(DEFINED LOG)
|
||||
set(TINYUSB_DEBUG_LEVEL ${LOG})
|
||||
elseif (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
message("Compiling TinyUSB with CFG_TUSB_DEBUG=1")
|
||||
set(TINYUSB_DEBUG_LEVEL 1)
|
||||
else ()
|
||||
set(TINYUSB_DEBUG_LEVEL 0)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(tinyusb_common_base INTERFACE
|
||||
CFG_TUSB_MCU=OPT_MCU_RP2040
|
||||
CFG_TUSB_OS=${TINYUSB_OPT_OS}
|
||||
CFG_TUSB_DEBUG=${TINYUSB_DEBUG_LEVEL}
|
||||
)
|
||||
|
||||
target_link_libraries(tinyusb_common_base INTERFACE
|
||||
hardware_structs
|
||||
hardware_irq
|
||||
hardware_resets
|
||||
pico_sync
|
||||
)
|
||||
|
||||
#------------------------------------
|
||||
# Base config for device mode; wrapped by SDK's tinyusb_device
|
||||
#------------------------------------
|
||||
add_library(tinyusb_device_base INTERFACE)
|
||||
target_sources(tinyusb_device_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/rp2040/dcd_rp2040.c
|
||||
${TOP}/src/portable/raspberrypi/rp2040/rp2040_usb.c
|
||||
${TOP}/src/device/usbd.c
|
||||
${TOP}/src/device/usbd_control.c
|
||||
${TOP}/src/class/audio/audio_device.c
|
||||
${TOP}/src/class/cdc/cdc_device.c
|
||||
${TOP}/src/class/dfu/dfu_device.c
|
||||
${TOP}/src/class/dfu/dfu_rt_device.c
|
||||
${TOP}/src/class/hid/hid_device.c
|
||||
${TOP}/src/class/midi/midi_device.c
|
||||
${TOP}/src/class/msc/msc_device.c
|
||||
${TOP}/src/class/net/ecm_rndis_device.c
|
||||
${TOP}/src/class/net/ncm_device.c
|
||||
${TOP}/src/class/usbtmc/usbtmc_device.c
|
||||
${TOP}/src/class/vendor/vendor_device.c
|
||||
${TOP}/src/class/video/video_device.c
|
||||
)
|
||||
|
||||
#------------------------------------
|
||||
# Base config for host mode; wrapped by SDK's tinyusb_host
|
||||
#------------------------------------
|
||||
add_library(tinyusb_host_base INTERFACE)
|
||||
target_sources(tinyusb_host_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/rp2040/hcd_rp2040.c
|
||||
${TOP}/src/portable/raspberrypi/rp2040/rp2040_usb.c
|
||||
${TOP}/src/host/usbh.c
|
||||
${TOP}/src/host/hub.c
|
||||
${TOP}/src/class/cdc/cdc_host.c
|
||||
${TOP}/src/class/hid/hid_host.c
|
||||
${TOP}/src/class/msc/msc_host.c
|
||||
${TOP}/src/class/vendor/vendor_host.c
|
||||
)
|
||||
|
||||
# Sometimes have to do host specific actions in mostly common functions
|
||||
target_compile_definitions(tinyusb_host_base INTERFACE
|
||||
RP2040_USB_HOST_MODE=1
|
||||
)
|
||||
|
||||
#------------------------------------
|
||||
# BSP & Additions
|
||||
#------------------------------------
|
||||
add_library(tinyusb_bsp INTERFACE)
|
||||
target_sources(tinyusb_bsp INTERFACE
|
||||
${TOP}/hw/bsp/rp2040/family.c
|
||||
)
|
||||
target_include_directories(tinyusb_bsp INTERFACE
|
||||
${TOP}/hw
|
||||
)
|
||||
|
||||
# tinyusb_additions will hold our extra settings for examples
|
||||
add_library(tinyusb_additions INTERFACE)
|
||||
|
||||
target_compile_definitions(tinyusb_additions INTERFACE
|
||||
PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1
|
||||
PICO_RP2040_USB_DEVICE_UFRAME_FIX=1
|
||||
)
|
||||
|
||||
if(LOGGER STREQUAL "RTT" OR LOGGER STREQUAL "rtt")
|
||||
target_compile_definitions(tinyusb_additions INTERFACE
|
||||
LOGGER_RTT
|
||||
SEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
|
||||
)
|
||||
|
||||
target_sources(tinyusb_additions INTERFACE
|
||||
${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c
|
||||
)
|
||||
|
||||
set_source_files_properties(${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-cast-qual -Wno-cast-align -Wno-sign-conversion")
|
||||
|
||||
target_include_directories(tinyusb_additions INTERFACE
|
||||
${TOP}/lib/SEGGER_RTT/RTT
|
||||
)
|
||||
endif()
|
||||
|
||||
#------------------------------------
|
||||
# Functions
|
||||
#------------------------------------
|
||||
|
||||
function(family_configure_target TARGET)
|
||||
pico_add_extra_outputs(${TARGET})
|
||||
pico_enable_stdio_uart(${TARGET} 1)
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib pico_bootsel_via_double_reset tinyusb_board tinyusb_additions)
|
||||
endfunction()
|
||||
|
||||
function(rp2040_family_configure_example_warnings TARGET)
|
||||
if (NOT PICO_TINYUSB_NO_EXAMPLE_WARNINGS)
|
||||
family_add_default_example_warnings(${TARGET})
|
||||
endif()
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
target_compile_options(${TARGET} PRIVATE -Wno-unreachable-code)
|
||||
endif()
|
||||
suppress_tinyusb_warnings()
|
||||
endfunction()
|
||||
|
||||
function(family_configure_device_example TARGET)
|
||||
family_configure_target(${TARGET})
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device)
|
||||
rp2040_family_configure_example_warnings(${TARGET})
|
||||
endfunction()
|
||||
|
||||
function(family_add_pico_pio_usb TARGET)
|
||||
target_link_libraries(${TARGET} PUBLIC tinyusb_pico_pio_usb)
|
||||
endfunction()
|
||||
|
||||
function(family_configure_host_example TARGET)
|
||||
family_configure_target(${TARGET})
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_host)
|
||||
rp2040_family_configure_example_warnings(${TARGET})
|
||||
|
||||
# For rp2040 enable pico-pio-usb
|
||||
if (TARGET tinyusb_pico_pio_usb)
|
||||
# code does not compile with non GCC, or GCC 11.3+
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.3)
|
||||
family_add_pico_pio_usb(${PROJECT})
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(family_configure_dual_usb_example TARGET)
|
||||
family_configure_target(${TARGET})
|
||||
# require tinyusb_pico_pio_usb
|
||||
target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device tinyusb_host tinyusb_pico_pio_usb )
|
||||
rp2040_family_configure_example_warnings(${TARGET})
|
||||
endfunction()
|
||||
|
||||
function(check_and_add_pico_pio_usb_support)
|
||||
# check for pico_generate_pio_header (as depending on environment we may be called before SDK is
|
||||
# initialized in which case it isn't available yet), and only do the initialization once
|
||||
if (COMMAND pico_generate_pio_header AND NOT TARGET tinyusb_pico_pio_usb)
|
||||
#------------------------------------
|
||||
# PIO USB for both host and device
|
||||
#------------------------------------
|
||||
|
||||
if (NOT DEFINED PICO_PIO_USB_PATH)
|
||||
set(PICO_PIO_USB_PATH "${TOP}/hw/mcu/raspberry_pi/Pico-PIO-USB")
|
||||
endif()
|
||||
|
||||
if (EXISTS ${PICO_PIO_USB_PATH}/src/pio_usb.c)
|
||||
add_library(tinyusb_pico_pio_usb INTERFACE)
|
||||
target_sources(tinyusb_device_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/pio_usb/dcd_pio_usb.c
|
||||
)
|
||||
target_sources(tinyusb_host_base INTERFACE
|
||||
${TOP}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
|
||||
)
|
||||
|
||||
target_sources(tinyusb_pico_pio_usb INTERFACE
|
||||
${PICO_PIO_USB_PATH}/src/pio_usb.c
|
||||
${PICO_PIO_USB_PATH}/src/pio_usb_host.c
|
||||
${PICO_PIO_USB_PATH}/src/pio_usb_device.c
|
||||
${PICO_PIO_USB_PATH}/src/usb_crc.c
|
||||
)
|
||||
|
||||
target_include_directories(tinyusb_pico_pio_usb INTERFACE
|
||||
${PICO_PIO_USB_PATH}/src
|
||||
)
|
||||
|
||||
target_link_libraries(tinyusb_pico_pio_usb INTERFACE
|
||||
hardware_dma
|
||||
hardware_pio
|
||||
pico_multicore
|
||||
)
|
||||
|
||||
target_compile_definitions(tinyusb_pico_pio_usb INTERFACE
|
||||
PIO_USB_USE_TINYUSB
|
||||
)
|
||||
|
||||
pico_generate_pio_header(tinyusb_pico_pio_usb ${PICO_PIO_USB_PATH}/src/usb_tx.pio)
|
||||
pico_generate_pio_header(tinyusb_pico_pio_usb ${PICO_PIO_USB_PATH}/src/usb_rx.pio)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Try to add Pico-PIO_USB support now for the case where this file is included directly
|
||||
# after Pico SDK initialization, but without using the family_ functions (as is the case
|
||||
# when included by the SDK itself)
|
||||
check_and_add_pico_pio_usb_support()
|
||||
|
||||
function(family_initialize_project PROJECT DIR)
|
||||
# call the original version of this function from family_common.cmake
|
||||
_family_initialize_project(${PROJECT} ${DIR})
|
||||
enable_language(C CXX ASM)
|
||||
pico_sdk_init()
|
||||
|
||||
# now re-check for adding Pico-PIO_USB support now SDK is definitely available
|
||||
check_and_add_pico_pio_usb_support()
|
||||
endfunction()
|
||||
|
||||
# This method must be called from the project scope to suppress known warnings in TinyUSB source files
|
||||
function(suppress_tinyusb_warnings)
|
||||
# some of these are pretty silly warnings only occurring in some older GCC versions 9 or prior
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||
if (CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
|
||||
set(CONVERSION_WARNING_FILES
|
||||
${PICO_TINYUSB_PATH}/src/tusb.c
|
||||
${PICO_TINYUSB_PATH}/src/common/tusb_fifo.c
|
||||
${PICO_TINYUSB_PATH}/src/device/usbd.c
|
||||
${PICO_TINYUSB_PATH}/src/device/usbd_control.c
|
||||
${PICO_TINYUSB_PATH}/src/host/usbh.c
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c
|
||||
${PICO_TINYUSB_PATH}/src/class/hid/hid_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/hid/hid_host.c
|
||||
${PICO_TINYUSB_PATH}/src/class/audio/audio_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/dfu/dfu_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/dfu/dfu_rt_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/midi/midi_device.c
|
||||
${PICO_TINYUSB_PATH}/src/class/usbtmc/usbtmc_device.c
|
||||
${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/hcd_rp2040.c
|
||||
)
|
||||
foreach(SOURCE_FILE IN LISTS CONVERSION_WARNING_FILES)
|
||||
set_source_files_properties(
|
||||
${SOURCE_FILE}
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion")
|
||||
endforeach()
|
||||
endif()
|
||||
if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
|
||||
COMPILE_FLAGS "-Wno-stringop-overflow -Wno-array-bounds")
|
||||
endif()
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion -Wno-cast-qual")
|
||||
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/lwip/src/core/tcp_in.c
|
||||
${PICO_TINYUSB_PATH}/lib/lwip/src/core/tcp_out.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion")
|
||||
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/networking/dnserver.c
|
||||
${PICO_TINYUSB_PATH}/lib/networking/dhserver.c
|
||||
${PICO_TINYUSB_PATH}/lib/networking/rndis_reports.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion -Wno-sign-conversion")
|
||||
|
||||
if (TARGET tinyusb_pico_pio_usb)
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb_device.c
|
||||
${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb.c
|
||||
${PICO_TINYUSB_PATH}/hw/mcu/raspberry_pi/Pico-PIO-USB/src/pio_usb_host.c
|
||||
${PICO_TINYUSB_PATH}/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-conversion -Wno-cast-qual -Wno-attributes")
|
||||
endif()
|
||||
elseif(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c
|
||||
COMPILE_FLAGS "-Wno-unreachable-code")
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c
|
||||
COMPILE_FLAGS "-Wno-unreachable-code-fallthrough")
|
||||
set_source_files_properties(
|
||||
${PICO_TINYUSB_PATH}/lib/fatfs/source/ff.c
|
||||
PROPERTIES
|
||||
COMPILE_FLAGS "-Wno-cast-qual")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# rp2040 does not support freeRTOS example yet
|
||||
function(family_add_freertos TARGET)
|
||||
endfunction()
|
||||
|
@ -75,8 +75,11 @@ endfunction()
|
||||
#------------------------------------
|
||||
# TinyUSB as library target
|
||||
#------------------------------------
|
||||
set(TINYUSB_TARGET "tinyusb")
|
||||
set(TINYUSB_CONFIG_TARGET "tinyusb_config")
|
||||
if (NOT DEFINED TINYUSB_TARGET)
|
||||
set(TINYUSB_TARGET "tinyusb")
|
||||
endif ()
|
||||
|
||||
set(TINYUSB_CONFIG_TARGET "${TINYUSB_TARGET}_config")
|
||||
|
||||
if (DEFINED TINYUSB_TARGET_PREFIX)
|
||||
set(TINYUSB_TARGET "${TINYUSB_TARGET_PREFIX}${TINYUSB_TARGET}")
|
||||
|
@ -189,7 +189,7 @@ static void hw_endpoint_xfer(uint8_t ep_addr, uint8_t *buffer, uint16_t total_by
|
||||
static void __tusb_irq_path_func(hw_handle_buff_status)(void)
|
||||
{
|
||||
uint32_t remaining_buffers = usb_hw->buf_status;
|
||||
pico_trace("buf_status = 0x%08x\n", remaining_buffers);
|
||||
pico_trace("buf_status = 0x%08lx\n", remaining_buffers);
|
||||
uint bit = 1u;
|
||||
for (uint8_t i = 0; remaining_buffers && i < USB_MAX_ENDPOINTS * 2; i++)
|
||||
{
|
||||
|
@ -419,7 +419,7 @@ static bool __tusb_irq_path_func(e15_is_critical_frame_period) (struct hw_endpoi
|
||||
if (delta < 800 || delta > 998) {
|
||||
return false;
|
||||
}
|
||||
TU_LOG(3, "Avoiding sof %u now %lu last %lu\n", (usb_hw->sof_rd + 1) & USB_SOF_RD_BITS, time_us_32(), e15_last_sof);
|
||||
TU_LOG(3, "Avoiding sof %lu now %lu last %lu\n", (usb_hw->sof_rd + 1) & USB_SOF_RD_BITS, time_us_32(), e15_last_sof);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user