mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-07-30 08:48:12 +00:00
The screen faded as the device was used: text went grey a few updates after it was drawn, while whatever had just changed stayed crisp. Only a full refresh brought it back, and the next few updates ate it again. A partial update is differential -- the controller drives only the pixels that differ between its "current" (0x24) and "previous" (0x26) RAM and leaves the rest to hold their own charge, which this panel doesn't do well. Priming the previous-image RAM with the inverse of the incoming frame makes every pixel a difference, so all of them get driven to their target, in both directions. The inverse matters: priming with flat white makes only white->black a difference, so ink is re-driven but never erased and every screen ever shown accumulates as a ghost. Confirmed on hardware, both ways round. Costs one extra full-screen RAM write (a few ms of SPI). The refresh itself is unchanged -- the waveform clocks the whole panel regardless of how many pixels it drives -- so nothing got slower. Clearing ghosts is still the periodic full refresh's job (Settings > Full rfsh), which can now stay off. The helper needs GxEPD2_BW's private _buffer/_page_height, so it goes in the patched copy of the header, which every e-ink build now includes unconditionally rather than only screenshot-enabled ones. All e-ink variants pin GxEPD2 1.6.2, the version that copy tracks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>