From 9a7d28c67294430ec36ab22dcc3db4ed0bdea0ee Mon Sep 17 00:00:00 2001 From: royjr Date: Tue, 14 Jul 2026 14:49:53 -0400 Subject: [PATCH] big --- .../ui/mici/onroad/augmented_road_view.py | 20 +++++++++---------- .../ui/sunnypilot/onroad/radar_tracks.py | 15 +++++++++++++- .../ui/sunnypilot/onroad/test_radar_tracks.py | 4 +++- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/selfdrive/ui/mici/onroad/augmented_road_view.py b/selfdrive/ui/mici/onroad/augmented_road_view.py index f5993bda7f..fd21f97087 100644 --- a/selfdrive/ui/mici/onroad/augmented_road_view.py +++ b/selfdrive/ui/mici/onroad/augmented_road_view.py @@ -10,7 +10,7 @@ from openpilot.selfdrive.ui.mici.onroad.hud_renderer import HudRenderer from openpilot.selfdrive.ui.mici.onroad.model_renderer import ModelRenderer from openpilot.selfdrive.ui.mici.onroad.confidence_ball import ConfidenceBall from openpilot.selfdrive.ui.mici.onroad.cameraview import CameraView -from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_status +from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_status from openpilot.system.ui.lib.application import FontWeight, gui_app, MousePos, MouseEvent from openpilot.system.ui.widgets.label import UnifiedLabel from openpilot.system.ui.widgets import Widget @@ -160,10 +160,10 @@ class AugmentedRoadView(CameraView): text_color=rl.Color(255, 255, 255, int(255 * 0.9)), alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE) - self._radar_tracks_label = UnifiedLabel("radar: none", 18, FontWeight.SEMI_BOLD, + self._radar_tracks_label = UnifiedLabel("range: none\ntracks: none", 26, FontWeight.SEMI_BOLD, text_color=rl.Color(0, 255, 64, 255), - alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, - alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_MIDDLE, + alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT, + alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP, wrap_text=False) self._fade_texture = gui_app.texture("icons_mici/onroad/onroad_fade.png") @@ -176,10 +176,10 @@ class AugmentedRoadView(CameraView): super()._update_state() if ui_state.sm.updated["liveTracks"]: - status = format_radar_tracks_status(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else "none" - self._radar_tracks_label.set_text(f"radar: {status}") + status = format_radar_tracks_onroad_status(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else "range: none\ntracks: none" + self._radar_tracks_label.set_text(status) elif not ui_state.sm.alive["liveTracks"]: - self._radar_tracks_label.set_text("radar: none") + self._radar_tracks_label.set_text("range: none\ntracks: none") # update offroad label if ui_state.panda_type == log.PandaState.PandaType.unknown: @@ -237,14 +237,14 @@ class AugmentedRoadView(CameraView): self._content_rect.x + 78, self._content_rect.y + 8, self._content_rect.width - 90, - 34, + 70, ) rl.draw_rectangle_rounded(radar_status_rect, 0.5, 8, rl.Color(0, 0, 0, 170)) self._radar_tracks_label.render(rl.Rectangle( radar_status_rect.x + 8, - radar_status_rect.y, + radar_status_rect.y + 5, radar_status_rect.width - 16, - radar_status_rect.height, + radar_status_rect.height - 10, )) alert_to_render, not_animating_out = self._alert_renderer.will_render() diff --git a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py index 721a2dd15b..c469e957f2 100644 --- a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py +++ b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py @@ -8,8 +8,12 @@ import math import pyray as rl +def _radar_track_ranges(live_tracks) -> list[tuple[int, int]]: + return sorted({(source.startAddress, source.endAddress) for source in live_tracks.trackSources}) + + def format_radar_tracks_status(live_tracks) -> str: - ranges = sorted({(source.startAddress, source.endAddress) for source in live_tracks.trackSources}) + ranges = _radar_track_ranges(live_tracks) if not ranges: return "none" @@ -19,6 +23,15 @@ def format_radar_tracks_status(live_tracks) -> str: return f"{range_text} · {track_count} {track_label}" +def format_radar_tracks_onroad_status(live_tracks) -> str: + ranges = _radar_track_ranges(live_tracks) + if not ranges: + return "range: none\ntracks: none" + + range_text = ", ".join(f"0x{start:X}-0x{end:X}" for start, end in ranges) + return f"range: {range_text}\ntracks: {len(live_tracks.points)}" + + class RadarTracks: def draw_radar_tracks(self, live_tracks, map_to_screen, path_offset_z, track_size=6): for track in live_tracks.points: diff --git a/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py index 7cb75c4b49..cd34f80591 100644 --- a/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py +++ b/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py @@ -1,12 +1,13 @@ from cereal import car -from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_status +from openpilot.selfdrive.ui.sunnypilot.onroad.radar_tracks import format_radar_tracks_onroad_status, format_radar_tracks_status def test_format_radar_tracks_status_none(): live_tracks = car.RadarData.new_message() assert format_radar_tracks_status(live_tracks) == "none" + assert format_radar_tracks_onroad_status(live_tracks) == "range: none\ntracks: none" def test_format_radar_tracks_status_range_and_count(): @@ -15,6 +16,7 @@ def test_format_radar_tracks_status_range_and_count(): live_tracks.init("points", 2) assert format_radar_tracks_status(live_tracks) == "0x500-0x51F · 2 tracks" + assert format_radar_tracks_onroad_status(live_tracks) == "range: 0x500-0x51F\ntracks: 2" def test_format_radar_tracks_status_deduplicates_and_sorts_ranges():