AMOLED brightness fades to 0 after IDLE_TIMEOUT_MS without a physical button press; any of the three buttons (BTN_BACK / BTN_FWD / PWR) fades it back in. The first press from sleep is consumed for wake only — Space / Shift+Tab / cycle-screen only fire on the second press, so reaching for the device to glance at it doesn't accidentally send PTT to Claude. Touch never counts as activity and is fully swallowed while asleep: pets and sleeves can't wake it, and LVGL can't secretly toggle splash<->usage behind a black panel. Rotation handling defers while asleep so its blank+ramp doesn't fight the idle fade; a rotation that happens during sleep is detected and ramped in on wake. All tunables live in idle_cfg.h (timeout, fade durations, default brightness) — nothing is hard-coded in main.cpp. AMOLED brightness=0 is true 0 emission on these self-emissive panels, so no extra power-management plumbing (light-sleep, AXP rail gating) is needed to get the battery savings.
17 lines
574 B
C
17 lines
574 B
C
#pragma once
|
|
#include <stdbool.h>
|
|
|
|
void idle_init(void);
|
|
void idle_tick(void);
|
|
void idle_note_activity(void);
|
|
|
|
// Returns true if this press was consumed as a wake-up (caller MUST skip the
|
|
// button's normal action). Returns false when already awake — also notes the
|
|
// activity, so callers don't need a separate idle_note_activity() call.
|
|
bool idle_consume_wake_press(void);
|
|
|
|
// Touch should NOT count as activity (avoids accidental wakes from pets,
|
|
// sleeves, etc.). Callers use this to silently drop touch events while the
|
|
// panel is dark.
|
|
bool idle_is_asleep(void);
|