Ordnerstruktur

Verstehen der Organisation des OSSM-Firmware-Quellcodes

Ordnerstruktur

Die OSSM-Firmware folgt einer modularen, featurebasierten Architektur. Jedes Feature befindet sich in einem eigenen Namespace-Ordner, wodurch die Codebasis einfacher zu navigieren und zu verwalten ist.

Durchsuchen Sie den Quellcode auf GitHub: Software/src/

Überblick

main.cpp
platformio.ini
OrdnerZweck
include/boost/Nur-Header-Bibliotheken (Boost.SML-Zustandsmaschine)
lib/StrokeEngine/Bewegungsmusterbibliothek (modifiziert)
src/Hauptquellcode
test/Unit-Tests

Designphilosophie

Die Firmware verwendet eine featurebasierte Organisation, in der zusammengehöriger Code gemeinsam abgelegt ist:

  • Namespaces statt Klassen – Features sind als Namespace-Funktionen und nicht als Klassenmethoden organisiert
  • Zusammengehörige Dateien – Der Header, die Implementierung und der zugehörige Code jedes Features befinden sich im selben Ordner
  • Globale Zustandsstrukturen – Der gemeinsame Zustand wird über dedizierte Zustandsstrukturen und nicht über Klassenmitglieder verwaltet
  • Zustandslose Module – Feature-Funktionen arbeiten mit dem globalen Zustand, was das Testen und Nachvollziehen erleichtert

Die OSSM-Klasse in ossm/OSSM.h wird aus Gründen der Abwärtskompatibilität mit der BLE-Befehlsverarbeitung beibehalten. Neue Funktionen sollten zustandslose Namespace-Funktionen verwenden.

Kernanwendung (src/ossm/)

Der Ordner ossm/ enthält die Kernanwendungslogik, geordnet nach Features.

Events.h
OSSM.h
OSSM.cpp
OrdnerZweck
state/Zustandsmaschinenarchitektur
pages/UI-Bildschirme
homing/Homing-Sequenz
menu/Menünavigation
simple_penetration/Einfacher Penetrationsmodus
stroke_engine/StrokeEngine-Modus
pattern_controls/Benutzeroberfläche zur Musterauswahl
play_controls/Wiedergabe-/Pause-/Geschwindigkeitssteuerung

Zustandsmaschine (ossm/state/)

Aus Gründen der Übersichtlichkeit und Testbarkeit sind die Zustandsmaschinenkomponenten getrennt.

DateiZweck
machine.hÜbergangstabellendefinition mit Boost.SML
actions.h / actions.cppZustandsübergangsaktionen (Anzeigeaktualisierungen, Motorsteuerung)
guards.h / guards.cppBedingte Prüfungen für Übergänge
state.h / state.cppInitialisierung der Zustandsmaschine und globale Instanz

Zustandsstrukturen verwalten verschiedene Aspekte der Anwendung:

DateiZweck
session.hAktuelle Sitzung (Startzeit, Anzahl der Hübe, Distanz)
settings.hBenutzereinstellungen (Geschwindigkeit, Hub, Empfindung, Tiefe, Muster)
calibration.hReferenzzustand (Sensor-Offset, Hubschritte, Referenzstatus)
motion.hBewegungsziele (Position, Geschwindigkeit, Zeit)
menu.hAktuelle Menüauswahl
ble.hStatus der Bluetooth-Verbindung
error.hFehlermeldungen

Einzelheiten zur Funktionsweise der Zustandsmaschine finden Sie unter Zustandsmaschinenarchitektur.

UI-Seiten (ossm/pages/)

Jeder Bildschirm in der Benutzeroberfläche verfügt über ein eigenes Modul.

ModulBeschreibung
hello.hStartbildschirm mit animierten Logos
preflight.hSicherheitskontrollbildschirm „Geschwindigkeit zum Starten reduzieren“.
error.hFehleranzeige mit Hilfemöglichkeit
update.hOTA-Aktualisierungsbildschirme (prüfen, aktualisieren, kein Update)
wifi.hWiFi-Konfigurationsportal
help.hHilfe- und Supportinformationen

Betriebsmodi

