Files
le-mystere-professeur-zacus/docs/CHANGELOG.md
T
Clément SAILLANT 620b27de6d refactor: consolidate ui_freenove_allinone to hardware root level
- Move hardware/firmware/ui_freenove_allinone → hardware/ui_freenove_allinone
- All UI hardware now at hardware/ root level
- Single coherent hardware structure complete

Structure now:
- hardware/firmware/       ← Code source
- hardware/ui_freenove_allinone/ ← UI at root level
- hardware/projects/       ← Secondary projects
- hardware/shared/libs/    ← Shared libraries
- hardware/{bom,enclosure,wiring}/ ← Reference docs
2026-03-01 19:10:27 +01:00

7.5 KiB

Changelog Firmware

Tous les changements notables du firmware sont documentés ici.

Le format suit Keep a Changelog, et ce projet adhère au Semantic Versioning.

[Unreleased]

En cours (branche hardware/firmware)

Added

  • Documentation complète architecture UML (diagrammes classes/séquence)
  • Documentation état des lieux firmware (métriques, tests, structure)
  • Documentation recommandations sprint (roadmap actions)
  • Index navigation documentation (docs/INDEX.md)
  • Skill local embarqué: docs/skills/EMBEDDED_CPP_OO_ESP32S3_PIO_ARDUINO.md
  • Observabilité Freenove: boot report + runtime metrics (audio_underrun, sd_errors, ui_fps_approx, reset reason)
  • Nouveau socle display: DisplayHal + SpiBusManager + hooks backend LGFX/TFT_eSPI
  • Interfaces phase-2 préparatoires: audio_pipeline, storage_prefetch, camera_pipeline, task_topology, ui/fx/fx_engine

Changed

  • Structure nettoyée : suppression symlink esp32 → esp32_audio
  • Structure nettoyée : suppression duplication hardware/firmware/hardware/
  • Paths corrigés dans AGENTS.md, READMEs, tools/qa docs
  • Port mapping ESP8266 OLED : marker ready timeout étendu
  • Port mapping ESP32/ESP8266 : swap 20-6.4.1/20-6.4.2
  • Migration modulaire Freenove: src/{app,ui,audio,storage,camera,drivers,system} avec headers façade legacy
  • UI stack: draw buffers PSRAM unifiés via UI_DRAW_BUF_IN_PSRAM + mapping legacy FREENOVE_PSRAM_UI_DRAW_BUFFER
  • SCENE_WIN_ETAPE: logs périodiques enrichis (fx_fps, heap internal/psram, largest dma)

Fixed

  • Documentation cohérente (esp32/ vs esp32_audio/ résolu)

