Structure des dossiers

Comprendre l'organisation du code source du micrologiciel OSSM

Structure des dossiers

Le micrologiciel OSSM suit une architecture modulaire basée sur les fonctionnalités. Chaque fonctionnalité réside dans son propre dossier d'espace de noms, ce qui facilite la navigation et la maintenance de la base de code.

Parcourez le code source sur GitHub : Software/src/

Aperçu

main.cpp
platformio.ini
DossierBut
include/boost/Bibliothèques d'en-tête uniquement (machine à états Boost.SML)
lib/StrokeEngine/Bibliothèque de modèles de mouvement (modifiée)
src/Code source principal
test/Tests unitaires

Philosophie de conception

Le micrologiciel utilise une organisation basée sur les fonctionnalités où le code associé cohabite :

  • Espaces de noms plutôt que classes - Les fonctionnalités sont organisées en fonctions d'espace de noms plutôt qu'en méthodes de classe
  • Fichiers colocalisés : l'en-tête, l'implémentation et le code associé de chaque fonctionnalité se trouvent dans le même dossier.
  • Structures d'état globales - L'état partagé est géré via des structures d'état dédiées plutôt que par des membres de classe
  • Modules sans état - Les fonctions de chaque fonctionnalité travaillent sur l'état global, ce qui les rend plus faciles à tester et à comprendre.

La classe OSSM dans ossm/OSSM.h est conservée pour des raisons de rétrocompatibilité avec la gestion des commandes BLE. Les nouvelles fonctionnalités doivent utiliser des fonctions d'espace de noms sans état.

Application principale (src/ossm/)

Le dossier ossm/ contient la logique d'application principale, organisée par fonctionnalité.

Events.h
OSSM.h
OSSM.cpp
DossierBut
state/Architecture des machines à états
pages/Écrans d'interface utilisateur
homing/Séquence de référence
menu/Navigation dans les menus
simple_penetration/Mode de pénétration simple
stroke_engine/Mode StrokeEngine
pattern_controls/Interface utilisateur de sélection de motif
play_controls/Commandes lecture/pause/vitesse

Machine à états (ossm/state/)

Les composants de la machine à états sont séparés pour plus de clarté et de testabilité.

FichierBut
machine.hDéfinition de la table de transition à l'aide de Boost.SML
actions.h / actions.cppActions de transition d'état (mises à jour de l'affichage, contrôle du moteur)
guards.h / guards.cppVérifications conditionnelles pour les transitions
state.h / state.cppInitialisation de la machine à états et instance globale

Les structures d'état gèrent différents aspects de l'application :

FichierBut
session.hSession en cours (heure de début, nombre de courses, distance)
settings.hParamètres utilisateur (vitesse, course, sensation, profondeur, motif)
calibration.hÉtat de référence (décalage du capteur, pas par course, statut de référence)
motion.hCibles de mouvement (position, vitesse, temps)
menu.hSélection de menu actuelle
ble.hÉtat de la connexion Bluetooth
error.hMessages d'erreur

Pour plus de détails sur le fonctionnement de la machine à états, voir Architecture de la machine à états.

Pages d'interface utilisateur (ossm/pages/)

Chaque écran de l'interface utilisateur possède son propre module.

ModuleDescription
hello.hÉcran de démarrage avec logos animés
preflight.hÉcran de contrôle de sécurité « Réduire la vitesse pour démarrer »
error.hAffichage d'erreur avec option d'aide
update.hÉcrans de mise à jour OTA (vérification, mise à jour, pas de mise à jour)
wifi.hPortail de configuration WiFi
help.hInformations d'aide et d'assistance

Modes de fonctionnement

Chaque mode de fonctionnement est un module autonome avec sa logique de contrôle de mouvement.

ModuleDescription
simple_penetration/Mouvement de base de va-et-vient à vitesse contrôlée
stroke_engine/Modèles complexes utilisant la bibliothèque StrokeEngine

Interfaces de contrôle

ModuleDescription
menu/Navigation et rendu dans le menu principal
pattern_controls/Interface de sélection de motif pour le mode StrokeEngine
play_controls/Contrôles de vitesse, de course, de profondeur et de sensation

Modules de fonctionnalités

ModuleDescription
homing/Séquence de référencement (balayage avant, balayage arrière, étalonnage)

Services matériels (src/services/)

Le dossier services/ fournit des couches d'abstraction matérielle.

stepper.h
stepper.cpp
display.h
display.cpp
encoder.h
encoder.cpp
led.h
led.cpp
board.h
board.cpp
tasks.h
tasks.cpp
wm.h
wm.cpp
nimble.h
nimble.cpp
queue.h
queue.cpp
command.hpp
state.hpp
patterns.hpp
gpio.hpp
wifi.hpp
config.hpp
FichierBut
stepper.h/.cppContrôle du moteur (FastAccelStepper)
display.h/.cppÉcran OLED (U8g2)
encoder.h/.cppEntrée du codeur rotatif
led.h/.cppIndication d'état de la LED RGB
board.h/.cppInitialisation de la carte
tasks.h/.cppGestion des tâches FreeRTOS
wm.h/.cppGestionnaire Wi-Fi
communication/Communication BLE et WiFi

Pour plus de détails sur le protocole BLE, voir Communication BLE.

Constantes (src/constants/)

Les valeurs de configuration et les énumérations sont centralisées dans le dossier constants/.

Config.h
Pins.h
Menu.h
Version.h
UserConfig.h
Images.h
LogTags.h
FichierBut
Config.hConfiguration du système (vitesses, limites, délais d'attente)
Pins.hDéfinitions des broches GPIO
Menu.hÉnumération des options de menu
Version.hInformations sur la version du micrologiciel
UserConfig.hParamètres configurables par l'utilisateur
Images.hRessources bitmap pour l'affichage
LogTags.hBalises de journalisation ESP-IDF
copy/Chaînes localisées

Pour les options de configuration, voir Configuration.

Utilitaires (src/utils/)

Fonctions et classes d'assistance utilisées dans toute la base de code.

StateLogger.h
RecursiveMutex.h
StrokeEngineHelper.h
format.h
analog.h
update.h
ble.h
FichierBut
StateLogger.hEnregistre les transitions de la machine à états pour le débogage
RecursiveMutex.hWrapper de mutex thread-safe pour ESP32
StrokeEngineHelper.hUtilitaires d'intégration StrokeEngine
format.hAides au formatage de chaînes
analog.hMoyennage et traitement des entrées analogiques
update.hUtilitaires de mise à jour OTA
ble.hFonctions d'assistance BLE

Structures de données (src/structs/)

Types de données partagés utilisés entre les modules.

SettingPercents.h
LanguageStruct.h
Points.h
FichierBut
SettingPercents.hParamètres utilisateur sous forme de pourcentages (0-100)
LanguageStruct.hConfiguration de la langue
Points.hStructures de coordonnées et de points

Bibliothèques

Boost.SML (include/boost/sml.hpp)

Boost.SML est une bibliothèque de machine à états composée uniquement d'en-têtes. Elle est incluse directement dans le projet pour la stabilité des versions.

StrokeEngine (lib/StrokeEngine/)

Une version modifiée de theelims/StrokeEngine qui génère des motifs de mouvement. La bibliothèque est fournie et personnalisée pour les exigences spécifiques à OSSM.

Configuration de construction

Le fichier platformio.ini définit les environnements de compilation :

EnvironnementBut
developmentDéveloppement local avec journalisation de débogage
stagingTests avant publication
productionVersions de publication avec optimisations
testConfiguration des tests unitaires

Lectures complémentaires

Sur cette page