diff --git a/cereal/custom.capnp b/cereal/custom.capnp index 8d09392fc..8c2374342 100644 --- a/cereal/custom.capnp +++ b/cereal/custom.capnp @@ -136,6 +136,7 @@ struct OnroadEventSP @0xda96579883444c35 { controlsMismatchLateral @12; hyundaiRadarTracksConfirmed @13; experimentalModeSwitched @14; + wrongCarModeAlertOnly @15; } } diff --git a/selfdrive/selfdrived/events.py b/selfdrive/selfdrived/events.py index d336334a4..973b331ed 100755 --- a/selfdrive/selfdrived/events.py +++ b/selfdrive/selfdrived/events.py @@ -11,7 +11,7 @@ from openpilot.selfdrive.locationd.calibrationd import MIN_SPEED_FILTER from openpilot.sunnypilot.selfdrive.selfdrived.events_base import EventsBase, Priority, ET, Alert, \ NoEntryAlert, SoftDisableAlert, UserSoftDisableAlert, ImmediateDisableAlert, EngagementAlert, NormalPermanentAlert, \ - StartupAlert, AlertCallbackType + StartupAlert, AlertCallbackType, wrong_car_mode_alert AlertSize = log.SelfdriveState.AlertSize @@ -170,13 +170,6 @@ def modeld_lagging_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubM return NormalPermanentAlert("Driving Model Lagging", f"{sm['modelV2'].frameDropPerc:.1f}% frames dropped") -def wrong_car_mode_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: - text = "Enable Adaptive Cruise to Engage" - if CP.brand == "honda": - text = "Enable Main Switch to Engage" - return NoEntryAlert(text) - - def joystick_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: gb = sm['carControl'].actuators.accel / 4. steer = sm['carControl'].actuators.torque diff --git a/sunnypilot/mads/mads.py b/sunnypilot/mads/mads.py index 632ca7f2a..93f4ad37e 100644 --- a/sunnypilot/mads/mads.py +++ b/sunnypilot/mads/mads.py @@ -127,7 +127,10 @@ class ModularAssistiveDrivingSystem: self.events.remove(EventName.buttonCancel) self.events.remove(EventName.pedalPressed) self.events.remove(EventName.wrongCruiseMode) - if not any(be.type in SET_SPEED_BUTTONS for be in CS.buttonEvents): + if any(be.type in SET_SPEED_BUTTONS for be in CS.buttonEvents): + if self.events.has(EventName.wrongCarMode): + replace_event(EventName.wrongCarMode, EventNameSP.wrongCarModeAlertOnly) + else: self.events.remove(EventName.wrongCarMode) def update(self, CS: car.CarState): diff --git a/sunnypilot/selfdrive/selfdrived/events.py b/sunnypilot/selfdrive/selfdrived/events.py index 7767a6db7..6813542c0 100644 --- a/sunnypilot/selfdrive/selfdrived/events.py +++ b/sunnypilot/selfdrive/selfdrived/events.py @@ -1,6 +1,6 @@ from cereal import log, car, custom from openpilot.sunnypilot.selfdrive.selfdrived.events_base import EventsBase, Priority, ET, Alert, \ - NoEntryAlert, ImmediateDisableAlert, EngagementAlert, NormalPermanentAlert, AlertCallbackType + NoEntryAlert, ImmediateDisableAlert, EngagementAlert, NormalPermanentAlert, AlertCallbackType, wrong_car_mode_alert AlertSize = log.SelfdriveState.AlertSize @@ -128,6 +128,10 @@ EVENTS_SP: dict[int, dict[str, Alert | AlertCallbackType]] = { EventNameSP.experimentalModeSwitched: { ET.WARNING: NormalPermanentAlert("Experimental Mode Switched", duration=1.5) - } + }, + + EventNameSP.wrongCarModeAlertOnly: { + ET.WARNING: wrong_car_mode_alert, + }, } diff --git a/sunnypilot/selfdrive/selfdrived/events_base.py b/sunnypilot/selfdrive/selfdrived/events_base.py index 505c500c4..66396c496 100644 --- a/sunnypilot/selfdrive/selfdrived/events_base.py +++ b/sunnypilot/selfdrive/selfdrived/events_base.py @@ -83,6 +83,16 @@ class AlertBase(Alert): AlertCallbackType = Callable[[car.CarParams, car.CarState, messaging.SubMaster, bool, int, log.ControlsState], Alert] +# ********** alert callback functions ********** + + +def wrong_car_mode_alert(CP: car.CarParams, CS: car.CarState, sm: messaging.SubMaster, metric: bool, soft_disable_time: int, personality) -> Alert: + text = "Enable Adaptive Cruise to Engage" + if CP.brand == "honda": + text = "Enable Main Switch to Engage" + return NoEntryAlert(text) + + class EventsBase: def __init__(self): self.events: list[int] = []