[0.9.0-beta] - 2026-02-15 (à venir après merge PR #86)

Summary

Refonte complète architecture firmware avec introduction multi-MCU (ESP32 + ESP8266 OLED + RP2040 TFT), Story Engine V2, protocole UI Link v2, dual-channel audio.

Added

Architecture multi-MCU

  • ESP32 Audio Kit : Firmware principal C++ (18.6K lignes)
  • ESP8266 NodeMCU : UI OLED SSD1306 (1.2K lignes)
  • RP2040 Pico : UI TFT tactile LVGL (285 lignes)
  • Protocol UI Link v2 : UART 19200 baud, frame-based ASCII

Story Engine V2

  • Machine à états déclarative (ScenarioDef YAML)
  • Event queue asynchrone (BTN, TOUCH, timers, conditions)
  • Transitions implicites (timeout, LA detection, MP3 gate)
  • Actions modulaires via ActionRegistry
  • Story Apps pluggables : LaDetectorApp, Mp3GateApp, ScreenSceneApp, AudioPackApp
  • StoryAppHost : Lifecycle apps (activate/deactivate par step)

Audio subsystem

  • Dual-channel audio : Base (main) + Overlay (effects)
  • AsyncAudioService : MP3 decoder ESP8266Audio
  • FmRadioScanFx : Effets I2S (sweep, noise, beep) via arduino-audio-tools
  • Mp3Player : Lecteur SD synchrone, TrackCatalog
  • I2sJinglePlayer : RTTTL ringtones
  • CodecES8388Driver : I2C/I2S hardware config
  • Timeouts explicites : Base 30s, Overlay 5s
  • Fallback FX si MP3 manquant/corrupt

Services layer

  • AudioService : Dual-channel orchestration
  • RadioService : Web streaming, station presets
  • WifiService : AP mode, network management
  • WebUiService : AsyncWebServer REST API
  • InputService : Analog keypad, debounce, long-press
  • ScreenSyncService : UI Link coordination, ScreenFrame serialization
  • SerialRouter : USB terminal, debug commands
  • CatalogScanService : SD track indexing
  • LaDetectorRuntimeService : 440Hz detection

Controllers layer

  • StoryControllerV2 : Story mode orchestration (142 lignes)
  • Mp3Controller : SD player mode
  • InputController : Keyboard/touch routing
  • BootProtocolRuntime : Boot sequence (Serial, WiFi, Codec, I2C, SD)
  • Frame types : HELLO, ACK, KEYFRAME, STAT, BTN, TOUCH, PING, PONG
  • Fields : mode, track, track_tot, vol, tune_ofs, tune_conf, uptime_ms, seq, scene
  • CRC8 validation, 320 byte max line, 40 fields max
  • Timeouts : HEARTBEAT_MS=1000, TIMEOUT_MS=1500
  • Reconnection automatique : session counter, KEYFRAME resync

PlatformIO workspace

  • 5 environments : esp32dev, esp32_release, esp8266_oled, ui_rp2040_ili9488, ui_rp2040_ili9486
  • Shared protocol/ directory (ui_link_v2.h/md)
  • Fast build Makefile targets : make fast-esp32, make fast-ui-oled, make fast-ui-tft
  • build_all.sh : Build 5/5 environments

Testing & Automation

  • tools/dev/run_matrix_and_smoke.sh : Build matrix + smoke tests hardware
  • Port mapping by LOCATION (macOS CP2102 stable)
  • Smoke gates stricts : panic/reboot markers → FAIL
  • UI Link status gate : connected==1 requis
  • RC Live sessions : ./tools/dev/zacus.sh rc
  • Artifacts : artifacts/rc_live/{timestamp}/ (logs + rapport _rc.md)

Documentation

  • docs/QUICKSTART.md : Getting started dev
  • docs/HW_NOW.md : Hardware status rapide
  • docs/RC_FINAL_BOARD.md : Tests RC dashboard
  • docs/protocols/PROTOCOL.md : Story Engine V2 format YAML
  • protocol/ui_link_v2.md : Spéc protocole UART
  • esp32_audio/WIRING.md : Câblage ESP32/UI
  • ui/rp2040_tft/WIRING.md : Câblage TFT

Changed

Runtime modes flexibles

  • Mode STORY_V2 (défaut) : Quête ETAPE1 → unlock → ETAPE2 → MP3 libre
  • Mode MP3_PLAYER : Lecteur SD pur (skip story)
  • Mode RADIO : Streaming web (skip story + MP3)
  • Sélection boot via config.h flags

Architecture refactor

  • Séparation claire Controllers / Services / Drivers
  • Event-driven architecture (non-blocking)
  • Dependency injection via constructeurs
  • Error handling via Result enum (Success/Timeout/Failed)
  • Timeouts explicites partout (audio, UI link, network)

Build improvements

  • PlatformIO cache : $HOME/.platformio (pas dans repo)
  • Artifacts deterministes : artifacts/rc_live/<timestamp>/
  • Environment overrides : ZACUS_REQUIRE_HW, ZACUS_WAIT_PORT, ZACUS_NO_COUNTDOWN, ZACUS_SKIP_SMOKE, ZACUS_ENV, ZACUS_FORCE_BUILD

Deprecated

  • Ancien Story Engine V1 (remplacé par V2)
  • Protocole UI Link v1 (remplacé par v2 frames)
  • Single-channel audio (remplacé par dual-channel)
  • Hardcoded scénarios (remplacé par YAML loader)

Removed

  • Code legacy Story V1 (src/story_old/)
  • Anciens tests manuels (remplacés par automation)
  • Symlink esp32 → esp32_audio (confusion docs)
  • Duplicate hardware/firmware/hardware/ (artifacts)

Fixed

  • UI Link reconnection robuste (session counter, timeout recovery)
  • Audio timeout fallback (MP3 bloqué → FX I2S)
  • ESP8266 OLED heap stability (pooled buffers)
  • Port mapping macOS CP2102 (by LOCATION stable)
  • Panic detection smoke tests (strict gates)

Security

  • Aucun secret committé (tokens exclus .gitignore)
  • WiFi credentials via config.h (local only, .gitignore)
  • Web UI authentication stub (TODO prod)

[0.1.0] - 2024-XX-XX

Initial Release

  • Proof-of-concept ESP32 Audio Kit
  • Simple MP3 player SD
  • Basic web UI control
  • Single MCU architecture

Conventions de versioning

  • MAJOR : Breaking changes architecture/API
  • MINOR : Ajout features backward compatible
  • PATCH : Bug fixes backward compatible
  • Suffix :
    • -alpha : Fonctionnalités incomplètes, instable
    • -beta : Fonctionnalités complètes, tests en cours
    • -rc.N : Release candidate (pre-production)
    • Rien : Release stable production

Exemples :

  • 0.9.0-beta : Refonte v2 beta (pre-production)
  • 1.0.0-rc.1 : Release candidate 1 (pre-prod final)
  • 1.0.0 : First stable production release
  • 1.1.0 : Ajout feature (ex: nouveau runtime mode)
  • 1.1.1 : Bug fix
  • 2.0.0 : Breaking change (ex: nouveau protocole incompatible)

Dernière mise à jour : 15 février 2026
Maintenu par : Firmware team (@electron-rare)