1- # User configuration section starts here
1+ if (NOT PICO_PROGRAM_MAIN_ENTRY)
2+ # User configuration for HyperSerialPico section starts here
23
3- # Some boards, such as the first Adafruit revisions, may have trouble booting properly
4- # due to bad componets used in the design.
5- # Turn this setting to ON if your rp2040 is not detected after firmware upload and reset
6- set (BOOT_WORKAROUND OFF )
4+ # Some boards, such as the first Adafruit revisions, may have trouble booting properly
5+ # due to bad componets used in the design.
6+ # Turn this setting to ON if your rp2040 is not detected after firmware upload and reset
7+ set (BOOT_WORKAROUND OFF )
78
8- # Default output data pin for the non-SPI LED strips (only for sk6812/ws2812b)
9- set (OUTPUT_DATA_PIN 2)
9+ # Default output data pin for the non-SPI LED strips (only for sk6812/ws2812b)
10+ set (OUTPUT_DATA_PIN 2)
1011
11- # Default output data/clocks pin for the SPI LED strips (only for apa102, not for sk6812/ws2812b)
12- # only certain pairs of pins are allowed for selected SPI interface (refer to "readme.md")
13- set (OUTPUT_SPI_DATA_PIN 3)
14- set (OUTPUT_SPI_CLOCK_PIN 2)
15- set (OUTPUT_SPI_INTERFACE spi0)
12+ # Default output data/clocks pin for the SPI LED strips (only for apa102, not for sk6812/ws2812b)
13+ # only certain pairs of pins are allowed for selected SPI interface (refer to "readme.md")
14+ set (OUTPUT_SPI_DATA_PIN 3)
15+ set (OUTPUT_SPI_CLOCK_PIN 2)
16+ set (OUTPUT_SPI_INTERFACE spi0)
1617
17- # Use multi-segment, starting index of second led strip or OFF to disable
18- set (SECOND_SEGMENT_INDEX OFF )
18+ # Use multi-segment, starting index of second led strip or OFF to disable
19+ set (SECOND_SEGMENT_INDEX OFF )
1920
20- # If multi-segment is used and it's reversed, set this option to ON to enable reversing
21- set (SECOND_SEGMENT_REVERSED OFF )
21+ # If multi-segment is used and it's reversed, set this option to ON to enable reversing
22+ set (SECOND_SEGMENT_REVERSED OFF )
2223
23- # User configuration section ends here
24- # Usually you don't need to change anything below this section
24+ # User configuration section ends here
25+ # Usually you don't need to change anything below this section
26+ endif ()
2527
2628cmake_minimum_required (VERSION 3.13)
2729
@@ -30,8 +32,8 @@ add_definitions ( -DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0 )
3032
3133# initialize the SDK based on PICO_SDK_PATH
3234# note: this must happen before project()
33- set (PICO_SDK_PATH ${CMAKE_SOURCE_DIR } /sdk/pico)
34- set (FREERTOS_KERNEL_PATH ${CMAKE_SOURCE_DIR } /sdk/freertos)
35+ set (PICO_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR } /sdk/pico)
36+ set (FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_SOURCE_DIR } /sdk/freertos)
3537
3638include (${PICO_SDK_PATH} /external/pico_sdk_import.cmake)
3739include (${FREERTOS_KERNEL_PATH} /portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake)
@@ -52,9 +54,9 @@ pico_sdk_init()
5254
5355# generic HyperSerialPico settings
5456set (HyperSerialPicoCompanionLibs FreeRTOS-Kernel FreeRTOS-Kernel-Heap1 pico_stdlib pico_multicore hardware_pio hardware_dma hardware_spi)
55- set (HyperSerialPicoCompanionIncludes ${CMAKE_SOURCE_DIR } /include ${CMAKE_SOURCE_DIR } /sdk/config)
56- file (MAKE_DIRECTORY ${CMAKE_SOURCE_DIR } /generated )
57- file (MAKE_DIRECTORY ${CMAKE_SOURCE_DIR } /firmware)
57+ set (HyperSerialPicoCompanionIncludes ${CMAKE_CURRENT_SOURCE_DIR } /include ${CMAKE_CURRENT_SOURCE_DIR } /sdk/config)
58+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR } /generated )
59+ file (MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR } /firmware)
5860
5961if (NOT CMAKE_HOST_WIN32 )
6062 string (ASCII 27 EscChar)
@@ -92,14 +94,23 @@ message( STATUS "---------------------------")
9294message ( STATUS "Neopixel Data GPIO: ${GreenColor}${OUTPUT_DATA_PIN}${ColorReset} " )
9395message ( STATUS "SPI Data GPIO: ${GreenColor}${OUTPUT_SPI_DATA_PIN}${ColorReset} " )
9496message ( STATUS "SPI Clock GPIO: ${GreenColor}${OUTPUT_SPI_CLOCK_PIN}${ColorReset} " )
97+
98+ if (OUTPUT_SPI_CHIP_SELECT)
99+ message ( STATUS "SPI Select GPIO: ${GreenColor}${OUTPUT_SPI_CHIP_SELECT}${ColorReset} " )
100+ endif ()
101+
95102message ( STATUS "SPI Interface: ${GreenColor}${OUTPUT_SPI_INTERFACE}${ColorReset} " )
96103message ( STATUS "Boot workaround: ${GreenColor}${BOOT_WORKAROUND}${ColorReset} " )
97104message ( STATUS "---------------------------" )
98105
99106add_compile_options (-ftrack-macro-expansion=0 -fno-diagnostics-show-caret -fdiagnostics-color=auto)
100107
101108macro (HyperSerialPicoTarget HyperSerialPicoTargetName)
102- add_executable (${HyperSerialPicoTargetName} ${CMAKE_SOURCE_DIR} /source /main.cpp)
109+ if (PICO_PROGRAM_MAIN_ENTRY)
110+ add_executable (${HyperSerialPicoTargetName} ${PICO_PROGRAM_MAIN_ENTRY} )
111+ else ()
112+ add_executable (${HyperSerialPicoTargetName} ${CMAKE_CURRENT_SOURCE_DIR} /source /main.cpp)
113+ endif ()
103114 if (BOOT_WORKAROUND)
104115 target_compile_definitions (${HyperSerialPicoTargetName} PUBLIC -DBOOT_WORKAROUND -DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64)
105116 endif ()
@@ -108,15 +119,17 @@ macro(HyperSerialPicoTarget HyperSerialPicoTargetName)
108119 pico_add_extra_outputs(${HyperSerialPicoTargetName} )
109120 pico_enable_stdio_usb(${HyperSerialPicoTargetName} 1)
110121 pico_enable_stdio_uart(${HyperSerialPicoTargetName} 0)
111- pico_generate_pio_header(${HyperSerialPicoTargetName} ${CMAKE_SOURCE_DIR } /pio/neopixel.pio OUTPUT_DIR ${CMAKE_SOURCE_DIR } /generated )
112- pico_generate_pio_header(${HyperSerialPicoTargetName} ${CMAKE_SOURCE_DIR } /pio/neopixel_ws2812b.pio OUTPUT_DIR ${CMAKE_SOURCE_DIR } /generated )
113- add_custom_command (TARGET ${HyperSerialPicoTargetName} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR } /${HyperSerialPicoTargetName} .uf2 ${CMAKE_SOURCE_DIR } /firmware)
122+ pico_generate_pio_header(${HyperSerialPicoTargetName} ${CMAKE_CURRENT_SOURCE_DIR } /pio/neopixel.pio OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR } /generated )
123+ pico_generate_pio_header(${HyperSerialPicoTargetName} ${CMAKE_CURRENT_SOURCE_DIR } /pio/neopixel_ws2812b.pio OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR } /generated )
124+ add_custom_command (TARGET ${HyperSerialPicoTargetName} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR } /${HyperSerialPicoTargetName} .uf2 ${CMAKE_CURRENT_SOURCE_DIR } /firmware)
114125endmacro ()
115126
116127# targets for different LED strips
117128IF (NOT SECOND_SEGMENT_INDEX)
118- HyperSerialPicoTarget("${CMAKE_PROJECT_NAME} _Spi" )
119- target_compile_definitions ("${CMAKE_PROJECT_NAME} _Spi" PRIVATE -DSPILED_APA102 -DSPI_INTERFACE=${OUTPUT_SPI_INTERFACE} -DDATA_PIN=${OUTPUT_SPI_DATA_PIN} -DCLOCK_PIN=${OUTPUT_SPI_CLOCK_PIN} )
129+ IF (NOT DISABLE_SPI_LEDS)
130+ HyperSerialPicoTarget("${CMAKE_PROJECT_NAME} _Spi" )
131+ target_compile_definitions ("${CMAKE_PROJECT_NAME} _Spi" PRIVATE -DSPILED_APA102 -DSPI_INTERFACE=${OUTPUT_SPI_INTERFACE} -DDATA_PIN=${OUTPUT_SPI_DATA_PIN} -DCLOCK_PIN=${OUTPUT_SPI_CLOCK_PIN} )
132+ endif ()
120133 HyperSerialPicoTarget("${CMAKE_PROJECT_NAME} _sk6812Cold" )
121134 target_compile_definitions ("${CMAKE_PROJECT_NAME} _sk6812Cold" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN} )
122135 HyperSerialPicoTarget("${CMAKE_PROJECT_NAME} _sk6812Neutral" )
0 commit comments