fix(rlcd): screensaver wake/activate must run for monochrome, not just backlight displays

RLCD ST7305 has !supportsBacklightDuty(). Previous fix that fixed MCP flash-then-back left entire idle state machine gated by supportsBacklight, causing once dimmed it could never wake on button press -> appears locked weird state reported.

Fix: run timeout logic for all displays, guard only setBacklightDuty calls.
- timeout disabled (Never) branch always restores displayDimmed
- timeout activation creates screensaver for all
- wake on inactive<100ms + charging block works for RLCD
- setBacklightDuty only when supportsBacklight && display!=nullptr

Also preserves deadlock-free ordering (MCP state outside LVGL lock) from 3629ffef.

RLCD: 0x2b78b0 32%% free flashed /dev/cu.usbmodem101

Co-Authored-By: internal-model
This commit is contained in:
Adolfo Reyna
2026-07-11 21:40:18 -04:00
parent 3629ffef2c
commit 50d86de4a3
@@ -206,10 +206,12 @@ void DisplayIdleService::tick() {
auto display = getDisplay(); auto display = getDisplay();
bool supportsBacklight = display != nullptr && display->supportsBacklightDuty(); bool supportsBacklight = display != nullptr && display->supportsBacklightDuty();
if (supportsBacklight) {
if (!cachedDisplaySettings.backlightTimeoutEnabled || cachedDisplaySettings.backlightTimeoutMs == 0) { if (!cachedDisplaySettings.backlightTimeoutEnabled || cachedDisplaySettings.backlightTimeoutMs == 0) {
// Timeout disabled (Never): ensure we restore if we were dimmed, regardless of display type
if (displayDimmed && !isMcpActive) { if (displayDimmed && !isMcpActive) {
if (supportsBacklight && display != nullptr) {
display->setBacklightDuty(cachedDisplaySettings.backlightDuty); display->setBacklightDuty(cachedDisplaySettings.backlightDuty);
}
displayDimmed = false; displayDimmed = false;
} }
} else { } else {
@@ -225,8 +227,10 @@ void DisplayIdleService::tick() {
activateScreensaver(); activateScreensaver();
lvgl::unlock(); lvgl::unlock();
if (cachedDisplaySettings.screensaverType == settings::display::ScreensaverType::None) { if (cachedDisplaySettings.screensaverType == settings::display::ScreensaverType::None) {
if (supportsBacklight && display != nullptr) {
display->setBacklightDuty(0); display->setBacklightDuty(0);
} }
}
displayDimmed = true; displayDimmed = true;
} }
} else if (displayDimmed && !isMcpActive) { } else if (displayDimmed && !isMcpActive) {
@@ -238,7 +242,6 @@ void DisplayIdleService::tick() {
} }
} }
} }
}
bool DisplayIdleService::onStart(ServiceContext& service) { bool DisplayIdleService::onStart(ServiceContext& service) {
// Seed random number generator for varied screensaver patterns // Seed random number generator for varied screensaver patterns