Initial commit
This commit is contained in:
@@ -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 (0–24) als CButton-Array.
|
||||
// key_id 0–3: Encoder-SW (kein LED), key_id 4: NC, key_id 5–24: 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
|
||||
};
|
||||
Reference in New Issue
Block a user