From 0024516f18f878a1f8843824bf691dd8a877dd5f Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Fri, 24 Apr 2026 00:58:57 -0500 Subject: [PATCH] Hey Comma --- .../ui/layouts/settings/starpilot/wheel.py | 1 + starpilot/common/starpilot_variables.py | 11 + starpilot/controls/starpilot_card.py | 9 + .../tools/device_settings_layout.json | 286 ++++++++++++++++++ starpilot/ui/qt/offroad/wheel_settings.cc | 1 + 5 files changed, 308 insertions(+) diff --git a/selfdrive/ui/layouts/settings/starpilot/wheel.py b/selfdrive/ui/layouts/settings/starpilot/wheel.py index 755d1539d..2df8cb859 100644 --- a/selfdrive/ui/layouts/settings/starpilot/wheel.py +++ b/selfdrive/ui/layouts/settings/starpilot/wheel.py @@ -15,6 +15,7 @@ ACTION_OPTIONS = [ {"id": 5, "name": "Toggle Experimental", "requires_longitudinal": True}, {"id": 6, "name": "Toggle Traffic", "requires_longitudinal": True}, {"id": 7, "name": "Toggle Switchback"}, + {"id": 8, "name": "Create Bookmark"}, ] ACTION_NAMES = [option["name"] for option in ACTION_OPTIONS] ACTION_IDS = {option["name"]: option["id"] for option in ACTION_OPTIONS} diff --git a/starpilot/common/starpilot_variables.py b/starpilot/common/starpilot_variables.py index f9b5b65eb..4708528e8 100644 --- a/starpilot/common/starpilot_variables.py +++ b/starpilot/common/starpilot_variables.py @@ -126,6 +126,7 @@ BUTTON_FUNCTIONS = { "EXPERIMENTAL_MODE": 5, "TRAFFIC_MODE": 6, "SWITCHBACK_MODE": 7, + "BOOKMARK": 8, } DEVELOPER_SIDEBAR_METRICS = { @@ -766,6 +767,7 @@ class StarPilotVariables: toggle.personality_profile_via_distance = toggle.openpilot_longitudinal and distance_button_control == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_distance = distance_button_control == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_distance_long = toggle.openpilot_longitudinal and distance_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -776,6 +778,7 @@ class StarPilotVariables: toggle.personality_profile_via_distance_long = toggle.openpilot_longitudinal and distance_button_control_long == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_distance_long = distance_button_control_long == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_distance_very_long = toggle.openpilot_longitudinal and distance_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -786,6 +789,7 @@ class StarPilotVariables: toggle.personality_profile_via_distance_very_long = toggle.openpilot_longitudinal and distance_button_control_very_long == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_distance_very_long = distance_button_control_very_long == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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"] toggle.frogsgomoo_tweak = self.get_value("FrogsGoMoosTweak", condition=toggle.openpilot_longitudinal and toggle.car_make == "toyota") toggle.stoppingDecelRate = 0.01 if toggle.frogsgomoo_tweak else toggle.stoppingDecelRate @@ -838,6 +842,7 @@ class StarPilotVariables: toggle.personality_profile_via_lkas = toggle.openpilot_longitudinal and lkas_button_control == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_lkas = lkas_button_control == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] toggle.traffic_mode_via_lkas = toggle.openpilot_longitudinal and lkas_button_control == BUTTON_FUNCTIONS["TRAFFIC_MODE"] + 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) @@ -849,6 +854,7 @@ class StarPilotVariables: toggle.personality_profile_via_mode = toggle.openpilot_longitudinal and mode_button_control == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_mode = mode_button_control == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_mode_long = toggle.openpilot_longitudinal and mode_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -859,6 +865,7 @@ class StarPilotVariables: toggle.personality_profile_via_mode_long = toggle.openpilot_longitudinal and mode_button_control_long == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_mode_long = mode_button_control_long == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_mode_very_long = toggle.openpilot_longitudinal and mode_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -869,6 +876,7 @@ class StarPilotVariables: toggle.personality_profile_via_mode_very_long = toggle.openpilot_longitudinal and mode_button_control_very_long == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_mode_very_long = mode_button_control_very_long == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_star = toggle.openpilot_longitudinal and star_button_control == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -879,6 +887,7 @@ class StarPilotVariables: toggle.personality_profile_via_star = toggle.openpilot_longitudinal and star_button_control == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_star = star_button_control == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_star_long = toggle.openpilot_longitudinal and star_button_control_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -889,6 +898,7 @@ class StarPilotVariables: toggle.personality_profile_via_star_long = toggle.openpilot_longitudinal and star_button_control_long == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_star_long = star_button_control_long == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] 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) toggle.experimental_mode_via_star_very_long = toggle.openpilot_longitudinal and star_button_control_very_long == BUTTON_FUNCTIONS["EXPERIMENTAL_MODE"] @@ -899,6 +909,7 @@ class StarPilotVariables: toggle.personality_profile_via_star_very_long = toggle.openpilot_longitudinal and star_button_control_very_long == BUTTON_FUNCTIONS["PERSONALITY_PROFILE"] toggle.switchback_mode_via_star_very_long = star_button_control_very_long == BUTTON_FUNCTIONS["SWITCHBACK_MODE"] toggle.traffic_mode_via_star_very_long = toggle.openpilot_longitudinal and star_button_control_very_long == BUTTON_FUNCTIONS["TRAFFIC_MODE"] + toggle.bookmark_via_star_very_long = star_button_control_very_long == BUTTON_FUNCTIONS["BOOKMARK"] toggle.has_canfd_media_buttons = has_canfd_media_buttons toggle.lock_doors_timer = self.get_value("LockDoorsTimer", cast=float, condition=(toggle.car_make == "toyota")) diff --git a/starpilot/controls/starpilot_card.py b/starpilot/controls/starpilot_card.py index 52654f1ab..253e540a8 100644 --- a/starpilot/controls/starpilot_card.py +++ b/starpilot/controls/starpilot_card.py @@ -1,4 +1,6 @@ #!/usr/bin/env python3 +import cereal.messaging as messaging + from opendbc.safety import ALTERNATIVE_EXPERIENCE from openpilot.common.params import Params from openpilot.selfdrive.car.cruise import CRUISE_LONG_PRESS, ButtonType @@ -18,6 +20,7 @@ class StarPilotCard: self.params = Params(return_defaults=True) self.params_memory = Params(memory=True) + self.pm = messaging.PubMaster(["userBookmark"]) self.accel_pressed = False self.always_on_lateral_allowed = False @@ -47,6 +50,8 @@ class StarPilotCard: def handle_button_event(self, key, sm, starpilot_toggles): if sm["carControl"].longActive and getattr(starpilot_toggles, f"experimental_mode_via_{key}"): self.handle_experimental_mode(sm, starpilot_toggles) + elif getattr(starpilot_toggles, f"bookmark_via_{key}"): + self.handle_bookmark() elif getattr(starpilot_toggles, f"force_coast_via_{key}"): self.force_coast = not self.force_coast elif getattr(starpilot_toggles, f"pause_lateral_via_{key}"): @@ -59,6 +64,10 @@ class StarPilotCard: elif sm["carControl"].longActive and getattr(starpilot_toggles, f"traffic_mode_via_{key}"): self.traffic_mode_enabled = not self.traffic_mode_enabled + def handle_bookmark(self): + msg = messaging.new_message("userBookmark", valid=True) + self.pm.send("userBookmark", msg) + def handle_experimental_mode(self, sm, starpilot_toggles): if getattr(starpilot_toggles, "safe_mode", False): return diff --git a/starpilot/system/the_pond/assets/components/tools/device_settings_layout.json b/starpilot/system/the_pond/assets/components/tools/device_settings_layout.json index 39698432e..c66e67863 100644 --- a/starpilot/system/the_pond/assets/components/tools/device_settings_layout.json +++ b/starpilot/system/the_pond/assets/components/tools/device_settings_layout.json @@ -2258,6 +2258,10 @@ { "value": 7, "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" } ] }, @@ -2299,6 +2303,10 @@ { "value": 7, "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" } ] }, @@ -2340,6 +2348,10 @@ { "value": 7, "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" } ] }, @@ -2381,6 +2393,280 @@ { "value": 7, "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" + } + ] + }, + { + "key": "ModeButtonControl", + "label": "Mode Button (Short Press)", + "description": "Action performed when the \"Mode\" button is pressed. Hyundai CAN-FD only.", + "data_type": "int", + "ui_type": "dropdown", + "options": [ + { + "value": 0, + "label": "No Action" + }, + { + "value": 1, + "label": "Change Personality" + }, + { + "value": 2, + "label": "Force Coast" + }, + { + "value": 3, + "label": "Pause Steering" + }, + { + "value": 4, + "label": "Pause Accel/Brake" + }, + { + "value": 5, + "label": "Toggle Experimental" + }, + { + "value": 6, + "label": "Toggle Traffic" + }, + { + "value": 7, + "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" + } + ] + }, + { + "key": "LongModeButtonControl", + "label": "Mode Button (Long Press)", + "description": "Action performed when the \"Mode\" button is pressed for more than 0.5 seconds. Hyundai CAN-FD only.", + "data_type": "int", + "ui_type": "dropdown", + "options": [ + { + "value": 0, + "label": "No Action" + }, + { + "value": 1, + "label": "Change Personality" + }, + { + "value": 2, + "label": "Force Coast" + }, + { + "value": 3, + "label": "Pause Steering" + }, + { + "value": 4, + "label": "Pause Accel/Brake" + }, + { + "value": 5, + "label": "Toggle Experimental" + }, + { + "value": 6, + "label": "Toggle Traffic" + }, + { + "value": 7, + "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" + } + ] + }, + { + "key": "VeryLongModeButtonControl", + "label": "Mode Button (Extra Long Press)", + "description": "Action performed when the \"Mode\" button is pressed for more than 2.5 seconds. Hyundai CAN-FD only.", + "data_type": "int", + "ui_type": "dropdown", + "options": [ + { + "value": 0, + "label": "No Action" + }, + { + "value": 1, + "label": "Change Personality" + }, + { + "value": 2, + "label": "Force Coast" + }, + { + "value": 3, + "label": "Pause Steering" + }, + { + "value": 4, + "label": "Pause Accel/Brake" + }, + { + "value": 5, + "label": "Toggle Experimental" + }, + { + "value": 6, + "label": "Toggle Traffic" + }, + { + "value": 7, + "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" + } + ] + }, + { + "key": "StarButtonControl", + "label": "Star Button (Short Press)", + "description": "Action performed when the \"Star\" button is pressed. Hyundai CAN-FD only.", + "data_type": "int", + "ui_type": "dropdown", + "options": [ + { + "value": 0, + "label": "No Action" + }, + { + "value": 1, + "label": "Change Personality" + }, + { + "value": 2, + "label": "Force Coast" + }, + { + "value": 3, + "label": "Pause Steering" + }, + { + "value": 4, + "label": "Pause Accel/Brake" + }, + { + "value": 5, + "label": "Toggle Experimental" + }, + { + "value": 6, + "label": "Toggle Traffic" + }, + { + "value": 7, + "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" + } + ] + }, + { + "key": "LongStarButtonControl", + "label": "Star Button (Long Press)", + "description": "Action performed when the \"Star\" button is pressed for more than 0.5 seconds. Hyundai CAN-FD only.", + "data_type": "int", + "ui_type": "dropdown", + "options": [ + { + "value": 0, + "label": "No Action" + }, + { + "value": 1, + "label": "Change Personality" + }, + { + "value": 2, + "label": "Force Coast" + }, + { + "value": 3, + "label": "Pause Steering" + }, + { + "value": 4, + "label": "Pause Accel/Brake" + }, + { + "value": 5, + "label": "Toggle Experimental" + }, + { + "value": 6, + "label": "Toggle Traffic" + }, + { + "value": 7, + "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" + } + ] + }, + { + "key": "VeryLongStarButtonControl", + "label": "Star Button (Extra Long Press)", + "description": "Action performed when the \"Star\" button is pressed for more than 2.5 seconds. Hyundai CAN-FD only.", + "data_type": "int", + "ui_type": "dropdown", + "options": [ + { + "value": 0, + "label": "No Action" + }, + { + "value": 1, + "label": "Change Personality" + }, + { + "value": 2, + "label": "Force Coast" + }, + { + "value": 3, + "label": "Pause Steering" + }, + { + "value": 4, + "label": "Pause Accel/Brake" + }, + { + "value": 5, + "label": "Toggle Experimental" + }, + { + "value": 6, + "label": "Toggle Traffic" + }, + { + "value": 7, + "label": "Toggle Switchback" + }, + { + "value": 8, + "label": "Create Bookmark" } ] } diff --git a/starpilot/ui/qt/offroad/wheel_settings.cc b/starpilot/ui/qt/offroad/wheel_settings.cc index 9dc14691c..bdb2f0f28 100644 --- a/starpilot/ui/qt/offroad/wheel_settings.cc +++ b/starpilot/ui/qt/offroad/wheel_settings.cc @@ -7,6 +7,7 @@ QMap getWheelFunctionsMap() { {0, QObject::tr("No Action")}, {3, QObject::tr("Pause Steering")}, {7, QObject::tr("Toggle \"Switchback Mode\" On/Off")}, + {8, QObject::tr("Create Bookmark")}, }; }