cmake_minimum_required(VERSION 3.13)

# Explicitely define board
set(PICO_BOARD pico)

# Include pico-sdk cmake support
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)

project(Pico_USB_Tests C CXX ASM)
set(CMAKE_C_STANDARD 17)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

# Executables
add_executable(Pico_Host)
add_executable(Pico_Device)

# Sources
target_sources(Pico_Host PUBLIC
  src_host/main.c
  src_host/cdc_app.c
)

target_sources(Pico_Device PUBLIC
  src_device/main.c
  src_device/usb_descriptor.c
)

# Flags
# Enable the reset interface
target_compile_definitions(Pico_Device PUBLIC
    PICO_ENABLE_USB_RESET_VIA_VENDOR_INTERFACE=1
    # use SDK MS_OS_20 descriptor, as this doesn't have a custom one
    PICO_USB_RESET_SUPPORT_MS_OS_20_DESCRIPTOR=1
    # pass the interface number to the SDK MS_OS_20 descriptor
    PICO_USB_RESET_MS_OS_20_DESCRIPTOR_ITF=4
)

# Include paths
target_include_directories(Pico_Host PUBLIC
  ${CMAKE_CURRENT_LIST_DIR}/src_host/
)

target_include_directories(Pico_Device PUBLIC
  ${CMAKE_CURRENT_LIST_DIR}/src_device/
)

# Libs
target_link_libraries(Pico_Host
  pico_stdlib
  tinyusb_board
  tinyusb_host
)

target_link_libraries(Pico_Device
  pico_stdlib
  tinyusb_board
  tinyusb_device
)

pico_enable_stdio_usb(Pico_Device 1)

# Outputs
pico_add_extra_outputs(Pico_Host)
pico_add_extra_outputs(Pico_Device)

# Flash targets
add_custom_target(Flash_Host
  DEPENDS Pico_Host
  COMMAND picotool load -f ${PROJECT_BINARY_DIR}/Pico_Host.uf2
)

add_custom_target(Flash_Device
  DEPENDS Pico_Device
  COMMAND picotool load -f ${PROJECT_BINARY_DIR}/Pico_Device.uf2
)
