Working notes for the fork itself. The user-facing documentation, attribution, and the "never run on hardware" warning are in README.md — read that first.
This is an additive fork of FlthyHPs by Ryan Sondgeroth
(https://github.com/ryan-sondgeroth/FlthyHPs). His firmware is the repository; our layer
is src/contract/*, test/host/*, and a handful of hooks in src/main.cpp.
Implements the DroidNet Driveable-Animation Contract on the ! command prefix, so
Cantina Studio can drive the three holoprojector jewels (F/R/T) with arbitrary RGB,
beat-locked accents, a host-seeded beat clock, and autonomous board-side section playback.
LED effects only. The ! path never writes HP_command[] and never calls
positionHP / twitchHP / wagHP / RCHP. M:v=show pins enableTwitchHP[*] = false;
M:v=idle restores exactly what show observed (seeded from the startEnableTwitchHP[]
boot snapshot), never a literal true. No servo motion, ever.
Every native command (DT## LED, DT1## servo, S# sequences, the auto-twitch system, the
I2C intake) still behaves exactly as it did before.
- Contract layer: built. Wire parser, beat clock, accent envelope, Phase-2 score table, and the per-board render layer are all in.
- Six parametric effects: built. comet, chase, wipe, gradient, colorcycle, twinkle — rendered around the jewel ring.
- Host verification: green.
bash test/host/run.sh→ 341/341 parser checks, plus a type-check ofContractFlthy.hagainsttest/host/mock_flthy.h. - Hardware verification: NONE. This has never been flashed to a board. Not once. Nothing about flash fit, loop stability, LED timing, or how any of it actually looks has been confirmed on real hardware. Bench-compile and bench-test before this goes anywhere near a droid.
- Fork head:
mainin this repository. Baseline import is commit5385a7c; every commit after it is the DroidNet layer. - Seeded from: the vendored copy of FlthyHPs (v1.8 / sketch header v1.81) in the owner's private working collection of firmware for the C2B5 droid, 2026-07-12, git-tracked files only. That collection is private; upstream is Ryan's repo, linked above.
- MCU/toolchain: ATmega2560 (Arduino Mega ADK), Arduino/AVR via PlatformIO. 8 KB SRAM / 256 KB flash — the roomiest of the three boards this contract targets.
- Role: one of three board forks in the Cantina dome light-show program (RSeries Logics, PSI Pro, FlthyHPs).
- GitHub remote: https://github.com/travisccook/DroidNet-FlthyHPs (public).
src/contract/contract_core.h is byte-identical across the three DroidNet forks
(RSeries / PSI / Flthy). If you change it here, the same change has to land in the other two,
byte for byte, or beat-clock and effect math drift apart between boards. It is pure C++ with
no Arduino dependency, which is why it can be unit-tested on a host.
- The strand is the jewel: 7 NeoPixels per HP,
NEO_JEWEL_LEDS. The spatial effects treat the 6-LED ring as the 1-D strand and handle the center pixel per effect. - Arbitrary RGB is written straight into the jewel as a packed
0xRRGGBBviasetPixelColor(), bypassing the nativebasicColorspalette. Brightness is pre-scaled per write rather than viasetBrightness(), which only re-scales atshow(). - The per-unit look renders through
LED_command[hp].LEDFunction = 100 + effectId, i.e. thecase 101..115block added to the native render switch. INPUTBUFFERLENwas grown 10 → 80 (the contract's params need more than 10 bytes), andserialEvent()now drops trailing bytes past the buffer instead of overrunning it.