1.7 KiB
1.7 KiB
Makro-System
Dateien:
config/macro_config.hconfig/macro_config.cppCMainController.cpp
Datenstruktur
struct __attribute__((packed)) SMacroStep {
uint8_t keycode;
uint8_t modifier;
};
#define MACRO_SLOTS 32
#define MACRO_MAX_STEPS 8
struct __attribute__((packed)) SMacroTable {
SMacroStep steps[MACRO_SLOTS][MACRO_MAX_STEPS];
};
Gesamtgroesse:
32 * 8 * 2 = 512Byte- verteilt auf zwei NVM-Rows
Speicherort
| Row | Adresse | Inhalt |
|---|---|---|
| Macro Row 0 | 0x1FB00 |
Bytes 0..255 |
| Macro Row 1 | 0x1FC00 |
Bytes 256..511 |
Slot-Konvention
Das Board speichert die Slots blind, die GUI verwendet dabei diese Zuordnung:
| Slots | Bedeutung |
|---|---|
0..19 |
MX-Buttons |
20..31 |
Encoder-Aktionen (enc * 3 + act_idx) |
Laden
macro_config_load():
- kopiert 512 Byte aus NVM in
SMacroTable - erkennt komplett geloeschten Flash (
0xFF) als "noch nie beschrieben" - setzt dann eine leere Tabelle
Eine leere Tabelle ist also ein gueltiger Default-Zustand.
Speichern
macro_config_save():
- Tabelle in einen 4-Byte-aligned Puffer kopieren
- beide Rows loeschen
- 8 Pages zu je 64 Byte schreiben
Rueckgabewert:
truebei Erfolgfalsebei NVM-Timeout
Ausfuehrung
Beim Triggern eines Makros:
- Slot aus
action.data - bis zu 8 Steps abarbeiten
keycode == 0beendet das Makro vorzeitig- pro Step:
- HID key down
- 10 ms warten
- HID key up
- 20 ms warten
Die Ausfuehrung laeuft aus m_macros im RAM, nicht direkt aus NVM.
Zusammenhang mit Werksreset
Beim Werksreset wird die komplette SMacroTable auf 0 gesetzt und in beide Makro-Rows zurueckgeschrieben.
Danach sind alle 32 Slots leer.