From c2a23fa24c94fd8c9432fadbaa1f72152733d6c5 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 17 Jan 2022 13:57:53 -0800 Subject: [PATCH] clear no entry alerts if engaged (#23559) * clear no entry alerts if engaged * fix test old-commit-hash: 59894a66669f72dd65acf8f7556c43007d1af68e --- selfdrive/controls/controlsd.py | 9 +++++++-- selfdrive/controls/lib/alertmanager.py | 4 ++-- selfdrive/controls/lib/tests/test_alertmanager.py | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index c6f8edad41..42f292c5ca 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -611,10 +611,15 @@ class Controls: if hudControl.rightLaneDepart or hudControl.leftLaneDepart: self.events.add(EventName.ldw) - clear_event = ET.WARNING if ET.WARNING not in self.current_alert_types else None + clear_event_types = set() + if ET.WARNING not in self.current_alert_types: + clear_event_types.add(ET.WARNING) + if self.enabled: + clear_event_types.add(ET.NO_ENTRY) + alerts = self.events.create_alerts(self.current_alert_types, [self.CP, self.sm, self.is_metric, self.soft_disable_timer]) self.AM.add_many(self.sm.frame, alerts) - current_alert = self.AM.process_alerts(self.sm.frame, clear_event) + current_alert = self.AM.process_alerts(self.sm.frame, clear_event_types) if current_alert: hudControl.visualAlert = current_alert.visual_alert diff --git a/selfdrive/controls/lib/alertmanager.py b/selfdrive/controls/lib/alertmanager.py index 4694d74bff..2dad05e214 100644 --- a/selfdrive/controls/lib/alertmanager.py +++ b/selfdrive/controls/lib/alertmanager.py @@ -47,13 +47,13 @@ class AlertManager: min_end_frame = entry.start_frame + alert.duration entry.end_frame = max(frame + 1, min_end_frame) - def process_alerts(self, frame: int, clear_event_type=None) -> Optional[Alert]: + def process_alerts(self, frame: int, clear_event_types: set) -> Optional[Alert]: current_alert = AlertEntry() for v in self.alerts.values(): if not v.alert: continue - if clear_event_type and v.alert.event_type == clear_event_type: + if v.alert.event_type in clear_event_types: v.end_frame = -1 # sort by priority first and then by start_frame diff --git a/selfdrive/controls/lib/tests/test_alertmanager.py b/selfdrive/controls/lib/tests/test_alertmanager.py index 2b606390c7..6c1b6fc4a2 100755 --- a/selfdrive/controls/lib/tests/test_alertmanager.py +++ b/selfdrive/controls/lib/tests/test_alertmanager.py @@ -34,7 +34,7 @@ class TestAlertManager(unittest.TestCase): for frame in range(duration+10): if frame < add_duration: AM.add_many(frame, [alert, ]) - current_alert = AM.process_alerts(frame) + current_alert = AM.process_alerts(frame, {}) shown = current_alert is not None should_show = frame <= show_duration