3 Commits

Author SHA1 Message Date
L'électron rare 21bfd2f7de feat(box): wire routine mode + tile
Add LISAEL_MODE_ROUTINE to the UI shell: enum entry, build_screen()
case, home carousel tile (8th, broom icon U+1F9F9, periwinkle pastel),
minimal navigable stub in modes/routine.c, CMakeLists srcs update,
Twemoji icon generated (17/17 ok). s_adots[8] now at capacity.
2026-06-21 10:53:17 +02:00
Clément Saillant d8cbf35572 feat: WiFi settings tile, 366 words, icon cleanup
Three follow-ups after the reading game landed.

- WiFi: a "Réglages" home tile (gear) opens LISAEL_MODE_WIFI which forces
  the SoftAP + captive portal up on demand (lisael_ui_goto starts them;
  the screen's "Fermer" button tears them down), so the provisioning
  portal can be tested/used without waiting for the station to fail.
- Lire: the content generator now also takes words that have no emoji
  (optional img in the regex) -> 366 words instead of 286 (the extra
  ~80 are abstract words: text + spoken audio, no picture).
- Cleanup: removed 21 baked word icons that became dead weight once the
  reading game started loading its pictures from the SD (~315 KB flash),
  plus their declarations and gen_icons.py specs.
2026-06-14 23:54:58 +02:00
Clément Saillant f6bbb7bb80 feat(lire): SD-backed reading game (286 words)
Context: the box needs a learn-to-read game for Lisael (6). Baking
hundreds of word pictures into the firmware does not fit in flash, so
content must live on the SD card and grow without reflashing.

Approach: words, Twemoji .bin icons and pre-generated French TTS audio
all live on the SD under /sdcard/lire/; the box loads them at runtime
(LVGL stdio FS for icons, MP3 player for audio). A small LAN file
server lets a computer push that content over Wi-Fi (no USB-MSC).

Changes:
- modes/lire.c: 3 round types (listen->word, image->word, word->image),
  reads /sdcard/lire/words.json into a PSRAM array, loads per-word
  icons from SD, plays the spoken word; score + tap-to-replay.
- net/file_server.c/.h: POST /put?name=... on :8080 writes the body to
  /sdcard/<name>; started by net_task once the station connects.
- home tile "Lire" + LISAEL_MODE_LIRE routing; 20 extra Twemoji icons.
- tools/gen_lire_content.py + push_to_box.sh: content pipeline
  (lecture.data.js -> icons + TTS + words.json -> Wi-Fi push).

Impact: 286 words (vs 12), expandable over Wi-Fi; reusable file-drop
for future content (podcasts, more words) without the MSC dance.
2026-06-14 23:39:07 +02:00