diff --git a/README.md b/README.md index 04834dc..735cc9a 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,8 @@ Die GUI nutzt derzeit vor allem `STATIC`, `BLINK`, `PULSE` und `COLOR_CYCLE`. Config und Makros liegen in getrennten reservierten NVM-Bereichen. +Beim Serial-Dump der Config werden 124 Chunks zu je 6 Nutzbytes uebertragen. Implementierungen muessen den daraus berechneten Byte-Offset mindestens 16 Bit breit halten, weil Profil 2 und 3 hinter Byte 255 liegen. + ## Werksreset Die Firmware hat einen eingebauten Recovery-Pfad: diff --git a/doc/07_serial_protocol.md b/doc/07_serial_protocol.md index 1522b43..799c235 100644 --- a/doc/07_serial_protocol.md +++ b/doc/07_serial_protocol.md @@ -79,6 +79,8 @@ Config: ceil(740 / 6) = 124 Chunks Makros: ceil(512 / 6) = 86 Chunks ``` +Wichtig fuer Implementierungen: Der Byte-Offset eines Chunks muss mindestens 16 Bit breit sein. Bei der Config liegt der Offset ab Chunk 43 ueber 255 Byte; ein 8-Bit-Offset wuerde ueberlaufen und spaetere Profilbereiche falsch dumpen. + ## Transferablauf ### PC -> Board diff --git a/src/CMainController.cpp b/src/CMainController.cpp index f091e2b..e7e6694 100644 --- a/src/CMainController.cpp +++ b/src/CMainController.cpp @@ -245,7 +245,7 @@ void CMainController::poll_vendor() uint8_t p[SERIAL_PKT_SIZE] = {}; p[0] = USB_EVT_CONFIG_DATA; p[1] = i; - uint8_t offset = i * payload; + uint16_t offset = (uint16_t)i * payload; for (uint8_t b = 0; b < payload; b++) { if (offset + b < sz) p[2 + b] = raw[offset + b]; }