Files
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

42 lines
1.4 KiB
Bash
Executable File

#!/bin/sh
# Host-side tests for the mapping and power-clamp logic.
# Compiles the real firmware sources against stubbed Circle headers, across
# every configuration variant that changes the rendering path.
set -e
cd "$(dirname "$0")/.."
OUT=$(mktemp -d)
trap 'rm -rf "$OUT"' EXIT
FAIL=0
for CFG in \
"default:" \
"reversed strip:-DSTRIP_REVERSED=1" \
"velocity insensitive:-DVELOCITY_SENSITIVE=0" \
"reversed + velocity insensitive:-DSTRIP_REVERSED=1 -DVELOCITY_SENSITIVE=0" \
"full brightness:-DGLOBAL_BRIGHTNESS=255" \
"tight key cap:-DMAX_LIT_KEYS=5" \
"single LED per key:-DLEDS_PER_KEY=1" \
"three LEDs per key:-DLEDS_PER_KEY=3" \
"hints disabled:-DHINT_MIDI_CHANNEL=MIDI_CHANNEL_NONE" \
"linear map:-DNOTE_MAP_GEOMETRIC=0" \
"linear map reversed:-DNOTE_MAP_GEOMETRIC=0 -DSTRIP_REVERSED=1" \
"positive offset:-DLED_OFFSET=3" \
"negative offset:-DLED_OFFSET=-2" \
"offset reversed:-DLED_OFFSET=4 -DSTRIP_REVERSED=1" \
"no self test:-DBOOT_SELF_TEST=0" \
"no idle indicator:-DIDLE_INDICATOR=0" \
"minimal bring-up:-DBOOT_SELF_TEST=0 -DIDLE_INDICATOR=0" \
; do
NAME=${CFG%%:*}
FLAGS=${CFG#*:}
printf '\n=== %s ===\n' "$NAME"
g++ -std=c++17 -Wall -Wextra -Wno-unused-parameter $FLAGS \
-o "$OUT/t" -Itests/stubs -Isrc \
tests/test_pianoleds.cpp src/pianoleds.cpp
"$OUT/t" || FAIL=1
done
printf '\n'
if [ $FAIL -ne 0 ]; then echo "SOME CONFIGURATIONS FAILED"; exit 1; fi
echo "all configurations passed"