cdgit
pushed to main at code/GxEPD2-esphome
d4f301c61b Capture power_off/hibernate for all panels; add dev-time diagnostics gate
- epd_command.h: power_off_sequence/hibernate_sequence fields on
EpdPanelDescriptor (both optional, default nullptr/0 - a safe no-op).
- emit_descriptor.h: capture_power_sequence/capture_power_off_and_hibernate
(each needs its own fresh driver session - every GxEPD2 driver's
hibernate() calls powerOff() internally, so one session would silently
drop the second call's commands) and print_power_sequences for splicing
into an existing panel_*.h. tools/capture.py --power exposes it.
- Captured and added to all 15 panels. Three SSD16xx-family panels
(154_Z90c, 213_Z98C, 426_GDEQ0426T82) have an empty power_off_sequence -
real, not a bug: their _Update_Full() already sets _power_is_on = false,
so powerOff()'s own guard has nothing left to send.
- cycle_engine.h: POWER_OFF_CMD/HIBERNATE_CMD states reusing the existing
step_sequence_ command-table walker; request_power_off()/
request_hibernate() are standalone entry points (no reset pulse - no
paired "wake" call exists or is needed, since request_full_update()'s
RESET_LOW is an unconditional reset every cycle anyway).
- gxepd2_display.h: power_off()/hibernate() exposed for a user's own
lambda.
- New `diagnostics: true` display option (display.py) compiles in
GxEPD2Display's dev-time-only diagnostic methods (currently
diag_update_no_reset(), for bench-checking hibernate()'s "non-responsive
until reset" contract using the screen as the oracle) behind
-DUSE_GXEPD2_DIAGNOSTICS, so a production build pays nothing for them.
Off by default.
- 5 new mono panels (213_B72/270/290_T5D/420/583) covering 5 previously
unrepresented controller families, all structural/compile-verified.
- emit_descriptor.h bug fix: the plane-invert/1bpp probe drove its test
fill through writeScreenBuffer, assuming it shares a command with the
real plane-write (writeImage) - GxEPD2_270 doesn't (0x13 vs 0x15), so the
probe silently misclassified a genuinely 1bpp panel as packed. Fixed to
probe through writeImage instead.
- emit_descriptor.h: make_resolver_bw_packed, a fallback packed-palette
resolver for a driver with no colour wrapper to drive (unlike the
4-colour/7-colour resolvers) - covers GxEPD2_583/UC8159c's
_send8pixel-style internal packing with no source reading needed.
- tools/capture.py --sweep/--diag: run the window-encoder sweep / Pattern-A
diagnostic fill generically for any capturable model, no hand-written
run_<panel>[_diag].cpp needed.
CONTRIBUTING.md and the harness README updated throughout.
2 weeks ago