- Task 1 complete: asyncio REPL entry point wiring all Phase 2 modules - Task 2: hardware acceptance checkpoint awaiting user verification on Pi+ESP32 - SUMMARY.md documents AppState pattern and TUI integration design - STATE.md updated, ROADMAP.md Phase 2 marked Complete
118 lines
6.3 KiB
Markdown
118 lines
6.3 KiB
Markdown
---
|
|
gsd_state_version: 1.0
|
|
milestone: v1.0
|
|
milestone_name: milestone
|
|
status: executing
|
|
stopped_at: "Checkpoint: 02-06 Task 2 hardware acceptance — awaiting user verification"
|
|
last_updated: "2026-04-03T12:55:30.762Z"
|
|
last_activity: 2026-04-03
|
|
progress:
|
|
total_phases: 4
|
|
completed_phases: 2
|
|
total_plans: 10
|
|
completed_plans: 10
|
|
percent: 0
|
|
---
|
|
|
|
# Project State
|
|
|
|
## Project Reference
|
|
|
|
See: .planning/PROJECT.md (updated 2026-04-03)
|
|
|
|
**Core value:** Songs mit LED-Animationen choreografieren und abspielen — der Nutzer baut Timeline-basierte Lichtshows zu seiner Musik.
|
|
**Current focus:** Phase 02 — app-core-audio
|
|
|
|
## Current Position
|
|
|
|
Phase: 02 (app-core-audio) — EXECUTING
|
|
Plan: 4 of 6
|
|
Status: Ready to execute
|
|
Last activity: 2026-04-03
|
|
|
|
Progress: [░░░░░░░░░░] 0%
|
|
|
|
## Performance Metrics
|
|
|
|
**Velocity:**
|
|
|
|
- Total plans completed: 0
|
|
- Average duration: -
|
|
- Total execution time: 0 hours
|
|
|
|
**By Phase:**
|
|
|
|
| Phase | Plans | Total | Avg/Plan |
|
|
|-------|-------|-------|----------|
|
|
| - | - | - | - |
|
|
|
|
**Recent Trend:**
|
|
|
|
- Last 5 plans: -
|
|
- Trend: -
|
|
|
|
*Updated after each plan completion*
|
|
| Phase 01-esp32-firmware P01 | 3 | 3 tasks | 6 files |
|
|
| Phase 01-esp32-firmware P01 | 21min | 4 tasks | 7 files |
|
|
| Phase 01-esp32-firmware P02 | 3min | 2 tasks | 5 files |
|
|
| Phase 01-esp32-firmware P03 | 14 | 2 tasks | 11 files |
|
|
| Phase 01-esp32-firmware P04 | 5 | 1 tasks | 2 files |
|
|
| Phase 01-esp32-firmware P04 | 5 | 2 tasks | 2 files |
|
|
| Phase 02-app-core-audio P02 | 4min | 1 tasks | 4 files |
|
|
| Phase 02-app-core-audio P03 | 4 | 1 tasks | 3 files |
|
|
| Phase 02-app-core-audio P01 | 7min | 2 tasks | 7 files |
|
|
| Phase 02-app-core-audio P04 | 2min | 1 tasks | 2 files |
|
|
| Phase 02-app-core-audio P05 | 2min | 1 tasks | 3 files |
|
|
| Phase 02-app-core-audio P06 | 5min | 1 tasks | 3 files |
|
|
|
|
## Accumulated Context
|
|
|
|
### Decisions
|
|
|
|
Decisions are logged in PROJECT.md Key Decisions table.
|
|
Recent decisions affecting current work:
|
|
|
|
- [Roadmap]: Hardware-first build order — ESP32 is the validation target for all Pi-side work; developing against a mock risks protocol mismatches late.
|
|
- [Roadmap]: WiFi+RMT coexistence must be tested on day 1 of Phase 1 (documented FastLED #1657, February 2026 — actively problematic on single-core ESP32-C3).
|
|
- [Roadmap]: SK6812 is RGBW (4 bytes/LED) — configure explicitly before any animation code; retrofitting requires protocol version bump.
|
|
- [Phase 01-esp32-firmware]: GPIO3 for SK6812 RMT (safe on SuperMini); GPIO6/7 for WS2801 SPI with GPIO0/1 fallback noted for JTAG conflicts
|
|
- [Phase 01-esp32-firmware]: NeoWs2801Spi2MhzMethod for 5m cable signal integrity; NeoGrbwFeature for SK6812 RGBW 4-byte mode
|
|
- [Phase 01-esp32-firmware]: -DESP32_ARDUINO_NO_RGB_BUILTIN mandatory in platformio.ini to prevent RMT driver conflict with Arduino core 3.x
|
|
- [Phase 01-esp32-firmware]: Hardware coexistence validated: WIFI_PS_NONE eliminates RMT flicker on ESP32-C3, zero flicker confirmed during 30s UDP burst test
|
|
- [Phase 01-esp32-firmware]: GPIO3/6/7 pin assignments confirmed on physical hardware — no JTAG conflicts, fallback GPIO0/1 not needed
|
|
- [Phase 01-esp32-firmware]: Two-queue FreeRTOS pattern: xQueueSendFromISR in AsyncUDP callback, parseTask drains rawQueue and dispatches LedCommand to commandQueue — prevents watchdog resets from JSON heap alloc in callback
|
|
- [Phase 01-esp32-firmware]: STATUS cmd handled inline in parseTask (no animation engine route) — needs sender IP/port from raw packet context, responds via udp.writeTo()
|
|
- [Phase 01-esp32-firmware]: parseCommand() enforces brightness cap (max 60%) per D-09 — firmware-side safety cap regardless of Pi value
|
|
- [Phase 01-esp32-firmware]: vTaskDelayUntil for 50fps drift-free animation tick — never drifts by compute time unlike vTaskDelay
|
|
- [Phase 01-esp32-firmware]: autoWhite formula: min(r,g,b)/2 warm-white approximation — triggers only when W=0 on RGBW strips
|
|
- [Phase 01-esp32-firmware]: initAnimationEngine() called before WiFi.begin() so startup breathing animation is visible during WiFi connect (D-11)
|
|
- [Phase 01-esp32-firmware]: WIFI_PS_NONE re-applied on WiFi reconnect to prevent RMT flicker after disconnect/reconnect cycle
|
|
- [Phase 01-esp32-firmware]: Hardware acceptance test approved — all 5 FW requirements (FW-01 through FW-05) validated on physical ESP32-C3 SuperMini with both LED strips
|
|
- [Phase 02-app-core-audio]: asyncio DatagramProtocol with fire-and-forget sendto() for ESP32 UDP transport (D-10); v:1 injected by transport layer; connected state via STATUS ok only (D-12)
|
|
- [Phase 02-app-core-audio]: D-04 applied: AudioPlayer uses miniaudio in its own OS thread, no asyncio dependencies in player.py
|
|
- [Phase 02-app-core-audio]: D-09 applied: pause() saves _paused_position, resume() calls _start_device(seek_seconds=saved) for accurate seek-based resume
|
|
- [Phase 02-app-core-audio]: aubio 0.4.9 source build confirmed on x86_64 (no wheel); will also build on aarch64 Pi
|
|
- [Phase 02-app-core-audio]: sounddevice requires libportaudio2 system package; install via apt on Raspberry Pi OS before uv sync
|
|
- [Phase 02-app-core-audio]: Pydantic v2 field_validator + model_post_init pattern established for ChoreoEvent/ChoreoFile models
|
|
- [Phase 02-app-core-audio]: Absolute monotonic timestamps (D-07): fire_at recalculated fresh each 5ms poll — no drift accumulation over any duration
|
|
- [Phase 02-app-core-audio]: pause_offset accumulation (D-09): resume() adds elapsed pause time keeping all fire_at values correct without event skipping
|
|
- [Phase 02-app-core-audio]: D-05 enforced: call_soon_threadsafe bridge pattern in _audio_callback — no direct asyncio calls from audio thread; import time moved to module-level
|
|
- [Phase 02-app-core-audio]: AppState class holds all module instances — designed for Phase 3 TUI integration
|
|
|
|
### Pending Todos
|
|
|
|
None yet.
|
|
|
|
### Blockers/Concerns
|
|
|
|
- [Phase 1]: ESP32-C3 RMT+WiFi coexistence has conflicting documentation — test simultaneously on first flash.
|
|
- [Phase 1]: GPIO pin assignment for simultaneous RMT (SK6812) + SPI (WS2801) on SuperMini needs hardware validation.
|
|
- [Phase 2]: aubio 0.4.9 ARM pip wheel on Raspberry Pi OS bookworm unverified — may require source build.
|
|
- [Phase 2]: sounddevice + miniaudio simultaneous PipeWire access needs early testing.
|
|
|
|
## Session Continuity
|
|
|
|
Last session: 2026-04-03T12:55:30.747Z
|
|
Stopped at: Checkpoint: 02-06 Task 2 hardware acceptance — awaiting user verification
|
|
Resume file: None
|