Add telephony and web server functionality

- Implement TelephoneSFPManager to manage telephony service interactions.
- Create TelephonyService class to handle telephony states and actions.
- Develop WebServerManager for handling HTTP requests and managing contacts.
- Add HTML, CSS, and JavaScript files for the web UI to interact with the telephony system.
- Introduce WifiManager for managing WiFi connections.
- Implement unit tests for telephony features and state transitions.
- Ensure proper input validation and error handling in web server routes.
This commit is contained in:
Clément SAILLANT
2026-02-18 03:37:02 +01:00
parent 449ca3653f
commit b89cda78c2
118 changed files with 6559 additions and 514 deletions
+271 -1
View File
@@ -1,6 +1,75 @@
# RTC_BL_PHONE
Projet PlatformIO ESP32 pour recycler un téléphone RTC ancien (combiné, clavier, hook), avec intégration Bluetooth HFP pour les appels (émission/réception).
Projet ESP32 : téléphone RTC, SLIC, audio, Bluetooth, WiFi, agentic.
## CI/CD automatisé
Le pipeline CI/CD est géré par GitHub Actions et PlatformIO:
- **Déclenchement** : à chaque push ou pull request sur `main` ou `develop`.
- **Build** : compilation automatique du firmware via PlatformIO.
- **Tests** : exécution des tests unitaires avec `platformio test`.
- **Artefacts** : génération et upload automatique des binaires compilés.
- **Couverture** : rapport de couverture (optionnel, si supporté).
- **Livraison** : artefacts accessibles dans longlet Actions > workflow CI PlatformIO.
### Structure du workflow
Le fichier `.github/workflows/ci.yml` contient:
```yaml
name: CI PlatformIO
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install PlatformIO
run: pip install platformio
- name: Run PlatformIO tests
run: platformio test
- name: Build firmware
run: platformio run
- name: Upload firmware artifact
uses: actions/upload-artifact@v3
with:
name: firmware
path: .pio/build/*/*.bin
# Optionnel: Génération de la couverture si supportée
# - name: Generate coverage report
# run: platformio test --coverage
# - name: Upload coverage artifact
# uses: actions/upload-artifact@v3
# with:
# name: coverage
# path: coverage-report/*
```
### Livraison
Après chaque build, les binaires sont disponibles en téléchargement dans les artefacts du workflow.
### Tests
Les tests sont lancés automatiquement à chaque commit. Voir les rapports dans longlet Actions.
### Références
- [PlatformIO CI Docs](https://docs.platformio.org/en/latest/ci/index.html)
- [GitHub Actions Docs](https://docs.github.com/en/actions)
## Notifications CI/CD
- Le pipeline CI/CD envoie des notifications sur les statuts (succès, échec) via GitHub Actions.
- Possibilité dajouter des notifications Slack ou email (voir .github/workflows/ci.yml).
---
_Agent Repo & GitHub README généré automatiquement._
## Démarrage rapide
1. Ouvrir le dossier dans PlatformIO.
@@ -36,3 +105,204 @@ Voir `docs/solutions_rtc_phone_esp32.md` pour la shortlist des DevKit utilisable
## Plan projet (chef de projet)
Voir `docs/plan_chef_projet_esp32s3_ag1171s.md` pour le planning en phases, les risques, les critères d'acceptation et les livrables de la version ESP32-S3 + AG1171S.
## Audio embarqué et lecture MP3
### Librairie Audio Tools
Le projet intègre la librairie [Audio Tools](https://github.com/pschatzmann/arduino-audio-tools) pour la lecture MP3/WAV sur ESP32 via I2S (PCM5102, ES8388, DAC interne).
### Exemple d'utilisation
Lecture automatique d'un fichier MP3 sur carte SD (voir `src/AudioFilePlayer.h/.cpp` et intégration dans `main.cpp`) :
```cpp
#include <AudioFilePlayer.h>
AudioFilePlayer audioFilePlayer;
void setup() {
Serial.begin(115200);
if (audioFilePlayer.begin()) {
audioFilePlayer.play("/test.mp3");
}
}
void loop() {
audioFilePlayer.loop();
}
```
### Validation
- Test lecture MP3 sur hardware ESP32 (SD, I2S, codec)
- Routage audio, volume, mute
- Logs série pour débogage
Voir aussi la fiche agent : `docs/fiche_agent_audio_tools.md`
## Arborescence du projet (2026)
```
src/
main.cpp
AudioCodec.cpp/h
AudioFilePlayer.cpp/h
bluetooth/
BluetoothManager.cpp/h
wifi/
WifiManager.cpp/h
web/
WebServerManager.cpp/h
rtos/
RTOSManager.cpp/h
power/
PowerManager.cpp/h
```
## Stacks embarquées
---
## Documentation technique des modules principaux
### 1. AudioManager
**Fichiers** : src/audio/AudioManager.cpp, src/audio/AudioManager.h
#### Interfaces
- `AudioManager` expose des méthodes pour l'initialisation, la gestion des flux audio, le contrôle du volume, et la sélection des sources.
- Interface principale :
- `init()` : initialise le module audio
- `start()` / `stop()` : démarre ou arrête le flux audio
- `setVolume(int level)` : ajuste le volume
- `selectSource(AudioSource src)` : sélectionne la source (micro, fichier, etc.)
#### Flux de données
- Entrées : sources audio (microphone, fichiers, Bluetooth)
- Traitement : conversion, mixage, contrôle du volume
- Sorties : haut-parleur, enregistrement, transmission (Bluetooth, Web)
#### Scénarios dutilisation
- Lecture audio locale
- Streaming Bluetooth
- Enregistrement et restitution
#### Exemple dintégration
```cpp
#include "audio/AudioManager.h"
AudioManager audio;
audio.init();
audio.selectSource(AudioSource::MIC);
audio.setVolume(80);
audio.start();
```
---
### 2. RTOSManager
**Fichiers** : src/rtos/RTOSManager.cpp, src/rtos/RTOSManager.h
#### Interfaces
- Gestion des tâches, synchronisation, timers.
- Interface principale :
- `createTask(void (*taskFunc)(void*), const char* name)` : création de tâche
- `startScheduler()` : démarrage du scheduler
- `delay(uint32_t ms)` : temporisation
#### Flux de données
- Entrées : fonctions de tâches, signaux d’événements
- Traitement : planification, synchronisation, gestion des priorités
- Sorties : exécution des tâches, notifications
#### Scénarios dutilisation
- Multitâche (audio, Bluetooth, web, etc.)
- Synchronisation entre modules
- Gestion des timers pour actions périodiques
#### Exemple dintégration
```cpp
#include "rtos/RTOSManager.h"
RTOSManager rtos;
rtos.createTask(audioTask, "AudioTask");
rtos.startScheduler();
```
---
### 3. BluetoothManager
**Fichiers** : src/bluetooth/BluetoothManager.cpp, src/bluetooth/BluetoothManager.h
#### Interfaces
- Gestion du Bluetooth (connexion, transmission, réception)
- Interface principale :
- `init()` : initialise le module Bluetooth
- `connect(const char* device)` : connexion à un périphérique
- `sendData(const uint8_t* data, size_t len)` : envoi de données
- `onReceive(void (*callback)(const uint8_t*, size_t))` : callback de réception
#### Flux de données
- Entrées : commandes de connexion, données à transmettre
- Traitement : gestion du protocole, encodage, sécurité
- Sorties : données reçues, notifications d’état
#### Scénarios dutilisation
- Streaming audio via Bluetooth
- Commandes distantes
- Synchronisation avec smartphone ou périphérique externe
#### Exemple dintégration
```cpp
#include "bluetooth/BluetoothManager.h"
BluetoothManager bt;
bt.init();
bt.connect("DeviceName");
bt.sendData(buffer, length);
```
---
## Résumé des fichiers modifiés/créés
- README.md : ajout de la documentation technique détaillée des modules AudioManager, RTOSManager, BluetoothManager.
Pour une documentation approfondie, voir aussi les fichiers dans `docs/` (fiche_agent_audio_tools.md, fiche_agent_embarque_stack.md).
Voir la fiche agent : `docs/fiche_agent_embarque_stack.md`
## Tests unitaires et robustesse RTC_BL_PHONE
### Couverture de code
Pour générer le rapport de couverture:
```bash
bash scripts/gen_coverage.sh
```
Le rapport HTML sera disponible dans `coverage/html`.
### Types de tests ajoutés
- Tests de stress (boucles intensives)
- Edge cases (cas limites)
- Tests de gestion mémoire (allocation/libération)
- Tests de thread safety (multithreading)
- Tests dinteraction entre modules (ex: AudioManager ↔ BluetoothManager)
### Fichiers de tests modifiés
- test/test_audio_codec.cpp
- test/test_audio_file_player.cpp
- test/test_AudioManager.cpp
- test/test_LectureAudioManager.cpp
- test/test_SLICManager.cpp
- test/test_TelephoneSFPManager.cpp
### Script de couverture
- scripts/gen_coverage.sh
### Exécution
Lancez les tests avec PlatformIO:
```bash
pio test
```
Puis générez le rapport de couverture.
### Objectif
Ces ajouts permettent de valider la robustesse, la gestion mémoire, la sécurité multithread et les interactions entre modules, tout en mesurant la couverture des tests.