two solutions

audible-cancel
Shane Smiskol 1 month ago
parent a17bdde523
commit 7c937ec848
  1. 16
      selfdrive/selfdrived/alertmanager.py
  2. 12
      selfdrive/selfdrived/events.py

@ -39,6 +39,7 @@ class AlertManager:
def __init__(self):
self.alerts: dict[str, AlertEntry] = defaultdict(AlertEntry)
self.current_alert = EmptyAlert
self.current_audible_alert = EmptyAlert
def add_many(self, frame: int, alerts: list[Alert]) -> None:
for alert in alerts:
@ -52,6 +53,7 @@ class AlertManager:
def process_alerts(self, frame: int, clear_event_types: set):
ae = AlertEntry()
ae_audible = AlertEntry()
for v in self.alerts.values():
if not v.alert:
continue
@ -63,5 +65,19 @@ class AlertManager:
greater = ae.alert is None or (v.alert.priority, v.start_frame) > (ae.alert.priority, ae.start_frame)
if v.active(frame) and greater:
ae = v
ae_audible = v
for v in self.alerts.values():
if not v.alert:
continue
if v.alert.event_type in clear_event_types:
v.end_frame = -1
# sort by priority first and then by start_frame
greater = ae_audible.alert is None or (v.alert.priority, v.start_frame) > (ae_audible.alert.priority, ae_audible.start_frame)
if v.active(frame) and v.alert.alert_size == AlertSize.none and greater:
ae_audible = v
self.current_alert = ae.alert if ae.alert is not None else EmptyAlert
self.current_alert = ae_audible.alert if ae_audible.alert is not None else EmptyAlert

@ -192,10 +192,11 @@ class NormalPermanentAlert(Alert):
class StartupAlert(Alert):
def __init__(self, alert_text_1: str, alert_text_2: str = "Always keep hands on wheel and eyes on road", alert_status=AlertStatus.normal):
def __init__(self, alert_text_1: str, alert_text_2: str = "Always keep hands on wheel and eyes on road", alert_status=AlertStatus.normal,
audible_alert: car.CarControl.HUDControl.AudibleAlert = AudibleAlert.none):
super().__init__(alert_text_1, alert_text_2,
alert_status, AlertSize.mid,
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 5.),
Priority.LOWER, VisualAlert.none, audible_alert, 5.),
# ********** helper functions **********
@ -229,7 +230,12 @@ def startup_master_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM
if "REPLAY" in os.environ:
branch = "replay"
return StartupAlert("WARNING: This branch is not tested", branch, alert_status=AlertStatus.userPrompt)
# TODO: also need cb for other startup alerts
audible_alert = AudibleAlert.none
if CS.cruiseState.enabled:
audible_alert = AudibleAlert.disengage
return StartupAlert("WARNING: This branch is not tested", branch, alert_status=AlertStatus.userPrompt, audible_alert=audible_alert)
def below_engage_speed_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert:
return NoEntryAlert(f"Drive above {get_display_speed(CP.minEnableSpeed, metric)} to engage")

Loading…
Cancel
Save