From c923a249df0cd8de659bcf6c92fbb169aa9d9753 Mon Sep 17 00:00:00 2001 From: Jaosn Wen Date: Wed, 17 Jul 2024 11:22:05 -0400 Subject: [PATCH 1/6] MADS: HKG CAN-FD: Disallow cruise buttons to engage when pcmCruiseSpeed is off --- selfdrive/car/hyundai/carstate.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/selfdrive/car/hyundai/carstate.py b/selfdrive/car/hyundai/carstate.py index d8329c5ba7..5261fc8477 100644 --- a/selfdrive/car/hyundai/carstate.py +++ b/selfdrive/car/hyundai/carstate.py @@ -282,6 +282,8 @@ class CarState(CarStateBase): ret.cruiseState.standstill = False else: cp_cruise_info = cp_cam if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else cp + ret.cruiseState.available = cp_cruise_info.vl["SCC_CONTROL"]["MainMode_ACC"] == 1 if not self.CP.pcmCruiseSpeed else \ + ret.cruiseState.available ret.cruiseState.enabled = cp_cruise_info.vl["SCC_CONTROL"]["ACCMode"] in (1, 2) ret.cruiseState.standstill = cp_cruise_info.vl["SCC_CONTROL"]["CRUISE_STANDSTILL"] == 1 ret.cruiseState.speed = cp_cruise_info.vl["SCC_CONTROL"]["VSetDis"] * speed_factor From e6970ea15b13bb6d6d5c32b3c5699b67e783d81c Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 20 Jul 2024 07:39:46 -0400 Subject: [PATCH 2/6] handle states properly --- README.md | 2 +- selfdrive/car/hyundai/carstate.py | 2 -- selfdrive/car/hyundai/interface.py | 17 +++++++++-------- selfdrive/car/interfaces.py | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c78052ad6b..fef54c6e9c 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ The goal of Modified Assistive Driving Safety (MADS) is to enhance the user driv * `SET-` button enables ACC/SCC * `CANCEL` button only disables ACC/SCC * `CRUISE (MAIN)` must be `ON` to use ACC/SCC -* `CRUISE (MAIN)` button disables sunnypilot completely when `OFF` **(strictly enforced in panda safety code)** +* `CRUISE (MAIN)` button disables ACC/SCC completely when `OFF` **(strictly enforced in panda safety code)** ### Disengage Lateral ALC on Brake Press Mode toggle Dedicated toggle to handle Lateral state on brake pedal press and release: diff --git a/selfdrive/car/hyundai/carstate.py b/selfdrive/car/hyundai/carstate.py index 5261fc8477..d6e9279035 100644 --- a/selfdrive/car/hyundai/carstate.py +++ b/selfdrive/car/hyundai/carstate.py @@ -216,8 +216,6 @@ class CarState(CarStateBase): if self.CP.spFlags & HyundaiFlagsSP.SP_CAN_LFA_BTN: self.lfa_enabled = cp.vl["BCM_PO_11"]["LFA_Pressed"] - self.mads_enabled = False if not self.control_initialized else ret.cruiseState.available - if self.CP.spFlags & HyundaiFlagsSP.SP_NAV_MSG or self.CP.spFlags & HyundaiFlagsSP.SP_LKAS12: self._update_traffic_signals(cp, cp_cam) ret.cruiseState.speedLimit = self._calculate_speed_limit() * speed_conv diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index dbe0b62895..cd5a86ec75 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -207,11 +207,11 @@ class CarInterface(CarInterfaceBase): self.CS.button_events = create_button_events(self.CS.cruise_buttons[-1], self.CS.prev_cruise_buttons, BUTTONS_DICT) + self.CS.mads_enabled = self.get_sp_cruise_main_state(ret, self.CS) + self.CS.accEnabled = self.get_sp_v_cruise_non_pcm_state(ret, self.CS.accEnabled, self.CS.button_events, c.vCruise) - self.CS.mads_enabled = False if not self.mads_main_toggle else self.CS.mads_enabled - if ret.cruiseState.available: if not self.CP.pcmCruiseSpeed: if self.CS.prev_main_buttons == 1: @@ -220,15 +220,16 @@ class CarInterface(CarInterfaceBase): elif self.CS.prev_cruise_buttons == 4: if self.CS.cruise_buttons[-1] != 4: self.accEnabled = True - if self.enable_mads: - if not self.CS.prev_mads_enabled and self.CS.mads_enabled: - self.CS.madsEnabled = True - if self.CS.prev_lfa_enabled != 1 and self.CS.lfa_enabled == 1: - self.CS.madsEnabled = not self.CS.madsEnabled - self.CS.madsEnabled = self.get_acc_mads(ret.cruiseState.enabled, self.CS.accEnabled, self.CS.madsEnabled) else: self.CS.madsEnabled = False + if self.enable_mads: + if not self.CS.prev_mads_enabled and self.CS.mads_enabled: + self.CS.madsEnabled = True + if self.CS.prev_lfa_enabled != 1 and self.CS.lfa_enabled == 1: + self.CS.madsEnabled = not self.CS.madsEnabled + self.CS.madsEnabled = self.get_acc_mads(ret.cruiseState.enabled, self.CS.accEnabled, self.CS.madsEnabled) + if not self.CP.pcmCruise or not self.CP.pcmCruiseSpeed: if not self.CP.pcmCruise: if any(b.type == ButtonType.cancel for b in self.CS.button_events): diff --git a/selfdrive/car/interfaces.py b/selfdrive/car/interfaces.py index b8ca13ec86..d91b73d14f 100644 --- a/selfdrive/car/interfaces.py +++ b/selfdrive/car/interfaces.py @@ -476,7 +476,7 @@ class CarInterfaceBase(ABC): events.add(EventName.spReverseGear) elif cs_out.vEgo >= 5: events.add(EventName.reverseGear) - if not cs_out.cruiseState.available: + if not cs_out.cruiseState.available and cs_out.cruiseState.enabled: events.add(EventName.wrongCarMode) if cs_out.espDisabled: events.add(EventName.espDisabled) From 4a53caff37a6c80e652d9c8cb759f2c7e21c4a1e Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sat, 20 Jul 2024 21:15:37 -0400 Subject: [PATCH 3/6] this is better --- selfdrive/car/hyundai/interface.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index cd5a86ec75..4100660162 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -220,8 +220,6 @@ class CarInterface(CarInterfaceBase): elif self.CS.prev_cruise_buttons == 4: if self.CS.cruise_buttons[-1] != 4: self.accEnabled = True - else: - self.CS.madsEnabled = False if self.enable_mads: if not self.CS.prev_mads_enabled and self.CS.mads_enabled: @@ -230,6 +228,9 @@ class CarInterface(CarInterfaceBase): self.CS.madsEnabled = not self.CS.madsEnabled self.CS.madsEnabled = self.get_acc_mads(ret.cruiseState.enabled, self.CS.accEnabled, self.CS.madsEnabled) + if not ret.cruiseState.available and self.CS.out.cruiseState.available: + self.CS.madsEnabled = False + if not self.CP.pcmCruise or not self.CP.pcmCruiseSpeed: if not self.CP.pcmCruise: if any(b.type == ButtonType.cancel for b in self.CS.button_events): From faff375b94092172211a6af7bf4d1ac4e18eddfe Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sun, 21 Jul 2024 16:35:21 -0400 Subject: [PATCH 4/6] make sure main button is pressed --- selfdrive/car/hyundai/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index 4100660162..74f4b0b244 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -222,7 +222,7 @@ class CarInterface(CarInterfaceBase): self.accEnabled = True if self.enable_mads: - if not self.CS.prev_mads_enabled and self.CS.mads_enabled: + if not self.CS.prev_mads_enabled and self.CS.mads_enabled and self.CS.main_buttons[-1] != 1: self.CS.madsEnabled = True if self.CS.prev_lfa_enabled != 1 and self.CS.lfa_enabled == 1: self.CS.madsEnabled = not self.CS.madsEnabled From 294476fc334c92269a1be5b0cef4b67d875f1e15 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sun, 21 Jul 2024 17:16:48 -0400 Subject: [PATCH 5/6] oops flipped main --- selfdrive/car/hyundai/interface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index 74f4b0b244..d941799d60 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -222,7 +222,7 @@ class CarInterface(CarInterfaceBase): self.accEnabled = True if self.enable_mads: - if not self.CS.prev_mads_enabled and self.CS.mads_enabled and self.CS.main_buttons[-1] != 1: + if not self.CS.prev_mads_enabled and self.CS.mads_enabled and self.CS.main_buttons[-1] == 1: self.CS.madsEnabled = True if self.CS.prev_lfa_enabled != 1 and self.CS.lfa_enabled == 1: self.CS.madsEnabled = not self.CS.madsEnabled From bdb7fa4bf8f9c6f7ed2c31e1dbd57669e3193dd3 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Mon, 29 Jul 2024 15:44:05 -0400 Subject: [PATCH 6/6] same behavior --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fef54c6e9c..c78052ad6b 100644 --- a/README.md +++ b/README.md @@ -223,7 +223,7 @@ The goal of Modified Assistive Driving Safety (MADS) is to enhance the user driv * `SET-` button enables ACC/SCC * `CANCEL` button only disables ACC/SCC * `CRUISE (MAIN)` must be `ON` to use ACC/SCC -* `CRUISE (MAIN)` button disables ACC/SCC completely when `OFF` **(strictly enforced in panda safety code)** +* `CRUISE (MAIN)` button disables sunnypilot completely when `OFF` **(strictly enforced in panda safety code)** ### Disengage Lateral ALC on Brake Press Mode toggle Dedicated toggle to handle Lateral state on brake pedal press and release: