diff --git a/selfdrive/car/car_specific.py b/selfdrive/car/car_specific.py index 94afec50e2..b7a357eafd 100644 --- a/selfdrive/car/car_specific.py +++ b/selfdrive/car/car_specific.py @@ -148,7 +148,8 @@ class CarSpecificEvents: # To avoid re-engaging when openpilot cancels, check user engagement intention via buttons # Main button also can trigger an engagement on these cars self.cruise_buttons.append(any(ev.type in HYUNDAI_ENABLE_BUTTONS for ev in CS.buttonEvents)) - events = self.create_common_events(CS, CS_prev, pcm_enable=self.CP.pcmCruise, allow_enable=any(self.cruise_buttons)) + events = self.create_common_events(CS, CS_prev, pcm_enable=self.CP.pcmCruise, allow_enable=any(self.cruise_buttons), + (self.CP.pcmCruise and b.pressed) or not self.CP.pcmCruise) # low speed steer alert hysteresis logic (only for cars with steer cut off above 10 m/s) if CS.vEgo < (self.CP.minSteerSpeed + 2.) and self.CP.minSteerSpeed > 10.: @@ -164,7 +165,8 @@ class CarSpecificEvents: return events def create_common_events(self, CS: structs.CarState, CS_prev: car.CarState, extra_gears=None, pcm_enable=True, - allow_enable=True, enable_buttons=(ButtonType.accelCruise, ButtonType.decelCruise)): + allow_enable=True, enable_buttons=(ButtonType.accelCruise, ButtonType.decelCruise), + allow_disengage=True): events = Events() if CS.doorOpen: @@ -215,7 +217,7 @@ class CarSpecificEvents: if not self.CP.pcmCruise and (b.type in enable_buttons and not b.pressed): events.add(EventName.buttonEnable) # Disable on rising and falling edge of cancel for both stock and OP long - if b.type == ButtonType.cancel: + if b.type == ButtonType.cancel and allow_disengage: events.add(EventName.buttonCancel) # Handle permanent and temporary steering faults