From 7eb65e878be32bed443fb3ba4f801cee8a875fd3 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 27 Feb 2026 22:56:26 -0500 Subject: [PATCH 1/4] [TIZI/TICI] ui: Speed Limit Assist active status (#1729) [TIZI/TICI] ui: display Speed Limit Assist active status --- .../ui/sunnypilot/onroad/hud_renderer.py | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/selfdrive/ui/sunnypilot/onroad/hud_renderer.py b/selfdrive/ui/sunnypilot/onroad/hud_renderer.py index 86fcf3c693..b96a921a8b 100644 --- a/selfdrive/ui/sunnypilot/onroad/hud_renderer.py +++ b/selfdrive/ui/sunnypilot/onroad/hud_renderer.py @@ -22,6 +22,8 @@ from openpilot.system.ui.lib.application import gui_app from openpilot.system.ui.lib.multilang import tr from openpilot.system.ui.lib.text_measure import measure_text_cached +SLA_ACTIVE_COLOR = rl.Color(0x91, 0x9b, 0x95, 0xff) + class HudRendererSP(HudRenderer): def __init__(self): @@ -71,6 +73,8 @@ class HudRendererSP(HudRenderer): self.show_icbm_status = self.icbm_active_counter > 0 def _draw_set_speed(self, rect: rl.Rectangle) -> None: + long_plan_sp = ui_state.sm['longitudinalPlanSP'] + long_override = ui_state.sm['carControl'].cruiseControl.override self._get_icbm_status() set_speed_width = UI_CONFIG.set_speed_width_metric if ui_state.is_metric else UI_CONFIG.set_speed_width_imperial @@ -85,12 +89,16 @@ class HudRendererSP(HudRenderer): set_speed_color = COLORS.DARK_GREY if self.is_cruise_set: set_speed_color = COLORS.WHITE - if ui_state.status == UIStatus.ENGAGED: - max_color = COLORS.ENGAGED - elif ui_state.status == UIStatus.DISENGAGED: - max_color = COLORS.DISENGAGED - elif ui_state.status == UIStatus.OVERRIDE: - max_color = COLORS.OVERRIDE + if long_plan_sp.speedLimit.assist.active: + set_speed_color = SLA_ACTIVE_COLOR if long_override else rl.Color(0, 0xff, 0, 0xff) + max_color = SLA_ACTIVE_COLOR if long_override else rl.Color(0x80, 0xd8, 0xa6, 0xff) + else: + if ui_state.status == UIStatus.ENGAGED: + max_color = COLORS.ENGAGED + elif ui_state.status == UIStatus.DISENGAGED: + max_color = COLORS.DISENGAGED + elif ui_state.status == UIStatus.OVERRIDE: + max_color = COLORS.OVERRIDE max_str_size = 60 if self.show_icbm_status else 40 max_str_y = 15 if self.show_icbm_status else 27 From 29a3b3315ff4448c650c442feb887318acf4ebe1 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 28 Feb 2026 00:18:35 -0500 Subject: [PATCH 2/4] ui: reimplement "Screen Off" option to Onroad Brightness (#1732) * ui: Add "Screen Off" option to Onroad Brightness * migrate old value * bruh * fix algo * comment * no --- common/params_keys.h | 1 + .../ui/sunnypilot/layouts/settings/display.py | 8 +++- selfdrive/ui/sunnypilot/ui_state.py | 10 ++-- sunnypilot/sunnylink/params_metadata.json | 46 +++++++++++-------- .../sunnylink/tools/update_params_metadata.py | 26 +++++++++++ sunnypilot/system/__init__.py | 0 sunnypilot/system/params_migration.py | 27 +++++++++++ system/manager/manager.py | 4 ++ 8 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 sunnypilot/system/__init__.py create mode 100644 sunnypilot/system/params_migration.py diff --git a/common/params_keys.h b/common/params_keys.h index 8f3ee858f0..65402b5b35 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -170,6 +170,7 @@ inline static std::unordered_map keys = { {"OffroadMode", {CLEAR_ON_MANAGER_START, BOOL}}, {"Offroad_TiciSupport", {CLEAR_ON_MANAGER_START, JSON}}, {"OnroadScreenOffBrightness", {PERSISTENT | BACKUP, INT, "0"}}, + {"OnroadScreenOffBrightnessMigrated", {PERSISTENT | BACKUP, STRING, "0.0"}}, {"OnroadScreenOffTimer", {PERSISTENT | BACKUP, INT, "15"}}, {"OnroadUploads", {PERSISTENT | BACKUP, BOOL, "1"}}, {"QuickBootToggle", {PERSISTENT | BACKUP, BOOL, "0"}}, diff --git a/selfdrive/ui/sunnypilot/layouts/settings/display.py b/selfdrive/ui/sunnypilot/layouts/settings/display.py index e5f1eba181..d44118d8f4 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/display.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/display.py @@ -19,6 +19,7 @@ ONROAD_BRIGHTNESS_TIMER_VALUES = {0: 15, 1: 30, **{i: (i - 1) * 60 for i in rang class OnroadBrightness(IntEnum): AUTO = 0 AUTO_DARK = 1 + SCREEN_OFF = 2 class DisplayLayout(Widget): @@ -35,7 +36,7 @@ class DisplayLayout(Widget): title=lambda: tr("Onroad Brightness"), description="", min_value=0, - max_value=21, + max_value=22, value_change_step=1, label_callback=lambda value: self.update_onroad_brightness(value), inline=True @@ -79,7 +80,10 @@ class DisplayLayout(Widget): if val == OnroadBrightness.AUTO_DARK: return tr("Auto (Dark)") - return f"{(val - 1) * 5} %" + if val == OnroadBrightness.SCREEN_OFF: + return tr("Screen Off") + + return f"{(val - 2) * 5} %" def _update_state(self): super()._update_state() diff --git a/selfdrive/ui/sunnypilot/ui_state.py b/selfdrive/ui/sunnypilot/ui_state.py index 4d26e138b1..050df6d26d 100644 --- a/selfdrive/ui/sunnypilot/ui_state.py +++ b/selfdrive/ui/sunnypilot/ui_state.py @@ -162,14 +162,16 @@ class DeviceSP: # For AUTO (Default) and Manual modes (while timer running), use standard brightness return cur_brightness - # 0: Auto (Default), 1: Auto (Dark) + # 0: Auto (Default), 1: Auto (Dark), 2: Screen Off if _ui_state.onroad_brightness == OnroadBrightness.AUTO: return cur_brightness - elif _ui_state.onroad_brightness == OnroadBrightness.AUTO_DARK: + if _ui_state.onroad_brightness == OnroadBrightness.AUTO_DARK: return cur_brightness + if _ui_state.onroad_brightness == OnroadBrightness.SCREEN_OFF: + return 0.0 - # 2-21: 5% - 100% - return float((_ui_state.onroad_brightness - 1) * 5) + # 3-22: 5% - 100% + return float((_ui_state.onroad_brightness - 2) * 5) @staticmethod def set_min_onroad_brightness(_ui_state, min_brightness: int) -> int: diff --git a/sunnypilot/sunnylink/params_metadata.json b/sunnypilot/sunnylink/params_metadata.json index 67ce903aba..59c473b973 100644 --- a/sunnypilot/sunnylink/params_metadata.json +++ b/sunnypilot/sunnylink/params_metadata.json @@ -845,86 +845,94 @@ }, { "value": 2, - "label": "5 %" + "label": "Screen Off" }, { "value": 3, - "label": "10 %" + "label": "5 %" }, { "value": 4, - "label": "15 %" + "label": "10 %" }, { "value": 5, - "label": "20 %" + "label": "15 %" }, { "value": 6, - "label": "25 %" + "label": "20 %" }, { "value": 7, - "label": "30 %" + "label": "25 %" }, { "value": 8, - "label": "35 %" + "label": "30 %" }, { "value": 9, - "label": "40 %" + "label": "35 %" }, { "value": 10, - "label": "45 %" + "label": "40 %" }, { "value": 11, - "label": "50 %" + "label": "45 %" }, { "value": 12, - "label": "55 %" + "label": "50 %" }, { "value": 13, - "label": "60 %" + "label": "55 %" }, { "value": 14, - "label": "65 %" + "label": "60 %" }, { "value": 15, - "label": "70 %" + "label": "65 %" }, { "value": 16, - "label": "75 %" + "label": "70 %" }, { "value": 17, - "label": "80 %" + "label": "75 %" }, { "value": 18, - "label": "85 %" + "label": "80 %" }, { "value": 19, - "label": "90 %" + "label": "85 %" }, { "value": 20, - "label": "95 %" + "label": "90 %" }, { "value": 21, + "label": "95 %" + }, + { + "value": 22, "label": "100 %" } ] }, + "OnroadScreenOffBrightnessMigrated": { + "title": "Onroad Brightness Migration Version", + "description": "This param is to track whether OnroadScreenOffBrightness needs to be migrated." + }, "OnroadScreenOffControl": { "title": "Onroad Brightness", "description": "Adjusts the screen brightness while it's in onroad state." diff --git a/sunnypilot/sunnylink/tools/update_params_metadata.py b/sunnypilot/sunnylink/tools/update_params_metadata.py index 3ef91debe0..013544005b 100755 --- a/sunnypilot/sunnylink/tools/update_params_metadata.py +++ b/sunnypilot/sunnylink/tools/update_params_metadata.py @@ -53,9 +53,34 @@ def main(): print(f"Updated {METADATA_PATH}") + # update onroad screen brightness params + update_onroad_brightness_param() + # update torque versions param update_torque_versions_param() + +def update_onroad_brightness_param(): + try: + with open(METADATA_PATH) as f: + params_metadata = json.load(f) + if "OnroadScreenOffBrightness" in params_metadata: + options = [ + {"value": 0, "label": "Auto (Default)"}, + {"value": 1, "label": "Auto (Dark)"}, + {"value": 2, "label": "Screen Off"}, + ] + for i in range(3, 23): + options.append({"value": i, "label": f"{(i - 2) * 5} %"}) + params_metadata["OnroadScreenOffBrightness"]["options"] = options + with open(METADATA_PATH, 'w') as f: + json.dump(params_metadata, f, indent=2) + f.write('\n') + print(f"Updated OnroadScreenOffBrightness options in params_metadata.json with {len(options)} options.") + except Exception as e: + print(f"Failed to update OnroadScreenOffBrightness versions in params_metadata.json: {e}") + + def update_torque_versions_param(): with open(TORQUE_VERSIONS_JSON) as f: current_versions = json.load(f) @@ -81,5 +106,6 @@ def update_torque_versions_param(): except Exception as e: print(f"Failed to update TorqueControlTune versions in params_metadata.json: {e}") + if __name__ == "__main__": main() diff --git a/sunnypilot/system/__init__.py b/sunnypilot/system/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/sunnypilot/system/params_migration.py b/sunnypilot/system/params_migration.py new file mode 100644 index 0000000000..6a82f1866d --- /dev/null +++ b/sunnypilot/system/params_migration.py @@ -0,0 +1,27 @@ +""" +Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + +This file is part of sunnypilot and is licensed under the MIT License. +See the LICENSE.md file in the root directory for more details. +""" +from openpilot.common.swaglog import cloudlog + +ONROAD_BRIGHTNESS_MIGRATION_VERSION: str = "1.0" + + +def run_migration(_params): + # migrate OnroadScreenOffBrightness + if _params.get("OnroadScreenOffBrightnessMigrated") != ONROAD_BRIGHTNESS_MIGRATION_VERSION: + try: + val = _params.get("OnroadScreenOffBrightness") + if val >= 2: # old: 5%, new: Screen Off + new_val = val + 1 + _params.put("OnroadScreenOffBrightness", new_val) + log_str = f"Successfully migrated OnroadScreenOffBrightness from {val} to {new_val}." + else: + log_str = "Migration not required for OnroadScreenOffBrightness." + + _params.put("OnroadScreenOffBrightnessMigrated", ONROAD_BRIGHTNESS_MIGRATION_VERSION) + cloudlog.info(log_str + f" Setting OnroadScreenOffBrightnessMigrated to {ONROAD_BRIGHTNESS_MIGRATION_VERSION}") + except Exception as e: + cloudlog.exception(f"Error migrating OnroadScreenOffBrightness: {e}") diff --git a/system/manager/manager.py b/system/manager/manager.py index 8c5d35d072..8c219909e4 100755 --- a/system/manager/manager.py +++ b/system/manager/manager.py @@ -22,6 +22,8 @@ from openpilot.system.version import get_build_metadata from openpilot.system.hardware.hw import Paths from openpilot.system.hardware import PC +from openpilot.sunnypilot.system.params_migration import run_migration + def manager_init() -> None: save_bootlog() @@ -49,6 +51,8 @@ def manager_init() -> None: if params.get_bool("RecordFrontLock"): params.put_bool("RecordFront", True) + run_migration(params) + # set unset params to their default value for k in params.all_keys(): default_value = params.get_default_value(k) From 16047e3c3d3bffab6b05025985b0b6a0538dbdd0 Mon Sep 17 00:00:00 2001 From: royjr Date: Sat, 28 Feb 2026 00:28:08 -0500 Subject: [PATCH 3/4] ui: dont hide steering wheel when blindspot disabled (#1709) Update blind_spot_indicators.py Co-authored-by: Jason Wen --- selfdrive/ui/sunnypilot/onroad/blind_spot_indicators.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/ui/sunnypilot/onroad/blind_spot_indicators.py b/selfdrive/ui/sunnypilot/onroad/blind_spot_indicators.py index f2f482525d..4e1d748117 100644 --- a/selfdrive/ui/sunnypilot/onroad/blind_spot_indicators.py +++ b/selfdrive/ui/sunnypilot/onroad/blind_spot_indicators.py @@ -28,7 +28,7 @@ class BlindSpotIndicators: @property def detected(self) -> bool: - return self._blind_spot_left_alpha_filter.x > 0.01 or self._blind_spot_right_alpha_filter.x > 0.01 + return ui_state.blindspot and (self._blind_spot_left_alpha_filter.x > 0.01 or self._blind_spot_right_alpha_filter.x > 0.01) def render(self, rect: rl.Rectangle) -> None: if not ui_state.blindspot: From fd1937c6d49e73328b503d4bc5d43d805cb216f4 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 28 Feb 2026 15:23:04 -0500 Subject: [PATCH 4/4] ui: Speed Limit Assist `preActive` improvements (#1743) * mici init * obv * hybrid * too soon junior * make them all flash the same pls * abstract * shorter * also too soon junior * not so fast --- selfdrive/ui/sunnypilot/onroad/speed_limit.py | 61 +++++++++++-------- .../selfdrive/assets/img_minus_arrow_down.png | 4 +- .../selfdrive/assets/img_plus_arrow_up.png | 4 +- sunnypilot/selfdrive/selfdrived/events.py | 18 +++--- 4 files changed, 51 insertions(+), 36 deletions(-) diff --git a/selfdrive/ui/sunnypilot/onroad/speed_limit.py b/selfdrive/ui/sunnypilot/onroad/speed_limit.py index 39a9848d37..962c96e17a 100644 --- a/selfdrive/ui/sunnypilot/onroad/speed_limit.py +++ b/selfdrive/ui/sunnypilot/onroad/speed_limit.py @@ -6,7 +6,6 @@ See the LICENSE.md file in the root directory for more details. """ from dataclasses import dataclass -import math import pyray as rl from cereal import custom @@ -41,9 +40,32 @@ class Colors: MUTCD_LINES = rl.Color(255, 255, 255, 100) -class SpeedLimitRenderer(Widget): +class SpeedLimitAlertRenderer: def __init__(self): - super().__init__() + arrow_size = 200 + self.arrow_up = gui_app.texture("../../sunnypilot/selfdrive/assets/img_plus_arrow_up.png", arrow_size, arrow_size) + self.arrow_down = gui_app.texture("../../sunnypilot/selfdrive/assets/img_minus_arrow_down.png", arrow_size, arrow_size) + + self._pre_active_alpha_filter = FirstOrderFilter(1.0, 0.05, 1 / gui_app.target_fps) + self._pre_active_alert_frame = 0 + + def update(self): + assist_state = ui_state.sm['longitudinalPlanSP'].speedLimit.assist.state + if assist_state == AssistState.preActive: + self._pre_active_alert_frame += 1 + if (self._pre_active_alert_frame % gui_app.target_fps) < (gui_app.target_fps * 0.75): + self._pre_active_alpha_filter.x = 1.0 + else: + self._pre_active_alpha_filter.update(0.0) + else: + self._pre_active_alert_frame = 0 + self._pre_active_alpha_filter.update(1.0) + + +class SpeedLimitRenderer(Widget, SpeedLimitAlertRenderer): + def __init__(self): + Widget.__init__(self) + SpeedLimitAlertRenderer.__init__(self) self.speed_limit = 0.0 self.speed_limit_last = 0.0 @@ -60,7 +82,6 @@ class SpeedLimitRenderer(Widget): self.speed_limit_ahead_valid = False self.speed_limit_ahead_frame = 0 - self.assist_frame = 0 self.is_cruise_set: bool = False self.is_cruise_available: bool = True self.set_speed: float = SET_SPEED_NA @@ -70,17 +91,13 @@ class SpeedLimitRenderer(Widget): self.font_bold = gui_app.font(FontWeight.BOLD) self.font_demi = gui_app.font(FontWeight.SEMI_BOLD) self.font_norm = gui_app.font(FontWeight.NORMAL) - self._sign_alpha_filter = FirstOrderFilter(1.0, 0.5, 1 / gui_app.target_fps) - - arrow_size = 90 - self._arrow_up = gui_app.texture("../../sunnypilot/selfdrive/assets/img_plus_arrow_up.png", arrow_size, arrow_size) - self._arrow_down = gui_app.texture("../../sunnypilot/selfdrive/assets/img_minus_arrow_down.png", arrow_size, arrow_size) @property def speed_conv(self): return CV.MS_TO_KPH if ui_state.is_metric else CV.MS_TO_MPH def update(self): + SpeedLimitAlertRenderer.update(self) sm = ui_state.sm if sm.recv_frame["carState"] < ui_state.started_frame: self.set_speed = SET_SPEED_NA @@ -143,13 +160,7 @@ class SpeedLimitRenderer(Widget): sign_rect = rl.Rectangle(x, y, width, UI_CONFIG.set_speed_height + 6 * 2) - if self.speed_limit_assist_state == AssistState.preActive: - self.assist_frame += 1 - pulse_value = 0.65 + 0.35 * math.sin(self.assist_frame * math.pi / gui_app.target_fps) - alpha = self._sign_alpha_filter.update(pulse_value) - else: - self.assist_frame = 0 - alpha = self._sign_alpha_filter.update(1.0) + alpha = self._pre_active_alpha_filter.x if ui_state.speed_limit_mode != SpeedLimitMode.off: self._draw_sign_main(sign_rect, alpha) @@ -184,19 +195,19 @@ class SpeedLimitRenderer(Widget): set_speed_rounded = round(self.set_speed) limit_rounded = round(self.speed_limit_final_last) - bounce_frequency = 2.0 * math.pi / (gui_app.target_fps * 2.5) - bounce_offset = int(20 * math.sin(self.assist_frame * bounce_frequency)) - sign_margin = 12 arrow_spacing = int(sign_margin * 1.4) arrow_x = sign_rect.x + sign_rect.width + arrow_spacing - if set_speed_rounded < limit_rounded: - arrow_y = sign_rect.y + (sign_rect.height - self._arrow_up.height) / 2 + bounce_offset - rl.draw_texture(self._arrow_up, int(arrow_x), int(arrow_y), rl.WHITE) - elif set_speed_rounded > limit_rounded: - arrow_y = sign_rect.y + (sign_rect.height - self._arrow_down.height) / 2 - bounce_offset - rl.draw_texture(self._arrow_down, int(arrow_x), int(arrow_y), rl.WHITE) + icon_alpha = max(0.0, min(self._pre_active_alpha_filter.x * 255.0, 255.0)) + if icon_alpha > 0: + color = rl.Color(255, 255, 255, int(icon_alpha)) + if set_speed_rounded < limit_rounded: + arrow_y = sign_rect.y + (sign_rect.height - self.arrow_up.height) / 2 + rl.draw_texture(self.arrow_up, int(arrow_x), int(arrow_y), color) + elif set_speed_rounded > limit_rounded: + arrow_y = sign_rect.y + (sign_rect.height - self.arrow_down.height) / 2 + rl.draw_texture(self.arrow_down, int(arrow_x), int(arrow_y), color) def _render_vienna(self, rect, val, sub, color, has_limit, alpha=1.0): center = rl.Vector2(rect.x + rect.width / 2, rect.y + rect.height / 2) diff --git a/sunnypilot/selfdrive/assets/img_minus_arrow_down.png b/sunnypilot/selfdrive/assets/img_minus_arrow_down.png index 250f640585..2dc99789a5 100644 --- a/sunnypilot/selfdrive/assets/img_minus_arrow_down.png +++ b/sunnypilot/selfdrive/assets/img_minus_arrow_down.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f4a0bf26cfd2c64939759d43bee839aadfd017a6f74065095a27b03615e55a4 -size 26627 +oid sha256:ad42ecaeff96a0a6c1a6db67b01e3c0452566906dd3a7f0336a1010ae854d27b +size 60924 diff --git a/sunnypilot/selfdrive/assets/img_plus_arrow_up.png b/sunnypilot/selfdrive/assets/img_plus_arrow_up.png index 14c1529da3..4247827340 100644 --- a/sunnypilot/selfdrive/assets/img_plus_arrow_up.png +++ b/sunnypilot/selfdrive/assets/img_plus_arrow_up.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e451ff31e9b3f144822ab282b8e47cd5a603ca59ff94bd1849271181b86c6b1 -size 29220 +oid sha256:1fdea39873f60a0c4b216b75792e826f3633091a72ea2abd05740bd6e4e72089 +size 63058 diff --git a/sunnypilot/selfdrive/selfdrived/events.py b/sunnypilot/selfdrive/selfdrived/events.py index 4edc0bd470..d7507ab2e3 100644 --- a/sunnypilot/selfdrive/selfdrived/events.py +++ b/sunnypilot/selfdrive/selfdrived/events.py @@ -1,3 +1,9 @@ +""" +Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. + +This file is part of sunnypilot and is licensed under the MIT License. +See the LICENSE.md file in the root directory for more details. +""" import cereal.messaging as messaging from cereal import log, car, custom from openpilot.common.constants import CV @@ -34,7 +40,6 @@ def speed_limit_pre_active_alert(CP: car.CarParams, CS: car.CarState, sm: messag speed_limit_final_last = sm['longitudinalPlanSP'].speedLimit.resolver.speedLimitFinalLast speed_limit_final_last_conv = round(speed_limit_final_last * speed_conv) alert_1_str = "" - alert_2_str = "" alert_size = AlertSize.none if CP.openpilotLongitudinalControl and CP.pcmCruise: @@ -44,13 +49,12 @@ def speed_limit_pre_active_alert(CP: car.CarParams, CS: car.CarState, sm: messag pcm_long_required_max_set_speed_conv = round(pcm_long_required_max * speed_conv) speed_unit = "km/h" if metric else "mph" - alert_1_str = "Speed Limit Assist: Activation Required" - alert_2_str = f"Manually change set speed to {pcm_long_required_max_set_speed_conv} {speed_unit} to activate" - alert_size = AlertSize.mid + alert_1_str = f"Speed Limit Assist: set to {pcm_long_required_max_set_speed_conv} {speed_unit} to engage" + alert_size = AlertSize.small return Alert( alert_1_str, - alert_2_str, + "", AlertStatus.normal, alert_size, Priority.LOW, VisualAlert.none, AudibleAlertSP.promptSingleLow, .1) @@ -193,7 +197,7 @@ EVENTS_SP: dict[int, dict[str, Alert | AlertCallbackType]] = { EventNameSP.speedLimitActive: { ET.WARNING: Alert( - "Automatically adjusting to the posted speed limit", + "Auto adjusting to speed limit", "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlertSP.promptSingleHigh, 5.), @@ -213,7 +217,7 @@ EVENTS_SP: dict[int, dict[str, Alert | AlertCallbackType]] = { EventNameSP.speedLimitPending: { ET.WARNING: Alert( - "Automatically adjusting to the last speed limit", + "Auto adjusting to last speed limit", "", AlertStatus.normal, AlertSize.small, Priority.LOW, VisualAlert.none, AudibleAlertSP.promptSingleHigh, 5.),