diff --git a/sunnypilot/mads/mads.py b/sunnypilot/mads/mads.py index 9d0c2426d4..a2dd456873 100644 --- a/sunnypilot/mads/mads.py +++ b/sunnypilot/mads/mads.py @@ -13,6 +13,8 @@ class ModifiedAssistDrivingSystem: self.active = False self.available = False self.selfdrive = selfdrive + self.selfdrive.enabled_prev = False + self.selfdrive.active_prev = False self.state_machine = StateMachine(self) self.enabled_toggle = True # TODO-SP: Apply with toggle @@ -34,7 +36,7 @@ class ModifiedAssistDrivingSystem: self.selfdrive.events.remove(EventName.buttonEnable) self.selfdrive.events.remove(EventName.buttonCancel) - if self.selfdrive.enabled: + if self.selfdrive.enabled_prev: if self.selfdrive.events.has(EventName.wrongGear) and CS.vEgo < 5: self.selfdrive.events.add(EventName.silentWrongGear) self.selfdrive.events.remove(EventName.wrongGear) @@ -57,16 +59,16 @@ class ModifiedAssistDrivingSystem: for be in CS.buttonEvents: if be.type == ButtonType.cancel: - if self.selfdrive.enabled: + if self.selfdrive.enabled_prev: self.selfdrive.events.add(EventName.manualLongitudinalRequired) if be.type == ButtonType.lkas and be.pressed: if self.active: - if self.selfdrive.enabled: + if self.selfdrive.enabled_prev: self.selfdrive.events.add(EventName.manualSteeringRequired) else: self.selfdrive.events.add(EventName.buttonCancel) else: - if not self.selfdrive.enabled: + if not self.selfdrive.enabled_prev: self.selfdrive.events.add(EventName.buttonEnable) self.selfdrive.events.remove(EventName.pedalPressed) @@ -81,3 +83,6 @@ class ModifiedAssistDrivingSystem: if not self.selfdrive.CP.passive and self.selfdrive.initialized: self.enabled, self.active = self.state_machine.update(self.selfdrive.events) + + # Copy of previous SelfdriveD states for MADS events handling + self.selfdrive.enabled_prev, self.selfdrive.active_prev = self.selfdrive.enabled, self.selfdrive.active diff --git a/sunnypilot/mads/state.py b/sunnypilot/mads/state.py index d747bc4e78..fb87bc3427 100644 --- a/sunnypilot/mads/state.py +++ b/sunnypilot/mads/state.py @@ -19,7 +19,7 @@ class StateMachine: self.state = State.disabled def add_current_alert_types(self, alert_type): - if not self.selfdrive.active: + if not self.selfdrive.active_prev: self.ss_state_machine.current_alert_types.append(alert_type) def update(self, events: Events): @@ -46,7 +46,7 @@ class StateMachine: if self.state == State.enabled: if events.contains(ET.SOFT_DISABLE): self.state = State.softDisabling - if not self.selfdrive.active: + if not self.selfdrive.active_prev: self.ss_state_machine.soft_disable_timer = int(SOFT_DISABLE_TIME / DT_CTRL) self.ss_state_machine.current_alert_types.append(ET.SOFT_DISABLE) @@ -83,7 +83,7 @@ class StateMachine: elif self.state == State.overriding: if events.contains(ET.SOFT_DISABLE): self.state = State.softDisabling - if not self.selfdrive.active: + if not self.selfdrive.active_prev: self.ss_state_machine.soft_disable_timer = int(SOFT_DISABLE_TIME / DT_CTRL) self.ss_state_machine.current_alert_types.append(ET.SOFT_DISABLE) elif not events.contains(ET.OVERRIDE_LATERAL):