GDEQ031T10
Display driver for the GoodDisplay GDEQ031T10, a 3.1" 320x240 SPI e-paper panel (UC8253-family controller) used by the LilyGO T-Deck Pro/Max.
The command sequence (panel setting, power on/off, fast/partial LUT timings, deep
sleep) is ported from the vendor reference driver in
Xinyuan-LilyGO/T-Deck-MAX
(examples/Elink_paper/GDEQ031T10_Arduino/Display_EPD_W21.cpp).
Unlike EPDiyDisplay (which targets parallel-bus "EPD47"-style panels via the
epdiy library), this panel uses a simple 4-wire SPI interface (CS/DC/RST/BUSY +
SCK/MOSI), so it's driven directly with ESP-IDF's spi_master and gpio APIs
rather than epdiy or esp_lcd_panel.
Each LVGL flush is staged and handed off to a dedicated refresh task (the physical
refresh takes hundreds of ms to over a second, too long to run in LVGL's flush
callback without stalling input). The task diffs the new frame against a shadow of
what the panel currently holds and, where possible, performs a windowed partial
refresh of just the changed region instead of redrawing the whole panel. A full
refresh is still done on the first draw, on an explicit requestFullRefresh(),
when a change covers most of the screen, or periodically to clear the ghosting
that partial updates accumulate (gated by MAX_PARTIAL_REFRESHES, with a
localized ghost-clear preferred over a full flash when the accumulated changes are
confined to a small region). The panel's charge pump is powered off once the
refresh task's queue goes idle, not after every single refresh. Four refresh
modes are available, trading speed for quality:
Full(~3s) - best quality, used by defaultFast(~1.0s)Slow(~1.5s)Partial(~0.5s) - most ghosting
requestFullRefresh() forces the next flush to use Full mode, useful for
clearing up ghosting accumulated from a run of fast/partial refreshes.