Public Access
Rewrite Nano serial parser as line based, fix protocol bugs
- Commands run on '\n' instead of busy-waiting for a byte count, which fixes s/F/T waiting for the next command and P drawing 0xFF garbage - Invalid bitmaps no longer leak their data as commands; bitmap data is streamed so full-screen bitmaps still fit - Store flip time as uint16 with magic marker, validate 50-2000 us - Overflow-safe millis() handling for the periodic refresh - Run the full refresh only after D or when serial is idle, so incoming data is not lost while the redraw blocks - Put the boot refresh measurement behind MEASURE_REFRESH - Fix DEBUG hex output and use F() strings to save RAM - Driver: direct mode now updates the old buffer instead of re-setting the new one Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
459937352a
commit
f1dbc35ebd
4 files changed
+328
-231
No files matched your search
@@ -31,13 +31,21 @@ See README.md for the overview.
|
||||
Add new secrets to `secrets.example.h` as placeholders.
|
||||
- Hardware is not available here. Builds can be checked, but runtime behaviour can't.
|
||||
|
||||
## Known quirks in the serial protocol (Nano `src/nano/main.cpp`)
|
||||
## Nano serial parser (`src/nano/main.cpp`)
|
||||
|
||||
- `T` waits for more than 6 bytes before parsing, but `T225\n` has only 4 after the `T`.
|
||||
It completes only when the next command arrives.
|
||||
- The `T` value is stored with `EEPROM.update` in one byte, so values above 255 µs are
|
||||
truncated after a reboot.
|
||||
- `P` (print text) busy-waits for a `\n` and has no timeout.
|
||||
- Line based and non-blocking: bytes are collected into a 64-character buffer and a
|
||||
command runs when `\n` arrives. Bitmap (`B`) pixel data is the exception. It is drawn
|
||||
while it arrives, so it can be longer than the buffer. Keep `loop()` free of busy-waits.
|
||||
- A full redraw (`display(true)`) blocks for about 0.5 s, which overflows the 64-byte
|
||||
serial receive buffer. Only run it when no data is expected: right after a `D`, or after
|
||||
2 s with no serial data. The ESP sends one frame per second, ending with `D`.
|
||||
- Flip time is stored in EEPROM as a magic word at address 0 and a `uint16_t` at
|
||||
address 2. Values outside 50–2000 µs are rejected.
|
||||
- The Nano doesn't send an acknowledgement. Whether the Nano's TX is wired to the ESP's RX
|
||||
is unknown, so don't make the ESP wait for replies.
|
||||
- To test the parser without hardware, compile `main.cpp` with g++ (Strawberry Perl
|
||||
provides it at `C:\Strawberry\c\bin`) and mock headers for `Arduino.h`, `EEPROM.h` and
|
||||
`BROSE9323.h`.
|
||||
|
||||
## Git
|
||||
|
||||
|
||||
Reference in new issue
Block a user