parent
92c596544d
commit
860a48765d
55 changed files with 1661 additions and 1087 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +1 @@ |
||||
#define COMMA_VERSION "0.5.5-release" |
||||
#define COMMA_VERSION "0.5.6-release" |
||||
|
@ -0,0 +1,627 @@ |
||||
from cereal import car, log |
||||
|
||||
# Priority |
||||
class Priority: |
||||
LOWEST = 0 |
||||
LOW_LOWEST = 1 |
||||
LOW = 2 |
||||
MID = 3 |
||||
HIGH = 4 |
||||
HIGHEST = 5 |
||||
|
||||
AlertSize = log.Live100Data.AlertSize |
||||
AlertStatus = log.Live100Data.AlertStatus |
||||
AudibleAlert = car.CarControl.HUDControl.AudibleAlert |
||||
VisualAlert = car.CarControl.HUDControl.VisualAlert |
||||
|
||||
class Alert(object): |
||||
def __init__(self, |
||||
alert_type, |
||||
alert_text_1, |
||||
alert_text_2, |
||||
alert_status, |
||||
alert_size, |
||||
alert_priority, |
||||
visual_alert, |
||||
audible_alert, |
||||
duration_sound, |
||||
duration_hud_alert, |
||||
duration_text, |
||||
alert_rate=0.): |
||||
|
||||
self.alert_type = alert_type |
||||
self.alert_text_1 = alert_text_1 |
||||
self.alert_text_2 = alert_text_2 |
||||
self.alert_status = alert_status |
||||
self.alert_size = alert_size |
||||
self.alert_priority = alert_priority |
||||
self.visual_alert = visual_alert |
||||
self.audible_alert = audible_alert |
||||
|
||||
self.duration_sound = duration_sound |
||||
self.duration_hud_alert = duration_hud_alert |
||||
self.duration_text = duration_text |
||||
|
||||
self.start_time = 0. |
||||
self.alert_rate = alert_rate |
||||
|
||||
# typecheck that enums are valid on startup |
||||
tst = car.CarControl.new_message() |
||||
tst.hudControl.visualAlert = self.visual_alert |
||||
|
||||
def __str__(self): |
||||
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): |
||||
return self.alert_priority > alert2.alert_priority |
||||
|
||||
|
||||
ALERTS = [ |
||||
# Miscellaneous alerts |
||||
Alert( |
||||
"enable", |
||||
"", |
||||
"", |
||||
AlertStatus.normal, AlertSize.none, |
||||
Priority.MID, VisualAlert.none, AudibleAlert.chimeEngage, .2, 0., 0.), |
||||
|
||||
Alert( |
||||
"disable", |
||||
"", |
||||
"", |
||||
AlertStatus.normal, AlertSize.none, |
||||
Priority.MID, VisualAlert.none, AudibleAlert.chimeDisengage, .2, 0., 0.), |
||||
|
||||
Alert( |
||||
"fcw", |
||||
"BRAKE!", |
||||
"Risk of Collision", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.fcw, AudibleAlert.chimeWarningRepeat, 1., 2., 2.), |
||||
|
||||
Alert( |
||||
"steerSaturated", |
||||
"TAKE CONTROL", |
||||
"Turn Exceeds Steering Limit", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimePrompt, 1., 2., 3.), |
||||
|
||||
Alert( |
||||
"steerTempUnavailable", |
||||
"TAKE CONTROL", |
||||
"Steering Temporarily Unavailable", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.chimeWarning1, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"steerTempUnavailableMute", |
||||
"TAKE CONTROL", |
||||
"Steering Temporarily Unavailable", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .2, .2, .2), |
||||
|
||||
Alert( |
||||
"preDriverDistracted", |
||||
"KEEP EYES ON ROAD: User Appears Distracted", |
||||
"", |
||||
AlertStatus.normal, AlertSize.small, |
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1, alert_rate=0.75), |
||||
|
||||
Alert( |
||||
"promptDriverDistracted", |
||||
"KEEP EYES ON ROAD", |
||||
"User Appears Distracted", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1), |
||||
|
||||
Alert( |
||||
"driverDistracted", |
||||
"DISENGAGE IMMEDIATELY", |
||||
"User Was Distracted", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, .1, .1), |
||||
|
||||
Alert( |
||||
"preDriverUnresponsive", |
||||
"TOUCH STEERING WHEEL: No Driver Monitoring", |
||||
"", |
||||
AlertStatus.normal, AlertSize.small, |
||||
Priority.LOW, VisualAlert.steerRequired, AudibleAlert.none, .0, .1, .1, alert_rate=0.75), |
||||
|
||||
Alert( |
||||
"promptDriverUnresponsive", |
||||
"TOUCH STEERING WHEEL", |
||||
"User Is Unresponsive", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, .1, .1), |
||||
|
||||
Alert( |
||||
"driverUnresponsive", |
||||
"DISENGAGE IMMEDIATELY", |
||||
"User Was Unresponsive", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, .1, .1), |
||||
|
||||
Alert( |
||||
"driverMonitorOff", |
||||
"DRIVER MONITOR IS UNAVAILABLE", |
||||
"Accuracy Is Low", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .4, 0., 4.), |
||||
|
||||
Alert( |
||||
"driverMonitorOn", |
||||
"DRIVER MONITOR IS AVAILABLE", |
||||
"Accuracy Is High", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .4, 0., 4.), |
||||
|
||||
Alert( |
||||
"geofence", |
||||
"DISENGAGEMENT REQUIRED", |
||||
"Not in Geofenced Area", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.HIGH, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, .1, .1, .1), |
||||
|
||||
Alert( |
||||
"startup", |
||||
"Be ready to take over at any time", |
||||
"Always keep hands on wheel and eyes on road", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW_LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., 15.), |
||||
|
||||
Alert( |
||||
"ethicalDilemma", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Ethical Dilemma Detected", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 3.), |
||||
|
||||
Alert( |
||||
"steerTempUnavailableNoEntry", |
||||
"openpilot Unavailable", |
||||
"Steering Temporarily Unavailable", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.), |
||||
|
||||
Alert( |
||||
"manualRestart", |
||||
"TAKE CONTROL", |
||||
"Resume Driving Manually", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
|
||||
Alert( |
||||
"resumeRequired", |
||||
"STOPPED", |
||||
"Press Resume to Move", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
|
||||
Alert( |
||||
"belowSteerSpeed", |
||||
"TAKE CONTROL", |
||||
"Steer Unavailable Below ", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning1, 0., 0., .1), |
||||
|
||||
Alert( |
||||
"debugAlert", |
||||
"DEBUG ALERT", |
||||
"", |
||||
AlertStatus.userPrompt, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.none, .1, .1, .1), |
||||
|
||||
# Non-entry only alerts |
||||
Alert( |
||||
"wrongCarModeNoEntry", |
||||
"openpilot Unavailable", |
||||
"Main Switch Off", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.), |
||||
|
||||
Alert( |
||||
"dataNeededNoEntry", |
||||
"openpilot Unavailable", |
||||
"Data Needed for Calibration. Upload Drive, Try Again", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.), |
||||
|
||||
Alert( |
||||
"outOfSpaceNoEntry", |
||||
"openpilot Unavailable", |
||||
"Out of Storage Space", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 0., 3.), |
||||
|
||||
Alert( |
||||
"pedalPressedNoEntry", |
||||
"openpilot Unavailable", |
||||
"Pedal Pressed During Attempt", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, "brakePressed", AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"speedTooLowNoEntry", |
||||
"openpilot Unavailable", |
||||
"Speed Too Low", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"brakeHoldNoEntry", |
||||
"openpilot Unavailable", |
||||
"Brake Hold Active", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"parkBrakeNoEntry", |
||||
"openpilot Unavailable", |
||||
"Park Brake Engaged", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"lowSpeedLockoutNoEntry", |
||||
"openpilot Unavailable", |
||||
"Cruise Fault: Restart the Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"lowBatteryNoEntry", |
||||
"openpilot Unavailable", |
||||
"Low Battery", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
# Cancellation alerts causing soft disabling |
||||
Alert( |
||||
"overheat", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"System Overheated", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"wrongGear", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Gear not D", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"calibrationInvalid", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Calibration Invalid: Reposition EON and Recalibrate", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"calibrationIncomplete", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Calibration in Progress", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"doorOpen", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Door Open", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"seatbeltNotLatched", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Seatbelt Unlatched", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"espDisabled", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"ESP Off", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
Alert( |
||||
"lowBattery", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Low Battery", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.MID, VisualAlert.steerRequired, AudibleAlert.chimeWarning2, .1, 2., 2.), |
||||
|
||||
# Cancellation alerts causing immediate disabling |
||||
Alert( |
||||
"radarCommIssue", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Radar Error: Restart the Car", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"radarFault", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Radar Error: Restart the Car", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"modelCommIssue", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Model Error: Check Internet Connection", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"controlsFailed", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Controls Failed", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"controlsMismatch", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Controls Mismatch", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"commIssue", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"CAN Error: Check Connections", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"steerUnavailable", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"LKAS Fault: Restart the Car", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"brakeUnavailable", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Cruise Fault: Restart the Car", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"gasUnavailable", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Gas Fault: Restart the Car", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"reverseGear", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Reverse Gear", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"cruiseDisabled", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Cruise Is Off", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
Alert( |
||||
"plannerError", |
||||
"TAKE CONTROL IMMEDIATELY", |
||||
"Planner Solution Error", |
||||
AlertStatus.critical, AlertSize.full, |
||||
Priority.HIGHEST, VisualAlert.steerRequired, AudibleAlert.chimeWarningRepeat, 1., 3., 4.), |
||||
|
||||
# not loud cancellations (user is in control) |
||||
Alert( |
||||
"noTarget", |
||||
"openpilot Canceled", |
||||
"No close lead car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.HIGH, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"speedTooLow", |
||||
"openpilot Canceled", |
||||
"Speed too low", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.HIGH, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"invalidGiraffeHonda", |
||||
"Invalid Giraffe Configuration", |
||||
"Set 0111 for openpilot. 1011 for stock", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.HIGH, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.), |
||||
|
||||
# Cancellation alerts causing non-entry |
||||
Alert( |
||||
"overheatNoEntry", |
||||
"openpilot Unavailable", |
||||
"System overheated", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"wrongGearNoEntry", |
||||
"openpilot Unavailable", |
||||
"Gear not D", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"calibrationInvalidNoEntry", |
||||
"openpilot Unavailable", |
||||
"Calibration Invalid: Reposition EON and Recalibrate", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"calibrationIncompleteNoEntry", |
||||
"openpilot Unavailable", |
||||
"Calibration in Progress", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"doorOpenNoEntry", |
||||
"openpilot Unavailable", |
||||
"Door open", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"seatbeltNotLatchedNoEntry", |
||||
"openpilot Unavailable", |
||||
"Seatbelt unlatched", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"espDisabledNoEntry", |
||||
"openpilot Unavailable", |
||||
"ESP Off", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"geofenceNoEntry", |
||||
"openpilot Unavailable", |
||||
"Not in Geofenced Area", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.MID, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"radarCommIssueNoEntry", |
||||
"openpilot Unavailable", |
||||
"Radar Error: Restart the Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"radarFaultNoEntry", |
||||
"openpilot Unavailable", |
||||
"Radar Error: Restart the Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"modelCommIssueNoEntry", |
||||
"openpilot Unavailable", |
||||
"Model Error: Check Internet Connection", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"controlsFailedNoEntry", |
||||
"openpilot Unavailable", |
||||
"Controls Failed", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"commIssueNoEntry", |
||||
"openpilot Unavailable", |
||||
"CAN Error: Check Connections", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"steerUnavailableNoEntry", |
||||
"openpilot Unavailable", |
||||
"LKAS Fault: Restart the Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"brakeUnavailableNoEntry", |
||||
"openpilot Unavailable", |
||||
"Cruise Fault: Restart the Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"gasUnavailableNoEntry", |
||||
"openpilot Unavailable", |
||||
"Gas Error: Restart the Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"reverseGearNoEntry", |
||||
"openpilot Unavailable", |
||||
"Reverse Gear", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"cruiseDisabledNoEntry", |
||||
"openpilot Unavailable", |
||||
"Cruise is Off", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"noTargetNoEntry", |
||||
"openpilot Unavailable", |
||||
"No Close Lead Car", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"plannerErrorNoEntry", |
||||
"openpilot Unavailable", |
||||
"Planner Solution Error", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeError, .4, 2., 3.), |
||||
|
||||
Alert( |
||||
"invalidGiraffeHondaNoEntry", |
||||
"openpilot Unavailable", |
||||
"Set 0111 for openpilot. 1011 for stock", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW, VisualAlert.none, AudibleAlert.chimeDisengage, .4, 2., 3.), |
||||
|
||||
# permanent alerts |
||||
Alert( |
||||
"steerUnavailablePermanent", |
||||
"LKAS Fault: Restart the car to engage", |
||||
"", |
||||
AlertStatus.normal, AlertSize.small, |
||||
Priority.LOW_LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
|
||||
Alert( |
||||
"brakeUnavailablePermanent", |
||||
"Cruise Fault: Restart the car to engage", |
||||
"", |
||||
AlertStatus.normal, AlertSize.small, |
||||
Priority.LOW_LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
|
||||
Alert( |
||||
"lowSpeedLockoutPermanent", |
||||
"Cruise Fault: Restart the car to engage", |
||||
"", |
||||
AlertStatus.normal, AlertSize.small, |
||||
Priority.LOW_LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
|
||||
Alert( |
||||
"calibrationIncompletePermanent", |
||||
"Calibration in Progress: ", |
||||
"Drive Above ", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
|
||||
Alert( |
||||
"invalidGiraffeHondaPermanent", |
||||
"Invalid Giraffe Configuration", |
||||
"Set 0111 for openpilot. 1011 for stock", |
||||
AlertStatus.normal, AlertSize.mid, |
||||
Priority.LOW_LOWEST, VisualAlert.none, AudibleAlert.none, 0., 0., .2), |
||||
] |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,184 @@ |
||||
#include <stdio.h> |
||||
#include <assert.h> |
||||
#include <unistd.h> |
||||
#include <stdlib.h> |
||||
#include <getopt.h> |
||||
|
||||
#include "common/timing.h" |
||||
#include "slplay.h" |
||||
|
||||
SLEngineItf engineInterface = NULL; |
||||
SLObjectItf outputMix = NULL; |
||||
SLObjectItf engine = NULL; |
||||
uri_player players[32] = {{NULL, NULL, NULL}}; |
||||
|
||||
uint64_t loop_start = 0; |
||||
uint64_t loop_start_ctx = 0; |
||||
|
||||
uri_player* get_player_by_uri(const char* uri) { |
||||
for (uri_player *s = players; s->uri != NULL; s++) { |
||||
if (strcmp(s->uri, uri) == 0) { |
||||
return s; |
||||
} |
||||
} |
||||
|
||||
return NULL; |
||||
} |
||||
|
||||
uri_player* slplay_create_player_for_uri(const char* uri, char **error) { |
||||
uri_player player = { uri, NULL, NULL }; |
||||
|
||||
SLresult result; |
||||
SLDataLocator_URI locUri = {SL_DATALOCATOR_URI, (SLchar *) uri}; |
||||
SLDataFormat_MIME formatMime = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED}; |
||||
SLDataSource audioSrc = {&locUri, &formatMime}; |
||||
|
||||
SLDataLocator_OutputMix outMix = {SL_DATALOCATOR_OUTPUTMIX, outputMix}; |
||||
SLDataSink audioSnk = {&outMix, NULL}; |
||||
|
||||
result = (*engineInterface)->CreateAudioPlayer(engineInterface, &player.player, &audioSrc, &audioSnk, 0, NULL, NULL); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to create audio player"); |
||||
return NULL; |
||||
} |
||||
|
||||
result = (*(player.player))->Realize(player.player, SL_BOOLEAN_FALSE); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to realize audio player"); |
||||
return NULL; |
||||
} |
||||
|
||||
result = (*(player.player))->GetInterface(player.player, SL_IID_PLAY, &(player.playInterface)); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to get player interface"); |
||||
return NULL; |
||||
} |
||||
|
||||
result = (*(player.playInterface))->SetPlayState(player.playInterface, SL_PLAYSTATE_PAUSED); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to initialize playstate to SL_PLAYSTATE_PAUSED"); |
||||
return NULL; |
||||
} |
||||
|
||||
uri_player *p = players; |
||||
while (p->uri != NULL) { |
||||
p++; |
||||
} |
||||
*p = player; |
||||
|
||||
return p; |
||||
} |
||||
|
||||
void slplay_setup(char **error) { |
||||
SLresult result; |
||||
SLEngineOption engineOptions[] = {{SL_ENGINEOPTION_THREADSAFE, SL_BOOLEAN_TRUE}}; |
||||
result = slCreateEngine(&engine, 1, engineOptions, 0, NULL, NULL); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to create OpenSL engine"); |
||||
} |
||||
|
||||
result = (*engine)->Realize(engine, SL_BOOLEAN_FALSE); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to realize OpenSL engine"); |
||||
} |
||||
|
||||
result = (*engine)->GetInterface(engine, SL_IID_ENGINE, &engineInterface); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to realize OpenSL engine"); |
||||
} |
||||
|
||||
const SLInterfaceID ids[1] = {SL_IID_VOLUME}; |
||||
const SLboolean req[1] = {SL_BOOLEAN_FALSE}; |
||||
result = (*engineInterface)->CreateOutputMix(engineInterface, &outputMix, 1, ids, req); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to create output mix"); |
||||
} |
||||
|
||||
result = (*outputMix)->Realize(outputMix, SL_BOOLEAN_FALSE); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to realize output mix"); |
||||
} |
||||
} |
||||
|
||||
void slplay_destroy() { |
||||
for (uri_player *player = players; player->uri != NULL; player++) { |
||||
if (player->player) { |
||||
(*(player->player))->Destroy(player->player); |
||||
} |
||||
} |
||||
|
||||
(*outputMix)->Destroy(outputMix); |
||||
(*engine)->Destroy(engine); |
||||
} |
||||
|
||||
void slplay_stop (uri_player* player, char **error) { |
||||
SLPlayItf playInterface = player->playInterface; |
||||
SLresult result; |
||||
|
||||
// stop a loop
|
||||
loop_start = 0; |
||||
|
||||
result = (*playInterface)->SetPlayState(playInterface, SL_PLAYSTATE_PAUSED); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to set SL_PLAYSTATE_STOPPED"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
void slplay_stop_uri(const char* uri, char **error) { |
||||
uri_player* player = get_player_by_uri(uri); |
||||
slplay_stop(player, error); |
||||
} |
||||
|
||||
void SLAPIENTRY slplay_callback(SLPlayItf playItf, void *context, SLuint32 event) { |
||||
uint64_t cb_loop_start = *((uint64_t*)context); |
||||
if (event == SL_PLAYEVENT_HEADATEND && cb_loop_start == loop_start) { |
||||
(*playItf)->SetPlayState(playItf, SL_PLAYSTATE_STOPPED); |
||||
(*playItf)->SetMarkerPosition(playItf, 0); |
||||
(*playItf)->SetPlayState(playItf, SL_PLAYSTATE_PLAYING); |
||||
} |
||||
} |
||||
|
||||
void slplay_play (const char *uri, bool loop, char **error) { |
||||
SLresult result; |
||||
|
||||
uri_player* player = get_player_by_uri(uri); |
||||
if (player == NULL) { |
||||
player = slplay_create_player_for_uri(uri, error); |
||||
if (*error) { |
||||
return; |
||||
} |
||||
} |
||||
|
||||
SLPlayItf playInterface = player->playInterface; |
||||
if (loop) { |
||||
loop_start = nanos_since_boot(); |
||||
loop_start_ctx = loop_start; |
||||
result = (*playInterface)->RegisterCallback(playInterface, slplay_callback, &loop_start_ctx); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
char error[64]; |
||||
snprintf(error, sizeof(error), "Failed to register callback. %d", result); |
||||
*error = error[0]; |
||||
return; |
||||
} |
||||
|
||||
result = (*playInterface)->SetCallbackEventsMask(playInterface, SL_PLAYEVENT_HEADATEND); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to set callback event mask"); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
// Reset the audio player
|
||||
result = (*playInterface)->ClearMarkerPosition(playInterface); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to clear marker position"); |
||||
return; |
||||
} |
||||
result = (*playInterface)->SetPlayState(playInterface, SL_PLAYSTATE_PAUSED); |
||||
result = (*playInterface)->SetPlayState(playInterface, SL_PLAYSTATE_STOPPED); |
||||
result = (*playInterface)->SetPlayState(playInterface, SL_PLAYSTATE_PLAYING); |
||||
if (result != SL_RESULT_SUCCESS) { |
||||
*error = strdup("Failed to set SL_PLAYSTATE_PLAYING"); |
||||
} |
||||
} |
@ -0,0 +1,21 @@ |
||||
#ifndef SLPLAY_H |
||||
#define SLPLAY_H |
||||
|
||||
#include <SLES/OpenSLES.h> |
||||
#include <SLES/OpenSLES_Android.h> |
||||
#include <stdbool.h> |
||||
|
||||
typedef struct { |
||||
const char* uri; |
||||
SLObjectItf player; |
||||
SLPlayItf playInterface; |
||||
} uri_player; |
||||
|
||||
void slplay_setup(char **error); |
||||
uri_player* slplay_create_player_for_uri(const char* uri, char **error); |
||||
void slplay_play (const char *uri, bool loop, char **error); |
||||
void slplay_stop_uri (const char* uri, char **error); |
||||
void slplay_destroy(); |
||||
|
||||
#endif |
||||
|
@ -0,0 +1,6 @@ |
||||
#!/bin/sh |
||||
set -e |
||||
|
||||
make |
||||
export LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH |
||||
exec ./ui |
Binary file not shown.
Loading…
Reference in new issue