clear no entry alerts if engaged (#23559)

* clear no entry alerts if engaged

* fix test
old-commit-hash: 59894a6666
commatwo_master
Adeeb Shihadeh 3 years ago committed by GitHub
parent aa72de42c5
commit c2a23fa24c
  1. 9
      selfdrive/controls/controlsd.py
  2. 4
      selfdrive/controls/lib/alertmanager.py
  3. 2
      selfdrive/controls/lib/tests/test_alertmanager.py

@ -611,10 +611,15 @@ class Controls:
if hudControl.rightLaneDepart or hudControl.leftLaneDepart: if hudControl.rightLaneDepart or hudControl.leftLaneDepart:
self.events.add(EventName.ldw) 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]) 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) 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: if current_alert:
hudControl.visualAlert = current_alert.visual_alert hudControl.visualAlert = current_alert.visual_alert

@ -47,13 +47,13 @@ class AlertManager:
min_end_frame = entry.start_frame + alert.duration min_end_frame = entry.start_frame + alert.duration
entry.end_frame = max(frame + 1, min_end_frame) 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() current_alert = AlertEntry()
for v in self.alerts.values(): for v in self.alerts.values():
if not v.alert: if not v.alert:
continue 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 v.end_frame = -1
# sort by priority first and then by start_frame # sort by priority first and then by start_frame

@ -34,7 +34,7 @@ class TestAlertManager(unittest.TestCase):
for frame in range(duration+10): for frame in range(duration+10):
if frame < add_duration: if frame < add_duration:
AM.add_many(frame, [alert, ]) AM.add_many(frame, [alert, ])
current_alert = AM.process_alerts(frame) current_alert = AM.process_alerts(frame, {})
shown = current_alert is not None shown = current_alert is not None
should_show = frame <= show_duration should_show = frame <= show_duration

Loading…
Cancel
Save