diff --git a/.gitattributes b/.gitattributes index f8ac23b397..60cdc8211c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -54,3 +54,4 @@ third_party/bootstrap/bootstrap-icons.ttf -filter -diff -merge # BluePilot custom sounds: store directly in Git, not upstream GitLab LFS. selfdrive/assets/sounds/bluepilot/*.wav -filter -diff -merge +selfdrive/assets/icons/liveDelay.png -filter -diff -merge diff --git a/common/params_keys.h b/common/params_keys.h index 3248d6e8d3..1569d313b1 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -337,6 +337,7 @@ inline static std::unordered_map keys = { {"BPRadRacerTheme", {PERSISTENT | BACKUP, BOOL, "0"}}, {"BPRainbowLines", {PERSISTENT | BACKUP, BOOL, "0"}}, {"BPShowConfidenceBall", {PERSISTENT | BACKUP, BOOL, "1"}}, + {"BPShowLiveDelayIndicator", {PERSISTENT | BACKUP, BOOL, "1"}}, {"BPAnimateSteeringWheel", {PERSISTENT | BACKUP, BOOL, "1"}}, // BluePilot: No static defaults; the first active UI persists its matching device styles (C4=0, C3X=1). {"BPSteeringWheelIconStyle", {PERSISTENT | BACKUP, INT}}, diff --git a/selfdrive/assets/icons/liveDelay.png b/selfdrive/assets/icons/liveDelay.png new file mode 100644 index 0000000000..c7b4bea6d6 Binary files /dev/null and b/selfdrive/assets/icons/liveDelay.png differ diff --git a/selfdrive/ui/bp/layouts/settings/bluepilot.py b/selfdrive/ui/bp/layouts/settings/bluepilot.py index 03f1e2ecfc..7804942ed2 100644 --- a/selfdrive/ui/bp/layouts/settings/bluepilot.py +++ b/selfdrive/ui/bp/layouts/settings/bluepilot.py @@ -86,6 +86,7 @@ def __init__(self): ("ShowBrakeStatus", self._show_brake_status), ("BPHideOnroadBorder", self._hide_onroad_border), ("BPShowConfidenceBall", self._show_confidence_ball), + ("BPShowLiveDelayIndicator", self._show_live_delay), ("BPAnimateSteeringWheel", self._animate_steering_wheel), ("BPUseCustomSounds", self._use_custom_sounds), ("FordPrefShowRadarLeadOverlay", self._show_ford_radar_overlay), @@ -202,6 +203,15 @@ def _initialize_items(self): icon="warning.png" ) + # Live delay (steering lag calibration) indicator toggle + self._show_live_delay = toggle_item( + lambda: tr("Show Steering Lag Calibration"), + lambda: tr("Display the steering lag calibration icon onroad until the estimate is done."), + initial_state=self._safe_get_bool(self._params, "BPShowLiveDelayIndicator", True), + callback=lambda state: self._toggle_callback(state, "BPShowLiveDelayIndicator"), + icon="warning.png" + ) + # Animate steering wheel toggle self._animate_steering_wheel = toggle_item( lambda: tr("Animate Steering Wheel"), @@ -689,6 +699,7 @@ def _section(title: str, items: list) -> list: self._show_blindspot, self._show_brake_status, self._show_confidence_ball, + self._show_live_delay, self._animate_steering_wheel, self._wheel_icon_style_btn, self._dm_icon_style_btn, diff --git a/selfdrive/ui/bp/lib/live_delay_indicator.py b/selfdrive/ui/bp/lib/live_delay_indicator.py new file mode 100644 index 0000000000..44241c3c90 --- /dev/null +++ b/selfdrive/ui/bp/lib/live_delay_indicator.py @@ -0,0 +1,62 @@ +"""Onroad steering-lag calibration indicator (shared by TICI and MICI HUDs). + +Shows the icon while liveDelay is not yet estimated; green once vEgo is above +MIN_VEGO, meaning samples are actually being collected. Hidden once estimated. +""" +import pyray as rl + +from openpilot.common.params import Params +from openpilot.common.params_pyx import UnknownKeyName +from openpilot.selfdrive.locationd.lagd import MIN_VEGO +from openpilot.selfdrive.ui.ui_state import ui_state +from openpilot.system.ui.lib.application import gui_app + +ICON_ASPECT = 270 / 387 # liveDelay.png is 387x270 + +IDLE = rl.Color(255, 255, 255, 200) # too slow to collect samples +ACTIVE = rl.Color(60, 220, 120, 235) # above MIN_VEGO, estimating +BACKDROP = rl.Color(0, 0, 0, 65) +PAD = 10 + + +class LiveDelayIndicator: + def __init__(self, width: int = 64): + self.width = width + self.height = round(width * ICON_ASPECT) + self._icon = gui_app.texture("icons/liveDelay.png", width, self.height) + self._params = Params() + self._param_counter = 0 + self._enabled = self._get_enabled() + + def _get_enabled(self) -> bool: + try: + return self._params.get_bool("BPShowLiveDelayIndicator") + except UnknownKeyName: # dev environment with reduced params + return True + + def render(self, x: float, y: float) -> None: + self._param_counter += 1 # refresh the toggle ~1s at 60fps + if self._param_counter >= 60: + self._param_counter = 0 + self._enabled = self._get_enabled() + if not self._enabled: + return + + sm = ui_state.sm + if not sm.valid.get('liveDelay') or sm['liveDelay'].status == 'estimated': + return + + backdrop = rl.Rectangle(x - PAD, y - PAD, self.width + PAD * 2, self.height + PAD * 2) + rl.draw_rectangle_rounded(backdrop, 0.15, 10, BACKDROP) + rl.draw_texture(self._icon, int(x), int(y), ACTIVE if sm['carState'].vEgo >= MIN_VEGO else IDLE) + + +def demo(): + ind = LiveDelayIndicator(width=64) + assert ind.height == 45 + assert MIN_VEGO > 0 + print("ok") + + +if __name__ == "__main__": + demo() diff --git a/selfdrive/ui/bp/mici/layouts/settings/audio_mici.py b/selfdrive/ui/bp/mici/layouts/settings/audio_mici.py index 9ea493563a..27f3c12be6 100644 --- a/selfdrive/ui/bp/mici/layouts/settings/audio_mici.py +++ b/selfdrive/ui/bp/mici/layouts/settings/audio_mici.py @@ -16,14 +16,14 @@ def __init__(self, back_callback: Callable[[], None] | None = None): self.set_back_callback(back_callback) self.use_custom_sounds = BigParamControlBP( - "Use Custom Engage/Disengage Sounds", + "use custom engage/disengage sounds", "BPUseCustomSounds", toggle_callback=self._on_custom_sounds_toggled, ) self.custom_sound_selection = BigMultiParamToggleBP( - "Engage/Disengage Sound", + "engage/disengage sound", "BPCustSoundsSelection", - ["Comma 4", "Comma 3x", "Tesla"], + ["comma 4", "comma 3x", "tesla"], select_callback=self._on_sound_selection_changed, ) diff --git a/selfdrive/ui/bp/mici/layouts/settings/bluepilot.py b/selfdrive/ui/bp/mici/layouts/settings/bluepilot.py index 31bd50fb9e..fd77c0427b 100644 --- a/selfdrive/ui/bp/mici/layouts/settings/bluepilot.py +++ b/selfdrive/ui/bp/mici/layouts/settings/bluepilot.py @@ -52,7 +52,7 @@ def __init__(self, back_callback: Callable[[], None]): ) self.preferred_network_btn.set_click_callback(self._select_preferred_network) self.show_web_routes_qr = BigButtonBP( - "QR code", "", "icons_mici/settings/network/wifi_strength_full.png", icon_size=80, + "qr code", "", "icons_mici/settings/network/wifi_strength_full.png", icon_size=80, ) self.show_web_routes_qr.set_click_callback(self._show_qr_dialog) self.clear_model_cache = BigButtonBP( @@ -72,7 +72,7 @@ def __init__(self, back_callback: Callable[[], None]): # Primary lateral control selector lives above the lat sub-panel self.primary_lateral_control = BigMultiParamToggleBP( - "Primary Control Variable", "FordPrefLateralControl", ["curvature", "angle"], + "primary control variable", "FordPrefLateralControl", ["curvature", "angle"], ) # Sub-panels diff --git a/selfdrive/ui/bp/mici/layouts/settings/lateral_mici.py b/selfdrive/ui/bp/mici/layouts/settings/lateral_mici.py index de74296508..cf9c45ce7c 100644 --- a/selfdrive/ui/bp/mici/layouts/settings/lateral_mici.py +++ b/selfdrive/ui/bp/mici/layouts/settings/lateral_mici.py @@ -17,56 +17,56 @@ def __init__(self, back_callback: Callable[[], None] | None = None): # --- Angle-mode-only items --- self.low_speed_factor = BigParamFloatControl( - "Low Speed Adjustment Factor", "FordLowSpeedFactor_ang", min=0.5, max=1.5, step=0.01, + "low speed adjustment factor", "FordLowSpeedFactor_ang", min=0.5, max=1.5, step=0.01, ) self.high_speed_factor = BigParamFloatControl( - "High Speed Adjustment Factor", "FordHighSpeedFactor_ang", min=0.5, max=1.5, step=0.01, + "high speed adjustment factor", "FordHighSpeedFactor_ang", min=0.5, max=1.5, step=0.01, ) self.high_speed_dampening = BigParamFloatControl( - "High Speed Low Curve Adjustment Factor", "FordHighSpeedDampening_ang", min=0.75, max=1.25, step=0.01, + "high speed low curve adjustment factor", "FordHighSpeedDampening_ang", min=0.75, max=1.25, step=0.01, ) self.lane_change_factor_high_ang = BigParamFloatControl( - "Lane Change Factor High", "lane_change_factor_high_ang", min=0.85, max=1.50, + "lane change factor high", "lane_change_factor_high_ang", min=0.85, max=1.50, ) # --- Always-visible items --- - self.disable_BP_lat = BigParamControlBP("Disable BP Lateral Control", "disable_BP_lat_UI") + self.disable_BP_lat = BigParamControlBP("disable bp lateral control", "disable_BP_lat_UI") self.disable_lane_change_under_speed = BigParamControlBP( - "Disable Auto Lane Change Under Speed", "BlinkerPauseLaneChange", + "disable auto lane change under speed", "BlinkerPauseLaneChange", toggle_callback=lambda state: self.blinker_min_speed.set_enabled(state), ) self.blinker_min_speed = BigParamIntControl( - "Minimum Speed to Pause Lane Change", "BlinkerMinLateralControlSpeed", min=5, max=50, step=5, + "minimum speed to pause lane change", "BlinkerMinLateralControlSpeed", min=5, max=50, step=5, ) - self.show_lateral_control = BigParamControlBP("Show Lateral Control Mode", "BpShowLateralControl") + self.show_lateral_control = BigParamControlBP("show lateral control mode", "BpShowLateralControl") # --- Curvature-mode-only items --- self.lane_change_factor_high_curv = BigParamFloatControl( - "Lane Change Factor High", "lane_change_factor_high_curv", min=0.5, max=1.0, + "lane change factor high", "lane_change_factor_high_curv", min=0.5, max=1.0, ) self.custom_path_offset = BigParamFloatControl( - "In-Lane Offset", "custom_path_offset_curv", min=-0.5, max=0.5, + "in-lane offset", "custom_path_offset_curv", min=-0.5, max=0.5, ) self.enable_human_turn_detection = BigParamControlBP( - "Enable Human Turn Detection", "enable_human_turn_detection_curv", + "enable human turn detection", "enable_human_turn_detection_curv", ) self.enable_lane_positioning = BigParamControlBP( - "Enable Lane Positioning", "enable_lane_positioning_curv", + "enable lane positioning", "enable_lane_positioning_curv", ) self.enable_lane_full_mode = BigParamControlBP( - "Enable Lanefull Mode", "enable_lane_full_mode_curv", + "enable lanefull mode", "enable_lane_full_mode_curv", ) self.custom_profile = BigParamControlBP( - "Use Custom Tuning Profile", "custom_profile_curv", + "use custom tuning profile", "custom_profile_curv", ) self.pc_blend_ratio_high_C = BigParamFloatControl( - "Predicted Curvature Blend Ratio High", "pc_blend_ratio_high_C_UI_curv", min=0.0, max=1.0, step=0.05, + "predicted curvature blend ratio high", "pc_blend_ratio_high_C_UI_curv", min=0.0, max=1.0, step=0.05, ) self.pc_blend_ratio_low_C = BigParamFloatControl( - "Predicted Curvature Blend Ratio Low", "pc_blend_ratio_low_C_UI_curv", min=0.0, max=1.0, step=0.05, + "predicted curvature blend ratio low", "pc_blend_ratio_low_C_UI_curv", min=0.0, max=1.0, step=0.05, ) self.lc_pid_gain = BigParamFloatControl( - "Centering PID Gain", "LC_PID_gain_UI_curv", min=0.0, max=50.0, step=0.5, + "centering pid gain", "LC_PID_gain_UI_curv", min=0.0, max=50.0, step=0.5, ) self._scroller.add_widgets([ diff --git a/selfdrive/ui/bp/mici/layouts/settings/longitudinal_mici.py b/selfdrive/ui/bp/mici/layouts/settings/longitudinal_mici.py index 9c7d7c855a..147aa81607 100644 --- a/selfdrive/ui/bp/mici/layouts/settings/longitudinal_mici.py +++ b/selfdrive/ui/bp/mici/layouts/settings/longitudinal_mici.py @@ -13,9 +13,9 @@ def __init__(self, back_callback: Callable[[], None] | None = None): if back_callback is not None: self.set_back_callback(back_callback) - self.disable_BP_long = BigParamControlBP("Bypass BP Longitudinal Control", "disable_BP_long_UI") - self.disable_downhill_comp = BigParamControlBP("Disable Downhill Compensation", "disable_downhill_comp_UI") - self.disable_ford_radar = BigParamControlBP("Disable Ford Radar (Vision-Only Leads)", "disable_ford_radar_UI") + self.disable_BP_long = BigParamControlBP("bypass bp longitudinal control", "disable_BP_long_UI") + self.disable_downhill_comp = BigParamControlBP("disable downhill compensation", "disable_downhill_comp_UI") + self.disable_ford_radar = BigParamControlBP("disable ford radar (vision-only leads)", "disable_ford_radar_UI") self._scroller.add_widgets([ self.disable_BP_long, diff --git a/selfdrive/ui/bp/mici/layouts/settings/vehicle_mici.py b/selfdrive/ui/bp/mici/layouts/settings/vehicle_mici.py index 27b1f6e3ec..41d10b6a9f 100644 --- a/selfdrive/ui/bp/mici/layouts/settings/vehicle_mici.py +++ b/selfdrive/ui/bp/mici/layouts/settings/vehicle_mici.py @@ -16,14 +16,14 @@ def __init__(self, back_callback: Callable[[], None] | None = None): self.set_back_callback(back_callback) self._params = Params() - self.show_hands_free_ui = BigParamControlBP("Show BlueCruise UI on Cluster", "send_hands_free_cluster_msg") + self.show_hands_free_ui = BigParamControlBP("show bluecruise ui on cluster", "send_hands_free_cluster_msg") # Init-time param (read once at car init, mirrored into panda safety); takes effect after restart. # FORD_EDGE_MK2's pinion sensor only reports a relative angle -- the safety/control # layers already no-op this toggle there, so grey it out too (see values_ext.py # FORD_PINION_GEOMETRY_INDEX). - self.steer_angle_curvature = BigParamControlBP("Use Pinion Yaw Sensor", "FordPrefSteerAngleCurvature") + self.steer_angle_curvature = BigParamControlBP("use pinion yaw sensor", "FordPrefSteerAngleCurvature") self.steer_angle_curvature.set_enabled(self._pinion_yaw_sensor_supported) - self.vbatt_pause_charging = BigParamFloatControl("12V Battery Limit", "vbatt_pause_charging", min=11.0, max=14.0, step=0.1) + self.vbatt_pause_charging = BigParamFloatControl("12v battery limit", "vbatt_pause_charging", min=11.0, max=14.0, step=0.1) self._scroller.add_widgets([ self.show_hands_free_ui, diff --git a/selfdrive/ui/bp/mici/layouts/settings/visuals_mici.py b/selfdrive/ui/bp/mici/layouts/settings/visuals_mici.py index 8248928dc8..d15b6cb74f 100644 --- a/selfdrive/ui/bp/mici/layouts/settings/visuals_mici.py +++ b/selfdrive/ui/bp/mici/layouts/settings/visuals_mici.py @@ -29,29 +29,30 @@ def __init__(self, back_callback: Callable[[], None] | None = None): self.set_back_callback(back_callback) self.show_lead_vehicle = BigMultiParamToggleBP( - "Lower Right Display", "mici_complication", + "lower right display", "mici_complication", ["off", "lead car speed", "speed", "lead car distance", "time to lead car"], ) - self.rainbow_mode = BigParamControlBP("Rainbow Mode", "RainbowMode") - self.rad_racer_theme = BigParamControlBP("8-Bit Racer Theme", "BPRadRacerTheme") - self.hide_fade = BigParamControlBP("Hide Onroad Fade", "mici_hide_onroad_fade") - self.hide_border = BigParamControlBP("Hide Onroad Border", "BPHideOnroadBorder") - self.hide_camera_view = BigParamControlBP("Minimal Driving View", "BPHideCameraView") - self.rainbow_lane_lines = BigParamControlBP("Rainbow Lane Lines", "BPRainbowLines") - self.show_blindspot_ui = BigParamControlBP("Show Blindspot Overlay", "ShowBlindspotOverlay") - self.show_brake_status = BigParamControlBP("Show Brake Status", "ShowBrakeStatus") - self.animate_steering_wheel = BigParamControlBP("Animate Steering Wheel", "BPAnimateSteeringWheel") + self.rainbow_mode = BigParamControlBP("rainbow mode", "RainbowMode") + self.rad_racer_theme = BigParamControlBP("8-bit racer theme", "BPRadRacerTheme") + self.hide_fade = BigParamControlBP("hide onroad fade", "mici_hide_onroad_fade") + self.hide_border = BigParamControlBP("hide onroad border", "BPHideOnroadBorder") + self.hide_camera_view = BigParamControlBP("minimal driving view", "BPHideCameraView") + self.rainbow_lane_lines = BigParamControlBP("rainbow lane lines", "BPRainbowLines") + self.show_blindspot_ui = BigParamControlBP("show blindspot overlay", "ShowBlindspotOverlay") + self.show_brake_status = BigParamControlBP("show brake status", "ShowBrakeStatus") + self.show_live_delay = BigParamControlBP("show steering lag calibration", "BPShowLiveDelayIndicator") + self.animate_steering_wheel = BigParamControlBP("animate steering wheel", "BPAnimateSteeringWheel") ensure_steering_wheel_icon_style_initialized(Params(), SteeringWheelIconStyle.COMMA_4) self.wheel_icon_style = BigMultiParamToggleBP( - "Wheel Icon Style", "BPSteeringWheelIconStyle", ["Comma 4", "Comma 3x"], + "wheel icon style", "BPSteeringWheelIconStyle", ["comma 4", "comma 3x"], ) ensure_dm_icon_style_initialized(Params(), DMIconStyle.COMMA_4) self.dm_icon_style = BigMultiParamToggleBP( - "DM Icon Style", "BPDMStylingChoice", ["Comma 4", "Comma 3x"], + "dm icon style", "BPDMStylingChoice", ["comma 4", "comma 3x"], ) - self.show_hybrid_power_flow = BigParamControlBP("Show Hybrid Power Flow", "FordPrefHybridPowerFlow") + self.show_hybrid_power_flow = BigParamControlBP("show hybrid power flow", "FordPrefHybridPowerFlow") self.hybrid_power_flow_style = BigMultiParamToggleBoolBP( - "Hybrid/EV Power Flow Style", "FordPrefHybridPowerFlowAlternate", ["flat", "round"], + "hybrid/ev power flow style", "FordPrefHybridPowerFlowAlternate", ["flat", "round"], ) self._scroller.add_widgets([ @@ -64,6 +65,7 @@ def __init__(self, back_callback: Callable[[], None] | None = None): self.rainbow_lane_lines, self.show_blindspot_ui, self.show_brake_status, + self.show_live_delay, self.animate_steering_wheel, self.wheel_icon_style, self.dm_icon_style, @@ -80,6 +82,7 @@ def __init__(self, back_callback: Callable[[], None] | None = None): ("BPRainbowLines", self.rainbow_lane_lines), ("ShowBlindspotOverlay", self.show_blindspot_ui), ("ShowBrakeStatus", self.show_brake_status), + ("BPShowLiveDelayIndicator", self.show_live_delay), ("BPAnimateSteeringWheel", self.animate_steering_wheel), ("FordPrefHybridPowerFlow", self.show_hybrid_power_flow), ) diff --git a/selfdrive/ui/bp/mici/onroad/hud_renderer_bp.py b/selfdrive/ui/bp/mici/onroad/hud_renderer_bp.py index a71e329fcb..83c4817ca4 100644 --- a/selfdrive/ui/bp/mici/onroad/hud_renderer_bp.py +++ b/selfdrive/ui/bp/mici/onroad/hud_renderer_bp.py @@ -11,6 +11,7 @@ SteeringWheelIconStyle, ) from openpilot.selfdrive.ui.bp.lib.ui_debug_logger import bp_ui_log +from openpilot.selfdrive.ui.bp.lib.live_delay_indicator import LiveDelayIndicator from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.system.ui.lib.application import gui_app from openpilot.bluepilot.ui.lib.bp_shaders import draw_shader_circle_gradient @@ -27,6 +28,7 @@ def __init__(self): # BluePilot: HudRenderer initializes upstream TorqueBar; replace it with ours. self._torque_bar = TorqueBar() self._bp_params = Params() + self._live_delay = LiveDelayIndicator(width=44) self._brakes_on = False self._power_flow = MiciPowerflowGauge() self._txt_wheel_comma_3x = gui_app.texture("icons/chffr_wheel.png", self._txt_wheel.width, self._txt_wheel.height) @@ -78,6 +80,9 @@ def _render(self, rect: rl.Rectangle) -> None: self._draw_steering_wheel(rect) + # Steering-lag calibration status, top-right corner + self._live_delay.render(rect.x + rect.width - self._live_delay.width - 14, rect.y + 14) + def _draw_steering_wheel(self, rect: rl.Rectangle) -> None: """Override to add brake status coloring to wheel icon, powerflow gauge, and lateral control overlay.""" normal_wheel_txt = self._txt_wheel_comma_3x if self._wheel_icon_style == SteeringWheelIconStyle.COMMA_3X else self._txt_wheel diff --git a/selfdrive/ui/bp/onroad/hud_renderer_bp.py b/selfdrive/ui/bp/onroad/hud_renderer_bp.py index 30c756e8e1..f66acfdea2 100644 --- a/selfdrive/ui/bp/onroad/hud_renderer_bp.py +++ b/selfdrive/ui/bp/onroad/hud_renderer_bp.py @@ -5,6 +5,7 @@ from openpilot.selfdrive.ui.onroad.hud_renderer import UI_CONFIG, FONT_SIZES, COLORS from openpilot.selfdrive.ui.sunnypilot.onroad.hud_renderer import HudRendererSP from openpilot.selfdrive.ui.bp.onroad.exp_button_bp import ExpButtonBP +from openpilot.selfdrive.ui.bp.lib.live_delay_indicator import LiveDelayIndicator from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.selfdrive.ui.bp.lib.ui_debug_logger import bp_ui_log @@ -29,6 +30,7 @@ def __init__(self): # BluePilot: Restore the animated C3X wheel without modifying the upstream ExpButton. self._exp_button = ExpButtonBP(UI_CONFIG.button_size, UI_CONFIG.wheel_icon_size) self._bp_params = Params() + self._live_delay = LiveDelayIndicator(width=140) self._brakes_on = False self.speed_right = 0 self._gradient_rect = None # BluePilot: Full-width rect for header gradient @@ -103,6 +105,12 @@ def _render(self, rect: rl.Rectangle) -> None: UI_CONFIG.button_size, ) + # Steering-lag calibration status, left of the wheel button + self._live_delay.render( + button_x - self._live_delay.width - 24, + button_y + (UI_CONFIG.button_size - self._live_delay.height) / 2, + ) + # SP additions (dev UI, road name, speed limit, SCC, turn signals, circular alerts, rocket fuel) self.developer_ui.render(rect) self.road_name_renderer.render(rect) diff --git a/selfdrive/ui/layouts/home.py b/selfdrive/ui/layouts/home.py index be231dcd4b..747bf54147 100644 --- a/selfdrive/ui/layouts/home.py +++ b/selfdrive/ui/layouts/home.py @@ -228,6 +228,6 @@ def _refresh(self): self._prev_alerts_present = alerts_present def _get_version_text(self) -> str: - brand = "sunnypilot" + brand = "bluepilot" description = self.params.get("UpdaterCurrentDescription") return f"{brand} {description}" if description else brand diff --git a/selfdrive/ui/layouts/onboarding.py b/selfdrive/ui/layouts/onboarding.py index 6e683c0922..a8d2fe8327 100644 --- a/selfdrive/ui/layouts/onboarding.py +++ b/selfdrive/ui/layouts/onboarding.py @@ -115,8 +115,8 @@ def __init__(self, on_accept=None, on_decline=None): self._on_accept = on_accept self._on_decline = on_decline - self._title = Label(tr("Welcome to sunnypilot"), font_size=90, font_weight=FontWeight.BOLD, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT) - self._desc = Label(tr("You must accept the Terms of Service to use sunnypilot. Read the latest terms at https://sunnypilot.ai/terms before continuing."), + self._title = Label(tr("Welcome to bluepilot"), font_size=90, font_weight=FontWeight.BOLD, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT) + self._desc = Label(tr("You must accept the Terms of Service to use bluepilot. Read the latest terms at https://sunnypilot.ai/terms before continuing."), font_size=90, font_weight=FontWeight.MEDIUM, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT) self._decline_btn = Button(tr("Decline"), click_callback=on_decline) @@ -149,10 +149,10 @@ def _render(self, _): class DeclinePage(Widget): def __init__(self, back_callback=None): super().__init__() - self._text = Label(tr("You must accept the Terms of Service in order to use sunnypilot."), + self._text = Label(tr("You must accept the Terms of Service in order to use bluepilot."), font_size=90, font_weight=FontWeight.MEDIUM, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT) self._back_btn = Button(tr("Back"), click_callback=back_callback) - self._uninstall_btn = Button(tr("Decline, uninstall sunnypilot"), button_style=ButtonStyle.DANGER, + self._uninstall_btn = Button(tr("Decline, uninstall bluepilot"), button_style=ButtonStyle.DANGER, click_callback=self._on_uninstall_clicked) def _on_uninstall_clicked(self): diff --git a/selfdrive/ui/layouts/settings/developer.py b/selfdrive/ui/layouts/settings/developer.py index a9fbca768d..c1b79b3a28 100644 --- a/selfdrive/ui/layouts/settings/developer.py +++ b/selfdrive/ui/layouts/settings/developer.py @@ -23,11 +23,11 @@ "other than your own. A comma employee will NEVER ask you to add their GitHub username." ), 'alpha_longitudinal': tr_noop( - "WARNING: sunnypilot longitudinal control is in alpha for this car and may disable Automatic Emergency Braking (AEB).

