ADR-0009 — E-paper refresh-mode discipline
Status: accepted (amended by ADR-0014)
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 four values:
FULL (slow, clears ghosting), FAST (single-flash waveform, clears most ghosting; see
ADR-0014), PARTIAL (fast, may ghost; escalated via FAST to FULL per ADR-0014), and
PARTIAL_LIGHT (partial refresh that is never promoted, 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 (viaFASTtoFULL, ADR-0014) to 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.