mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-04-07 11:13:54 +08:00
min-feat/ui/display-mode
2025-10-29: move to raylib ui
This commit is contained in:
@@ -130,4 +130,5 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
||||
{"Version", {PERSISTENT, STRING}},
|
||||
{"dp_dev_last_log", {CLEAR_ON_ONROAD_TRANSITION, STRING}},
|
||||
{"dp_dev_reset_conf", {CLEAR_ON_MANAGER_START, BOOL, "0"}},
|
||||
{"dp_ui_display_mode", {PERSISTENT, INT, "0"}},
|
||||
};
|
||||
|
||||
@@ -66,6 +66,14 @@ class DragonpilotLayout(Widget):
|
||||
def _device_toggles(self):
|
||||
self._toggles["title_dev"] = simple_item(title=lambda: tr("### Device ###"))
|
||||
|
||||
self._toggles["dp_ui_display_mode"] = text_spin_button_item(
|
||||
title=lambda: tr("Display Mode"),
|
||||
callback=lambda val: self._params.put("dp_ui_display_mode", val),
|
||||
options=["Std.", "MAIN+", "OP+", "MAIN-", "OP-"],
|
||||
initial_index=int(self._params.get("dp_ui_display_mode") or 0),
|
||||
description=lambda: tr("Std.: Stock behavior.<br>MAIN+: ACC MAIN on = Display ON.<br>OP+: OP enabled = Display ON.<br>MAIN-: ACC MAIN on = Display OFF<br>OP-: OP enabled = Display OFF."),
|
||||
)
|
||||
|
||||
def _reset_dp_conf(self):
|
||||
def reset_dp_conf(result: int):
|
||||
# Check engaged again in case it changed while the dialog was open
|
||||
|
||||
@@ -79,6 +79,9 @@ class UIState:
|
||||
self._offroad_transition_callbacks: list[Callable[[], None]] = []
|
||||
self._engaged_transition_callbacks: list[Callable[[], None]] = []
|
||||
|
||||
# dp
|
||||
self.dp_ui_display_mode = 0
|
||||
|
||||
self.update_params()
|
||||
|
||||
def add_offroad_transition_callback(self, callback: Callable[[], None]):
|
||||
@@ -134,6 +137,11 @@ class UIState:
|
||||
|
||||
self.is_metric = self.params.get_bool("IsMetric")
|
||||
|
||||
# dp
|
||||
self.dp_ui_display_mode = int(self.params.get("dp_ui_display_mode") or 0)
|
||||
self.dp_ui_display_mode_cruise_available = False
|
||||
self.dp_ui_display_mode_cruise_enabled = False
|
||||
|
||||
def _update_status(self) -> None:
|
||||
if self.started and self.sm.updated["selfdriveState"]:
|
||||
ss = self.sm["selfdriveState"]
|
||||
@@ -160,6 +168,11 @@ class UIState:
|
||||
for callback in self._offroad_transition_callbacks:
|
||||
callback()
|
||||
|
||||
# dp
|
||||
if self.sm.updated["carState"]:
|
||||
self.dp_ui_display_mode_cruise_available = self.sm["carState"].cruiseState.available
|
||||
self.dp_ui_display_mode_cruise_enabled = self.sm["carState"].cruiseState.enabled
|
||||
|
||||
self._started_prev = self.started
|
||||
|
||||
def update_params(self) -> None:
|
||||
@@ -232,6 +245,48 @@ class Device:
|
||||
self._brightness_thread.start()
|
||||
self._last_brightness = brightness
|
||||
|
||||
# // Display Mode
|
||||
# // 0 Std. - Stock behavior.
|
||||
# // 1 MAIN+ - ACC MAIN on = Display ON
|
||||
# // 2 OP+ - OP enabled = Display ON
|
||||
# // 3 MAIN- - ACC MAIN on = Display OFF
|
||||
# // 4 OP- - OP enabled = Display OFF
|
||||
def ignore_state_ovrride(self, ignition):
|
||||
# 0 stock behaviour or ignition is off
|
||||
if ui_state.dp_ui_display_mode == 0 or not ignition:
|
||||
return ignition
|
||||
|
||||
# 1 MAIN+ - ACC MAIN on = Display ON
|
||||
if ui_state.dp_ui_display_mode == 1:
|
||||
if ui_state.dp_ui_display_mode_cruise_available:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
# 2 OP+ - OP enabled = Display ON
|
||||
if ui_state.dp_ui_display_mode == 2:
|
||||
if ui_state.dp_ui_display_mode_cruise_enabled:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
# 3 MAIN- - ACC MAIN on = Display OFF
|
||||
if ui_state.dp_ui_display_mode == 3:
|
||||
if ui_state.dp_ui_display_mode_cruise_available:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
# 4 OP- - OP enabled = Display OFF
|
||||
if ui_state.dp_ui_display_mode == 4:
|
||||
if ui_state.dp_ui_display_mode_cruise_enabled:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
# oops
|
||||
return ignition
|
||||
|
||||
def _update_wakefulness(self):
|
||||
# Handle interactive timeout
|
||||
ignition_just_turned_off = not ui_state.ignition and self._ignition
|
||||
@@ -246,7 +301,9 @@ class Device:
|
||||
callback()
|
||||
self._prev_timed_out = interaction_timeout
|
||||
|
||||
self._set_awake(ui_state.ignition or not interaction_timeout)
|
||||
ignition = self.ignore_state_ovrride(ui_state.ignition)
|
||||
|
||||
self._set_awake(ignition or not interaction_timeout)
|
||||
|
||||
def _set_awake(self, on: bool):
|
||||
if on != self._awake:
|
||||
|
||||
Reference in New Issue
Block a user