Files
VersaGUI/doc/02_device_config.md
T

125 lines
2.3 KiB
Markdown

# DeviceConfig und MacroTable
Datei:
- `src/DeviceConfig.cs`
## Zweck
Die C#-Klassen spiegeln das aktuelle Firmware-Layout bytegenau.
Sie muessen deshalb synchron zu `VersaMCU/src/config/nvm_config.h` und `macro_config.h` bleiben.
## DeviceConfig
### Globaler Stand
- Magic `0x56503203`
- Version `3`
- Groesse `740` Byte
- 3 Profile
### Wichtige Felder
| Feld | Bedeutung |
|---|---|
| `ActiveProfileIndex` | aktives Profil 0..2 |
| `GlobalBrightness` | globale LED-Helligkeit |
| `Profiles[3]` | komplette Profil-Daten |
Fuer die GUI gibt es zusaetzlich Komfortzugriffe auf das aktive Profil:
- `MxActions[20]`
- `EncActions[4,3]`
- `LedBase[20]`
- `LedAnim[20]`
- `LedPeriod[20]`
### Layout
```text
Offset 0 4B magic
Offset 4 1B version
Offset 5 2B crc
Offset 7 1B active_profile
Offset 8 1B global_brightness
Offset 9 4B enc_sensitivity[4]
Offset 13 19B reserve
Offset 32 profile 0
Offset 268 profile 1
Offset 504 profile 2
```
Jedes Profil belegt 236 Byte:
```text
20 x mx_actions
12 x enc_actions
20 x led_r
20 x led_g
20 x led_b
20 x led_brightness
20 x led_anim
20 x led_period_ms
```
## CRC
CRC16-CCITT:
- Polynom `0x1021`
- Init `0xFFFF`
- Bereich `7..739`
Die CRC muss exakt zur Firmware passen.
## Defaults
Firmware-Defaults:
- alle Actions `None`
- `GlobalBrightness = 255`
- `enc_sensitivity = 1`
- Base-Farbe `R=80, G=40, B=0`
- Animation `ColorCycle`
- Periode `4000 ms`
Sichtbarer Effekt auf dem Board:
- alle MX-LEDs laufen im Regenbogenmodus
## MacroTable
### Stand
- 32 Slots
- 8 Steps pro Slot
- 512 Byte gesamt
### Slot-Konvention
| Slots | Bedeutung |
|---|---|
| `0..19` | MX-Buttons |
| `20..31` | Encoder-Aktionen |
### Serialisierung
Ein Step besteht aus:
- `keycode`
- `modifier`
Es gibt kein Magic und keine CRC fuer die Makrotabelle.
Beim Transfer prüft die GUI trotzdem exakte Größe und alle HID-Keycodes; die
Firmware prüft zusätzlich die vollständige Chunkmenge.
## Wichtig fuer Aenderungen
Wenn sich Firmware-Layout, Magic, Version, Profilzahl oder Makrogroesse aendern, muessen mindestens diese Stellen zusammen angepasst werden:
- `VersaMCU`
- `VersaGUI`
Beide sind eigenständige Git-Repositories und werden getrennt gebaut und
committed. Andere GUI-Ports gehören nicht zum gepflegten Scope.