bc2d1ecb1c
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).
42 lines
1.7 KiB
C
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]))
|