Jeder Betriebsmodus ist mit seiner Bewegungssteuerungslogik ein eigenständiges Modul.

ModulBeschreibung
simple_penetration/Einfache Hin- und Herbewegung mit kontrollierter Geschwindigkeit
stroke_engine/Komplexe Muster mithilfe der StrokeEngine-Bibliothek

Steuerungsoberflächen

ModulBeschreibung
menu/Hauptmenünavigation und Rendering
pattern_controls/Musterauswahlschnittstelle für den StrokeEngine-Modus
play_controls/Geschwindigkeits-, Hub-, Tiefen- und Empfindungssteuerung

Funktionsmodule

ModulBeschreibung
homing/Referenzfahrt (Vorwärtsscan, Rückwärtsscan, Kalibrierung)

Hardware-Services (src/services/)

Der Ordner services/ stellt Hardware-Abstraktionsschichten bereit.

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
DateiZweck
stepper.h/.cppMotorsteuerung (FastAccelStepper)
display.h/.cppOLED-Display (U8g2)
encoder.h/.cppDrehgebereingang
led.h/.cppRGB-LED-Statusanzeige
board.h/.cppPlatineninitialisierung
tasks.h/.cppFreeRTOS-Aufgabenverwaltung
wm.h/.cppWiFi-Manager
communication/BLE- und WiFi-Kommunikation

Einzelheiten zum BLE-Protokoll finden Sie unter BLE-Kommunikation.

Konstanten (src/constants/)

Konfigurationswerte und Enumerationen sind im Ordner constants/ zentralisiert.

Config.h
Pins.h
Menu.h
Version.h
UserConfig.h
Images.h
LogTags.h
DateiZweck
Config.hSystemkonfiguration (Geschwindigkeiten, Limits, Timeouts)
Pins.hGPIO-Pin-Definitionen
Menu.hEnum der Menüoptionen
Version.hInformationen zur Firmware-Version
UserConfig.hVom Benutzer konfigurierbare Einstellungen
Images.hBitmap-Assets für die Anzeige
LogTags.hESP-IDF-Protokollierungstags
copy/Lokalisierte Zeichenfolgen

Informationen zu Konfigurationsoptionen finden Sie unter Konfiguration.

Dienstprogramme (src/utils/)

Hilfsfunktionen und -klassen, die in der gesamten Codebasis verwendet werden.

StateLogger.h
RecursiveMutex.h
StrokeEngineHelper.h
format.h
analog.h
update.h
ble.h
DateiZweck
StateLogger.hProtokolliert Zustandsmaschinenübergänge zum Debuggen
RecursiveMutex.hThread-sicherer Mutex-Wrapper für ESP32
StrokeEngineHelper.hStrokeEngine-Integrationsdienstprogramme
format.hHilfsprogramme zur Zeichenfolgenformatierung
analog.hMittelung und Verarbeitung analoger Eingänge
update.hOTA-Update-Dienstprogramme
ble.hBLE-Hilfsfunktionen

Datenstrukturen (src/structs/)

Gemeinsame Datentypen, die modulübergreifend verwendet werden.

SettingPercents.h
LanguageStruct.h
Points.h
DateiZweck
SettingPercents.hBenutzereinstellungen als Prozentsätze (0-100)
LanguageStruct.hSprachkonfiguration
Points.hKoordinaten- und Punktstrukturen

Bibliotheken

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

Boost.SML ist eine reine Header-Zustandsmaschinenbibliothek. Aus Gründen der Versionsstabilität ist sie direkt in das Projekt eingebunden.

StrokeEngine (lib/StrokeEngine/)

Eine modifizierte Version von theelims/StrokeEngine, die Bewegungsmuster generiert. Die Bibliothek ist in den Quellcode eingebunden und für OSSM-spezifische Anforderungen angepasst.

Build-Konfiguration

Die Datei platformio.ini definiert Build-Umgebungen:

UmgebungZweck
developmentLokale Entwicklung mit Debug-Protokollierung
stagingTests vor der Veröffentlichung
productionRelease-Builds mit Optimierungen
testUnit-Test-Konfiguration

Weiterführende Literatur

Auf dieser Seite