fix(raylib): Show correct alert status (#35687)

* refactor: Import AlertStatus and AlertSize as vars

* fix: Get raw int value of alertSize and alertStatus enums
pull/35691/head
David 2 weeks ago committed by GitHub
parent 989278dfe7
commit 68bc36b1a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 35
      selfdrive/ui/onroad/alert_renderer.py

@ -9,6 +9,9 @@ from openpilot.system.ui.lib.text_measure import measure_text_cached
from openpilot.system.ui.lib.widget import Widget from openpilot.system.ui.lib.widget import Widget
from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.selfdrive.ui.ui_state import ui_state
AlertSize = log.SelfdriveState.AlertSize
AlertStatus = log.SelfdriveState.AlertStatus
ALERT_MARGIN = 40 ALERT_MARGIN = 40
ALERT_PADDING = 60 ALERT_PADDING = 60
ALERT_LINE_SPACING = 45 ALERT_LINE_SPACING = 45
@ -23,9 +26,9 @@ SELFDRIVE_UNRESPONSIVE_TIMEOUT = 10 # Seconds
# Constants # Constants
ALERT_COLORS = { ALERT_COLORS = {
log.SelfdriveState.AlertStatus.normal: rl.Color(0, 0, 0, 235), # Black AlertStatus.normal: rl.Color(0, 0, 0, 235), # Black
log.SelfdriveState.AlertStatus.userPrompt: rl.Color(0xFE, 0x8C, 0x34, 235), # Orange AlertStatus.userPrompt: rl.Color(0xFE, 0x8C, 0x34, 235), # Orange
log.SelfdriveState.AlertStatus.critical: rl.Color(0xC9, 0x22, 0x31, 235), # Red AlertStatus.critical: rl.Color(0xC9, 0x22, 0x31, 235), # Red
} }
@ -41,22 +44,22 @@ class Alert:
ALERT_STARTUP_PENDING = Alert( ALERT_STARTUP_PENDING = Alert(
text1="openpilot Unavailable", text1="openpilot Unavailable",
text2="Waiting to start", text2="Waiting to start",
size=log.SelfdriveState.AlertSize.mid, size=AlertSize.mid,
status=log.SelfdriveState.AlertStatus.normal, status=AlertStatus.normal,
) )
ALERT_CRITICAL_TIMEOUT = Alert( ALERT_CRITICAL_TIMEOUT = Alert(
text1="TAKE CONTROL IMMEDIATELY", text1="TAKE CONTROL IMMEDIATELY",
text2="System Unresponsive", text2="System Unresponsive",
size=log.SelfdriveState.AlertSize.full, size=AlertSize.full,
status=log.SelfdriveState.AlertStatus.critical, status=AlertStatus.critical,
) )
ALERT_CRITICAL_REBOOT = Alert( ALERT_CRITICAL_REBOOT = Alert(
text1="System Unresponsive", text1="System Unresponsive",
text2="Reboot Device", text2="Reboot Device",
size=log.SelfdriveState.AlertSize.full, size=AlertSize.full,
status=log.SelfdriveState.AlertStatus.critical, status=AlertStatus.critical,
) )
@ -93,7 +96,7 @@ class AlertRenderer(Widget):
return None return None
# Return current alert # Return current alert
return Alert(text1=ss.alertText1, text2=ss.alertText2, size=ss.alertSize, status=ss.alertStatus) return Alert(text1=ss.alertText1, text2=ss.alertText2, size=ss.alertSize.raw, status=ss.alertStatus.raw)
def _render(self, rect: rl.Rectangle) -> bool: def _render(self, rect: rl.Rectangle) -> bool:
alert = self.get_alert(ui_state.sm) alert = self.get_alert(ui_state.sm)
@ -113,10 +116,10 @@ class AlertRenderer(Widget):
return True return True
def _get_alert_rect(self, rect: rl.Rectangle, size: int) -> rl.Rectangle: def _get_alert_rect(self, rect: rl.Rectangle, size: int) -> rl.Rectangle:
if size == log.SelfdriveState.AlertSize.full: if size == AlertSize.full:
return rect return rect
height = (ALERT_FONT_MEDIUM + 2 * ALERT_PADDING if size == log.SelfdriveState.AlertSize.small else height = (ALERT_FONT_MEDIUM + 2 * ALERT_PADDING if size == AlertSize.small else
ALERT_FONT_BIG + ALERT_LINE_SPACING + ALERT_FONT_SMALL + 2 * ALERT_PADDING) ALERT_FONT_BIG + ALERT_LINE_SPACING + ALERT_FONT_SMALL + 2 * ALERT_PADDING)
return rl.Rectangle( return rl.Rectangle(
@ -127,19 +130,19 @@ class AlertRenderer(Widget):
) )
def _draw_background(self, rect: rl.Rectangle, alert: Alert) -> None: def _draw_background(self, rect: rl.Rectangle, alert: Alert) -> None:
color = ALERT_COLORS.get(alert.status, ALERT_COLORS[log.SelfdriveState.AlertStatus.normal]) color = ALERT_COLORS.get(alert.status, ALERT_COLORS[AlertStatus.normal])
if alert.size != log.SelfdriveState.AlertSize.full: if alert.size != AlertSize.full:
roundness = ALERT_BORDER_RADIUS / (min(rect.width, rect.height) / 2) roundness = ALERT_BORDER_RADIUS / (min(rect.width, rect.height) / 2)
rl.draw_rectangle_rounded(rect, roundness, 10, color) rl.draw_rectangle_rounded(rect, roundness, 10, color)
else: else:
rl.draw_rectangle_rec(rect, color) rl.draw_rectangle_rec(rect, color)
def _draw_text(self, rect: rl.Rectangle, alert: Alert) -> None: def _draw_text(self, rect: rl.Rectangle, alert: Alert) -> None:
if alert.size == log.SelfdriveState.AlertSize.small: if alert.size == AlertSize.small:
self._draw_centered(alert.text1, rect, self.font_bold, ALERT_FONT_MEDIUM) self._draw_centered(alert.text1, rect, self.font_bold, ALERT_FONT_MEDIUM)
elif alert.size == log.SelfdriveState.AlertSize.mid: elif alert.size == AlertSize.mid:
self._draw_centered(alert.text1, rect, self.font_bold, ALERT_FONT_BIG, center_y=False) self._draw_centered(alert.text1, rect, self.font_bold, ALERT_FONT_BIG, center_y=False)
rect.y += ALERT_FONT_BIG + ALERT_LINE_SPACING rect.y += ALERT_FONT_BIG + ALERT_LINE_SPACING
self._draw_centered(alert.text2, rect, self.font_regular, ALERT_FONT_SMALL, center_y=False) self._draw_centered(alert.text2, rect, self.font_regular, ALERT_FONT_SMALL, center_y=False)

Loading…
Cancel
Save