···123123 }
124124125125 // 2. Check wake events (non-blocking).
126126- // When nothing is pending, idle briefly so we don't spin at full speed.
127127- // TODO: replace with proper WFI once esp-hal wake sources are configured.
126126+ // When nothing is pending, WFI suspends the core until the next interrupt.
128127 let should_poll = match try_wake() {
129128 Some(WakeReason::Timer) | Some(WakeReason::Multiple) => poller.tick(),
130129···139138 }
140139141140 None => {
142142- delay.delay_millis(1);
141141+ pulp_os::kernel::wake::wait_for_interrupt();
143142 continue;
144143 }
145144 };
+4
src/board/display.rs
···251251 // This is writeImageAgain() in GxEPD2
252252 self.write_image_partial_physical(cmd::WRITE_RAM_RED, px, py, pw, ph);
253253 self.write_image_partial_physical(cmd::WRITE_RAM_BW, px, py, pw, ph);
254254+255255+ // Step 4: Power off display controller to save power.
256256+ // E-paper retains image without power. Leaving it on draws ~15mA idle.
257257+ self.power_off(delay);
254258 }
255259256260 /// Transform logical region to physical region based on rotation