" + - "On this car, sunnypilot defaults to the car's built-in ACC instead of sunnypilot's longitudinal control. " + - "Enable this to switch to sunnypilot longitudinal control. " + - "Enabling Experimental mode is recommended when enabling sunnypilot longitudinal control alpha. " + - "Changing this setting will restart sunnypilot if the car is powered on." + "WARNING: openpilot longitudinal control is in alpha for this car and may disable Automatic Emergency Braking (AEB).

" + + "On this car, openpilot defaults to the car's built-in ACC instead of openpilot's longitudinal control. " + + "Enable this to switch to openpilot longitudinal control. " + + "Enabling Experimental mode is recommended when enabling openpilot longitudinal control alpha. " + + "Changing this setting will restart bluepilot if the car is powered on." ), } @@ -79,7 +79,7 @@ def __init__(self): ) self._alpha_long_toggle = toggle_item( - lambda: tr("sunnypilot Longitudinal Control (Alpha)"), + lambda: tr("openpilot Longitudinal Control (Alpha)"), description=lambda: tr(DESCRIPTIONS["alpha_longitudinal"]), initial_state=self._params.get_bool("AlphaLongitudinalEnabled"), callback=self._on_alpha_long_enabled, diff --git a/selfdrive/ui/layouts/settings/device.py b/selfdrive/ui/layouts/settings/device.py index 2e0493c8d3..3308a06320 100644 --- a/selfdrive/ui/layouts/settings/device.py +++ b/selfdrive/ui/layouts/settings/device.py @@ -25,8 +25,8 @@ DESCRIPTIONS = { 'pair_device': tr_noop("Pair your device with comma connect (connect.comma.ai) and claim your comma prime offer."), 'driver_camera': tr_noop("Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off)"), - 'reset_calibration': tr_noop("sunnypilot requires the device to be mounted within 4° left or right and within 5° up or 9° down."), - 'review_guide': tr_noop("Review the rules, features, and limitations of sunnypilot"), + 'reset_calibration': tr_noop("bluepilot requires the device to be mounted within 4° left or right and within 5° up or 9° down."), + 'review_guide': tr_noop("Review the rules, features, and limitations of bluepilot"), } @@ -157,8 +157,8 @@ def _update_calib_description(self): cloudlog.exception("invalid LiveTorqueParameters") desc += "

