ui: add timeout check for unresponsive system detection (#35433)

add time out to check if messages have stopped arriving
pull/35436/head
Dean Lee 1 week ago committed by GitHub
parent 6f6adc10a8
commit f78ba72a85
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 28
      selfdrive/ui/onroad/alert_renderer.py

@ -3,7 +3,7 @@ import pyray as rl
from dataclasses import dataclass from dataclasses import dataclass
from cereal import messaging, log from cereal import messaging, log
from openpilot.system.hardware import TICI from openpilot.system.hardware import TICI
from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.application import gui_app, FontWeight, DEBUG_FPS
from openpilot.system.ui.lib.label import gui_text_box from openpilot.system.ui.lib.label import gui_text_box
from openpilot.selfdrive.ui.ui_state import ui_state from openpilot.selfdrive.ui.ui_state import ui_state
@ -70,17 +70,21 @@ class AlertRenderer:
"""Generate the current alert based on selfdrive state.""" """Generate the current alert based on selfdrive state."""
ss = sm['selfdriveState'] ss = sm['selfdriveState']
# Check if waiting to start # Check if selfdriveState messages have stopped arriving
if sm.recv_frame['selfdriveState'] < ui_state.started_frame: if not sm.updated['selfdriveState']:
return ALERT_STARTUP_PENDING recv_frame = sm.recv_frame['selfdriveState']
if (sm.frame - recv_frame) > 5 * DEBUG_FPS:
# Handle selfdrive timeout # Check if waiting to start
if TICI: if recv_frame < ui_state.started_frame:
ss_missing = time.monotonic() - sm.recv_time['selfdriveState'] return ALERT_STARTUP_PENDING
if ss_missing > SELFDRIVE_STATE_TIMEOUT:
if ss.enabled and (ss_missing - SELFDRIVE_STATE_TIMEOUT) < SELFDRIVE_UNRESPONSIVE_TIMEOUT: # Handle selfdrive timeout
return ALERT_CRITICAL_TIMEOUT if TICI:
return ALERT_CRITICAL_REBOOT ss_missing = time.monotonic() - sm.recv_time['selfdriveState']
if ss_missing > SELFDRIVE_STATE_TIMEOUT:
if ss.enabled and (ss_missing - SELFDRIVE_STATE_TIMEOUT) < SELFDRIVE_UNRESPONSIVE_TIMEOUT:
return ALERT_CRITICAL_TIMEOUT
return ALERT_CRITICAL_REBOOT
# No alert if size is none # No alert if size is none
if ss.alertSize == 0: if ss.alertSize == 0:

Loading…
Cancel
Save