Inzicht in de broncodeorganisatie van de OSSM-firmware
Mappenstructuur
De OSSM-firmware volgt een modulaire, op functies gebaseerde architectuur. Elke functie bevindt zich in een eigen naamruimtemap, waardoor de codebase gemakkelijker te navigeren en te onderhouden is.
Blader door de broncode op GitHub: Software/src/
Overzicht
| Map | Doel |
|---|---|
include/boost/ | Bibliotheken met alleen headers (toestandsmachine Boost.SML) |
lib/StrokeEngine/ | Bewegingspatroonbibliotheek (gemodificeerd) |
src/ | Belangrijkste broncode |
test/ | Eenheidstests |
Ontwerpfilosofie
De firmware maakt gebruik van een functiegebaseerde organisatie waar gerelateerde code samenleeft:
- Naamruimten in plaats van klassen - Functies zijn georganiseerd als naamruimtefuncties in plaats van als klassenmethoden
- Gezamenlijke bestanden - De header, implementatie en gerelateerde code van elke functie bevinden zich in dezelfde map
- Globale statusstructuren - Gedeelde status wordt beheerd via speciale statusstructuren in plaats van via klasseleden
- Staatloze modules - Functies werken op basis van de globale toestand, waardoor ze gemakkelijker te testen en te begrijpen zijn
De klasse OSSM in ossm/OSSM.h blijft behouden voor achterwaartse compatibiliteit met de verwerking van BLE-opdrachten. Nieuwe functies moeten gebruik maken van staatloze naamruimtefuncties.
Kerntoepassing (src/ossm/)
De map ossm/ bevat de kernapplicatielogica, geordend op functie.
| Map | Doel |
|---|---|
state/ | Architectuur van toestandsmachines |
pages/ | UI-schermen |
homing/ | Homing-reeks |
menu/ | Menunavigatie |
simple_penetration/ | Eenvoudige penetratiemodus |
stroke_engine/ | StrokeEngine-modus |
pattern_controls/ | Patroonselectie-UI |
play_controls/ | Bediening voor afspelen/pauzeren/snelheid |
Toestandsmachine (ossm/state/)
De componenten van de toestandsmachine zijn gescheiden voor duidelijkheid en testbaarheid.
| Bestand | Doel |
|---|---|
machine.h | Overgangstabeldefinitie met behulp van Boost.SML |
actions.h / actions.cpp | Toestandsovergangsacties (display-updates, motorbesturing) |
guards.h / guards.cpp | Voorwaardelijke controles op overgangen |
state.h / state.cpp | Initialisatie van de toestandsmachine en globale instantie |
Toestandsstructuren beheren verschillende aspecten van de applicatie:
| Bestand | Doel |
|---|---|
session.h | Huidige sessie (starttijd, aantal slagen, afstand) |
settings.h | Gebruikersinstellingen (snelheid, slag, sensatie, diepte, patroon) |
calibration.h | Homing-toestand (sensoroffset, slagstappen, homed-status) |
motion.h | Bewegingsdoelen (positie, snelheid, tijd) |
menu.h | Huidige menuselectie |
ble.h | Bluetooth-verbindingsstatus |
error.h | Foutmeldingen |
Zie Architectuur van toestandsmachines voor meer informatie over hoe de toestandsmachine werkt.
UI-pagina's (ossm/pages/)
Elk scherm in de gebruikersinterface heeft zijn eigen module.
| Module | Beschrijving |
|---|---|
hello.h | Opstartscherm met geanimeerde logo's |
preflight.h | Veiligheidscontrolescherm 'Verlaag snelheid om te starten' |
error.h | Foutweergave met helpoptie |
update.h | OTA-updateschermen (controleren, bijwerken, geen update) |
wifi.h | WiFi-configuratieportaal |
help.h | Hulp- en ondersteuningsinformatie |
Bedrijfsmodi
Elke bedrijfsmodus is een op zichzelf staande module met zijn bewegingsbesturingslogica.
| Module | Beschrijving |
|---|---|
simple_penetration/ | Basisbeweging heen en weer met gecontroleerde snelheid |
stroke_engine/ | Complexe patronen met behulp van de StrokeEngine-bibliotheek |
Bedieningsinterfaces
| Module | Beschrijving |
|---|---|
menu/ | Navigatie en weergave in het hoofdmenu |
pattern_controls/ | Patroonselectie-interface voor de StrokeEngine-modus |
play_controls/ | Bediening voor snelheid, slag, diepte en sensatie |
Functiemodules
| Module | Beschrijving |
|---|---|
homing/ | Homing-reeks (voorwaartse scan, achterwaartse scan, kalibratie) |
Hardwareservices (src/services/)
De map services/ biedt hardware-abstractielagen.
| Bestand | Doel |
|---|---|
stepper.h/.cpp | Motorbesturing (FastAccelStepper) |
display.h/.cpp | OLED-display (U8g2) |
encoder.h/.cpp | Ingang voor roterende encoder |
led.h/.cpp | RGB LED-statusindicatie |
board.h/.cpp | Initialisatie van het bord |
tasks.h/.cpp | FreeRTOS-taakbeheer |
wm.h/.cpp | WiFi-manager |
communication/ | BLE- en WiFi-communicatie |
Zie BLE-communicatie voor details over het BLE-protocol.
Constanten (src/constants/)
Configuratiewaarden en opsommingen worden gecentraliseerd in de map constants/.
| Bestand | Doel |
|---|---|
Config.h | Systeemconfiguratie (snelheden, limieten, time-outs) |
Pins.h | GPIO-pindefinities |
Menu.h | Menuoptie enum |
Version.h | Informatie over de firmwareversie |
UserConfig.h | Door de gebruiker configureerbare instellingen |
Images.h | Bitmap-assets voor het display |
LogTags.h | ESP-IDF-logboektags |
copy/ | Gelokaliseerde tekenreeksen |
Zie Configuratie voor configuratieopties.
Hulpprogramma's (src/utils/)
Hulpfuncties en klassen die in de hele codebase worden gebruikt.
| Bestand | Doel |
|---|---|
StateLogger.h | Registreert toestandovergangen voor foutopsporing |
RecursiveMutex.h | Threadveilige mutex-wrapper voor ESP32 |
StrokeEngineHelper.h | StrokeEngine-integratiehulpprogramma's |
format.h | Hulpmiddelen voor het formatteren van tekenreeksen |
analog.h | Middeling en verwerking van analoge ingangen |
update.h | OTA-updatehulpprogramma's |
ble.h | BLE-helperfuncties |
Gegevensstructuren (src/structs/)
Gedeelde gegevenstypen die in modules worden gebruikt.
| Bestand | Doel |
|---|---|
SettingPercents.h | Gebruikersinstellingen als percentages (0-100) |
LanguageStruct.h | Taalconfiguratie |
Points.h | Coördinaat- en puntstructuren |
Bibliotheken
Boost.SML (include/boost/sml.hpp)
Boost.SML is een toestandsmachinebibliotheek die alleen uit headers bestaat. De bibliotheek is rechtstreeks in het project opgenomen voor versiestabiliteit.
StrokeEngine (lib/StrokeEngine/)
Een aangepaste versie van theelims/StrokeEngine die bewegingspatronen genereert. De bibliotheek is meegeleverd en aangepast aan OSSM-specifieke vereisten.
Buildconfiguratie
Het platformio.ini-bestand definieert de build-omgevingen:
| Omgeving | Doel |
|---|---|
development | Lokale ontwikkeling met logboekregistratie voor foutopsporing |
staging | Testen vóór de release |
production | Release-builds met optimalisaties |
test | Configuratie van eenheidstest |