Skip to content

Commit 15899fa

Browse files
authored
Add files via upload
1 parent be586ba commit 15899fa

File tree

3 files changed

+21
-895
lines changed

3 files changed

+21
-895
lines changed

CMakeLists.txt

Lines changed: 3 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,5 @@
1-
if (NOT PICO_PROGRAM_MAIN_ENTRY)
2-
# User configuration for HyperSerialPico section starts here
1+
set(OUTPUT_DATA_PINS "16 17 18 19 20 21 22 23")
32

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)
3+
set(SECOND_SEGMENT_INDEX 16) # Enable multi-segment, starting at GPIO16
84

9-
# Default output data pin for the non-SPI LED strips (only for sk6812/ws2812b)
10-
set(OUTPUT_DATA_PIN 2)
11-
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)
17-
18-
# Use multi-segment, starting index of second led strip or OFF to disable
19-
set(SECOND_SEGMENT_INDEX OFF)
20-
21-
# If multi-segment is used and it's reversed, set this option to ON to enable reversing
22-
set(SECOND_SEGMENT_REVERSED OFF)
23-
24-
# User configuration section ends here
25-
# Usually you don't need to change anything below this section
26-
endif()
27-
28-
cmake_minimum_required(VERSION 3.13)
29-
30-
# Disable Pico 'Reset device'
31-
add_definitions ( -DPICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE=0 )
32-
33-
# initialize the SDK based on PICO_SDK_PATH
34-
# note: this must happen before project()
35-
set(PICO_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/sdk/pico)
36-
set(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/sdk/freertos)
37-
38-
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)
39-
include(${FREERTOS_KERNEL_PATH}/portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake)
40-
41-
project(HyperSerialPico C CXX ASM)
42-
set(CMAKE_C_STANDARD 11)
43-
set(CMAKE_CXX_STANDARD 17)
44-
45-
IF(CMAKE_COMPILER_IS_GNUCC)
46-
string(REGEX REPLACE "(\-O[011123456789])" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
47-
string(REGEX REPLACE "(\-O[011123456789])" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
48-
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Og")
49-
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Og")
50-
ENDIF(CMAKE_COMPILER_IS_GNUCC)
51-
52-
# initialize the Raspberry Pi Pico SDK
53-
pico_sdk_init()
54-
55-
# generic HyperSerialPico settings
56-
set(HyperSerialPicoCompanionLibs FreeRTOS-Kernel FreeRTOS-Kernel-Heap1 pico_stdlib pico_multicore hardware_pio hardware_dma hardware_spi)
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)
60-
61-
if(NOT CMAKE_HOST_WIN32)
62-
string(ASCII 27 EscChar)
63-
set(ColorReset "${EscChar}[m")
64-
set(GreenColor "${EscChar}[32m")
65-
set(YellowColor "${EscChar}[33m")
66-
endif()
67-
68-
if (OVERRIDE_DATA_PIN)
69-
set(OUTPUT_DATA_PIN ${OVERRIDE_DATA_PIN})
70-
message( STATUS "${YellowColor}Overriding Neopixel Data GPIO: ${OUTPUT_DATA_PIN}${ColorReset}")
71-
endif()
72-
73-
if (OVERRIDE_SPI_DATA_PIN)
74-
set(OUTPUT_SPI_DATA_PIN ${OVERRIDE_SPI_DATA_PIN})
75-
message( STATUS "${YellowColor}Overriding SPI Data GPIO: ${OUTPUT_SPI_DATA_PIN}${ColorReset}")
76-
endif()
77-
78-
if (OVERRIDE_SPI_CLOCK_PIN)
79-
set(OUTPUT_SPI_CLOCK_PIN ${OVERRIDE_SPI_CLOCK_PIN})
80-
message( STATUS "${YellowColor}Overriding SPI Clock GPIO: ${OUTPUT_SPI_CLOCK_PIN}${ColorReset}")
81-
endif()
82-
83-
if (OVERRIDE_SPI_INTERFACE)
84-
set(OUTPUT_SPI_INTERFACE ${OVERRIDE_SPI_INTERFACE})
85-
message( STATUS "${YellowColor}Overriding SPI Interface: ${OUTPUT_SPI_INTERFACE}${ColorReset}")
86-
endif()
87-
88-
if (OVERRIDE_BOOT_WORKAROUND)
89-
set(BOOT_WORKAROUND ${OVERRIDE_BOOT_WORKAROUND})
90-
message( STATUS "${YellowColor}Overriding boot workaround: ${BOOT_WORKAROUND}${ColorReset}")
91-
endif()
92-
93-
message( STATUS "---------------------------")
94-
message( STATUS "Neopixel Data GPIO: ${GreenColor}${OUTPUT_DATA_PIN}${ColorReset}")
95-
message( STATUS "SPI Data GPIO: ${GreenColor}${OUTPUT_SPI_DATA_PIN}${ColorReset}")
96-
message( 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-
102-
message( STATUS "SPI Interface: ${GreenColor}${OUTPUT_SPI_INTERFACE}${ColorReset}")
103-
message( STATUS "Boot workaround: ${GreenColor}${BOOT_WORKAROUND}${ColorReset}")
104-
message( STATUS "---------------------------")
105-
106-
add_compile_options(-ftrack-macro-expansion=0 -fno-diagnostics-show-caret -fdiagnostics-color=auto)
107-
108-
macro(HyperSerialPicoTarget HyperSerialPicoTargetName)
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()
114-
if (BOOT_WORKAROUND)
115-
target_compile_definitions(${HyperSerialPicoTargetName} PUBLIC -DBOOT_WORKAROUND -DPICO_XOSC_STARTUP_DELAY_MULTIPLIER=64)
116-
endif()
117-
target_include_directories(${HyperSerialPicoTargetName} PRIVATE ${HyperSerialPicoCompanionIncludes})
118-
target_link_libraries(${HyperSerialPicoTargetName} ${HyperSerialPicoCompanionLibs})
119-
pico_add_extra_outputs(${HyperSerialPicoTargetName})
120-
pico_enable_stdio_usb(${HyperSerialPicoTargetName} 1)
121-
pico_enable_stdio_uart(${HyperSerialPicoTargetName} 0)
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)
125-
endmacro()
126-
127-
# targets for different LED strips
128-
IF(NOT SECOND_SEGMENT_INDEX)
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()
133-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Cold")
134-
target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Cold" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN})
135-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Neutral")
136-
target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Neutral" PRIVATE -DNEOPIXEL_RGBW -DDATA_PIN=${OUTPUT_DATA_PIN})
137-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_ws2812")
138-
target_compile_definitions("${CMAKE_PROJECT_NAME}_ws2812" PRIVATE -DNEOPIXEL_RGB -DDATA_PIN=${OUTPUT_DATA_PIN})
139-
ELSE()
140-
IF(NOT SECOND_SEGMENT_REVERSED)
141-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Cold_multisegment_at_${SECOND_SEGMENT_INDEX}")
142-
target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Cold_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX})
143-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Neutral_multisegment_at_${SECOND_SEGMENT_INDEX}")
144-
target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Neutral_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX})
145-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_ws2812_multisegment_at_${SECOND_SEGMENT_INDEX}")
146-
target_compile_definitions("${CMAKE_PROJECT_NAME}_ws2812_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGB -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX})
147-
ELSE()
148-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Cold_rev_multisegment_at_${SECOND_SEGMENT_INDEX}")
149-
target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Cold_rev_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DCOLD_WHITE -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX} -DSECOND_SEGMENT_REVERSED)
150-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_sk6812Neutral_rev_multisegment_at_${SECOND_SEGMENT_INDEX}")
151-
target_compile_definitions("${CMAKE_PROJECT_NAME}_sk6812Neutral_rev_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGBW -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX} -DSECOND_SEGMENT_REVERSED)
152-
HyperSerialPicoTarget("${CMAKE_PROJECT_NAME}_ws2812_rev_multisegment_at_${SECOND_SEGMENT_INDEX}")
153-
target_compile_definitions("${CMAKE_PROJECT_NAME}_ws2812_rev_multisegment_at_${SECOND_SEGMENT_INDEX}" PRIVATE -DNEOPIXEL_RGB -DDATA_PIN=${OUTPUT_DATA_PIN} -DSECOND_SEGMENT_START_INDEX=${SECOND_SEGMENT_INDEX} -DSECOND_SEGMENT_REVERSED)
154-
ENDIF()
155-
ENDIF()
5+
pico_generate_pio_header(${CMAKE_PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/pio/neopixel_ws2812b_parallel.pio OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/generated)

0 commit comments

Comments
 (0)