Commit Graph

20 Commits

Author SHA1 Message Date
Claude
d16445084a docs(01-03): complete animation engine plan — 8 animations, 50fps FreeRTOS task, RGBW support
- SUMMARY documents ANIM_REGISTRY name strings for Pi-side use
- W auto-derive formula documented for Phase 2 reference
- FW-03 (8 animations) and FW-04 (configurable params) requirements marked complete
- STATE updated: plan 4/4, progress 75%, decisions added
2026-04-03 13:30:33 +02:00
Claude
cba4b1789f feat(01-03): 8 animation implementations — Chase, Pulse, Rainbow, Strobe, Color Wash, Breathe, Sparkle, Gradient Sweep
- chase.cpp: moving window of ledCount/10 pixels, speed scales position advance per tick
- pulse.cpp: sine wave brightness oscillation on solid palette color
- rainbow.cpp: HSV rainbow via HsbColor, hue offset advances with tick, no palette (generates own)
- strobe.cpp: period = 20/speed ticks, on/off alternation, high speed = rapid flash
- color_wash.cpp: linear blend between palette colors, hold_ticks = 50/speed
- breathe.cpp: sine envelope, 5% min brightness (never fully off, D-11), slower tempo than pulse
- sparkle.cpp: dim base + random bright pixels via esp_random() hardware RNG
- gradient_sweep.cpp: 2-color gradient sweeps across strip, offset advances with tick
- All 8 handle isRGBW branch, use params.speed/intensity/colors[], call applyBrightnessW/R
2026-04-03 13:28:12 +02:00
Claude
273015a6eb docs(01-02): complete UDP protocol plan — LedCommand struct, AsyncUDP two-queue pattern
- SUMMARY.md with protocol schema documentation for Phase 2 Pi-side reference
- STATE.md: advanced to plan 4/4, progress 50%, decisions logged
- ROADMAP.md: phase 1 updated (2/4 summaries complete)
- REQUIREMENTS.md: FW-02 and FW-05 marked complete
2026-04-03 13:27:33 +02:00
Claude
230be9994e feat(01-02): wifi_server.h/.cpp — AsyncUDP listener with FreeRTOS queue
- RawPacket struct carries raw bytes, IP, port from AsyncUDP callback
- xQueueSendFromISR in callback (ISR-safe) — zero JSON parsing in callback
- parseTask runs in separate FreeRTOS task, drains rawQueue, parses JSON
- STATUS command handled immediately in parseTask with UDP response to sender
- commandQueue declared extern for animation engine (Plan 03) to consume
- main.cpp: include wifi_server.h, call startUdpServer() after WIFI_PS_NONE
2026-04-03 13:25:15 +02:00
Claude
3323a87ce0 feat(01-02): protocol.h/.cpp — JSON parsing into LedCommand
- LedCommand, AnimParams, Zone, CmdType structs with all fields per D-05/D-06
- parseCommand(): validates v:1 version, routes schrank/wand/all zones, parses cmd/animation
- RGBW colors array parsed from params.colors; defaults to single [255,255,255,255]
- buildStatusResponse(): serializes current state to JSON for STATUS cmd reply
- Errors logged to Serial, no UDP response on bad commands (per D-07)
2026-04-03 13:23:48 +02:00
Claude
0d82f9b7ba docs(01-01): complete plan — hardware checkpoint approved, coexistence validated
- Task 4 hardware checkpoint approved: zero flicker during 30s UDP burst test
- WIFI_PS_NONE confirmed working on ESP32-C3 SuperMini
- GPIO3/6/7 pin assignments validated on physical hardware
- Updated SUMMARY.md with hardware test result and plan completion
- STATE.md advanced to plan 3, progress bar updated to 25%
2026-04-03 13:21:53 +02:00
Claude
6548a84ec1 docs(01-01): complete ESP32 firmware scaffold plan — awaiting hardware checkpoint
- 01-01-SUMMARY.md: dual strip driver, WiFi+RMT coexistence test scaffold
- STATE.md: advanced to plan 2, recorded GPIO/SPI/RMT decisions, 25% progress
- ROADMAP.md: phase 1 in-progress (1/4 plans)
- REQUIREMENTS.md: FW-01 marked complete
2026-04-03 13:18:37 +02:00
Claude
88eb8d38c1 feat(01-01): main.cpp — WiFi init, WIFI_PS_NONE, startup animation, coexistence test
- main.cpp: setup() initializes strips, shows green (connecting) then white (connected)
- esp_wifi_set_ps(WIFI_PS_NONE) called immediately after WiFi connects for RMT coexistence
- loop() toggles LED colors every 5s to confirm strip responsiveness
- Coexistence test procedure documented as comment block in main.cpp
- firmware/.gitignore excludes .pio/ and credentials.h
2026-04-03 13:16:34 +02:00
Claude
55aea7a46b feat(01-01): LED driver — dual strip initialization and output
- led_driver.h declares StripWand (NeoGrbwFeature/RMT) + StripSchrank (NeoWs2801Spi2MhzMethod)
- led_driver.cpp implements initStrips, showBothStrips, setAllWand/Schrank, applyBrightness helpers
- showBothStrips calls stripWand.Show() first (non-blocking DMA) then stripSchrank.Show() (blocking SPI)
- Brightness clamped to [0.0f, BRIGHTNESS_MAX] before scaling
2026-04-03 13:15:41 +02:00
Claude
6fe86bc310 feat(01-01): PlatformIO scaffold + config.h
- platformio.ini with -DESP32_ARDUINO_NO_RGB_BUILTIN, NeoPixelBus ^2.8.0, ArduinoJson ^7.4.0
- config.h defines all pin, LED count, brightness, timing, and FreeRTOS constants
2026-04-03 13:15:06 +02:00
Claude
ee1f45b076 docs(state): record phase 1 planning session 2026-04-03 13:12:55 +02:00
Claude
e90cb3fa39 docs(01-esp32-firmware): create phase plan (4 plans, 3 waves) 2026-04-03 13:12:06 +02:00
Claude
028e2891e0 docs(phase-01): research ESP32-C3 firmware domain
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 13:02:30 +02:00
Claude
e591a4e1fa docs(state): record phase 1 context session 2026-04-03 12:52:15 +02:00
Claude
0d0d7e2061 docs(01): capture phase context 2026-04-03 12:52:06 +02:00
Claude
72ed07b0e9 docs: create roadmap (4 phases) 2026-04-03 12:39:17 +02:00
Claude
1d26fc2dc5 docs: define v1 requirements 2026-04-03 12:29:27 +02:00
Claude
c3680306ee docs: research complete 2026-04-03 12:14:03 +02:00
Claude
136a6c877d chore: add project config 2026-04-03 12:05:27 +02:00
Claude
f89ff71fd6 docs: initialize project 2026-04-03 12:02:56 +02:00