Mappenstructuur

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

main.cpp
platformio.ini
MapDoel
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.

Events.h
OSSM.h
OSSM.cpp
MapDoel
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.

BestandDoel
machine.hOvergangstabeldefinitie met behulp van Boost.SML
actions.h / actions.cppToestandsovergangsacties (display-updates, motorbesturing)
guards.h / guards.cppVoorwaardelijke controles op overgangen
state.h / state.cppInitialisatie van de toestandsmachine en globale instantie

Toestandsstructuren beheren verschillende aspecten van de applicatie:

BestandDoel
session.hHuidige sessie (starttijd, aantal slagen, afstand)
settings.hGebruikersinstellingen (snelheid, slag, sensatie, diepte, patroon)
calibration.hHoming-toestand (sensoroffset, slagstappen, homed-status)
motion.hBewegingsdoelen (positie, snelheid, tijd)
menu.hHuidige menuselectie
ble.hBluetooth-verbindingsstatus
error.hFoutmeldingen

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.

ModuleBeschrijving
hello.hOpstartscherm met geanimeerde logo's
preflight.hVeiligheidscontrolescherm 'Verlaag snelheid om te starten'
error.hFoutweergave met helpoptie
update.hOTA-updateschermen (controleren, bijwerken, geen update)
wifi.hWiFi-configuratieportaal
help.hHulp- en ondersteuningsinformatie

Bedrijfsmodi

Elke bedrijfsmodus is een op zichzelf staande module met zijn bewegingsbesturingslogica.

ModuleBeschrijving
simple_penetration/Basisbeweging heen en weer met gecontroleerde snelheid
stroke_engine/Complexe patronen met behulp van de StrokeEngine-bibliotheek

Bedieningsinterfaces

ModuleBeschrijving
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

ModuleBeschrijving
homing/Homing-reeks (voorwaartse scan, achterwaartse scan, kalibratie)

Hardwareservices (src/services/)

De map services/ biedt hardware-abstractielagen.

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
BestandDoel
stepper.h/.cppMotorbesturing (FastAccelStepper)
display.h/.cppOLED-display (U8g2)
encoder.h/.cppIngang voor roterende encoder
led.h/.cppRGB LED-statusindicatie
board.h/.cppInitialisatie van het bord
tasks.h/.cppFreeRTOS-taakbeheer
wm.h/.cppWiFi-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/.

Config.h
Pins.h
Menu.h
Version.h
UserConfig.h
Images.h
LogTags.h
BestandDoel
Config.hSysteemconfiguratie (snelheden, limieten, time-outs)
Pins.hGPIO-pindefinities
Menu.hMenuoptie enum
Version.hInformatie over de firmwareversie
UserConfig.hDoor de gebruiker configureerbare instellingen
Images.hBitmap-assets voor het display
LogTags.hESP-IDF-logboektags
copy/Gelokaliseerde tekenreeksen

Zie Configuratie voor configuratieopties.

Hulpprogramma's (src/utils/)

Hulpfuncties en klassen die in de hele codebase worden gebruikt.

StateLogger.h
RecursiveMutex.h
StrokeEngineHelper.h
format.h
analog.h
update.h
ble.h
BestandDoel
StateLogger.hRegistreert toestandovergangen voor foutopsporing
RecursiveMutex.hThreadveilige mutex-wrapper voor ESP32
StrokeEngineHelper.hStrokeEngine-integratiehulpprogramma's
format.hHulpmiddelen voor het formatteren van tekenreeksen
analog.hMiddeling en verwerking van analoge ingangen
update.hOTA-updatehulpprogramma's
ble.hBLE-helperfuncties

Gegevensstructuren (src/structs/)

Gedeelde gegevenstypen die in modules worden gebruikt.

SettingPercents.h
LanguageStruct.h
Points.h
BestandDoel
SettingPercents.hGebruikersinstellingen als percentages (0-100)
LanguageStruct.hTaalconfiguratie
Points.hCoö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:

OmgevingDoel
developmentLokale ontwikkeling met logboekregistratie voor foutopsporing
stagingTesten vóór de release
productionRelease-builds met optimalisaties
testConfiguratie van eenheidstest

Verder lezen

Op deze pagina