" - desc += tr("sunnypilot is continuously calibrating, resetting is rarely required. " + - "Resetting calibration will restart sunnypilot if the car is powered on.") + desc += tr("bluepilot is continuously calibrating, resetting is rarely required. " + + "Resetting calibration will restart bluepilot if the car is powered on.") self._reset_calib_btn.set_description(desc) diff --git a/selfdrive/ui/layouts/settings/firehose.py b/selfdrive/ui/layouts/settings/firehose.py index 8ac6fe3d23..12bd2f20ec 100644 --- a/selfdrive/ui/layouts/settings/firehose.py +++ b/selfdrive/ui/layouts/settings/firehose.py @@ -9,7 +9,7 @@ TITLE = tr_noop("Firehose Mode") DESCRIPTION = tr_noop( - "sunnypilot learns to drive by watching humans, like you, drive.\n\n" + "bluepilot learns to drive by watching humans, like you, drive.\n\n" + "Firehose Mode allows you to maximize your training data uploads to improve " + "openpilot's driving models. More data means bigger models, which means better Experimental Mode." ) diff --git a/selfdrive/ui/layouts/settings/toggles.py b/selfdrive/ui/layouts/settings/toggles.py index 4c83584ad5..344c011d90 100644 --- a/selfdrive/ui/layouts/settings/toggles.py +++ b/selfdrive/ui/layouts/settings/toggles.py @@ -18,20 +18,20 @@ # Description constants DESCRIPTIONS = { "OpenpilotEnabledToggle": tr_noop( - "Use the sunnypilot system for adaptive cruise control and lane keep driver assistance. " + + "Use the bluepilot system for adaptive cruise control and lane keep driver assistance. " + "Your attention is required at all times to use this feature." ), - "DisengageOnAccelerator": tr_noop("When enabled, pressing the accelerator pedal will disengage sunnypilot."), + "DisengageOnAccelerator": tr_noop("When enabled, pressing the accelerator pedal will disengage bluepilot."), "LongitudinalPersonality": tr_noop( - "Standard is recommended. In aggressive mode, sunnypilot will follow lead cars closer and be more aggressive with the gas and brake. " + - "In relaxed mode sunnypilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with " + + "Standard is recommended. In aggressive mode, bluepilot will follow lead cars closer and be more aggressive with the gas and brake. " + + "In relaxed mode bluepilot will stay further away from lead cars. On supported cars, you can cycle through these personalities with " + "your steering wheel distance button." ), "IsLdwEnabled": tr_noop( "Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line " + "without a turn signal activated while driving over 31 mph (50 km/h)." ), - "AlwaysOnDM": tr_noop("Enable driver monitoring even when sunnypilot is not engaged."), + "AlwaysOnDM": tr_noop("Enable driver monitoring even when bluepilot is not engaged."), 'RecordFront': tr_noop("Upload data from the driver facing camera and help improve the driver monitoring algorithm."), "IsMetric": tr_noop("Display speed in km/h instead of mph."), "RecordAudio": tr_noop("Record and store microphone audio while driving. The audio will be included in the dashcam video in comma connect."), @@ -47,7 +47,7 @@ def __init__(self): # param, title, desc, icon, needs_restart self._toggle_defs = { "OpenpilotEnabledToggle": ( - lambda: tr("Enable sunnypilot"), + lambda: tr("Enable bluepilot"), DESCRIPTIONS["OpenpilotEnabledToggle"], "chffr_wheel.png", True, @@ -126,7 +126,7 @@ def __init__(self): # Make description callable for live translation additional_desc = "" if needs_restart and not locked: - additional_desc = tr("Changing this setting will restart sunnypilot if the car is powered on.") + additional_desc = tr("Changing this setting will restart bluepilot if the car is powered on.") toggle.set_description(lambda og_desc=toggle.description, add_desc=additional_desc: tr(og_desc) + (" " + tr(add_desc) if add_desc else "")) # track for engaged state updates @@ -160,10 +160,10 @@ def _update_toggles(self): ui_state.update_params() e2e_description = tr( - "sunnypilot defaults to driving in chill mode. Experimental mode enables alpha-level features that aren't ready for chill mode. " + + "bluepilot defaults to driving in chill mode. Experimental mode enables alpha-level features that aren't ready for chill mode. " + "Experimental features are listed below:
" + "

