|
|
|
@ -1,6 +1,8 @@ |
|
|
|
|
from functools import total_ordering |
|
|
|
|
from typing import Dict, Union, Callable, Any |
|
|
|
|
|
|
|
|
|
from cereal import log, car |
|
|
|
|
import cereal.messaging as messaging |
|
|
|
|
from common.realtime import DT_CTRL |
|
|
|
|
from selfdrive.config import Conversions as CV |
|
|
|
|
from selfdrive.locationd.calibrationd import MIN_SPEED_FILTER |
|
|
|
@ -97,18 +99,18 @@ class Events: |
|
|
|
|
@total_ordering |
|
|
|
|
class Alert: |
|
|
|
|
def __init__(self, |
|
|
|
|
alert_text_1, |
|
|
|
|
alert_text_2, |
|
|
|
|
alert_text_1: str, |
|
|
|
|
alert_text_2: str, |
|
|
|
|
alert_status, |
|
|
|
|
alert_size, |
|
|
|
|
alert_priority, |
|
|
|
|
visual_alert, |
|
|
|
|
audible_alert, |
|
|
|
|
duration_sound, |
|
|
|
|
duration_hud_alert, |
|
|
|
|
duration_text, |
|
|
|
|
alert_rate=0., |
|
|
|
|
creation_delay=0.): |
|
|
|
|
duration_sound: float, |
|
|
|
|
duration_hud_alert: float, |
|
|
|
|
duration_text: float, |
|
|
|
|
alert_rate: float = 0., |
|
|
|
|
creation_delay: float = 0.): |
|
|
|
|
|
|
|
|
|
self.alert_type = "" |
|
|
|
|
self.alert_text_1 = alert_text_1 |
|
|
|
@ -131,14 +133,14 @@ class Alert: |
|
|
|
|
tst = car.CarControl.new_message() |
|
|
|
|
tst.hudControl.visualAlert = self.visual_alert |
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
|
def __str__(self) -> str: |
|
|
|
|
return self.alert_text_1 + "/" + self.alert_text_2 + " " + str(self.alert_priority) + " " + str( |
|
|
|
|
self.visual_alert) + " " + str(self.audible_alert) |
|
|
|
|
|
|
|
|
|
def __gt__(self, alert2): |
|
|
|
|
def __gt__(self, alert2) -> bool: |
|
|
|
|
return self.alert_priority > alert2.alert_priority |
|
|
|
|
|
|
|
|
|
def __eq__(self, alert2): |
|
|
|
|
def __eq__(self, alert2) -> bool: |
|
|
|
|
return self.alert_priority == alert2.alert_priority |
|
|
|
|
|
|
|
|
|
class NoEntryAlert(Alert): |
|
|
|
@ -174,7 +176,7 @@ class EngagementAlert(Alert): |
|
|
|
|
|
|
|
|
|
# ********** alert callback functions ********** |
|
|
|
|
|
|
|
|
|
def below_steer_speed_alert(CP, sm, metric): |
|
|
|
|
def below_steer_speed_alert(CP: car.CarParams, sm: messaging.SubMaster, metric: bool) -> Alert: |
|
|
|
|
speed = int(round(CP.minSteerSpeed * (CV.MS_TO_KPH if metric else CV.MS_TO_MPH))) |
|
|
|
|
unit = "km/h" if metric else "mph" |
|
|
|
|
return Alert( |
|
|
|
@ -183,7 +185,7 @@ def below_steer_speed_alert(CP, sm, metric): |
|
|
|
|
AlertStatus.userPrompt, AlertSize.mid, |
|
|
|
|
Priority.MID, VisualAlert.steerRequired, AudibleAlert.none, 0., 0.4, .3) |
|
|
|
|
|
|
|
|
|
def calibration_incomplete_alert(CP, sm, metric): |
|
|
|
|
def calibration_incomplete_alert(CP: car.CarParams, sm: messaging.SubMaster, metric: bool) -> Alert: |
|
|
|
|
speed = int(MIN_SPEED_FILTER * (CV.MS_TO_KPH if metric else CV.MS_TO_MPH)) |
|
|
|
|
unit = "km/h" if metric else "mph" |
|
|
|
|
return Alert( |
|
|
|
@ -192,7 +194,7 @@ def calibration_incomplete_alert(CP, sm, metric): |
|
|
|
|
AlertStatus.normal, AlertSize.mid, |
|
|
|
|
Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2) |
|
|
|
|
|
|
|
|
|
def no_gps_alert(CP, sm, metric): |
|
|
|
|
def no_gps_alert(CP: car.CarParams, sm: messaging.SubMaster, metric: bool) -> Alert: |
|
|
|
|
gps_integrated = sm['health'].hwType in [log.HealthData.HwType.uno, log.HealthData.HwType.dos] |
|
|
|
|
return Alert( |
|
|
|
|
"Poor GPS reception", |
|
|
|
@ -200,13 +202,13 @@ def no_gps_alert(CP, sm, metric): |
|
|
|
|
AlertStatus.normal, AlertSize.mid, |
|
|
|
|
Priority.LOWER, VisualAlert.none, AudibleAlert.none, 0., 0., .2, creation_delay=300.) |
|
|
|
|
|
|
|
|
|
def wrong_car_mode_alert(CP, sm, metric): |
|
|
|
|
def wrong_car_mode_alert(CP: car.CarParams, sm: messaging.SubMaster, metric: bool) -> Alert: |
|
|
|
|
text = "Cruise Mode Disabled" |
|
|
|
|
if CP.carName == "honda": |
|
|
|
|
text = "Main Switch Off" |
|
|
|
|
return NoEntryAlert(text, duration_hud_alert=0.) |
|
|
|
|
|
|
|
|
|
EVENTS = { |
|
|
|
|
EVENTS: Dict[int, Dict[str, Union[Alert, Callable[[Any, messaging.SubMaster, bool], Alert]]]] = { |
|
|
|
|
# ********** events with no alerts ********** |
|
|
|
|
|
|
|
|
|
# ********** events only containing alerts displayed in all states ********** |
|
|
|
@ -287,7 +289,6 @@ EVENTS = { |
|
|
|
|
EventName.communityFeatureDisallowed: { |
|
|
|
|
# LOW priority to overcome Cruise Error |
|
|
|
|
ET.PERMANENT: Alert( |
|
|
|
|
"", |
|
|
|
|
"Community Feature Detected", |
|
|
|
|
"Enable Community Features in Developer Settings", |
|
|
|
|
AlertStatus.normal, AlertSize.mid, |
|
|
|
|