From 6cf21a3698c6af6e871a3f54b281cc7088a9d410 Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Thu, 16 Apr 2026 04:21:37 +0000 Subject: [PATCH] fix: debug button screen-off mode now works in park state updateWakefulness was overriding display power every frame when ignition was on, fighting the screen-off set by home.cc. Now respects ScreenDisplayMode 3 unconditionally. Also auto-resets to mode 0 when shifting into drive from screen-off. Co-Authored-By: Claude Opus 4.6 (1M context) --- selfdrive/controls/controlsd.py | 7 +++++++ selfdrive/ui/ui.cc | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 16234b8..2cc4fc4 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -204,6 +204,7 @@ class Controls: self.always_on_lateral_main = self.always_on_lateral and self.params.get_bool("AlwaysOnLateralMain") self.drive_added = False + self.was_driving_gear = False self.fcw_random_event_triggered = False self.holiday_theme_alerted = False self.onroad_distance_pressed = False @@ -1263,6 +1264,12 @@ class Controls: self.events.add(EventName.clpDebug) def clearpilot_state_control(self, CC, CS): + # CLEARPILOT: auto-reset display when shifting into drive from screen-off + if self.driving_gear and not self.was_driving_gear: + if self.params_memory.get_int("ScreenDisplayMode") == 3: + self.params_memory.put_int("ScreenDisplayMode", 0) + self.was_driving_gear = self.driving_gear + if any(be.pressed and be.type == FrogPilotButtonType.lkas for be in CS.buttonEvents): current = self.params_memory.get_int("ScreenDisplayMode") diff --git a/selfdrive/ui/ui.cc b/selfdrive/ui/ui.cc index a85a345..0be42bd 100755 --- a/selfdrive/ui/ui.cc +++ b/selfdrive/ui/ui.cc @@ -565,7 +565,10 @@ void Device::updateWakefulness(const UIState &s) { emit interactiveTimeout(); } - if (s.scene.screen_brightness_onroad != 0) { + // CLEARPILOT: ScreenDisplayMode 3 = screen off — override awake state + if (paramsMemory.getInt("ScreenDisplayMode") == 3) { + setAwake(false); + } else if (s.scene.screen_brightness_onroad != 0) { setAwake(s.scene.ignition || interactive_timeout > 0); } else { setAwake(interactive_timeout > 0);