Files
PianoLED-Circle-Edition/pico/CMakeLists.txt
T
prosolis 59bd3b4cea Add boot self-test and idle indicator; target the Waveshare RP2350-Plus
The board arriving is a Waveshare RP2350-Plus (4MB, USB-C), which is now the
default BOARD. Its pico-sdk header defines neither PICO_DEFAULT_LED_PIN nor
PICO_DEFAULT_WS2812_PIN - it has no onboard indicator at all - so a bare board
gives no sign of life. The status-LED support added for boards that do have one
(zero, one, tiny, usb_a on GPIO16; eth on GPIO25) is kept and compiles out here.

That makes feedback on the strip itself the useful path, and it turns out to be
the better one anyway:

- Boot self-test sweeps one pixel from index 0 to the far end once at startup.
  It answers in a single glance whether the firmware runs, PIO drives the line,
  the strip is the length LED_COUNT claims, the far end holds voltage, and -
  because you see which end it starts from - whether STRIP_REVERSED is right.
  It runs before USB, so the first test needs nothing but 5V.
- Idle indicator holds one dim pixel lit while no host is connected, separating
  "powered and waiting" from "no power" and from "crashed".

Both are platform-independent, so the Circle build gets them too.

Verified: tests pass across seventeen configurations, now including the
self-test and idle paths on and off. Both platforms build clean with no
warnings from project sources.

Note on the previous commit's verification: a filtered build log hid a real
compile error in the Pico target (sleep_ms takes uint32_t, which is unsigned
long here, and did not match the portable void(*)(unsigned) delay callback).
The build script now gets an explicit success check rather than a grep.

Claude-Session: https://claude.ai/code/session_01TVCB25LBsmeteWvaSMz4Ne
2026-08-27 23:22:56 -07:00

43 lines
961 B
CMake

cmake_minimum_required(VERSION 3.13)
# Board. Defaults to the Waveshare RP2350-Plus (4MB, USB-C).
set(PICO_BOARD waveshare_rp2350_plus_4mb CACHE STRING "Target board")
include(pico_sdk_import.cmake)
project(pianoled C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
pico_sdk_init()
add_executable(pianoled
main.cpp
picostrip.cpp
../src/pianoleds.cpp
usb_descriptors.c
)
# PLATFORM_PICO selects the Pico wiring block in config.h.
target_compile_definitions(pianoled PRIVATE PLATFORM_PICO)
target_include_directories(pianoled PRIVATE
${CMAKE_CURRENT_LIST_DIR}
${CMAKE_CURRENT_LIST_DIR}/../src
)
pico_generate_pio_header(pianoled ${CMAKE_CURRENT_LIST_DIR}/ws2812.pio)
target_link_libraries(pianoled
pico_stdlib
hardware_pio
tinyusb_device
tinyusb_board
)
# Debug log on UART only. USB is the MIDI device and must not be shared.
pico_enable_stdio_uart(pianoled 1)
pico_enable_stdio_usb(pianoled 0)
pico_add_extra_outputs(pianoled)