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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user