Files
Kill_LIFE/firmware/include/radio_player.h
T
root e67fb754c2 feat: KiCad 10 native, QEMU simulation, compliance EU, firmware fixes
Session kxkm-ai 25-26 mars 2026 — 98/98 tâches TODO complétées.

Hardware:
- KiCad 10.0.0 native avec sym/fp-lib-table locales
- Nouveau block SPI (gen_spi_header.py), ERC clean
- Module partagé hardware/lib/kicad_gen.py (5 générateurs refactorisés)
- Pipeline export: tools/hw/hw_export.sh (ERC + SVG + PDF + netlist)
- KiBot 1.8.5 installé, .kibot.yaml configuré

Firmware:
- Fix I2S driver conflict: migration I2sMic vers nouvelle API i2s_channel_*
- Fix WDT risk: yield() dans CompletePushToTalk (voice_controller.cpp)
- Fix XSS wifi_manager.cpp: innerHTML → createElement/textContent
- Fix null check FwIsValidWavHeader
- Dead code supprimé: i2s_audio.cpp.bak, i2s_audio.h

Simulation MCU:
- QEMU ESP32-S3 v9.2.2 installé (tools/sim/)
- Script run_qemu_esp32s3.sh — boot OK vérifié
- [env:esp32s3_qemu] dans platformio.ini
- Wokwi CI: wokwi.toml + diagram.json + scenario.yaml
- SPICE bridge POC: tools/sim/spice_bridge.py (ngspice → ADC/brownout)

Compliance:
- Profil iot_wifi_eu validé (16 standards, 8 evidence)
- 4 evidence remplis: risk_assessment, security_architecture,
  test_plan_radio_emc, supply_chain_declarations
- plan.yaml complété avec données produit réelles

CI:
- Job hardware-export (KiCad 10 ERC + SVG + PDF + netlist)
- Job firmware-sim (Wokwi, conditionnel WOKWI_CLI_TOKEN)
- evidence_pack.yml enrichi avec exports hardware

Docs & RAG:
- specs/02_arch.md complet (481 lignes, 4 ADR, diagrammes)
- docs/SIMULATION.md (3 niveaux: native, QEMU, Wokwi)
- 6 chunks ingérés dans kb-kicad RAG
- Dataset HF: tools/generate_hf_dataset.py + datasets/kb_kicad_qa.jsonl
- Rapport analyse: docs/plans/ANALYSIS_REPORT_2026-03-25.md
- Recherche OSS: docs/research/oss_similar_projects.md

Infra:
- ZeroClaw 0.1.7 installé (cargo install)
- APIFY_API_KEY configurée, smoke OK
- Tests: 39/39 firmware + 26/26 Python stable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 09:52:00 +01:00

74 lines
2.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
#include "voice_controller.h"
#include <string>
#include <vector>
class Audio; // Forward-declare from ESP32-audioI2S
/// Web radio + TTS playback using ESP32-audioI2S library.
/// Manages the I2S output (PCM5101 DAC) for both radio streaming
/// and TTS reply audio.
class RadioPlayer : public MediaController {
public:
RadioPlayer();
~RadioPlayer();
/// Initialise I2S output via the Audio library.
bool Begin(int bck, int ws, int dout);
/// Must be called from loop() to feed the audio decoder.
void Loop();
// -- MediaController interface --
MediaSnapshot Snapshot() const override;
void ApplyIntent(const VoiceIntent& intent) override;
void PrepareForReply(PlayerAction action) override;
void RestoreAfterReply(bool resume) override;
bool PlayReplyAudio(const std::vector<uint8_t>& wav) override;
// -- Station management --
void SetStations(const std::vector<std::pair<std::string, std::string>>& list);
void PlayStation(int index);
void PlayStation(const std::string& name);
void Next();
void Previous();
void Stop();
void SetVolume(int vol); // 0100
bool IsPlaying() const;
// -- Callbacks from Audio lib (set in main.cpp) --
void OnInfo(const char* info);
void OnTitle(const char* title);
private:
void StartCurrentStation();
Audio* audio_ = nullptr;
bool initialized_ = false;
// Station list: {name, url}
std::vector<std::pair<std::string, std::string>> stations_;
int current_station_ = 0;
MediaMode mode_ = MediaMode::kRadio;
bool playing_ = false;
int volume_ = 40; // 0100
std::string current_title_;
// State saved before TTS reply.
bool was_playing_ = false;
int saved_volume_ = -1;
std::string saved_url_;
// WiFi info (updated externally).
std::string wifi_ssid_;
int wifi_rssi_ = 0;
int battery_pct_ = -1;
friend void updatePlayerWifi(RadioPlayer& p, const std::string& ssid, int rssi);
};
/// Update WiFi info in the player snapshot.
void updatePlayerWifi(RadioPlayer& p, const std::string& ssid, int rssi);