ADR-0009 — E-paper refresh-mode discipline
Status: accepted
Source: spec 014 (display); NFR-003; FR-094; components/cdc_hal/include/cdc_hal/IDisplay.h (RefreshMode)
Context
Section titled “Context”The 2.9” monochrome e-paper updates only on content change. RefreshMode has three values:
FULL (slow, clears ghosting), PARTIAL (fast, may ghost; periodically promoted to FULL to
clear ghosting), and PARTIAL_LIGHT (partial refresh that is never promoted to FULL, for tiny
low-churn updates such as the lock-screen clock). An async flush must carry the full
RefreshMode; collapsing PARTIAL_LIGHT into PARTIAL would reintroduce periodic full
refreshes on the lock-screen clock.
Decision
Section titled “Decision”The display pipeline preserves refresh-mode discipline. The lock-screen clock uses
PARTIAL_LIGHT, and PARTIAL_LIGHT is never promoted to a full refresh.
- An async flush carries the full
RefreshModeend-to-end; it is not downgraded or collapsed. PARTIALmay be periodically promoted toFULLto clear ghosting;PARTIAL_LIGHTmay not.- The busy-wait must outlast the full-refresh waveform so back-to-back full refreshes do not abort each other.
Consequences
Section titled “Consequences”- Enables: a low-churn lock-screen clock that updates without the visual disruption and wear of repeated full refreshes.
- Must hold: any flush path that forwards a refresh mode must forward
PARTIAL_LIGHTunchanged; the per-second clock tick staysPARTIAL_LIGHT. - Cost:
PARTIAL_LIGHTregions accumulate ghosting over time because they are never cleared by a full refresh; only content that tolerates this should use it.