Files
StarPilot/selfdrive/ui/onroad/starpilot/widgets/driver_monitor.py
T
2026-07-19 17:57:33 -04:00

36 lines
1.4 KiB
Python

import pyray as rl
from cereal import log, custom
from openpilot.selfdrive.ui.ui_state import ui_state
from openpilot.selfdrive.ui.onroad.starpilot.widgets.base import LayoutWidget
from openpilot.selfdrive.ui.onroad.driver_state import DriverStateRenderer
AlertSize = log.SelfdriveState.AlertSize
class DriverMonitorWidget(LayoutWidget):
def __init__(self, renderer: DriverStateRenderer):
super().__init__("driver_monitor", priority=2)
self._renderer = renderer
self._child(self._renderer)
self._renderer.auto_position = False
@property
def is_visible(self) -> bool:
sm = ui_state.sm
alert_ok = sm["selfdriveState"].alertSize == AlertSize.none
if alert_ok:
starpilot_ss = sm["starpilotSelfdriveState"] if sm.valid.get("starpilotSelfdriveState", False) else None
if starpilot_ss:
alert_ok = starpilot_ss.alertSize == custom.StarPilotSelfdriveState.AlertSize.none
data_fresh = sm.recv_frame["driverStateV2"] > ui_state.started_frame
not_hidden = not ui_state.starpilot_toggles.get("hide_dm_icon", False)
return bool(alert_ok and data_fresh and not_hidden)
def get_size(self) -> tuple[float, float]:
return 192.0, 192.0
def _render(self, rect: rl.Rectangle) -> None:
self._renderer.position_x = rect.x + rect.width / 2
self._renderer.position_y = rect.y + rect.height / 2
self._renderer.render(rect)