Skip to content

E-paper descriptor driven driver - #25

Open
petermm wants to merge 4 commits into
atomvm:mainfrom
petermm:epaper
Open

petermm wants to merge 4 commits into
atomvm:mainfrom
petermm:epaper

Conversation

@petermm

@petermm petermm commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Adds descriptor-driven e-paper panel support, moving panel configuration and command sequences out of the shared driver.

  • Migrates built-in ACeP, UC8151, UC8276, and SSD16xx panels.
  • Adds named sleep modes and full, fast, partial, and 4-gray refresh controls where supported.
  • Hardens descriptor validation, framebuffer sizing, previous-frame handling, and wake timeouts.

Move e-paper panel configuration into Erlang descriptors and teach the C driver to parse descriptor terms, execute compact command bytecode, manage LUT slots, and enforce descriptor geometry.

Add descriptor constructors for the supported 2.9 inch and 2.13 inch SSD1680/JD79656 panels, including full, fast, partial, and 4-gray refresh paths. Apply logical view-to-native rotation when packing native frames so rotated descriptors render correctly.

Split the Erlang package into a public facade, reusable descriptor builders, bytecode helpers, and a built-in panel registry so user projects can prototype custom panel descriptors out of tree.

Document the descriptor flow, custom panel workflow, and Erlang-side validation coverage for orientation and descriptor shape.

Signed-off-by: Peter M <petermm@gmail.com>
Move ACeP 7-color panels to Erlang descriptors and add UC8151 and UC8276
panel support with controller-specific LUT, frame, and refresh handling.

Remove the old compatible-string path and baked-in ACeP C descriptors.
Update the panel documentation and descriptor tests.

Signed-off-by: Peter M <petermm@gmail.com>
Introduce version 3 descriptors with named low-power modes, wake policies,
and after-wake refresh handling. Add sleep, standby, and deep-sleep programs
for supported panels and preserve host previous-frame state when permitted.

Validate advertised refresh modes and expose info, capabilities, and
wait_idle calls. Document the lifecycle API and add descriptor coverage.

Signed-off-by: Peter M <petermm@gmail.com>
Validate descriptor scalars, geometry, frame-size arithmetic, programs,
sleep modes, LUTs, and init failure paths at the Erlang and C boundaries.
Separate ACeP raw init sequences from interpreted command bytecode.

Send cached previous frames before capturing new ones and commit cache
validity only after successful programs. Preserve optical refresh history
across sleep/wake and invalidate monochrome caches before gray updates.

Correct Heltec BUSY polarity, bound wake waits, and use wide timeout/tick
arithmetic. Validate retained refresh programs independently of enabled
capabilities. Add focused Erlang descriptor regression coverage.

Signed-off-by: Peter M <petermm@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant