From 1ec4b02c156ff146799f7da0d1db89be0fcbc03f Mon Sep 17 00:00:00 2001 From: royjr Date: Tue, 14 Jul 2026 15:39:14 -0400 Subject: [PATCH] better toggle --- selfdrive/ui/mici/layouts/main.py | 3 ++- .../ui/mici/layouts/settings/settings.py | 9 ++++++-- .../ui/mici/onroad/augmented_road_view.py | 22 ++++++++++++++++--- selfdrive/ui/sunnypilot/ui_state.py | 2 ++ 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/selfdrive/ui/mici/layouts/main.py b/selfdrive/ui/mici/layouts/main.py index e25b2840f7..a9f28675e2 100644 --- a/selfdrive/ui/mici/layouts/main.py +++ b/selfdrive/ui/mici/layouts/main.py @@ -32,7 +32,8 @@ class MiciMainLayout(Scroller): self._home_layout = MiciHomeLayout() self._alerts_layout = MiciOffroadAlerts() self._settings_layout = SettingsLayout() - self._car_onroad_layout = AugmentedRoadView(bookmark_callback=self._on_bookmark_clicked) + self._car_onroad_layout = AugmentedRoadView(bookmark_callback=self._on_bookmark_clicked, + radar_tracks_settings_callback=self._settings_layout.open_toggles) self._body_onroad_layout = BodyLayout() # Initialize widget rects diff --git a/selfdrive/ui/mici/layouts/settings/settings.py b/selfdrive/ui/mici/layouts/settings/settings.py index 4ccc5ba139..10490bc43c 100644 --- a/selfdrive/ui/mici/layouts/settings/settings.py +++ b/selfdrive/ui/mici/layouts/settings/settings.py @@ -19,9 +19,9 @@ class SettingsLayout(NavScroller): super().__init__() self._params = Params() - toggles_panel = TogglesLayoutMici() + self._toggles_panel = TogglesLayoutMici() toggles_btn = SettingsBigButton("toggles", "", gui_app.texture("icons_mici/settings.png", 64, 64)) - toggles_btn.set_click_callback(lambda: gui_app.push_widget(toggles_panel)) + toggles_btn.set_click_callback(lambda: gui_app.push_widget(self._toggles_panel)) network_panel = NetworkLayoutMici() network_btn = SettingsBigButton("network", "", gui_app.texture("icons_mici/settings/network/wifi_strength_full.png", 76, 56)) @@ -50,3 +50,8 @@ class SettingsLayout(NavScroller): ]) self._font_medium = gui_app.font(FontWeight.MEDIUM) + + def open_toggles(self) -> None: + if not gui_app.widget_in_stack(self): + gui_app.push_widget(self) + gui_app.push_widget(self._toggles_panel) diff --git a/selfdrive/ui/mici/onroad/augmented_road_view.py b/selfdrive/ui/mici/onroad/augmented_road_view.py index a4aa32d1bc..071018219b 100644 --- a/selfdrive/ui/mici/onroad/augmented_road_view.py +++ b/selfdrive/ui/mici/onroad/augmented_road_view.py @@ -134,9 +134,13 @@ class BookmarkIcon(Widget): class AugmentedRoadView(CameraView): - def __init__(self, bookmark_callback=None, stream_type: VisionStreamType = VisionStreamType.VISION_STREAM_ROAD): + def __init__(self, bookmark_callback=None, stream_type: VisionStreamType = VisionStreamType.VISION_STREAM_ROAD, + radar_tracks_settings_callback=None): super().__init__("camerad", stream_type) self._bookmark_callback = bookmark_callback + self._radar_tracks_settings_callback = radar_tracks_settings_callback + self._radar_tracks_settings_prompt = False + self._radar_status_rect = rl.Rectangle() self._set_placeholder_color(rl.BLACK) self.device_camera: DeviceCameraConfig | None = None @@ -181,10 +185,16 @@ class AugmentedRoadView(CameraView): super()._update_state() if ui_state.sm.updated["liveTracks"]: - status = format_radar_tracks_onroad_columns(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else ("", "none") + live_tracks = ui_state.sm["liveTracks"] + self._radar_tracks_settings_prompt = bool(live_tracks.radarTracksAvailable and ui_state.hyundai_radar_mode != 2) + if self._radar_tracks_settings_prompt: + status = ("", "radar tracks detected") + else: + status = format_radar_tracks_onroad_columns(live_tracks) if ui_state.sm.valid["liveTracks"] else ("", "none") self._radar_ranges_label.set_text(status[0]) self._radar_counts_label.set_text(status[1]) elif not ui_state.sm.alive["liveTracks"]: + self._radar_tracks_settings_prompt = False self._radar_ranges_label.set_text("") self._radar_counts_label.set_text("none") @@ -197,6 +207,11 @@ class AugmentedRoadView(CameraView): self._offroad_label.set_text("start the car to\nuse sunnypilot") def _handle_mouse_release(self, mouse_pos: MousePos): + if (self._radar_tracks_settings_prompt and self._radar_tracks_settings_callback is not None and + rl.check_collision_point_rec(mouse_pos, self._radar_status_rect)): + self._radar_tracks_settings_callback() + return + # Don't trigger click callback if bookmark was triggered if not self._bookmark_icon.interacting(): super()._handle_mouse_release(mouse_pos) @@ -254,12 +269,13 @@ class AugmentedRoadView(CameraView): self._radar_ranges_label.get_content_height(max(radar_range_width, 1)) + 10, self._radar_counts_label.get_content_height(radar_count_width) + 10, ) - radar_status_rect = rl.Rectangle( + self._radar_status_rect = rl.Rectangle( self._content_rect.x + self._content_rect.width - radar_status_width - 12, self._content_rect.y + 8, radar_status_width, radar_status_height, ) + radar_status_rect = self._radar_status_rect rl.draw_rectangle_rounded(radar_status_rect, 0.5, 8, rl.Color(0, 0, 0, 170)) self._radar_ranges_label.render(rl.Rectangle( radar_status_rect.x + radar_horizontal_padding, diff --git a/selfdrive/ui/sunnypilot/ui_state.py b/selfdrive/ui/sunnypilot/ui_state.py index a5dd65dd07..9b7f65a726 100644 --- a/selfdrive/ui/sunnypilot/ui_state.py +++ b/selfdrive/ui/sunnypilot/ui_state.py @@ -43,6 +43,7 @@ class UIStateSP: self.custom_interactive_timeout: int = 0 self.developer_ui = None self.hide_v_ego_ui: bool = False + self.hyundai_radar_mode: int = self.params.get("HyundaiRadar", return_default=True) self.onroad_brightness: int = 0 self.onroad_brightness_timer: int = 0 self.onroad_brightness_timer_param: int = 0 @@ -151,6 +152,7 @@ class UIStateSP: self.custom_interactive_timeout = self.params.get("InteractivityTimeout", return_default=True) self.developer_ui = self.params.get("DevUIInfo") self.hide_v_ego_ui = self.params.get_bool("HideVEgoUI") + self.hyundai_radar_mode = self.params.get("HyundaiRadar", return_default=True) self.onroad_brightness = int(float(self.params.get("OnroadScreenOffBrightness", return_default=True))) self.onroad_brightness_timer_param = self.params.get("OnroadScreenOffTimer", return_default=True) self.rainbow_path = self.params.get_bool("RainbowMode")