8 Step macro and profile switching fully working
This commit is contained in:
@@ -36,7 +36,7 @@ Byte 5–7: reserviert (0x00)
|
||||
| `0x13` | CONFIG_READ | Board sendet aktuelle NVM-Config zurück (BEGIN/DATA/END) |
|
||||
| `0x20` | MACRO_BEGIN | Byte[1] = Chunk-Anzahl – neuen Makro-Empfang starten |
|
||||
| `0x21` | MACRO_DATA | Byte[1] = Chunk-Index, Byte[2–7] = 6 B Nutzdaten |
|
||||
| `0x22` | MACRO_COMMIT | NVM schreiben + MACRO_ACK zurück |
|
||||
| `0x22` | MACRO_COMMIT | NVM schreiben → MACRO_ACK oder MACRO_NACK |
|
||||
| `0x23` | MACRO_READ | Board sendet aktuelle Makro-Tabelle zurück |
|
||||
|
||||
## Event-Referenz (Board → PC)
|
||||
@@ -49,7 +49,7 @@ Byte 5–7: reserviert (0x00)
|
||||
| `0x84` | ENC_CCW | enc_id – Encoder-Schritt CCW (HOST_COMMAND) |
|
||||
| `0x85` | PONG | Antwort auf PING |
|
||||
| `0x90` | CONFIG_ACK | Config erfolgreich in NVM geschrieben |
|
||||
| `0x91` | CONFIG_NACK | Config CRC/Magic ungültig – nicht geschrieben |
|
||||
| `0x91` | CONFIG_NACK | Config CRC/Magic ungültig oder NVM-Timeout – nicht geschrieben |
|
||||
| `0x92` | CONFIG_BEGIN | Byte[1] = Chunk-Anzahl (Config-Dump) |
|
||||
| `0x93` | CONFIG_DATA | Byte[1] = Index, Byte[2–7] = 6 B (Config-Dump) |
|
||||
| `0x94` | CONFIG_END | Config-Dump abgeschlossen |
|
||||
@@ -57,14 +57,15 @@ Byte 5–7: reserviert (0x00)
|
||||
| `0x96` | MACRO_BEGIN | Byte[1] = Chunk-Anzahl (Makro-Dump) |
|
||||
| `0x97` | MACRO_DATA | Byte[1] = Index, Byte[2–7] = 6 B (Makro-Dump) |
|
||||
| `0x98` | MACRO_END | Makro-Dump abgeschlossen |
|
||||
| `0x99` | MACRO_NACK | Makro-Tabelle: NVM-Timeout – nicht geschrieben |
|
||||
|
||||
## Chunked Transfer
|
||||
|
||||
Config (223 B) und Makro-Tabelle (256 B) werden in 6-Byte-Chunks übertragen:
|
||||
Config (740 B) und Makro-Tabelle (512 B) werden in 6-Byte-Chunks übertragen:
|
||||
|
||||
```
|
||||
Config: ceil(223 / 6) = 38 Chunks
|
||||
Makros: ceil(256 / 6) = 43 Chunks (letzter Chunk hat 4 Nutzbytes)
|
||||
Config: ceil(740 / 6) = 124 Chunks
|
||||
Makros: ceil(512 / 6) = 86 Chunks (letzter Chunk hat 2 Nutzbytes)
|
||||
```
|
||||
|
||||
Ablauf (PC → Board):
|
||||
@@ -76,8 +77,13 @@ DATA chunk_1 (Bytes 6–11)
|
||||
COMMIT
|
||||
```
|
||||
|
||||
COMMIT bei Config: Board prüft Magic + Version + CRC. Bei Fehler → NACK, kein NVM-Schreiben.
|
||||
COMMIT bei Makro: Kein CRC, Board schreibt blind → MACRO_ACK.
|
||||
**CONFIG_COMMIT**: Board prüft Magic + Version + CRC. Bei Fehler → `CONFIG_NACK`. Bei NVM-Timeout während Erase/Write → `CONFIG_NACK`. Bei Erfolg → `CONFIG_ACK`.
|
||||
|
||||
**MACRO_COMMIT**: Kein CRC, Board schreibt direkt. Bei Erfolg → `MACRO_ACK`. Bei NVM-Timeout → `MACRO_NACK`.
|
||||
|
||||
### ACK-Synchronisation (GUI-Seite)
|
||||
|
||||
VersaGUI wartet nach COMMIT auf das ACK/NACK via `SemaphoreSlim` (Timeout 3 s). Erst nach Freigabe des Gates startet der nächste Transfer. Dies verhindert, dass Makro-Chunks gesendet werden während das Board noch den Config-NVM schreibt (~750 ms für 3 Rows).
|
||||
|
||||
## Implementierungsdetails
|
||||
|
||||
|
||||
Reference in New Issue
Block a user