Files
lisael-box/main/modes/radios.h
T
Clément Saillant bc2d1ecb1c feat(ui): add LVGL UI shell, modes and app_main
Context:
  The box is a touch device for a young child: big icon buttons, no
  reading required, gentle visuals, no game with a losing state.

Approach:
  An LVGL 9 shell (ui/) with a mode router that lazily builds and caches
  each screen and slides between them. Shared pastel styles, an
  icon-first home with French date in letters (custom fr_date, no
  setlocale), live time/weather/chip-temp hooks that take the display
  lock. Six modes: home, radio, soundbox, calm (breathing bubble),
  clock/night-light, games (Memory + Compter implemented, Coloriage a
  documented stub). app_main sequences NVS -> BSP -> codec -> SD -> UI
  and spawns the net and tick tasks.

Changes:
  - ui/ui, ui/fr_date, ui/icons
  - modes/{home,radio,soundbox,calm,clock,games}, modes/radios.h
  - app_main.c boot sequence + tasks

Impact:
  Full feature surface present; emoji glyphs need an embedded font and
  several BSP/LVGL assumptions need a real board (see README).
2026-06-14 00:40:32 +02:00

42 lines
1.7 KiB
C

// Webradio station list for Lisael Box.
//
// ⚠️ À VÉRIFIER / COMPLÉTER: the stream URLs below are PLAUSIBLE placeholders.
// French kids' webradio stream endpoints change and are not all publicly
// documented. Before shipping, confirm each URL actually returns an MP3/AAC
// stream (e.g. `curl -I <url>` should show audio/mpeg or audio/aac, or use the
// station's official "écouter en direct" / TuneIn stream link). Prefer plain
// HTTP MP3 streams for the lightest decode path on the ESP32-S3.
#pragma once
typedef struct {
const char *name; // display name
const char *emoji; // small icon
const char *url; // stream URL (MP3 or AAC)
} lisael_radio_station_t;
// NOTE: keep this list short — each station is one big touch button.
static const lisael_radio_station_t LISAEL_RADIOS[] = {
// Radio Pomme d'Api (Bayard) — kids' radio.
{ "Pomme d'Api", "\U0001F34E", // 🍎
"https://radio.pommedapi.example/stream.mp3" }, // TODO verify
// Radio Doudou — lullabies / very young children.
{ "Radio Doudou", "\U0001F9F8", // 🧸
"http://stream.radiodoudou.example/doudou.mp3" }, // TODO verify
// Mmuz Kids / Mouv'Kids style FR kids music.
{ "Muz Kids", "\U0001F3B5", // 🎵
"http://stream.muzkids.example/kids.mp3" }, // TODO verify
// Une histoire et Oli (France Inter) — stories podcast stream proxy.
{ "Histoires", "\U0001F4D6", // 📖
"http://stream.histoires.example/oli.mp3" }, // TODO verify
// Comptines FR.
{ "Comptines", "\U0001F3B6", // 🎶
"http://stream.comptines.example/fr.mp3" }, // TODO verify
};
#define LISAEL_RADIOS_COUNT \
(sizeof(LISAEL_RADIOS) / sizeof(LISAEL_RADIOS[0]))