✅ P1.1 Phase 9 Touch Input (4h) - TouchEmulator: 4x4 grid navigation via buttons (UP/DOWN/LEFT/RIGHT toggle) - Files: touch_emulator.{h,cpp} + AmigaUIShell integration - Button mapping: 0=UP, 1=SELECT, 2=DOWN, 3=MENU, 4=TOGGLE_LR - Build SUCCESS (31.06s, 64.4% RAM, 42.0% Flash) ✅ P1.2 Documentation Update (1h) - AGENT_TODO.md: Phase 9 completion + Sprint 9 section added - Root cause analysis: watchdog timeout (cycle 9) → stack fix (8192→16384) - Troubleshooting guide: common issues + debug commands Files: + touch_emulator.{h,cpp} ~ ui_amiga_shell.* + main.cpp + AGENT_TODO.md Next: P1.3 (Sprint 1 endurance validation) + P2 (main.cpp refactor)
9.2 KiB
Validation hardware – TODO détaillée
Sprint 0 - Foundation (2026-03-02)
- Bridge
AmigaUIShell->AppRuntimeManagerbranché via interface interne. launchSelectedApp()implémenté avec ouverture runtime réelle.- Anti double-launch activé (debounce + garde sur état app déjà active).
APP_STATUSexposé en commande série directe + HELP mis à jour.- Logs runtime normalisés ajoutés (
APP_OPEN_*,APP_CLOSE_*,APP_ACTION_*). - Upgrade LVGL 8.4.x appliqué.
- Librairie QR figée sur commit.
tinyexprajouté explicitement.- [~] Upgrade
ESP32-audioI2S3.4.4 tenté puis rollback vers 2.3.0 (toolchain bloque sur<span>). - Gate build exécutée:
pio run -e freenove_esp32s3_full_with_uiSUCCESS.
Sprint 1 - Utility Pack (2026-03-02)
-
CalculatorModule: tinyexpr prioritaire + erreurs explicites (eval_error@pos) + actionstatus. -
TimerToolsModule: chrono/countdown stabilisés + actionstatus+ signal fin countdown (audio/LED si dispo). -
FlashlightModule: on/off robustes +light_toggle+set_levelappliqué à chaud + actionstatus. -
Contrat specs apps mis à jour (
calculator,timer_tools,flashlight). -
Campagne endurance outillée:
tests/sprint1_utility_contract.py(mode serial + mode HTTP). -
Smoke série court validé:
python3 tests/sprint1_utility_contract.py --mode serial --cycles 5 --port /dev/cu.usbmodem5AB90753301. -
Gate endurance série 20 cycles/app encore rouge.
- Verdict (2026-03-02): échec à
calculator cycle 9/20avec reboot panic (reset_reason=4) etAPP_STATUS parse failedpost-reboot. - Contexte: issue non fonctionnelle app métier, liée à stabilité runtime/mémoire sous endurance.
- Verdict (2026-03-02): échec à
-
Gate HTTP toujours bloqué côté reachability/auth (
/api/apps/*non validé dans cette passe). -
Compiler et flasher le firmware sur le Freenove Media Kit (
pio run -e freenove_esp32s3_full_with_ui -t upload) -
Préparer les fichiers de test sur LittleFS (/data/scene_.json, /data/screen_.json, /data/*.wav)
-
Vérifier l’affichage TFT (boot, écran dynamique, transitions)
-
Tester la réactivité tactile (zones, coordonnées, mapping)
-
Tester les boutons physiques (appui, mapping, transitions)
-
Tester la lecture audio (fichiers présents/absents, fallback)
-
[~] Observer les logs série (initialisation, actions, erreurs) en continu pendant endurance longue
-
Générer et archiver les logs d’évidence (logs/)
-
Produire un artefact de validation (artifacts/)
-
Documenter toute anomalie ou limitation hardware constatée
Sprint 2 - Capture Pack (2026-03-02)
CameraVideoModule: actionstatus+ états preview/clip/frame + erreurs normalisées.QrScannerModule: actionstatus+scan_payload+ classificationurl/app/text.DictaphoneModule: actionstatus+ normalisation de chemin enregistrement/lecture.- Contrat Sprint 2 ajouté:
tests/sprint2_capture_contract.py. - Gate série Sprint 2 (1 cycle/app) verte.
- Verdict (2026-03-02):
python3 tests/sprint2_capture_contract.py --mode serial --cycles 1SUCCESS.
- Verdict (2026-03-02):
- Endurance courte Sprint 2 (3 cycles/app) verte.
- Verdict (2026-03-02):
python3 tests/sprint2_capture_contract.py --mode serial --cycles 3SUCCESS.
- Verdict (2026-03-02):
- Endurance intermédiaire Sprint 2 (10 cycles/app) verte.
- Verdict (2026-03-02):
python3 tests/sprint2_capture_contract.py --mode serial --cycles 10SUCCESS.
- Verdict (2026-03-02):
- Déblocage mémoire/coex appliqué:
platformio.ini:UI_FX_TARGET_FPS=12,UI_DMA_TRANS_BUF_LINES=1,UI_LV_MEM_SIZE_KB=54,ARDUINO_LOOP_STACK_SIZE=16384,BOARD_HAS_PSRAM.QrScannerModule: ownership caméra corrigé (évite double init avecESP32QRCodeReader).AppRuntimeManager: profil ressource auto selon capabilities app (caméra vs micro).
- Gate endurance longue Sprint 2 à lancer (20 cycles/app) + archivage logs.
Revue finale – Checklist agents
- Vérifier la cohérence de la structure (dossiers, modules, scripts)
- Relire AGENT_FUSION.md (objectifs, couverture specs, structure)
- Relire README.md (usage, build, validation, modules)
- Relire la section onboarding (docs/QUICKSTART.md, etc.)
- Vérifier la présence et la robustesse du fallback LittleFS
- Vérifier la traçabilité des logs et artefacts
- Vérifier la synchronisation UI/scénario/audio
- Vérifier la gestion dynamique des boutons/tactile
- Vérifier la non-régression sur les autres firmwares (split)
TODO Agent – Firmware All-in-One Freenove
Plan d’intégration détaillé (COMPLÉTÉ)
-
Vérifier la présence du scénario par défaut sur LittleFS
-
Charger la liste des fichiers de scènes et d’écrans (data/)
-
Initialiser la navigation UI (LVGL, écrans dynamiques)
-
Mapper les callbacks boutons/tactile vers la navigation UI
-
Préparer le fallback LittleFS si fichier manquant
-
Logger l’initialisation (logs/)
-
Boucle principale d’intégration
- Navigation UI (LVGL, écrans dynamiques)
- Exécution scénario (lecture, actions, transitions)
- Gestion audio (lecture, stop, files LittleFS)
- Gestion boutons/tactile (événements, mapping)
- Gestion stockage (LittleFS, fallback)
- Logs/artefacts
Validation hardware (EN COURS)
- Tests sur Freenove Media Kit (affichage, audio, boutons, tactile)
- Génération de logs d’évidence (logs/)
- Production d’artefacts de validation (artifacts/)
Documentation
- Mise à jour README.md (usage, build, structure)
- Mise à jour AGENT_FUSION.md (règles d’intégration, conventions)
- Synchronisation avec la doc onboarding principale
Spécifications fonctionnelles utilisateur à livrer
- Lecteur Audio (lecture locale, play/pause/stop, playlist de base)
- Appareil photo / vidéo (capture image/vidéo, stockage média, aperçu)
- Dictaphone (enregistrement audio local, lecture, suppression)
- Chronomètre / minuteur (UI dédiée, rappel sonore)
- Lampe de poche (commande on/off, intensité si supportée)
- Calculatrice (opérations de base, historique simple)
- Webradio enfants (gestion flux HTTP/ICY, reprise auto minimale)
- Podcast enfants (lecture podcasts local ou RSS simplifié)
- Lecteur de QR code (scan caméra, parsing et action de base)
- Émulateur de jeux vidéo (version minimale ludique compatible mémoire embarquée)
- Lecteur de livres audio (index/chapitres, reprise de progression)
- Application de dessin (canvas tactile + outils minimum)
- Application de coloriage (templates + remplissage couleur)
- Application de musique pour enfants (playlists ciblées, contrôle simple)
- Application de yoga pour enfants (séquences guidées, audio/texte)
- Application de méditation pour enfants (tempos/sons/apaisement)
- Application de langues pour enfants (mini leçons + répétition audio)
- Application de mathématiques pour enfants (exercices interactifs)
- Application de sciences pour enfants (contenus interactifs + quiz)
- Application de géographie pour enfants (quiz/carte/images interactives)
Plan d’intégration recommandé (ordre de dépendance)
- 1) Base commune UI + assets + navigation (priorité haute)
- 2) Audio stack: lecteur audio / livres / podcasts / webradio
- 3) Outils système: chronomètre, calculatrice, lampe de poche
- 4) Camera stack: photo/vidéo + QR code
- 5) Contenus enfants: dessin, coloriage, musique, yoga, méditation, langues, maths, sciences, géographie
- 6) Jeux: intégrer émulateur léger après stabilisation mémoire/perf
Stack technique réseau (nouvelle contrainte)
- Ajouter découverte réseau Bonjour/mDNS (nom appareil + présence services)
- Ajouter service de transfert simple de fichiers entre appareils
- Définir protocole minimal de transfert (metadata + chunks + ack + reprise simple)
- Ajouter endpoints/API de partage (liste appareils, push/pull fichier, état transfert)
- Journaliser les transferts (début, progression, succès/échec)
UX/UI enfants + inspiration Amiga (nouvelle contrainte)
- Définir un thème visuel enfant inspiré Amiga (palette, icônes, typo, motion)
- Créer écran home "kids shell" (grille d’apps colorée + navigation simple)
- Ajouter transitions ludiques non bloquantes (sans pénaliser FPS/runtime loop)
- Standardiser composants UI: bouton, carte app, badge état, feedback action
- Ajouter règles de lisibilité enfant (texte court, contraste, zones tactiles larges)
Progression technique réalisée (itération courante)
- Socle apps runtime: registre, lifecycle manager, endpoints
/api/apps/* - Contrat capacités runtime: flags explicites et gating au lancement d’app
- Actions scénario app-aware:
open_app,close_app,app_action - Bonjour/mDNS: service publié
_zacus._tcp+ découverte peers - Partage fichiers simple: endpoints
/api/share/peers,/api/share/files,/api/share/upload - Spécifications JSON: manifest/streams/progress + registre exemple
- Direction UX enfant + Amiga: fichier de thème de référence