End-to-End Longitudinal Control


" + - "Let the driving model control the gas and brakes. sunnypilot will drive as it thinks a human would, including stopping for red lights and stop signs. " + + "Let the driving model control the gas and brakes. bluepilot will drive as it thinks a human would, including stopping for red lights and stop signs. " + "Since the driving model decides the speed to drive, the set speed will only act as an upper bound. This is an alpha quality feature; " + "mistakes should be expected.
" + "

New Driving Visualization


" + @@ -185,13 +185,13 @@ def _update_toggles(self): unavailable = tr("Experimental mode is currently unavailable on this car since the car's stock ACC is used for longitudinal control.") - long_desc = unavailable + " " + tr("sunnypilot longitudinal control may come in a future update.") + long_desc = unavailable + " " + tr("openpilot longitudinal control may come in a future update.") if ui_state.CP.alphaLongitudinalAvailable: if self._is_release: - long_desc = unavailable + " " + tr("An alpha version of sunnypilot longitudinal control can be tested, along with " + + long_desc = unavailable + " " + tr("An alpha version of openpilot longitudinal control can be tested, along with " + "Experimental mode, on non-release branches.") else: - long_desc = tr("Enable the sunnypilot longitudinal control (alpha) toggle to allow Experimental mode.") + long_desc = tr("Enable the openpilot longitudinal control (alpha) toggle to allow Experimental mode.") self._toggles["ExperimentalMode"].set_description("" + long_desc + "

