summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2021-06-03 01:02:54 +0700
committerGitHub <[email protected]>2021-06-03 01:02:54 +0700
commit8ea0dfba6813302d7d4c8f8274b5ef352cbdf8fc (patch)
treef2420d9e3913a16a2e49cd56db15b657e9c8ae37
parentff1a1122edb9479f6e178512944dbb824d9e3d77 (diff)
parentfea5cbaf74a033d3f0c462b6bf2d334a67f6a732 (diff)
Merge pull request #865 from kilograham/pico-0.10.0
Pico 0.10.0
-rw-r--r--.github/workflows/build.yml2
-rw-r--r--examples/device/CMakeLists.txt27
-rw-r--r--examples/device/audio_4_channel_mic/CMakeLists.txt51
-rw-r--r--examples/device/audio_test/CMakeLists.txt51
-rw-r--r--examples/device/board_test/CMakeLists.txt49
-rw-r--r--examples/device/cdc_dual_ports/CMakeLists.txt49
-rw-r--r--examples/device/cdc_dual_ports/src/tusb_config.h3
-rw-r--r--examples/device/cdc_msc/CMakeLists.txt51
-rw-r--r--examples/device/dfu/CMakeLists.txt49
-rw-r--r--examples/device/dfu_runtime/CMakeLists.txt51
-rw-r--r--examples/device/dynamic_configuration/CMakeLists.txt51
-rw-r--r--examples/device/hid_composite/CMakeLists.txt49
-rw-r--r--examples/device/hid_generic_inout/CMakeLists.txt51
-rw-r--r--examples/device/hid_multiple_interface/CMakeLists.txt51
-rw-r--r--examples/device/midi_test/CMakeLists.txt51
-rw-r--r--examples/device/msc_dual_lun/CMakeLists.txt53
-rw-r--r--examples/device/net_lwip_webserver/CMakeLists.txt145
-rw-r--r--examples/device/uac2_headset/CMakeLists.txt51
-rw-r--r--examples/device/usbtmc/CMakeLists.txt51
-rw-r--r--examples/device/webusb_serial/CMakeLists.txt51
-rw-r--r--examples/host/CMakeLists.txt9
-rw-r--r--examples/host/cdc_msc_hid/CMakeLists.txt53
-rw-r--r--hw/bsp/esp32s2/family.cmake4
-rw-r--r--hw/bsp/esp32s3/family.cmake4
-rw-r--r--hw/bsp/family_common.cmake57
-rw-r--r--hw/bsp/rp2040/board.h (renamed from hw/bsp/rp2040/boards/raspberry_pi_pico/board.h)12
-rw-r--r--hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.cmake2
-rw-r--r--hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.h53
-rw-r--r--hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.cmake2
-rw-r--r--hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.h53
-rw-r--r--hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.cmake1
-rw-r--r--hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.h55
-rw-r--r--hw/bsp/rp2040/boards/adafruit_qtpy_rp2040/board.cmake1
-rw-r--r--hw/bsp/rp2040/boards/pico_sdk/board.cmake1
-rw-r--r--hw/bsp/rp2040/boards/raspberry_pi_pico/board.cmake2
-rw-r--r--hw/bsp/rp2040/family.c17
-rw-r--r--hw/bsp/rp2040/family.cmake207
-rw-r--r--src/portable/raspberrypi/rp2040/hcd_rp2040.c1
38 files changed, 701 insertions, 820 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 0ed20b859..09236db65 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -67,7 +67,7 @@ jobs:
- name: Checkout pico-sdk
if: matrix.family == 'rp2040'
run: |
- git clone --depth 1 https://github.com/raspberrypi/pico-sdk ~/pico-sdk
+ git clone --depth 1 -b tinyusb-0.10.0 https://github.com/raspberrypi/pico-sdk ~/pico-sdk
echo >> $GITHUB_ENV PICO_SDK_PATH=~/pico-sdk
- name: Set Toolchain URL
diff --git a/examples/device/CMakeLists.txt b/examples/device/CMakeLists.txt
new file mode 100644
index 000000000..4ed693cde
--- /dev/null
+++ b/examples/device/CMakeLists.txt
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.5)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/${FAMILY}/family.cmake)
+
+project(tinyusb_device_examples)
+family_initialize_project(tinyusb_device_examples ${CMAKE_CURRENT_LIST_DIR})
+
+# family_add_subdirectory will filter what to actually add based on selected FAMILY
+family_add_subdirectory(audio_4_channel_mic)
+family_add_subdirectory(audio_test)
+family_add_subdirectory(board_test)
+family_add_subdirectory(cdc_dual_ports)
+family_add_subdirectory(cdc_msc)
+family_add_subdirectory(cdc_msc_freertos)
+family_add_subdirectory(dfu)
+family_add_subdirectory(dfu_runtime)
+family_add_subdirectory(dynamic_configuration)
+family_add_subdirectory(hid_composite)
+family_add_subdirectory(hid_composite_freertos)
+family_add_subdirectory(hid_generic_inout)
+family_add_subdirectory(hid_multiple_interface)
+family_add_subdirectory(midi_test)
+family_add_subdirectory(msc_dual_lun)
+family_add_subdirectory(net_lwip_webserver)
+family_add_subdirectory(uac2_headset)
+family_add_subdirectory(usbtmc)
+family_add_subdirectory(webusb_serial)
diff --git a/examples/device/audio_4_channel_mic/CMakeLists.txt b/examples/device/audio_4_channel_mic/CMakeLists.txt
index f2c81c4d3..b653fc91f 100644
--- a/examples/device/audio_4_channel_mic/CMakeLists.txt
+++ b/examples/device/audio_4_channel_mic/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use BOARD-Directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+)
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT})
diff --git a/examples/device/audio_test/CMakeLists.txt b/examples/device/audio_test/CMakeLists.txt
index f2c81c4d3..fac0ca64f 100644
--- a/examples/device/audio_test/CMakeLists.txt
+++ b/examples/device/audio_test/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use BOARD-Directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+)
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+)
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/board_test/CMakeLists.txt b/examples/device/board_test/CMakeLists.txt
index c41ad92ab..8cd5b9ea4 100644
--- a/examples/device/board_test/CMakeLists.txt
+++ b/examples/device/board_test/CMakeLists.txt
@@ -1,44 +1,43 @@
cmake_minimum_required(VERSION 3.5)
-# use BOARD-Directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
-
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
# Check for -DFAMILY=
if(FAMILY MATCHES "^esp32s[2-3]")
- cmake_minimum_required(VERSION 3.5)
+ # use BOARD-Directory name for project id
+ get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
+ set(PROJECT ${BOARD}-${PROJECT})
+
+ # TOP is absolute path to root directory of TinyUSB git repo
+ set(TOP "../../..")
+ get_filename_component(TOP "${TOP}" REALPATH)
include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
project(${PROJECT})
-elseif(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
+else()
+
+ # gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+ family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
+
project(${PROJECT})
- add_executable(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+ # Checks this example is valid for the family and initializes the project
+ family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
+
+ add_executable(${PROJECT})
# Example source
target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- )
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ )
# Example include
target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
-
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
+ # Configure compilation flags and libraries for the example... see the corresponding function
+ # in hw/bsp/FAMILY/family.cmake for details.
+ family_configure_device_example(${PROJECT})
endif()
diff --git a/examples/device/cdc_dual_ports/CMakeLists.txt b/examples/device/cdc_dual_ports/CMakeLists.txt
index 4160c0c88..18367a893 100644
--- a/examples/device/cdc_dual_ports/CMakeLists.txt
+++ b/examples/device/cdc_dual_ports/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+project(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+add_executable(${PROJECT})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/cdc_dual_ports/src/tusb_config.h b/examples/device/cdc_dual_ports/src/tusb_config.h
index 7db520dd1..c7e87bf67 100644
--- a/examples/device/cdc_dual_ports/src/tusb_config.h
+++ b/examples/device/cdc_dual_ports/src/tusb_config.h
@@ -64,8 +64,9 @@
#error "Incorrect RHPort configuration"
#endif
-// This example doesn't use an RTOS
+#ifndef CFG_TUSB_OS
#define CFG_TUSB_OS OPT_OS_NONE
+#endif
// CFG_TUSB_DEBUG is defined by compiler in DEBUG build
// #define CFG_TUSB_DEBUG 0
diff --git a/examples/device/cdc_msc/CMakeLists.txt b/examples/device/cdc_msc/CMakeLists.txt
index 6c828a396..5da761a04 100644
--- a/examples/device/cdc_msc/CMakeLists.txt
+++ b/examples/device/cdc_msc/CMakeLists.txt
@@ -1,38 +1,29 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+project(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+add_executable(${PROJECT})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/dfu/CMakeLists.txt b/examples/device/dfu/CMakeLists.txt
index 4160c0c88..18367a893 100644
--- a/examples/device/dfu/CMakeLists.txt
+++ b/examples/device/dfu/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+project(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+add_executable(${PROJECT})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/dfu_runtime/CMakeLists.txt b/examples/device/dfu_runtime/CMakeLists.txt
index 2bac7c329..18367a893 100644
--- a/examples/device/dfu_runtime/CMakeLists.txt
+++ b/examples/device/dfu_runtime/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/dynamic_configuration/CMakeLists.txt b/examples/device/dynamic_configuration/CMakeLists.txt
index a99b755d3..5da761a04 100644
--- a/examples/device/dynamic_configuration/CMakeLists.txt
+++ b/examples/device/dynamic_configuration/CMakeLists.txt
@@ -1,38 +1,29 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+project(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+add_executable(${PROJECT})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/hid_composite/CMakeLists.txt b/examples/device/hid_composite/CMakeLists.txt
index 3b677b3b1..18367a893 100644
--- a/examples/device/hid_composite/CMakeLists.txt
+++ b/examples/device/hid_composite/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+project(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+add_executable(${PROJECT})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/hid_generic_inout/CMakeLists.txt b/examples/device/hid_generic_inout/CMakeLists.txt
index 2bac7c329..18367a893 100644
--- a/examples/device/hid_generic_inout/CMakeLists.txt
+++ b/examples/device/hid_generic_inout/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/hid_multiple_interface/CMakeLists.txt b/examples/device/hid_multiple_interface/CMakeLists.txt
index 2bac7c329..18367a893 100644
--- a/examples/device/hid_multiple_interface/CMakeLists.txt
+++ b/examples/device/hid_multiple_interface/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/midi_test/CMakeLists.txt b/examples/device/midi_test/CMakeLists.txt
index 2bac7c329..18367a893 100644
--- a/examples/device/midi_test/CMakeLists.txt
+++ b/examples/device/midi_test/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/msc_dual_lun/CMakeLists.txt b/examples/device/msc_dual_lun/CMakeLists.txt
index 8b4722278..f60be8eda 100644
--- a/examples/device/msc_dual_lun/CMakeLists.txt
+++ b/examples/device/msc_dual_lun/CMakeLists.txt
@@ -1,38 +1,29 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk_dual.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_disk_dual.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/net_lwip_webserver/CMakeLists.txt b/examples/device/net_lwip_webserver/CMakeLists.txt
index 4325b4ea6..f1f79b2d1 100644
--- a/examples/device/net_lwip_webserver/CMakeLists.txt
+++ b/examples/device/net_lwip_webserver/CMakeLists.txt
@@ -1,84 +1,81 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
set(TOP "../../..")
get_filename_component(TOP "${TOP}" REALPATH)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+if (EXISTS ${TOP}/lib/lwip/src)
+ include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+ # gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+ family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- # lwip Stack source
- set(SRC_LWIP
- ${TOP}/lib/lwip/src/core/altcp.c
- ${TOP}/lib/lwip/src/core/altcp_alloc.c
- ${TOP}/lib/lwip/src/core/altcp_tcp.c
- ${TOP}/lib/lwip/src/core/def.c
- ${TOP}/lib/lwip/src/core/dns.c
- ${TOP}/lib/lwip/src/core/inet_chksum.c
- ${TOP}/lib/lwip/src/core/init.c
- ${TOP}/lib/lwip/src/core/ip.c
- ${TOP}/lib/lwip/src/core/mem.c
- ${TOP}/lib/lwip/src/core/memp.c
- ${TOP}/lib/lwip/src/core/netif.c
- ${TOP}/lib/lwip/src/core/pbuf.c
- ${TOP}/lib/lwip/src/core/raw.c
- ${TOP}/lib/lwip/src/core/stats.c
- ${TOP}/lib/lwip/src/core/sys.c
- ${TOP}/lib/lwip/src/core/tcp.c
- ${TOP}/lib/lwip/src/core/tcp_in.c
- ${TOP}/lib/lwip/src/core/tcp_out.c
- ${TOP}/lib/lwip/src/core/timeouts.c
- ${TOP}/lib/lwip/src/core/udp.c
- ${TOP}/lib/lwip/src/core/ipv4/autoip.c
- ${TOP}/lib/lwip/src/core/ipv4/dhcp.c
- ${TOP}/lib/lwip/src/core/ipv4/etharp.c
- ${TOP}/lib/lwip/src/core/ipv4/icmp.c
- ${TOP}/lib/lwip/src/core/ipv4/igmp.c
- ${TOP}/lib/lwip/src/core/ipv4/ip4.c
- ${TOP}/lib/lwip/src/core/ipv4/ip4_addr.c
- ${TOP}/lib/lwip/src/core/ipv4/ip4_frag.c
- ${TOP}/lib/lwip/src/netif/ethernet.c
- ${TOP}/lib/lwip/src/netif/slipif.c
- ${TOP}/lib/lwip/src/apps/http/httpd.c
- ${TOP}/lib/lwip/src/apps/http/fs.c
- ${TOP}/lib/networking/dhserver.c
- ${TOP}/lib/networking/dnserver.c
- ${TOP}/lib/networking/rndis_reports.c
- )
+ project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- ${SRC_LWIP}
- )
+ # Checks this example is valid for the family and initializes the project
+ family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- ${TOP}/lib/lwip/src/include
- ${TOP}/lib/lwip/src/include/ipv4
- ${TOP}/lib/lwip/src/include/lwip/apps
- ${TOP}/lib/networking
- )
+ add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- PBUF_POOL_SIZE=2
- TCP_WND=2*TCP_MSS
- HTTPD_USE_CUSTOM_FSDATA=0
- )
+ # Example source
+ target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+ # Example include
+ target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ ${TOP}/lib/lwip/src/include
+ ${TOP}/lib/lwip/src/include/ipv4
+ ${TOP}/lib/lwip/src/include/lwip/apps
+ ${TOP}/lib/networking
+ )
+
+ target_sources(${PROJECT} PUBLIC
+ ${TOP}/lib/lwip/src/core/altcp.c
+ ${TOP}/lib/lwip/src/core/altcp_alloc.c
+ ${TOP}/lib/lwip/src/core/altcp_tcp.c
+ ${TOP}/lib/lwip/src/core/def.c
+ ${TOP}/lib/lwip/src/core/dns.c
+ ${TOP}/lib/lwip/src/core/inet_chksum.c
+ ${TOP}/lib/lwip/src/core/init.c
+ ${TOP}/lib/lwip/src/core/ip.c
+ ${TOP}/lib/lwip/src/core/mem.c
+ ${TOP}/lib/lwip/src/core/memp.c
+ ${TOP}/lib/lwip/src/core/netif.c
+ ${TOP}/lib/lwip/src/core/pbuf.c
+ ${TOP}/lib/lwip/src/core/raw.c
+ ${TOP}/lib/lwip/src/core/stats.c
+ ${TOP}/lib/lwip/src/core/sys.c
+ ${TOP}/lib/lwip/src/core/tcp.c
+ ${TOP}/lib/lwip/src/core/tcp_in.c
+ ${TOP}/lib/lwip/src/core/tcp_out.c
+ ${TOP}/lib/lwip/src/core/timeouts.c
+ ${TOP}/lib/lwip/src/core/udp.c
+ ${TOP}/lib/lwip/src/core/ipv4/autoip.c
+ ${TOP}/lib/lwip/src/core/ipv4/dhcp.c
+ ${TOP}/lib/lwip/src/core/ipv4/etharp.c
+ ${TOP}/lib/lwip/src/core/ipv4/icmp.c
+ ${TOP}/lib/lwip/src/core/ipv4/igmp.c
+ ${TOP}/lib/lwip/src/core/ipv4/ip4.c
+ ${TOP}/lib/lwip/src/core/ipv4/ip4_addr.c
+ ${TOP}/lib/lwip/src/core/ipv4/ip4_frag.c
+ ${TOP}/lib/lwip/src/netif/ethernet.c
+ ${TOP}/lib/lwip/src/netif/slipif.c
+ ${TOP}/lib/lwip/src/apps/http/httpd.c
+ ${TOP}/lib/lwip/src/apps/http/fs.c
+ ${TOP}/lib/networking/dhserver.c
+ ${TOP}/lib/networking/dnserver.c
+ ${TOP}/lib/networking/rndis_reports.c
+ )
+
+ target_compile_definitions(${PROJECT} PUBLIC
+ PBUF_POOL_SIZE=2
+ TCP_WND=2*TCP_MSS
+ HTTPD_USE_CUSTOM_FSDATA=0
+ )
+
+ # Configure compilation flags and libraries for the example... see the corresponding function
+ # in hw/bsp/FAMILY/family.cmake for details.
+ family_configure_device_example(${PROJECT})
+endif() \ No newline at end of file
diff --git a/examples/device/uac2_headset/CMakeLists.txt b/examples/device/uac2_headset/CMakeLists.txt
index 2bac7c329..18367a893 100644
--- a/examples/device/uac2_headset/CMakeLists.txt
+++ b/examples/device/uac2_headset/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/usbtmc/CMakeLists.txt b/examples/device/usbtmc/CMakeLists.txt
index c14595dbe..4306da8cb 100644
--- a/examples/device/usbtmc/CMakeLists.txt
+++ b/examples/device/usbtmc/CMakeLists.txt
@@ -1,38 +1,29 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+project(${PROJECT})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usbtmc_app.c
- )
+add_executable(${PROJECT})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usbtmc_app.c
+ )
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/device/webusb_serial/CMakeLists.txt b/examples/device/webusb_serial/CMakeLists.txt
index 2bac7c329..18367a893 100644
--- a/examples/device/webusb_serial/CMakeLists.txt
+++ b/examples/device/webusb_serial/CMakeLists.txt
@@ -1,37 +1,28 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_device_example(${PROJECT}) \ No newline at end of file
diff --git a/examples/host/CMakeLists.txt b/examples/host/CMakeLists.txt
new file mode 100644
index 000000000..c70d11d5b
--- /dev/null
+++ b/examples/host/CMakeLists.txt
@@ -0,0 +1,9 @@
+cmake_minimum_required(VERSION 3.5)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../hw/bsp/${FAMILY}/family.cmake)
+
+project(tinyusb_host_examples)
+family_initialize_project(tinyusb_host_examples ${CMAKE_CURRENT_LIST_DIR})
+
+# family_add_subdirectory will filter what to actually add based on selected FAMILY
+family_add_subdirectory(cdc_msc_hid)
diff --git a/examples/host/cdc_msc_hid/CMakeLists.txt b/examples/host/cdc_msc_hid/CMakeLists.txt
index ac57bf6dd..ad0f412e2 100644
--- a/examples/host/cdc_msc_hid/CMakeLists.txt
+++ b/examples/host/cdc_msc_hid/CMakeLists.txt
@@ -1,38 +1,29 @@
-# use directory name for project id
-get_filename_component(PROJECT ${CMAKE_CURRENT_SOURCE_DIR} NAME)
-set(PROJECT ${BOARD}-${PROJECT})
+cmake_minimum_required(VERSION 3.5)
-# TOP is absolute path to root directory of TinyUSB git repo
-set(TOP "../../..")
-get_filename_component(TOP "${TOP}" REALPATH)
+include(${CMAKE_CURRENT_SOURCE_DIR}/../../../hw/bsp/${FAMILY}/family.cmake)
-# Check for -DFAMILY=
-if(FAMILY STREQUAL "rp2040")
- cmake_minimum_required(VERSION 3.12)
-
- include(${TOP}/hw/bsp/${FAMILY}/pico_sdk_import.cmake)
- project(${PROJECT})
- add_executable(${PROJECT})
+# gets PROJECT name for the example (e.g. <BOARD>-<DIR_NAME>)
+family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
- include(${TOP}/hw/bsp/${FAMILY}/family.cmake)
+project(${PROJECT})
- # Example source
- target_sources(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/hid_app.c
- ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_app.c
- )
+# Checks this example is valid for the family and initializes the project
+family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
- # Example include
- target_include_directories(${PROJECT} PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
+add_executable(${PROJECT})
- # Example defines
- target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_OS=OPT_OS_PICO
- )
+# Example source
+target_sources(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/hid_app.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/msc_app.c
+ )
-else()
- message(FATAL_ERROR "Invalid FAMILY specified: ${FAMILY}")
-endif()
+# Example include
+target_include_directories(${PROJECT} PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
+ )
+
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_host_example(${PROJECT}) \ No newline at end of file
diff --git a/hw/bsp/esp32s2/family.cmake b/hw/bsp/esp32s2/family.cmake
index c19221b14..9eb1627a1 100644
--- a/hw/bsp/esp32s2/family.cmake
+++ b/hw/bsp/esp32s2/family.cmake
@@ -4,3 +4,7 @@ cmake_minimum_required(VERSION 3.5)
set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32s2/boards" "${TOP}/hw/bsp/esp32s2/components")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(SUPPORTED_TARGETS esp32s2)
+
+# include basic family CMake functionality
+set(FAMILY_MCUS ESP32S2)
+include(${CMAKE_CURRENT_LIST_DIR}/../family_common.cmake)
diff --git a/hw/bsp/esp32s3/family.cmake b/hw/bsp/esp32s3/family.cmake
index 558ec5752..c99c3728b 100644
--- a/hw/bsp/esp32s3/family.cmake
+++ b/hw/bsp/esp32s3/family.cmake
@@ -4,3 +4,7 @@ cmake_minimum_required(VERSION 3.5)
set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32s3/boards" "${TOP}/hw/bsp/esp32s3/components")
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(SUPPORTED_TARGETS esp32s3)
+
+# include basic family CMake functionality
+set(FAMILY_MCUS ESP32S3)
+include(${CMAKE_CURRENT_LIST_DIR}/../family_common.cmake)
diff --git a/hw/bsp/family_common.cmake b/hw/bsp/family_common.cmake
new file mode 100644
index 000000000..2544c58c6
--- /dev/null
+++ b/hw/bsp/family_common.cmake
@@ -0,0 +1,57 @@
+if (NOT FAMILY_MCUS)
+ set(FAMILY_MCUS ${FAMILY})
+endif()
+
+# save it in case of re-inclusion
+set(FAMILY_MCUS ${FAMILY_MCUS} CACHE INTERNAL "")
+
+function(family_filter RESULT DIR)
+ get_filename_component(DIR ${DIR} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+ file(GLOB ONLYS "${DIR}/.only.MCU_*")
+ if (ONLYS)
+ foreach(MCU IN LISTS FAMILY_MCUS)
+ if (EXISTS ${DIR}/.only.MCU_${MCU})
+ set(${RESULT} 1 PARENT_SCOPE)
+ return()
+ endif()
+ endforeach()
+ else()
+ foreach(MCU IN LISTS FAMILY_MCUS)
+ if (EXISTS ${DIR}/.skip.MCU_${MCU})
+ set(${RESULT} 0 PARENT_SCOPE)
+ return()
+ endif()
+ endforeach()
+ endif()
+ set(${RESULT} 1 PARENT_SCOPE)
+endfunction()
+
+function(family_add_subdirectory DIR)
+ family_filter(SHOULD_ADD "${DIR}")
+ if (SHOULD_ADD)
+ add_subdirectory(${DIR})
+ endif()
+endfunction()
+
+function(family_get_project_name OUTPUT_NAME DIR)
+ get_filename_component(SHORT_NAME ${DIR} NAME)
+ set(${OUTPUT_NAME} ${TINYUSB_FAMILY_PROJECT_NAME_PREFIX}${SHORT_NAME} PARENT_SCOPE)
+endfunction()
+
+function(family_initialize_project PROJECT DIR)
+ family_filter(ALLOWED "${DIR}")
+ if (NOT ALLOWED)
+ get_filename_component(SHORT_NAME ${DIR} NAME)
+ message(FATAL_ERROR "${SHORT_NAME} is not supported on FAMILY=${FAMILY}")
+ endif()
+endfunction()
+
+# configure an executable target to link to tinyusb in device mode, and add the board implementation
+function(family_configure_device_example TARGET)
+ # default implentation is empty, the function should be redefined in the FAMILY/family.cmake
+endfunction()
+
+# configure an executable target to link to tinyusb in host mode, and add the board implementation
+function(family_configure_host_example TARGET)
+ # default implentation is empty, the function should be redefined in the FAMILY/family.cmake
+endfunction()
diff --git a/hw/bsp/rp2040/boards/raspberry_pi_pico/board.h b/hw/bsp/rp2040/board.h
index e4a6514ad..237f29dc2 100644
--- a/hw/bsp/rp2040/boards/raspberry_pi_pico/board.h
+++ b/hw/bsp/rp2040/board.h
@@ -31,16 +31,20 @@
extern "C" {
#endif
+#ifdef PICO_DEFAULT_LED_PIN
#define LED_PIN PICO_DEFAULT_LED_PIN
-#define LED_STATE_ON 1
+#define LED_STATE_ON (!(PICO_DEFAULT_LED_PIN_INVERTED))
+#endif
// Button pin is BOOTSEL which is flash CS pin
#define BUTTON_BOOTSEL
#define BUTTON_STATE_ACTIVE 0
-#define UART_DEV uart0
-#define UART_TX_PIN 0
-#define UART_RX_PIN 1
+#if defined(PICO_DEFAULT_UART_TX_PIN) && defined(PICO_DEFAULT_UART_RX_PIN) && defined(PICO_DEFAULT_UART)
+#define UART_DEV PICO_DEFAULT_UART
+#define UART_TX_PIN PICO_DEFAULT_UART_TX_PIN
+#define UART_RX_PIN PICO_DEFAULT_UART_RX_PIN
+#endif
#ifdef __cplusplus
}
diff --git a/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.cmake b/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.cmake
index ea4070cf3..e527a8ce3 100644
--- a/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.cmake
+++ b/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.cmake
@@ -1 +1 @@
-set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_SDK_PATH}/src/rp2_common/boot_stage2/boot2_generic_03h.S")
+set(PICO_BOARD adafruit_feather_rp2040) \ No newline at end of file
diff --git a/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.h b/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.h
deleted file mode 100644
index 281b215d3..000000000
--- a/hw/bsp/rp2040/boards/adafruit_feather_rp2040/board.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2021, Ha Thach (tinyusb.org)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * This file is part of the TinyUSB stack.
- */
-
-#ifndef BOARD_H_
-#define BOARD_H_
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#define LED_PIN 13
-#define LED_STATE_ON 1
-
-#define NEOPIXEL_PIN 16
-#define NEOPIXEL_POWER_PIN 17
-#define NEOPIXEL_POWER_STATE 1
-
-// Button pin is BOOTSEL which is flash CS pin
-#define BUTTON_BOOTSEL
-#define BUTTON_STATE_ACTIVE 0
-
-#define UART_DEV uart0
-#define UART_TX_PIN 0
-#define UART_RX_PIN 1
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* BOARD_H_ */
diff --git a/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.cmake b/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.cmake
index eb9f219d2..3fd2dd06b 100644
--- a/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.cmake
+++ b/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.cmake
@@ -1 +1 @@
-set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_SDK_PATH}/src/rp2_common/boot_stage2/boot2_w25q080.S")
+set(PICO_BOARD adafruit_itsybitsy_rp2040) \ No newline at end of file
diff --git a/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.h b/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.h
deleted file mode 100644
index 72265176c..000000000
--- a/hw/bsp/rp2040/boards/adafruit_itsybitsy_rp2040/board.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2021, Ha Thach (tinyusb.org)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * This file is part of the TinyUSB stack.
- */
-
-#ifndef BOARD_H_
-#define BOARD_H_
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-#define LED_PIN 11
-#define LED_STATE_ON 1
-
-#define NEOPIXEL_PIN 17
-#define NEOPIXEL_POWER_PIN 16
-#define NEOPIXEL_POWER_STATE 1
-
-// Button pin is BOOTSEL which is flash CS pin
-#define BUTTON_BOOTSEL
-#define BUTTON_STATE_ACTIVE 0
-
-#define UART_DEV uart0
-#define UART_TX_PIN 0
-#define UART_RX_PIN 1
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* BOARD_H_ */
diff --git a/hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.cmake b/hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.cmake
deleted file mode 100644
index eb9f219d2..000000000
--- a/hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.cmake
+++ /dev/null
@@ -1 +0,0 @@
-set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_SDK_PATH}/src/rp2_common/boot_stage2/boot2_w25q080.S")
diff --git a/hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.h b/hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.h
deleted file mode 100644
index c0915f704..000000000
--- a/hw/bsp/rp2040/boards/adafruit_qt_rp2040/board.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2021, Ha Thach (tinyusb.org)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * This file is part of the TinyUSB stack.
- */
-
-#ifndef BOARD_H_
-#define BOARD_H_
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-// TODO QT RP2040 only has neopixel
-#define LED_PIN 11
-#define LED_STATE_ON 1
-
-#define NEOPIXEL_PIN 12
-#define NEOPIXEL_POWER_PIN 11
-#define NEOPIXEL_POWER_STATE 1
-
-// Button pin is BOOTSEL which is flash CS pin
-#define BUTTON_BOOTSEL
-#define BUTTON_STATE_ACTIVE 0
-
-
-#define UART_DEV uart0
-#define UART_TX_PIN 0
-#define UART_RX_PIN 1
-
-#ifdef __cplusplus
- }
-#endif
-
-#endif /* BOARD_H_ */
diff --git a/hw/bsp/rp2040/boards/adafruit_qtpy_rp2040/board.cmake b/hw/bsp/rp2040/boards/adafruit_qtpy_rp2040/board.cmake
new file mode 100644
index 000000000..469929c51
--- /dev/null
+++ b/hw/bsp/rp2040/boards/adafruit_qtpy_rp2040/board.cmake
@@ -0,0 +1 @@
+set(PICO_BOARD adafruit_qtpy_rp2040) \ No newline at end of file
diff --git a/hw/bsp/rp2040/boards/pico_sdk/board.cmake b/hw/bsp/rp2040/boards/pico_sdk/board.cmake
new file mode 100644
index 000000000..d57cbe52b
--- /dev/null
+++ b/hw/bsp/rp2040/boards/pico_sdk/board.cmake
@@ -0,0 +1 @@
+# This builds with settings based purely on the current PICO_BOARD set via the SDK
diff --git a/hw/bsp/rp2040/boards/raspberry_pi_pico/board.cmake b/hw/bsp/rp2040/boards/raspberry_pi_pico/board.cmake
index eb9f219d2..8280c835d 100644
--- a/hw/bsp/rp2040/boards/raspberry_pi_pico/board.cmake
+++ b/hw/bsp/rp2040/boards/raspberry_pi_pico/board.cmake
@@ -1 +1 @@
-set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_SDK_PATH}/src/rp2_common/boot_stage2/boot2_w25q080.S")
+set(PICO_BOARD pico) \ No newline at end of file
diff --git a/hw/bsp/rp2040/family.c b/hw/bsp/rp2040/family.c
index 9995c23d7..10ead2776 100644
--- a/hw/bsp/rp2040/family.c
+++ b/hw/bsp/rp2040/family.c
@@ -26,6 +26,7 @@
*/
#include "pico/stdlib.h"
+#include "pico/binary_info.h"
#include "hardware/gpio.h"
#include "hardware/sync.h"
#include "hardware/structs/ioqspi.h"
@@ -110,10 +111,14 @@ void stdio_rtt_init(void)
#endif
+#ifdef UART_DEV
+static uart_inst_t *uart_inst;
+#endif
void board_init(void)
{
#ifdef LED_PIN
+ bi_decl(bi_1pin_with_name(LED_PIN, "LED"));
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
#endif
@@ -122,8 +127,10 @@ void board_init(void)
#ifndef BUTTON_BOOTSEL
#endif
-#ifdef UART_DEV
- stdio_uart_init_full(UART_DEV, CFG_BOARD_UART_BAUDRATE, UART_TX_PIN, UART_RX_PIN);
+#if defined(UART_DEV) && defined(LIB_PICO_STDIO_UART)
+ bi_decl(bi_2pins_with_func(UART_TX_PIN, UART_TX_PIN, GPIO_FUNC_UART));
+ uart_inst = uart_get_instance(UART_DEV);
+ stdio_uart_init_full(uart_inst, CFG_BOARD_UART_BAUDRATE, UART_TX_PIN, UART_RX_PIN);
#endif
#if defined(LOGGER_RTT)
@@ -164,7 +171,7 @@ int board_uart_read(uint8_t* buf, int len)
{
#ifdef UART_DEV
for(int i=0;i<len;i++) {
- buf[i] = uart_getc(UART_DEV);
+ buf[i] = uart_getc(uart_inst);
}
return len;
#else
@@ -175,9 +182,9 @@ int board_uart_read(uint8_t* buf, int len)
int board_uart_write(void const * buf, int len)
{
#ifdef UART_DEV
- char const* bufch = (uint8_t const*) buf;
+ char const* bufch = (char const*) buf;
for(int i=0;i<len;i++) {
- uart_putc(UART_DEV, bufch[i]);
+ uart_putc(uart_inst, bufch[i]);
}
return len;
#else
diff --git a/hw/bsp/rp2040/family.cmake b/hw/bsp/rp2040/family.cmake
index 73108e2c4..752eb0cab 100644
--- a/hw/bsp/rp2040/family.cmake
+++ b/hw/bsp/rp2040/family.cmake
@@ -1,77 +1,154 @@
-# Board specific define e.g boot stage2
-# PICO_DEFAULT_BOOT_STAGE2_FILE must be set before pico_sdk_init()
-include(${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}/board.cmake)
+cmake_minimum_required(VERSION 3.13)
+if (NOT TARGET _rp2040_family_inclusion_marker)
+ add_library(_rp2040_family_inclusion_marker INTERFACE)
-pico_sdk_init()
+ if (NOT BOARD)
+ message(FATAL_ERROR "BOARD must be specified")
+ endif()
-target_link_libraries(${PROJECT}
- pico_stdlib
- pico_bootsel_via_double_reset
- pico_fix_rp2040_usb_device_enumeration
-)
+ # add the SDK in case we are standalone tinyusb example (noop if already present)
+ include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake)
-pico_add_extra_outputs(${PROJECT})
-pico_enable_stdio_uart(${PROJECT} 1)
+ # include basic family CMake functionality
+ set(FAMILY_MCUS RP2040)
+ include(${CMAKE_CURRENT_LIST_DIR}/../family_common.cmake)
-# TinyUSB Stack source
-set(SRC_TINYUSB
- ${TOP}/src/tusb.c
- ${TOP}/src/common/tusb_fifo.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/net_device.c
- ${TOP}/src/class/usbtmc/usbtmc_device.c
- ${TOP}/src/class/vendor/vendor_device.c
- ${TOP}/src/host/hub.c
- ${TOP}/src/host/usbh.c
- ${TOP}/src/host/usbh_control.c
- ${TOP}/src/class/cdc/cdc_host.c
- ${TOP}/src/class/hid/hid_host.c
- ${TOP}/src/class/msc/msc_host.c
- ${TOP}/src/portable/raspberrypi/${FAMILY}/rp2040_usb.c
- ${TOP}/src/portable/raspberrypi/${FAMILY}/dcd_rp2040.c
- ${TOP}/src/portable/raspberrypi/${FAMILY}/hcd_rp2040.c
-)
+ include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
-target_sources(${PROJECT} PUBLIC
- ${TOP}/hw/bsp/${FAMILY}/family.c
- ${SRC_TINYUSB}
-)
+ # TOP is absolute path to root directory of TinyUSB git repo
+ set(TOP "${CMAKE_CURRENT_LIST_DIR}/../../..")
+ get_filename_component(TOP "${TOP}" REALPATH)
-target_include_directories(${PROJECT} PUBLIC
- ${TOP}/hw
- ${TOP}/src
- ${TOP}/hw/bsp/${FAMILY}/boards/${BOARD}
-)
+ if (NOT PICO_TINYUSB_PATH)
+ set(PICO_TINYUSB_PATH ${TOP})
+ endif()
-target_compile_definitions(${PROJECT} PUBLIC
- CFG_TUSB_MCU=OPT_MCU_RP2040
- PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1
-)
+ # 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
+ )
-if(DEFINED LOG)
- target_compile_definitions(${PROJECT} PUBLIC CFG_TUSB_DEBUG=${LOG} )
-endif()
+ target_include_directories(tinyusb_common_base INTERFACE
+ ${TOP}/src
+ ${TOP}/src/common
+ ${TOP}/hw
+ )
-if(LOGGER STREQUAL "rtt")
- target_compile_definitions(${PROJECT} PUBLIC
- LOGGER_RTT
- SEGGER_RTT_MODE_DEFAULT=SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
- )
+ target_link_libraries(tinyusb_common_base INTERFACE
+ hardware_structs
+ hardware_irq
+ hardware_resets
+ pico_sync
+ )
- target_sources(${PROJECT} PUBLIC
- ${TOP}/lib/SEGGER_RTT/RTT/SEGGER_RTT.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_base INTERFACE
+ CFG_TUSB_MCU=OPT_MCU_RP2040
+ CFG_TUSB_OS=OPT_OS_PICO
+ CFG_TUSB_DEBUG=${TINYUSB_DEBUG_LEVEL}
+ )
- target_include_directories(${PROJECT} PUBLIC
- ${TOP}/lib/SEGGER_RTT/RTT
- )
-endif()
+ # 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/net_device.c
+ ${TOP}/src/class/usbtmc/usbtmc_device.c
+ ${TOP}/src/class/vendor/vendor_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/usbh_control.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
+ )
+
+ 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
+ )
+ 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()
+
+ 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(family_configure_device_example TARGET)
+ family_configure_target(${TARGET})
+ target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device)
+ endfunction()
+
+ function(family_configure_host_example TARGET)
+ family_configure_target(${TARGET})
+ target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_host)
+ endfunction()
+
+ 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()
+ endfunction()
+endif()
diff --git a/src/portable/raspberrypi/rp2040/hcd_rp2040.c b/src/portable/raspberrypi/rp2040/hcd_rp2040.c
index 864c6253e..3c62b5732 100644
--- a/src/portable/raspberrypi/rp2040/hcd_rp2040.c
+++ b/src/portable/raspberrypi/rp2040/hcd_rp2040.c
@@ -296,7 +296,6 @@ static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t dev_addr, uint8_t
uint8_t const num = tu_edpt_number(ep_addr);
tusb_dir_t const dir = tu_edpt_dir(ep_addr);
- bool in = ep_addr & TUSB_DIR_IN_MASK;
ep->ep_addr = ep_addr;
ep->dev_addr = dev_addr;