Initial commit

This commit is contained in:
2026-03-29 14:47:13 +02:00
commit b49984b9c0
32 changed files with 2394 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
// CMainController.h
// Zentraler Orchestrator des VersaPad v2.
// Kennt alle Subsysteme und koordiniert den Datenfluss zwischen ihnen.
// Einzige Instanz wird in main.cpp angelegt.
#pragma once
#include "CButton.h"
#include "CEventQueue.h"
#include "SEvent.h"
#include "hal/matrix.h"
#include "hal/encoder.h"
#include "hal/usb_hid.h"
#include "hal/usb_serial.h"
#include "config/action.h"
class CMainController
{
public:
CMainController();
void setup(); // Einmalig in Arduino setup() aufrufen
void work(); // Jeden Loop-Durchlauf aufrufen
private:
// m_queue muss vor m_buttons deklariert sein: C++ initialisiert Member in
// Deklarationsreihenfolge. Die static-Bridge-Funktion (matrix_cb) erhält
// einen Pointer auf m_queue der muss zum Zeitpunkt der Nutzung gültig sein.
CEventQueue m_queue;
// Alle 25 Matrix-Keys (024) als CButton-Array.
// key_id 03: Encoder-SW (kein LED), key_id 4: NC, key_id 524: MX-Buttons mit LED.
CButton m_buttons[MATRIX_KEYS];
// Encoder CW/CCW-Aktionen aus NVM Encoder haben kein CButton-Objekt.
SAction m_enc_cw[4];
SAction m_enc_ccw[4];
void init_buttons(); // Buttons aus NVM-Config initialisieren
void poll_vendor(); // Eingehende Serial-Pakete (PC→Board) verarbeiten
void processEvents(); // Queue leeren, Aktionen ausführen
void execute_action(SAction); // Einzelne Aktion ausführen (HID / Serial)
void updateLEDs(); // Dirty-LEDs in WS2812-Buffer schreiben
// ── Config-Empfangspuffer ─────────────────────────────────────────────────
// Mehrteilige Übertragung: BEGIN setzt receiving=true, DATA füllt den Buffer,
// COMMIT validiert und schreibt in den NVM.
// Puffergröße = sizeof(SDeviceConfig) = 163 Bytes.
uint8_t m_cfg_buf[163]; // Empfangspuffer für eingehende Config-Daten
uint8_t m_cfg_chunks_expected; // Anzahl erwarteter Chunks (aus BEGIN-Paket)
bool m_cfg_receiving; // true wenn Übertragung läuft
};