" + e2e_description) else: diff --git a/selfdrive/ui/mici/layouts/home.py b/selfdrive/ui/mici/layouts/home.py index d41165a79d..a6a6bc68f0 100644 --- a/selfdrive/ui/mici/layouts/home.py +++ b/selfdrive/ui/mici/layouts/home.py @@ -156,7 +156,7 @@ def __init__(self): self._mic_icon, ], spacing=18) - self._openpilot_label = UnifiedLabel("sunnypilot", font_size=96, font_weight=FontWeight.DISPLAY, max_width=480, wrap_text=False) + self._openpilot_label = UnifiedLabel("bluepilot", font_size=96, font_weight=FontWeight.DISPLAY, max_width=480, wrap_text=False) self._version_label = UnifiedLabel("", font_size=36, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) self._large_version_label = UnifiedLabel("", font_size=64, text_color=rl.GRAY, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) self._date_label = UnifiedLabel("", font_size=36, text_color=rl.GRAY, font_weight=FontWeight.ROMAN, max_width=480, wrap_text=False) diff --git a/selfdrive/ui/mici/layouts/offroad_alerts.py b/selfdrive/ui/mici/layouts/offroad_alerts.py index e0c574dc07..b357a9dc20 100644 --- a/selfdrive/ui/mici/layouts/offroad_alerts.py +++ b/selfdrive/ui/mici/layouts/offroad_alerts.py @@ -269,7 +269,7 @@ def _refresh(self) -> int: parts = new_desc.split(" / ") if len(parts) > 3: version, date = parts[0], parts[3] - version_string = f"\nsunnypilot {version}, {date}\n" + version_string = f"\nbluepilot {version}, {date}\n" update_alert_data.text = f"Update available {version_string}. Click to update. Read the release notes at blog.comma.ai." update_alert_data.visible = True diff --git a/selfdrive/ui/mici/layouts/onboarding.py b/selfdrive/ui/mici/layouts/onboarding.py index f070ec5d5c..cdadf82f4a 100644 --- a/selfdrive/ui/mici/layouts/onboarding.py +++ b/selfdrive/ui/mici/layouts/onboarding.py @@ -63,7 +63,7 @@ def __init__(self, continue_callback: Callable[[], None]): GreyBigButton("driver monitoring\ncheck", "scroll to continue", gui_app.texture("icons_mici/setup/green_dm.png", 64, 64)), GreyBigButton("", "Next, we'll check if comma four can detect the driver properly."), - GreyBigButton("", "sunnypilot uses the cabin camera to check if the driver is distracted."), + GreyBigButton("", "bluepilot uses the cabin camera to check if the driver is distracted."), GreyBigButton("", "If it does not have a clear view of the driver, unplug and remount before continuing."), continue_button, ]) @@ -235,7 +235,7 @@ def on_decline(): self._scroller.add_widgets([ GreyBigButton("driver camera data", "do you want to share video data for training?", gui_app.texture("icons_mici/setup/green_dm.png", 64, 64)), - GreyBigButton("", "Sharing your data with comma helps improve openpilot and sunnypilot for everyone."), + GreyBigButton("", "Sharing your data with comma helps improve openpilot and bluepilot for everyone."), self._accept_button, self._decline_button, ]) @@ -249,9 +249,9 @@ def __init__(self, continue_callback: Callable[[], None]): continue_button.set_click_callback(continue_callback) self._scroller.add_widgets([ - GreyBigButton("what is sunnypilot?", "scroll to continue", + GreyBigButton("what is bluepilot?", "scroll to continue", gui_app.texture("icons_mici/setup/green_info.png", 64, 64)), - GreyBigButton("", "1. sunnypilot is a driver assistance system."), + GreyBigButton("", "1. bluepilot is a driver assistance system."), GreyBigButton("", "2. You must pay attention at all times."), GreyBigButton("", "3. You must be ready to take over at any time."), GreyBigButton("", "4. You are fully responsible for driving the car."), @@ -322,7 +322,7 @@ def __init__(self, on_accept, on_decline): self._terms_header = GreyBigButton("terms of\nservice", "scroll to continue", gui_app.texture("icons_mici/setup/green_info.png", 64, 64)) - self._must_accept_card = GreyBigButton("", "You must accept the Terms of Service to use sunnypilot.") + self._must_accept_card = GreyBigButton("", "You must accept the Terms of Service to use bluepilot.") self._scroller.add_widgets([ self._terms_header, diff --git a/selfdrive/ui/mici/layouts/settings/device.py b/selfdrive/ui/mici/layouts/settings/device.py index 4a8fc50d53..f6cd28ede5 100644 --- a/selfdrive/ui/mici/layouts/settings/device.py +++ b/selfdrive/ui/mici/layouts/settings/device.py @@ -172,7 +172,7 @@ def __init__(self): self._txt_update_icon = gui_app.texture("icons_mici/settings/device/update.png", 64, 75) self._txt_reboot_icon = gui_app.texture("icons_mici/settings/device/reboot.png", 64, 70) self._txt_up_to_date_icon = gui_app.texture("icons_mici/settings/device/up_to_date.png", 64, 64) - super().__init__("update sunnypilot", "", self._txt_update_icon) + super().__init__("update bluepilot", "", self._txt_update_icon) self._waiting_for_updater_t: float | None = None self._hide_value_t: float | None = None @@ -211,7 +211,7 @@ def set_value(self, value: str): if value: self.set_text("") else: - self.set_text("update sunnypilot") + self.set_text("update bluepilot") def _update_state(self): super()._update_state() @@ -313,7 +313,7 @@ def uninstall_openpilot_callback(): reset_calibration_btn = EngagedConfirmationButton("reset calibration", "reset", gui_app.texture("icons_mici/settings/device/lkas.png", 122, 64), reset_calibration_callback) - uninstall_openpilot_btn = EngagedConfirmationButton("uninstall sunnypilot", "uninstall", + uninstall_openpilot_btn = EngagedConfirmationButton("uninstall bluepilot", "uninstall", gui_app.texture("icons_mici/settings/device/uninstall.png", 64, 64), uninstall_openpilot_callback, exit_on_confirm=False) diff --git a/selfdrive/ui/mici/layouts/settings/firehose.py b/selfdrive/ui/mici/layouts/settings/firehose.py index 5e3b6da2cc..0610aa1036 100644 --- a/selfdrive/ui/mici/layouts/settings/firehose.py +++ b/selfdrive/ui/mici/layouts/settings/firehose.py @@ -19,7 +19,7 @@ TITLE = tr_noop("Firehose Mode") DESCRIPTION = tr_noop( - "sunnypilot learns to drive by watching humans, like you, drive.\n\n" + "bluepilot learns to drive by watching humans, like you, drive.\n\n" + "Firehose Mode allows you to maximize your training data uploads to improve " + "openpilot's driving models. More data means bigger models, which means better Experimental Mode." ) diff --git a/selfdrive/ui/mici/layouts/settings/toggles.py b/selfdrive/ui/mici/layouts/settings/toggles.py index 8635336f97..d8ad2a1c68 100644 --- a/selfdrive/ui/mici/layouts/settings/toggles.py +++ b/selfdrive/ui/mici/layouts/settings/toggles.py @@ -20,7 +20,7 @@ def __init__(self): always_on_dm_toggle = BigParamControl("always-on driver monitor", "AlwaysOnDM") record_front = BigParamControl("record & upload driver camera", "RecordFront", toggle_callback=restart_needed_callback) record_mic = BigParamControl("record & upload mic audio", "RecordAudio", toggle_callback=restart_needed_callback) - enable_openpilot = BigParamControl("enable sunnypilot", "OpenpilotEnabledToggle", toggle_callback=restart_needed_callback) + enable_openpilot = BigParamControl("enable bluepilot", "OpenpilotEnabledToggle", toggle_callback=restart_needed_callback) self._scroller.add_widgets([ self._personality_toggle, diff --git a/selfdrive/ui/mici/onroad/alert_renderer.py b/selfdrive/ui/mici/onroad/alert_renderer.py index 5b550030de..831df505e3 100644 --- a/selfdrive/ui/mici/onroad/alert_renderer.py +++ b/selfdrive/ui/mici/onroad/alert_renderer.py @@ -68,7 +68,7 @@ class Alert: # Pre-defined alert instances ALERT_STARTUP_PENDING = Alert( - text1="sunnypilot Unavailable", + text1="bluepilot Unavailable", text2="Waiting to start", size=AlertSize.mid, status=AlertStatus.normal, diff --git a/selfdrive/ui/mici/onroad/augmented_road_view.py b/selfdrive/ui/mici/onroad/augmented_road_view.py index 8dafc4df57..1cf0fc730d 100644 --- a/selfdrive/ui/mici/onroad/augmented_road_view.py +++ b/selfdrive/ui/mici/onroad/augmented_road_view.py @@ -155,7 +155,7 @@ def __init__(self, bookmark_callback=None, stream_type: VisionStreamType = Visio self._alert_renderer = AlertRenderer() self._driver_state_renderer = DriverStateRenderer() self._confidence_ball = ConfidenceBall() - self._offroad_label = UnifiedLabel("start the car to\nuse sunnypilot", 54, FontWeight.DISPLAY, + self._offroad_label = UnifiedLabel("start the car to\nuse bluepilot", 54, FontWeight.DISPLAY, text_color=rl.Color(255, 255, 255, int(255 * 0.9)), alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) @@ -175,7 +175,7 @@ def _update_state(self): elif ui_state.ignition and not ui_state.started: self._offroad_label.set_text("openpilot can't start\ncheck alerts") else: - self._offroad_label.set_text("start the car to\nuse sunnypilot") + self._offroad_label.set_text("start the car to\nuse bluepilot") def _handle_mouse_release(self, mouse_pos: MousePos): # Don't trigger click callback if bookmark was triggered diff --git a/selfdrive/ui/onroad/alert_renderer.py b/selfdrive/ui/onroad/alert_renderer.py index 6e79d23253..baaa684bf9 100644 --- a/selfdrive/ui/onroad/alert_renderer.py +++ b/selfdrive/ui/onroad/alert_renderer.py @@ -48,7 +48,7 @@ class Alert: # Pre-defined alert instances ALERT_STARTUP_PENDING = Alert( - text1=tr("sunnypilot Unavailable"), + text1=tr("bluepilot Unavailable"), text2=tr("Waiting to start"), size=AlertSize.mid, status=AlertStatus.normal, diff --git a/selfdrive/ui/sunnypilot/layouts/settings/cruise.py b/selfdrive/ui/sunnypilot/layouts/settings/cruise.py index 671174ac7a..5863cd9fee 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/cruise.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/cruise.py @@ -19,14 +19,14 @@ class PanelType(IntEnum): SLA = 1 -ICBM_DESC = tr_noop("When enabled, sunnypilot will attempt to manage the built-in cruise control buttons " + +ICBM_DESC = tr_noop("When enabled, bluepilot will attempt to manage the built-in cruise control buttons " + "by emulating button presses for limited longitudinal control.") ICMB_UNAVAILABLE = tr_noop("Intelligent Cruise Button Management is currently unavailable on this platform.") -ICMB_UNAVAILABLE_LONG_AVAILABLE = tr_noop("Disable the sunnypilot Longitudinal Control (alpha) toggle to allow Intelligent Cruise Button Management.") -ICMB_UNAVAILABLE_LONG_UNAVAILABLE = tr_noop("sunnypilot Longitudinal Control is the default longitudinal control for this platform.") +ICMB_UNAVAILABLE_LONG_AVAILABLE = tr_noop("Disable the openpilot Longitudinal Control (alpha) toggle to allow Intelligent Cruise Button Management.") +ICMB_UNAVAILABLE_LONG_UNAVAILABLE = tr_noop("openpilot Longitudinal Control is the default longitudinal control for this platform.") ACC_ENABLED_DESCRIPTION = tr_noop("Enable custom Short & Long press increments for cruise speed increase/decrease.") -ACC_NOLONG_DESCRIPTION = tr_noop("This feature can only be used with sunnypilot longitudinal control enabled.") +ACC_NOLONG_DESCRIPTION = tr_noop("This feature can only be used with openpilot longitudinal control enabled.") ACC_PCMCRUISE_DISABLED_DESCRIPTION = tr_noop("This feature is not supported on this platform due to vehicle limitations.") ONROAD_ONLY_DESCRIPTION = tr_noop("Start the vehicle to check vehicle compatibility.") @@ -84,7 +84,7 @@ def _initialize_items(self): self.dec_toggle = toggle_item_sp( title=tr("Enable Dynamic Experimental Control"), - description=tr("Enable toggle to allow the model to determine when to use sunnypilot ACC or sunnypilot End to End Longitudinal."), + description=tr("Enable toggle to allow the model to determine when to use openpilot ACC or openpilot End to End Longitudinal."), param="DynamicExperimentalControl") items = [ diff --git a/selfdrive/ui/sunnypilot/layouts/settings/developer.py b/selfdrive/ui/sunnypilot/layouts/settings/developer.py index 4cac66e316..8bdfd8c39d 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/developer.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/developer.py @@ -37,7 +37,7 @@ def __init__(self): def _initialize_items(self): self.show_advanced_controls = toggle_item_sp(tr("Show Advanced Controls"), - tr("Toggle visibility of advanced sunnypilot controls.
This only changes the visibility of the toggles; " + + tr("Toggle visibility of advanced bluepilot controls.
This only changes the visibility of the toggles; " + "it does not change the actual enabled/disabled state."), param="ShowAdvancedControls") self.enable_github_runner_toggle = toggle_item_sp(tr("GitHub Runner Service"), tr("Enables or disables the GitHub runner service."), @@ -50,7 +50,7 @@ def _initialize_items(self): self.prebuilt_toggle = toggle_item_sp(tr("Quickboot Mode"), "", param="QuickBootToggle", callback=self._on_prebuilt_toggled) - self.error_log_btn = button_item(tr("Error Log"), tr("VIEW"), tr("View the error log for sunnypilot crashes."), callback=self._on_error_log_clicked) + self.error_log_btn = button_item(tr("Error Log"), tr("VIEW"), tr("View the error log for bluepilot crashes."), callback=self._on_error_log_clicked) self.items: list = [self.show_advanced_controls, self.enable_github_runner_toggle, self.enable_copyparty_toggle, self.prebuilt_toggle, self.error_log_btn,] diff --git a/selfdrive/ui/sunnypilot/layouts/settings/device.py b/selfdrive/ui/sunnypilot/layouts/settings/device.py index 1fb9314739..b7794ce1e8 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/device.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/device.py @@ -160,7 +160,7 @@ def _second_confirm(result: int): )) gui_app.push_widget(ConfirmDialog( - text=tr("Are you sure you want to reset all sunnypilot settings to default? Once the settings are reset, there is no going back."), + text=tr("Are you sure you want to reset all bluepilot settings to default? Once the settings are reset, there is no going back."), confirm_text=tr("Reset"), callback=_second_confirm )) diff --git a/selfdrive/ui/sunnypilot/layouts/settings/steering.py b/selfdrive/ui/sunnypilot/layouts/settings/steering.py index a5cd626483..fe1bbd1957 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/steering.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/steering.py @@ -84,7 +84,7 @@ def _initialize_items(self): self._torque_control_toggle = toggle_item_sp( param="EnforceTorqueControl", title=lambda: tr("Enforce Torque Lateral Control"), - description=lambda: tr("Enable this to enforce sunnypilot to steer with Torque lateral control."), + description=lambda: tr("Enable this to enforce bluepilot to steer with Torque lateral control."), ) self._torque_customization_button = simple_button_item_sp( button_text=lambda: tr("Customize Torque Params"), diff --git a/selfdrive/ui/sunnypilot/layouts/settings/sunnylink.py b/selfdrive/ui/sunnypilot/layouts/settings/sunnylink.py index 1d9b99d5fd..053242810e 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/sunnylink.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/sunnylink.py @@ -223,13 +223,13 @@ def _handle_pair_btn(self, sponsor_pairing: bool = False): gui_app.push_widget(self._sunnylink_pairing_dialog) def _handle_backup_btn(self): - backup_dialog = ConfirmDialog(text=tr("Are you sure you want to backup your current sunnypilot settings?"), confirm_text="Backup", + backup_dialog = ConfirmDialog(text=tr("Are you sure you want to backup your current bluepilot settings?"), confirm_text="Backup", callback=self._backup_handler) gui_app.push_widget(backup_dialog) def _handle_restore_btn(self): self._restore_btn.set_enabled(False) - restore_dialog = ConfirmDialog(text=tr("Are you sure you want to restore the last backed up sunnypilot settings?"), + restore_dialog = ConfirmDialog(text=tr("Are you sure you want to restore the last backed up bluepilot settings?"), confirm_text="Restore", callback=self._restore_handler) gui_app.push_widget(restore_dialog) diff --git a/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/hyundai.py b/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/hyundai.py index 20c9903a63..8f470c1c5f 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/hyundai.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/hyundai.py @@ -50,7 +50,7 @@ def update_settings(self): if not ui_state.is_offroad(): long_tuning_desc = tr("This feature is unavailable while the car is onroad.") elif not long_enabled: - long_tuning_desc = tr("This feature is unavailable because sunnypilot Longitudinal Control (Alpha) is not enabled.") + long_tuning_desc = tr("This feature is unavailable because openpilot Longitudinal Control (Alpha) is not enabled.") self.longitudinal_tuning_item.action_item.set_enabled(not longitudinal_tuning_disabled) self.longitudinal_tuning_item.set_description(long_tuning_desc) diff --git a/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/toyota.py b/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/toyota.py index 5a696466b1..c0d4534153 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/toyota.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/vehicle/brands/toyota.py @@ -14,7 +14,7 @@ ONROAD_ONLY_DESCRIPTION = tr_noop("Start the vehicle to check vehicle compatibility.") -SNG_HACK_UNAVAILABLE = tr_noop("sunnypilot Longitudinal Control must be available and enabled for your vehicle to use this feature.") +SNG_HACK_UNAVAILABLE = tr_noop("openpilot Longitudinal Control must be available and enabled for your vehicle to use this feature.") DESCRIPTIONS = { 'enforce_stock_longitudinal': tr_noop( diff --git a/selfdrive/ui/sunnypilot/layouts/settings/visuals.py b/selfdrive/ui/sunnypilot/layouts/settings/visuals.py index 84be5a26ab..671db4bbd9 100644 --- a/selfdrive/ui/sunnypilot/layouts/settings/visuals.py +++ b/selfdrive/ui/sunnypilot/layouts/settings/visuals.py @@ -13,8 +13,8 @@ CHEVRON_INFO_DESCRIPTION = { "enabled": tr_noop("Display useful metrics below the chevron that tracks the lead car " + - "only applicable to cars with sunnypilot longitudinal control."), - "disabled": tr_noop("This feature requires sunnypilot longitudinal control to be available.") + "only applicable to cars with openpilot longitudinal control."), + "disabled": tr_noop("This feature requires openpilot longitudinal control to be available.") } diff --git a/sunnypilot/sunnylink/settings_ui.json b/sunnypilot/sunnylink/settings_ui.json index d3a25d7887..76ccad3194 100644 --- a/sunnypilot/sunnylink/settings_ui.json +++ b/sunnypilot/sunnylink/settings_ui.json @@ -2261,6 +2261,12 @@ } ] }, + { + "key": "BPShowLiveDelayIndicator", + "widget": "toggle", + "title": "[Visuals] Show Steering Lag Calibration", + "description": "Display the steering lag calibration icon onroad until the estimate is done." + }, { "key": "BPAnimateSteeringWheel", "widget": "toggle", diff --git a/sunnypilot/sunnylink/settings_ui_src/pages/vehicle.yaml b/sunnypilot/sunnylink/settings_ui_src/pages/vehicle.yaml index 1c0134c41e..3d974b327c 100644 --- a/sunnypilot/sunnylink/settings_ui_src/pages/vehicle.yaml +++ b/sunnypilot/sunnylink/settings_ui_src/pages/vehicle.yaml @@ -127,6 +127,11 @@ sections: description: Display the confidence ball on the left side of the driving view. visibility: - $ref: '#/macros/hide_on_mici' + - key: BPShowLiveDelayIndicator + widget: toggle + title: '[Visuals] Show Steering Lag Calibration' + description: Display the steering lag calibration icon onroad until the estimate + is done. - key: BPAnimateSteeringWheel widget: toggle title: '[Visuals] Animate Steering Wheel'