From 0262b934c4479eb146f27d57a39dd61597cb1c08 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Sun, 14 Jun 2026 21:18:13 -0500 Subject: [PATCH] dumb --- starpilot/common/starpilot_variables.py | 51 ++++++++----------- .../common/tests/test_starpilot_variables.py | 12 +++++ 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/starpilot/common/starpilot_variables.py b/starpilot/common/starpilot_variables.py index 70d281951..f0f763db9 100644 --- a/starpilot/common/starpilot_variables.py +++ b/starpilot/common/starpilot_variables.py @@ -429,8 +429,8 @@ class StarPilotVariables: return f"#{color.get('alpha', 255):02X}{color.get('red', 255):02X}{color.get('green', 255):02X}{color.get('blue', 255):02X}" return "#FFFFFFFF" - def get_value(self, key, cast=bool, condition=True, conversion=None, default=None, min=None, max=None): - if not condition or (self.starpilot_toggles.tuning_level < self.tuning_levels.get(key, 0)): + def get_value(self, key, cast=bool, condition=True, conversion=None, default=None, min=None, max=None, respect_tuning_level=True): + if not condition or (respect_tuning_level and self.starpilot_toggles.tuning_level < self.tuning_levels.get(key, 0)): if default is not None: value = default elif cast is bool: @@ -477,6 +477,11 @@ class StarPilotVariables: return value + def get_button_function(self, key, condition=True): + # Tuning level should hide wheel-mapping controls, not silently revert their + # runtime behavior to defaults after the driver has configured them. + return self.get_value(key, cast=float, condition=condition, respect_tuning_level=False) + def _sync_stock_param(self, key, stock_key, live_value): try: live_value = float(live_value) @@ -691,12 +696,12 @@ class StarPilotVariables: toggle.warningImmediate_volume = max(self.get_value("WarningImmediateVolume", cast=float, condition=toggle.alert_volume_controller, default=25), 25) toggle.always_on_lateral = self.get_value("AlwaysOnLateral") - lkas_button_assigned_to_aol = self.get_value("LKASButtonControl", cast=float) == BUTTON_FUNCTIONS["AOL_TOGGLE"] + lkas_button_assigned_to_aol = self.get_button_function("LKASButtonControl") == BUTTON_FUNCTIONS["AOL_TOGGLE"] toggle.always_on_lateral_lkas = toggle.always_on_lateral and toggle.lkas_allowed_for_aol and lkas_button_assigned_to_aol toggle.always_on_lateral_main = toggle.always_on_lateral and not prohibited_main_aol toggle.always_on_lateral_pause_speed = self.get_value("PauseAOLOnBrake", cast=float, condition=toggle.always_on_lateral) - main_cruise_button_control = self.get_value("MainCruiseButtonControl", cast=float) + main_cruise_button_control = self.get_button_function("MainCruiseButtonControl") toggle.main_cruise_aol_toggle = main_cruise_button_control == BUTTON_FUNCTIONS["AOL_TOGGLE"] toggle.main_cruise_slc_adopt = main_cruise_button_control == BUTTON_FUNCTIONS["SLC_ADOPT"] @@ -861,7 +866,7 @@ class StarPilotVariables: condition=toggle.car_make == "gm" and toggle.has_pedal and "BOLT" in toggle.car_model, ) - distance_button_control = self.get_value("DistanceButtonControl", cast=float) + distance_button_control = self.get_button_function("DistanceButtonControl") toggle.experimental_mode_via_distance = toggle.openpilot_longitudinal and distance_button_control == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press = toggle.experimental_mode_via_distance toggle.force_coast_via_distance = toggle.openpilot_longitudinal and distance_button_control == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -872,7 +877,7 @@ class StarPilotVariables: toggle.traffic_mode_via_distance = toggle.openpilot_longitudinal and distance_button_control == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_distance = distance_button_control == BUTTON_FUNCTIONS["BOOKMARK"] - distance_button_control_long = self.get_value("LongDistanceButtonControl", cast=float) + distance_button_control_long = self.get_button_function("LongDistanceButtonControl") toggle.experimental_mode_via_distance_long = toggle.openpilot_longitudinal and distance_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_distance_long toggle.force_coast_via_distance_long = toggle.openpilot_longitudinal and distance_button_control_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -883,7 +888,7 @@ class StarPilotVariables: toggle.traffic_mode_via_distance_long = toggle.openpilot_longitudinal and distance_button_control_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_distance_long = distance_button_control_long == BUTTON_FUNCTIONS["BOOKMARK"] - distance_button_control_very_long = self.get_value("VeryLongDistanceButtonControl", cast=float) + distance_button_control_very_long = self.get_button_function("VeryLongDistanceButtonControl") toggle.experimental_mode_via_distance_very_long = toggle.openpilot_longitudinal and distance_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_distance_very_long toggle.force_coast_via_distance_very_long = toggle.openpilot_longitudinal and distance_button_control_very_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -894,11 +899,7 @@ class StarPilotVariables: toggle.traffic_mode_via_distance_very_long = toggle.openpilot_longitudinal and distance_button_control_very_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_distance_very_long = distance_button_control_very_long == BUTTON_FUNCTIONS["BOOKMARK"] - cancel_button_control = self.get_value( - "CancelButtonControl", - cast=float, - condition=toggle.remap_cancel_to_distance, - ) + cancel_button_control = self.get_button_function("CancelButtonControl", condition=toggle.remap_cancel_to_distance) toggle.experimental_mode_via_cancel = toggle.openpilot_longitudinal and cancel_button_control == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_cancel toggle.force_coast_via_cancel = toggle.openpilot_longitudinal and cancel_button_control == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -909,11 +910,7 @@ class StarPilotVariables: toggle.traffic_mode_via_cancel = toggle.openpilot_longitudinal and cancel_button_control == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_cancel = cancel_button_control == BUTTON_FUNCTIONS["BOOKMARK"] - cancel_button_control_long = self.get_value( - "LongCancelButtonControl", - cast=float, - condition=toggle.remap_cancel_to_distance, - ) + cancel_button_control_long = self.get_button_function("LongCancelButtonControl", condition=toggle.remap_cancel_to_distance) toggle.experimental_mode_via_cancel_long = toggle.openpilot_longitudinal and cancel_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_cancel_long toggle.force_coast_via_cancel_long = toggle.openpilot_longitudinal and cancel_button_control_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -924,11 +921,7 @@ class StarPilotVariables: toggle.traffic_mode_via_cancel_long = toggle.openpilot_longitudinal and cancel_button_control_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_cancel_long = cancel_button_control_long == BUTTON_FUNCTIONS["BOOKMARK"] - cancel_button_control_very_long = self.get_value( - "VeryLongCancelButtonControl", - cast=float, - condition=toggle.remap_cancel_to_distance, - ) + cancel_button_control_very_long = self.get_button_function("VeryLongCancelButtonControl", condition=toggle.remap_cancel_to_distance) toggle.experimental_mode_via_cancel_very_long = toggle.openpilot_longitudinal and cancel_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_cancel_very_long toggle.force_coast_via_cancel_very_long = toggle.openpilot_longitudinal and cancel_button_control_very_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -983,7 +976,7 @@ class StarPilotVariables: toggle.nnff_lite = self.get_value("NNFFLite", condition=not toggle.nnff and lateral_tuning and not is_angle_car) toggle.use_turn_desires = self.get_value("TurnDesires", condition=lateral_tuning) - lkas_button_control = self.get_value("LKASButtonControl", cast=float, condition=toggle.car_make != "subaru") + lkas_button_control = self.get_button_function("LKASButtonControl", condition=toggle.car_make != "subaru") toggle.experimental_mode_via_lkas = toggle.openpilot_longitudinal and lkas_button_control == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_lkas toggle.force_coast_via_lkas = toggle.openpilot_longitudinal and lkas_button_control == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -995,7 +988,7 @@ class StarPilotVariables: toggle.bookmark_via_lkas = lkas_button_control == BUTTON_FUNCTIONS["BOOKMARK"] has_canfd_media_buttons = toggle.car_make == "hyundai" and bool(CP.flags & HyundaiFlags.CANFD) - mode_button_control = self.get_value("ModeButtonControl", cast=float, condition=has_canfd_media_buttons) + mode_button_control = self.get_button_function("ModeButtonControl", condition=has_canfd_media_buttons) toggle.experimental_mode_via_mode = toggle.openpilot_longitudinal and mode_button_control == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_mode toggle.force_coast_via_mode = toggle.openpilot_longitudinal and mode_button_control == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -1006,7 +999,7 @@ class StarPilotVariables: toggle.traffic_mode_via_mode = toggle.openpilot_longitudinal and mode_button_control == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_mode = mode_button_control == BUTTON_FUNCTIONS["BOOKMARK"] - mode_button_control_long = self.get_value("LongModeButtonControl", cast=float, condition=has_canfd_media_buttons) + mode_button_control_long = self.get_button_function("LongModeButtonControl", condition=has_canfd_media_buttons) toggle.experimental_mode_via_mode_long = toggle.openpilot_longitudinal and mode_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_mode_long toggle.force_coast_via_mode_long = toggle.openpilot_longitudinal and mode_button_control_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -1017,7 +1010,7 @@ class StarPilotVariables: toggle.traffic_mode_via_mode_long = toggle.openpilot_longitudinal and mode_button_control_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_mode_long = mode_button_control_long == BUTTON_FUNCTIONS["BOOKMARK"] - mode_button_control_very_long = self.get_value("VeryLongModeButtonControl", cast=float, condition=has_canfd_media_buttons) + mode_button_control_very_long = self.get_button_function("VeryLongModeButtonControl", condition=has_canfd_media_buttons) toggle.experimental_mode_via_mode_very_long = toggle.openpilot_longitudinal and mode_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_mode_very_long toggle.force_coast_via_mode_very_long = toggle.openpilot_longitudinal and mode_button_control_very_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -1028,7 +1021,7 @@ class StarPilotVariables: toggle.traffic_mode_via_mode_very_long = toggle.openpilot_longitudinal and mode_button_control_very_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_mode_very_long = mode_button_control_very_long == BUTTON_FUNCTIONS["BOOKMARK"] - star_button_control = self.get_value("StarButtonControl", cast=float, condition=has_canfd_media_buttons) + star_button_control = self.get_button_function("StarButtonControl", condition=has_canfd_media_buttons) toggle.experimental_mode_via_star = toggle.openpilot_longitudinal and star_button_control == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_star toggle.force_coast_via_star = toggle.openpilot_longitudinal and star_button_control == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -1039,7 +1032,7 @@ class StarPilotVariables: toggle.traffic_mode_via_star = toggle.openpilot_longitudinal and star_button_control == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_star = star_button_control == BUTTON_FUNCTIONS["BOOKMARK"] - star_button_control_long = self.get_value("LongStarButtonControl", cast=float, condition=has_canfd_media_buttons) + star_button_control_long = self.get_button_function("LongStarButtonControl", condition=has_canfd_media_buttons) toggle.experimental_mode_via_star_long = toggle.openpilot_longitudinal and star_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_star_long toggle.force_coast_via_star_long = toggle.openpilot_longitudinal and star_button_control_long == BUTTON_FUNCTIONS["FORCE_COAST"] @@ -1050,7 +1043,7 @@ class StarPilotVariables: toggle.traffic_mode_via_star_long = toggle.openpilot_longitudinal and star_button_control_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] toggle.bookmark_via_star_long = star_button_control_long == BUTTON_FUNCTIONS["BOOKMARK"] - star_button_control_very_long = self.get_value("VeryLongStarButtonControl", cast=float, condition=has_canfd_media_buttons) + star_button_control_very_long = self.get_button_function("VeryLongStarButtonControl", condition=has_canfd_media_buttons) toggle.experimental_mode_via_star_very_long = toggle.openpilot_longitudinal and star_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] toggle.experimental_mode_via_press |= toggle.experimental_mode_via_star_very_long toggle.force_coast_via_star_very_long = toggle.openpilot_longitudinal and star_button_control_very_long == BUTTON_FUNCTIONS["FORCE_COAST"] diff --git a/starpilot/common/tests/test_starpilot_variables.py b/starpilot/common/tests/test_starpilot_variables.py index cc4b656fe..99063829f 100644 --- a/starpilot/common/tests/test_starpilot_variables.py +++ b/starpilot/common/tests/test_starpilot_variables.py @@ -93,6 +93,18 @@ def test_cancel_button_migration_copies_distance_actions_once(): assert params.get_int("CancelButtonControl") == 3 +def test_button_function_ignores_tuning_level_gate(): + params = _FakeParams(ints={"LKASButtonControl": spv.BUTTON_FUNCTIONS["AOL_TOGGLE"]}) + variables = object.__new__(spv.StarPilotVariables) + variables.params = params + variables.starpilot_toggles = SimpleNamespace(tuning_level=spv.TUNING_LEVELS["STANDARD"]) + variables.tuning_levels = {"LKASButtonControl": spv.TUNING_LEVELS["ADVANCED"]} + variables.default_values = {"LKASButtonControl": str(spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"])} + + assert variables.get_value("LKASButtonControl", cast=int) == spv.BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] + assert variables.get_button_function("LKASButtonControl") == spv.BUTTON_FUNCTIONS["AOL_TOGGLE"] + + def test_set_speed_limit_available_on_openpilot_longitudinal(): assert spv.set_speed_limit_available(openpilot_longitudinal=True, has_cc_long=False, pcm_cruise_speed=True) is True