cmake_minimum_required(VERSION 3.20)

set(FAMILIY RP2040 CACHE INTERNAL "")
set(FAMILIY_MCU RP2040 CACHE INTERNAL "")
set(CMAKE_BUILD_TYPE Debug)

set(PICO_SDK_PATH ${CMAKE_SOURCE_DIR}/../pico-sdk)
set(TINYUSB_DIR ${CMAKE_SOURCE_DIR}/lib/tinyusb)
# Use the local tinyusb instead of the one in pico-sdk
set(PICO_TINYUSB_PATH ${TINYUSB_DIR})
set(FREERTOS_DIR ${CMAKE_SOURCE_DIR}/lib/FreeRTOS-Kernel)
# output path under build folder 
set(TINYUSB_EXAMPLES_PATH tinyusb_examples)

include(pico_sdk_import.cmake)
# include(pico_extras_import.cmake)

set(PROJECT_NAME "pico_projects" C CXX ASM)
set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "ON" FORCE) 
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

project(${PROJECT_NAME})

set(TINYUSB_DEBUG_LEVEL 1)
add_definitions(-DTINYUSB_DEBUG_LEVEL=1)

pico_sdk_init()

# Project samples
add_subdirectory(projects/template)
add_subdirectory(projects/template_freertos)
add_subdirectory(projects/cdc_hid)
add_subdirectory(projects/i2c_tiny_usb)
add_subdirectory(projects/pico_cdc_msc_hid)
add_subdirectory(projects/pico_dfu)
add_subdirectory(projects/pico_dfu_runtime)
add_subdirectory(projects/pico_host_hid_to_device_cdc)
add_subdirectory(projects/msc_with_fatfs)

# TinyUSB samples
add_subdirectory(${TINYUSB_DIR}/examples/device/audio_4_channel_mic ${TINYUSB_EXAMPLES_PATH}/audio_4_channel_mic)
add_subdirectory(${TINYUSB_DIR}/examples/device/audio_test ${TINYUSB_EXAMPLES_PATH}/audio_test)
add_subdirectory(${TINYUSB_DIR}/examples/device/board_test ${TINYUSB_EXAMPLES_PATH}/board_test)
add_subdirectory(${TINYUSB_DIR}/examples/device/cdc_dual_ports ${TINYUSB_EXAMPLES_PATH}/cdc_dual_ports)
add_subdirectory(${TINYUSB_DIR}/examples/device/cdc_msc ${TINYUSB_EXAMPLES_PATH}/cdc_msc)
# add_subdirectory(${TINYUSB_DIR}/examples/device/cdc_msc_freertos ${TINYUSB_EXAMPLES_PATH}/cdc_msc_freertos) # rp2040 not supported
add_subdirectory(${TINYUSB_DIR}/examples/device/dfu ${TINYUSB_EXAMPLES_PATH}/dfu)
add_subdirectory(${TINYUSB_DIR}/examples/device/dfu_runtime ${TINYUSB_EXAMPLES_PATH}/dfu_runtime)
add_subdirectory(${TINYUSB_DIR}/examples/device/dynamic_configuration ${TINYUSB_EXAMPLES_PATH}/dynamic_configuration)
add_subdirectory(${TINYUSB_DIR}/examples/device/hid_boot_interface ${TINYUSB_EXAMPLES_PATH}/hid_boot_interface)
add_subdirectory(${TINYUSB_DIR}/examples/device/hid_composite ${TINYUSB_EXAMPLES_PATH}/hid_composite)
# add_subdirectory(${TINYUSB_DIR}/examples/device/hid_composite_freertos ${TINYUSB_EXAMPLES_PATH}/hid_composite_freertos) # rp2040 not supported
add_subdirectory(${TINYUSB_DIR}/examples/device/hid_generic_inout ${TINYUSB_EXAMPLES_PATH}/hid_generic_inout)
add_subdirectory(${TINYUSB_DIR}/examples/device/hid_multiple_interface ${TINYUSB_EXAMPLES_PATH}/hid_multiple_interface)
add_subdirectory(${TINYUSB_DIR}/examples/device/midi_test ${TINYUSB_EXAMPLES_PATH}/midi_test)
add_subdirectory(${TINYUSB_DIR}/examples/device/msc_dual_lun ${TINYUSB_EXAMPLES_PATH}/msc_dual_lun)
add_subdirectory(${TINYUSB_DIR}/examples/device/net_lwip_webserver ${TINYUSB_EXAMPLES_PATH}/net_lwip_webserver)
add_subdirectory(${TINYUSB_DIR}/examples/device/uac2_headset ${TINYUSB_EXAMPLES_PATH}/uac2_headset)
add_subdirectory(${TINYUSB_DIR}/examples/device/usbtmc ${TINYUSB_EXAMPLES_PATH}/usbtmc)
add_subdirectory(${TINYUSB_DIR}/examples/device/video_capture ${TINYUSB_EXAMPLES_PATH}/video_capture)
add_subdirectory(${TINYUSB_DIR}/examples/device/webusb_serial ${TINYUSB_EXAMPLES_PATH}/webusb_serial)
add_subdirectory(${TINYUSB_DIR}/examples/dual/host_hid_to_device_cdc ${TINYUSB_EXAMPLES_PATH}/host_hid_to_device_cdc)
add_subdirectory(${TINYUSB_DIR}/examples/host/bare_api ${TINYUSB_EXAMPLES_PATH}/bare_api)
add_subdirectory(${TINYUSB_DIR}/examples/host/cdc_msc_hid ${TINYUSB_EXAMPLES_PATH}/cdc_msc_hid)
add_subdirectory(${TINYUSB_DIR}/examples/host/hid_controller ${TINYUSB_EXAMPLES_PATH}/hid_controller)
