This commit is contained in:
royjr
2026-07-14 14:49:53 -04:00
parent 27d348d364
commit 9a7d28c672
3 changed files with 27 additions and 12 deletions
+10 -10
View File
@@ -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()
+14 -1
View File
@@ -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:
@@ -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():