From 572ebe35ecd26ee626cc61ca7e67c02999747cd7 Mon Sep 17 00:00:00 2001 From: royjr Date: Tue, 14 Jul 2026 14:54:36 -0400 Subject: [PATCH] ui --- opendbc_repo | 2 +- selfdrive/ui/mici/onroad/augmented_road_view.py | 14 ++++++++------ selfdrive/ui/sunnypilot/onroad/radar_tracks.py | 9 ++++----- .../ui/sunnypilot/onroad/test_radar_tracks.py | 13 +++++++------ 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/opendbc_repo b/opendbc_repo index f13fb2d2e9..3e56929032 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit f13fb2d2e93a2266fa35d7154b6b14647a31cd5a +Subproject commit 3e569290320cbfdeff856ac9e766392019a9a261 diff --git a/selfdrive/ui/mici/onroad/augmented_road_view.py b/selfdrive/ui/mici/onroad/augmented_road_view.py index fd21f97087..c8d43f5ecc 100644 --- a/selfdrive/ui/mici/onroad/augmented_road_view.py +++ b/selfdrive/ui/mici/onroad/augmented_road_view.py @@ -160,9 +160,9 @@ 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("range: none\ntracks: none", 26, FontWeight.SEMI_BOLD, + self._radar_tracks_label = UnifiedLabel("none", 26, FontWeight.SEMI_BOLD, text_color=rl.Color(0, 255, 64, 255), - alignment=rl.GuiTextAlignment.TEXT_ALIGN_LEFT, + alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT, alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP, wrap_text=False) @@ -176,10 +176,10 @@ class AugmentedRoadView(CameraView): super()._update_state() if ui_state.sm.updated["liveTracks"]: - status = format_radar_tracks_onroad_status(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else "range: none\ntracks: none" + status = format_radar_tracks_onroad_status(ui_state.sm["liveTracks"]) if ui_state.sm.valid["liveTracks"] else "none" self._radar_tracks_label.set_text(status) elif not ui_state.sm.alive["liveTracks"]: - self._radar_tracks_label.set_text("range: none\ntracks: none") + self._radar_tracks_label.set_text("none") # update offroad label if ui_state.panda_type == log.PandaState.PandaType.unknown: @@ -233,11 +233,13 @@ class AugmentedRoadView(CameraView): rl.draw_texture_ex(self._fade_texture, rl.Vector2(self._content_rect.x, self._content_rect.y), 0.0, 1.0, rl.WHITE) if ui_state.radar_tracks: + radar_status_width = self._content_rect.width - 90 + radar_status_height = max(42, self._radar_tracks_label.get_content_height(int(radar_status_width - 16)) + 10) radar_status_rect = rl.Rectangle( self._content_rect.x + 78, self._content_rect.y + 8, - self._content_rect.width - 90, - 70, + radar_status_width, + radar_status_height, ) rl.draw_rectangle_rounded(radar_status_rect, 0.5, 8, rl.Color(0, 0, 0, 170)) self._radar_tracks_label.render(rl.Rectangle( diff --git a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py index c469e957f2..5952976a35 100644 --- a/selfdrive/ui/sunnypilot/onroad/radar_tracks.py +++ b/selfdrive/ui/sunnypilot/onroad/radar_tracks.py @@ -24,12 +24,11 @@ def format_radar_tracks_status(live_tracks) -> str: def format_radar_tracks_onroad_status(live_tracks) -> str: - ranges = _radar_track_ranges(live_tracks) - if not ranges: - return "range: none\ntracks: none" + sources = sorted(live_tracks.trackSources, key=lambda source: (source.startAddress, source.endAddress, source.bus)) + if not sources: + return "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)}" + return "\n".join(f"0x{source.startAddress:X}-0x{source.endAddress:X} - {source.trackCount}" for source in sources) class RadarTracks: diff --git a/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py b/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py index cd34f80591..c777a119eb 100644 --- a/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py +++ b/selfdrive/ui/sunnypilot/onroad/test_radar_tracks.py @@ -7,25 +7,26 @@ 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" + assert format_radar_tracks_onroad_status(live_tracks) == "none" def test_format_radar_tracks_status_range_and_count(): live_tracks = car.RadarData.new_message() - live_tracks.trackSources = [{"startAddress": 0x500, "endAddress": 0x51F, "bus": 1}] + live_tracks.trackSources = [{"startAddress": 0x500, "endAddress": 0x51F, "bus": 1, "trackCount": 2}] 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" + assert format_radar_tracks_onroad_status(live_tracks) == "0x500-0x51F - 2" def test_format_radar_tracks_status_deduplicates_and_sorts_ranges(): live_tracks = car.RadarData.new_message() live_tracks.trackSources = [ - {"startAddress": 0x500, "endAddress": 0x51F, "bus": 2}, - {"startAddress": 0x210, "endAddress": 0x21F, "bus": 1}, - {"startAddress": 0x500, "endAddress": 0x51F, "bus": 0}, + {"startAddress": 0x500, "endAddress": 0x51F, "bus": 2, "trackCount": 3}, + {"startAddress": 0x210, "endAddress": 0x21F, "bus": 1, "trackCount": 1}, + {"startAddress": 0x500, "endAddress": 0x51F, "bus": 0, "trackCount": 2}, ] live_tracks.init("points", 1) assert format_radar_tracks_status(live_tracks) == "0x210-0x21F, 0x500-0x51F · 1 track" + assert format_radar_tracks_onroad_status(live_tracks) == "0x210-0x21F - 1\n0x500-0x51F - 2\n0x500-0x51F - 3"