You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
9.3 KiB
178 lines
9.3 KiB
alerts = []
|
|
keys = ["id",
|
|
"chime",
|
|
"beep",
|
|
"hud_alert",
|
|
"screen_chime",
|
|
"priority",
|
|
"text_line_1",
|
|
"text_line_2",
|
|
"duration_sound",
|
|
"duration_hud_alert",
|
|
"duration_text"]
|
|
|
|
|
|
#car chimes: enumeration from dbc file. Chimes are for alerts and warnings
|
|
class CM:
|
|
MUTE = 0
|
|
SINGLE = 3
|
|
DOUBLE = 4
|
|
REPEATED = 1
|
|
CONTINUOUS = 2
|
|
|
|
|
|
#car beepss: enumeration from dbc file. Beeps are for activ and deactiv
|
|
class BP:
|
|
MUTE = 0
|
|
SINGLE = 3
|
|
TRIPLE = 2
|
|
REPEATED = 1
|
|
|
|
|
|
# lert ids
|
|
class AI:
|
|
ENABLE = 0
|
|
DISABLE = 1
|
|
SEATBELT = 2
|
|
DOOR_OPEN = 3
|
|
PEDAL_PRESSED = 4
|
|
COMM_ISSUE = 5
|
|
ESP_OFF = 6
|
|
FCW = 7
|
|
STEER_ERROR = 8
|
|
BRAKE_ERROR = 9
|
|
CALIB_INCOMPLETE = 10
|
|
CALIB_INVALID = 11
|
|
GEAR_NOT_D = 12
|
|
MAIN_OFF = 13
|
|
STEER_SATURATED = 14
|
|
PCM_LOW_SPEED = 15
|
|
THERMAL_DEAD = 16
|
|
OVERHEAT = 17
|
|
HIGH_SPEED = 18
|
|
CONTROLSD_LAG = 19
|
|
STEER_ERROR_ID = 100
|
|
BRAKE_ERROR_ID = 101
|
|
PCM_MISMATCH_ID = 102
|
|
CTRL_MISMATCH_ID = 103
|
|
SEATBELT_SD = 200
|
|
DOOR_OPEN_SD = 201
|
|
COMM_ISSUE_SD = 202
|
|
ESP_OFF_SD = 203
|
|
THERMAL_DEAD_SD = 204
|
|
OVERHEAT_SD = 205
|
|
CONTROLSD_LAG_SD = 206
|
|
CALIB_INCOMPLETE_SD = 207
|
|
CALIB_INVALID_SD = 208
|
|
DRIVER_DISTRACTED = 300
|
|
|
|
class AH:
|
|
#[alert_idx, value]
|
|
# See dbc files for info on values"
|
|
NONE = [0, 0]
|
|
FCW = [1, 0x8]
|
|
STEER = [2, 1]
|
|
BRAKE_PRESSED = [3, 10]
|
|
GEAR_NOT_D = [4, 6]
|
|
SEATBELT = [5, 5]
|
|
SPEED_TOO_HIGH = [6, 8]
|
|
|
|
class ET:
|
|
ENABLE = 0
|
|
NO_ENTRY = 1
|
|
WARNING = 2
|
|
SOFT_DISABLE = 3
|
|
IMMEDIATE_DISABLE = 4
|
|
USER_DISABLE = 5
|
|
|
|
def process_alert(alert_id, alert, cur_time, sound_exp, hud_exp, text_exp, alert_p):
|
|
# INPUTS:
|
|
# alert_id is mapped to the alert properties in alert_database
|
|
# cur_time is current time
|
|
# sound_exp is when the alert beep/chime is supposed to end
|
|
# hud_exp is when the hud visual is supposed to end
|
|
# text_exp is when the alert text is supposed to disappear
|
|
# alert_p is the priority of the current alert
|
|
# CM, BP, AH are classes defined in alert_database and they respresents chimes, beeps and hud_alerts
|
|
if len(alert_id) > 0:
|
|
# take the alert with higher priority
|
|
alerts_present = filter(lambda a_id: a_id['id'] in alert_id, alerts)
|
|
alert = sorted(alerts_present, key=lambda k: k['priority'])[-1]
|
|
# check if we have a more important alert
|
|
if alert['priority'] > alert_p:
|
|
alert_p = alert['priority']
|
|
sound_exp = cur_time + alert['duration_sound']
|
|
hud_exp = cur_time + alert['duration_hud_alert']
|
|
text_exp = cur_time + alert['duration_text']
|
|
|
|
chime = CM.MUTE
|
|
beep = BP.MUTE
|
|
if cur_time < sound_exp:
|
|
chime = alert['chime']
|
|
beep = alert['beep']
|
|
|
|
hud_alert = AH.NONE
|
|
if cur_time < hud_exp:
|
|
hud_alert = alert['hud_alert']
|
|
|
|
alert_text = ["", ""]
|
|
if cur_time < text_exp:
|
|
alert_text = [alert['text_line_1'], alert['text_line_2']]
|
|
|
|
if chime == CM.MUTE and beep == BP.MUTE and hud_alert == AH.NONE: #and alert_text[0] is None and alert_text[1] is None:
|
|
alert_p = 0
|
|
return alert, chime, beep, hud_alert, alert_text, sound_exp, hud_exp, text_exp, alert_p
|
|
|
|
def process_hud_alert(hud_alert):
|
|
# initialize to no alert
|
|
fcw_display = 0
|
|
steer_required = 0
|
|
acc_alert = 0
|
|
if hud_alert == AH.NONE: # no alert
|
|
pass
|
|
elif hud_alert == AH.FCW: # FCW
|
|
fcw_display = hud_alert[1]
|
|
elif hud_alert == AH.STEER: # STEER
|
|
steer_required = hud_alert[1]
|
|
else: # any other ACC alert
|
|
acc_alert = hud_alert[1]
|
|
|
|
return fcw_display, steer_required, acc_alert
|
|
|
|
def app_alert(alert_add):
|
|
alerts.append(dict(zip(keys, alert_add)))
|
|
|
|
app_alert([AI.ENABLE, CM.MUTE, BP.SINGLE, AH.NONE, ET.ENABLE, 2, "", "", .2, 0., 0.])
|
|
app_alert([AI.DISABLE, CM.MUTE, BP.SINGLE, AH.NONE, ET.USER_DISABLE, 2, "", "", .2, 0., 0.])
|
|
app_alert([AI.SEATBELT, CM.DOUBLE, BP.MUTE, AH.SEATBELT, ET.NO_ENTRY, 1, "Comma Unavailable", "Seatbelt Unlatched", .4, 2., 3.])
|
|
app_alert([AI.DOOR_OPEN, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Door Open", .4, 0., 3.])
|
|
app_alert([AI.PEDAL_PRESSED, CM.DOUBLE, BP.MUTE, AH.BRAKE_PRESSED, ET.NO_ENTRY, 1, "Comma Unavailable", "Pedal Pressed", .4, 2., 3.])
|
|
app_alert([AI.COMM_ISSUE, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Communcation Issues", .4, 0., 3.])
|
|
app_alert([AI.ESP_OFF, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "ESP Off", .4, 0., 3.])
|
|
app_alert([AI.FCW, CM.REPEATED, BP.MUTE, AH.FCW, ET.WARNING, 3, "Risk of Collision", "", 1., 2., 3.])
|
|
app_alert([AI.STEER_ERROR, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Steer Error", .4, 0., 3.])
|
|
app_alert([AI.BRAKE_ERROR, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Brake Error", .4, 0., 3.])
|
|
app_alert([AI.CALIB_INCOMPLETE, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Calibration in Progress", .4, 0., 3.])
|
|
app_alert([AI.CALIB_INVALID, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Calibration Error", .4, 0., 3.])
|
|
app_alert([AI.GEAR_NOT_D, CM.DOUBLE, BP.MUTE, AH.GEAR_NOT_D, ET.NO_ENTRY, 1, "Comma Unavailable", "Gear not in D", .4, 2., 3.])
|
|
app_alert([AI.MAIN_OFF, CM.MUTE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Main Switch Off", .4, 0., 3.])
|
|
app_alert([AI.STEER_SATURATED, CM.SINGLE, BP.MUTE, AH.STEER, ET.WARNING, 2, "Take Control", "Steer Control Saturated", 1., 2., 3.])
|
|
app_alert([AI.PCM_LOW_SPEED, CM.MUTE, BP.SINGLE, AH.STEER, ET.WARNING, 2, "Comma disengaged", "Speed too low", .2, 2., 3.])
|
|
app_alert([AI.THERMAL_DEAD, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Thermal Unavailable", .4, 0., 3.])
|
|
app_alert([AI.OVERHEAT, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "System Overheated", .4, 0., 3.])
|
|
app_alert([AI.HIGH_SPEED, CM.DOUBLE, BP.MUTE, AH.SPEED_TOO_HIGH, ET.NO_ENTRY, 1, "Comma Unavailable", "Speed Too High", .4, 2., 3.])
|
|
app_alert([AI.CONTROLSD_LAG, CM.DOUBLE, BP.MUTE, AH.NONE, ET.NO_ENTRY, 1, "Comma Unavailable", "Controls Lagging", .4, 0., 3.])
|
|
app_alert([AI.STEER_ERROR_ID, CM.REPEATED, BP.MUTE, AH.STEER, ET.IMMEDIATE_DISABLE, 3, "Take Control Immediately", "Steer Error", 1., 3., 3.])
|
|
app_alert([AI.BRAKE_ERROR_ID, CM.REPEATED, BP.MUTE, AH.STEER, ET.IMMEDIATE_DISABLE, 3, "Take Control Immediately", "Brake Error", 1., 3., 3.])
|
|
app_alert([AI.PCM_MISMATCH_ID, CM.REPEATED, BP.MUTE, AH.STEER, ET.IMMEDIATE_DISABLE, 3, "Take Control Immediately", "Pcm Mismatch", 1., 3., 3.])
|
|
app_alert([AI.CTRL_MISMATCH_ID, CM.REPEATED, BP.MUTE, AH.STEER, ET.IMMEDIATE_DISABLE, 3, "Take Control Immediately", "Ctrl Mismatch", 1., 3., 3.])
|
|
app_alert([AI.SEATBELT_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Seatbelt Unlatched", 1., 3., 3.])
|
|
app_alert([AI.DOOR_OPEN_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Door Open", 1., 3., 3.])
|
|
app_alert([AI.COMM_ISSUE_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Technical Issues", 1., 3., 3.])
|
|
app_alert([AI.ESP_OFF_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "ESP Off", 1., 3., 3.])
|
|
app_alert([AI.THERMAL_DEAD_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Thermal Unavailable", 1., 3., 3.])
|
|
app_alert([AI.OVERHEAT_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "System Overheated", 1., 3., 3.])
|
|
app_alert([AI.CONTROLSD_LAG_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Controls Lagging", 1., 3., 3.])
|
|
app_alert([AI.CALIB_INCOMPLETE_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Calibration in Progress", 1., 3., 3.])
|
|
app_alert([AI.CALIB_INVALID_SD, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 3, "Take Control Immediately", "Calibration Error", 1., 3., 3.])
|
|
app_alert([AI.DRIVER_DISTRACTED, CM.REPEATED, BP.MUTE, AH.STEER, ET.SOFT_DISABLE, 2, "Take Control to Regain Speed", "User Distracted", 1., 1., 1.])
|
|
|