Send only the changed dots of a frame to the Nano

Frames were sent as F0 plus one s command per yellow dot (thousands of
characters). During scrolling that overran the Nano's serial buffer, and
half-received frames redrew the whole screen. showBitmap() now sends two B
commands over the changed rectangle (dots off, dots on), or one B command for
a full frame, and the pacing counts the characters sent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-10-15 21:14:48 +02:00
1 parent 89001ddbc6
commit 47ef65ee7d
8 files changed
+262 -25

No files matched your search

+4 -1
View File
@@ -147,7 +147,10 @@ See README.md for the overview.
old hardcoded clock (also the default and the HA "Clock" option).
- Moving pages: `renderPage()` returns when the page changes next (scroll step, second);
`FlipdotFrames` sends those frames as `D1` (no effect) and paces them by the estimated
flip time, because the Nano has no acknowledgement. Character 127 is the degree sign in
receive and flip time, because the Nano has no acknowledgement. Full screen frames go
through `BROSE9323::showBitmap()`: only the changed dots, as two `B` commands over the
changed rectangle (`lib/BROSE9323/frame_commands.h`, tested with the Nano parser in
`test_nano`). Don't send frames pixel by pixel (`s` commands are 7 characters per dot). Character 127 is the degree sign in
page texts and fonts (UTF-8 ° in JSON).
- Fonts use the "FDF1" format of `logic/font.h`; the web page writes the same format.
`logic/builtin_fonts.cpp` is generated: change `tools/make_builtin_fonts.py` and rerun it.