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
39 lines
1.2 KiB
Bash
Executable File
39 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Builds the Piano LED Visualizer firmware for RP2040 / RP2350.
|
|
#
|
|
# Produces pico/build/pianoled.uf2. Hold BOOTSEL while plugging the board in
|
|
# and copy the .uf2 onto the mass-storage device that appears.
|
|
#
|
|
set -e
|
|
cd "$(dirname "$0")"
|
|
|
|
# Board. Defaults to the Waveshare RP2350-Plus (4MB, USB-C). Any RP2040/RP2350
|
|
# board works; pico-sdk 2.3.0 ships definitions for 12 Waveshare RP2350 boards
|
|
# plus the stock pico/pico2. Run this to list them:
|
|
# ls "$PICO_SDK_PATH"/src/boards/include/boards/
|
|
BOARD=${BOARD:-waveshare_rp2350_plus_4mb}
|
|
|
|
export PICO_SDK_PATH=${PICO_SDK_PATH:-$HOME/git/pico-sdk}
|
|
|
|
if [ ! -f "$PICO_SDK_PATH/pico_sdk_init.cmake" ]; then
|
|
echo "error: pico-sdk not found at $PICO_SDK_PATH" >&2
|
|
echo " git clone --recursive https://github.com/raspberrypi/pico-sdk" >&2
|
|
echo " or set PICO_SDK_PATH" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v arm-none-eabi-gcc >/dev/null 2>&1; then
|
|
echo "error: arm-none-eabi-gcc not found." >&2
|
|
echo " Debian/Ubuntu: sudo apt-get install gcc-arm-none-eabi" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cmake -B build -S . -DPICO_BOARD="$BOARD"
|
|
cmake --build build -j "$(nproc)"
|
|
|
|
echo
|
|
echo "Built for $BOARD:"
|
|
ls -l build/pianoled.uf2
|
|
arm-none-eabi-size build/pianoled.elf
|