From 5d5a04416ad042dfeb09f29707488c0099b5d755 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:38:23 -0500 Subject: [PATCH] fix: IONIQ_5_PE Enable Long and fix Check Driver Assistance alerts Co-authored-by: otaku <696343+otaku@users.noreply.github.com> --- .../opendbc/car/hyundai/carcontroller.py | 14 ++-- opendbc_repo/opendbc/car/hyundai/carstate.py | 2 +- .../opendbc/car/hyundai/hyundaicanfd.py | 30 ++++++++- opendbc_repo/opendbc/car/hyundai/interface.py | 10 ++- .../opendbc/car/hyundai/tests/test_hyundai.py | 64 +++++++++++++++++-- opendbc_repo/opendbc/car/hyundai/values.py | 12 ++-- 6 files changed, 109 insertions(+), 23 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carcontroller.py b/opendbc_repo/opendbc/car/hyundai/carcontroller.py index 573d37107..5993ef900 100644 --- a/opendbc_repo/opendbc/car/hyundai/carcontroller.py +++ b/opendbc_repo/opendbc/car/hyundai/carcontroller.py @@ -76,7 +76,7 @@ BLINDSPOT_WARNING_SOUND_SAMPLES = 36 def egmp_dynamic_longitudinal_tuning(CP) -> bool: - return CP.carFingerprint in (CAR.HYUNDAI_IONIQ_6, CAR.KIA_EV9) or \ + return CP.carFingerprint in (CAR.HYUNDAI_IONIQ_6, CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE) or \ kia_ev6_gt_line_longitudinal_tuning(CP.carFingerprint, getattr(CP, "carVin", "")) @@ -411,7 +411,7 @@ class CarController(CarControllerBase): self.ecu_disable_failed = False self._ecu_disable_checked = False self._params = Params() - if CP.carFingerprint == CAR.KIA_EV9: + if CP.carFingerprint in CANFD_ANGLE_LONGITUDINAL_CAR: self._ev9_long_tuning = EV9LongitudinalTuningState() self._left_blindspot_warning = BlindspotWarningState() self._right_blindspot_warning = BlindspotWarningState() @@ -515,6 +515,8 @@ class CarController(CarControllerBase): drive_gear = CS.out.gearShifter == structs.CarState.GearShifter.drive angle_lat_active = direct_angle_request_allowed(CS.out.vEgoRaw, measured_steering_angle, self.apply_angle_last, drive_gear, self.BASELINE_VM, self.params) and not CS.angle_steering_fault + if self.CP.carFingerprint == CAR.HYUNDAI_IONIQ_5_PE and CS.out.standstill: + angle_lat_active = False self.direct_angle_request_allowed = angle_lat_active apply_angle = measured_steering_angle @@ -597,8 +599,8 @@ class CarController(CarControllerBase): use_egmp_dynamic_long_tuning = egmp_dynamic_longitudinal_tuning(self.CP) and self.long_active_ecu and \ actuators.longControlState in (LongCtrlState.starting, LongCtrlState.pid, LongCtrlState.stopping) is_ev6_gt_line = kia_ev6_gt_line_longitudinal_tuning(self.CP.carFingerprint, getattr(self.CP, "carVin", "")) - is_ev9 = self.CP.carFingerprint == CAR.KIA_EV9 - if is_ev9 and (self._ev9_long_tuning.stop_request or not CC.enabled or CC.cruiseControl.override): + is_ccnc_angle_long = self.CP.carFingerprint in CANFD_ANGLE_LONGITUDINAL_CAR + if is_ccnc_angle_long and (self._ev9_long_tuning.stop_request or not CC.enabled or CC.cruiseControl.override): self._ioniq_6_long_tuning = reset_egmp_longitudinal_tuning(self._ioniq_6_long_tuning) if should_reset_ev6_gt_line_longitudinal_tuning(self.CP, actuators.longControlState): self._ioniq_6_long_tuning = reset_ev6_gt_line_longitudinal_tuning(self._ioniq_6_long_tuning, self.CP, @@ -608,7 +610,7 @@ class CarController(CarControllerBase): CS.out.vEgo, CS.out.aEgo, actuators.longControlState, self.long_active_ecu, ev6_gt_line=is_ev6_gt_line, - low_speed_stop_brake_cap=is_ev9) + low_speed_stop_brake_cap=is_ccnc_angle_long) use_egmp_smoothed_accel = use_egmp_dynamic_long_tuning and ( accel_cmd >= self._ioniq_6_long_tuning.actual_accel or self._ioniq_6_long_tuning.launch_active or @@ -617,7 +619,7 @@ class CarController(CarControllerBase): if should_use_ev6_gt_line_stop_direct_tracking(is_ev6_gt_line, self._ioniq_6_long_tuning.stopping, CS.out.vEgo, accel_cmd, self._ioniq_6_long_tuning.actual_accel): use_egmp_smoothed_accel = False - if is_ev9 and should_track_stop_accel_directly(self._ioniq_6_long_tuning.stopping, CS.out.vEgo, + if is_ccnc_angle_long and should_track_stop_accel_directly(self._ioniq_6_long_tuning.stopping, CS.out.vEgo, accel_cmd, self._ioniq_6_long_tuning.actual_accel): use_egmp_smoothed_accel = False if use_egmp_dynamic_long_tuning: diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index 6cb19a851..fb672cf4f 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -138,7 +138,7 @@ class CarState(CarStateBase): self.blindspots_front_corner_1_ts = 0 self.left_blindspot_from_radar = False self.right_blindspot_from_radar = False - if CP.carFingerprint == CAR.KIA_EV9: + if CP.carFingerprint in CANFD_ANGLE_LONGITUDINAL_CAR: self.hba_icon = 0 self.main_cruise_on = False self.angle_steering_angle = 0.0 diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 182dc0302..09bfb0a2b 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -843,6 +843,7 @@ def hkg_can_fd_checksum(address: int, sig, d: bytearray) -> int: # brake, and accelerator bits are updated for the radar heartbeat. _ACCEL_BRAKE_ALT_TEMPLATE = bytes.fromhex("000000020000fcff000000000020000055ff000068000000") _KIA_EV9_ACCEL_BRAKE_ALT_TEMPLATE = bytes.fromhex("00000000ff006f00e80400001201030055ffff0000000000") +_HYUNDAI_IONIQ_5_PE_ACCEL_BRAKE_ALT_TEMPLATE = bytes.fromhex("000000000000000000000000ff1fffff55ffff00a8000000") # Neutral bodies verified across stock and successful suppression routes. Only # rolling integrity fields and the decoded state above are changed at runtime. _CCNC_ADRV_TEMPLATES = { @@ -859,6 +860,19 @@ _CCNC_ADRV_TEMPLATES = { 0x1E0: bytes.fromhex("00000002000000000000000000000000"), 0x38C: bytes.fromhex("000000f71f000000000000000000000000000000000000000000000000000000"), }, + CAR.HYUNDAI_IONIQ_5_PE: { + 0x160: bytes.fromhex("0000000000000000fffc0100a8001000"), + 0x1DA: bytes.fromhex("0000002200010000000000000000000000000000000000000000000000000000"), + 0x1EA: bytes.fromhex("000000080000000000000000000000ff000000000000000000000000000f0f00"), + 0x200: bytes.fromhex("00000014401b0000"), + 0x345: bytes.fromhex("0000001500560000"), + 0x161: bytes.fromhex("0000000000000000c0fff0c003000040000000000000000000ff000000000000"), + 0x162: bytes.fromhex("0000002700000000c0ff00000000000000000000000000000000000000000000"), + 0x1BA: bytes.fromhex("00000000000000880200000000000000000100000000000f"), + 0x1E5: bytes.fromhex("00000000000000000000220200000080"), + 0x1E0: bytes.fromhex("00000002000000000000000000000000"), + 0x38C: bytes.fromhex("000000f79f000000000000000000000000000000000000000000000000000000"), + }, } _CCNC_ADRV_PERIODS = { CAR.KIA_EV9: { @@ -870,12 +884,26 @@ _CCNC_ADRV_PERIODS = { 0x1E0: 5, 0x38C: 20, }, + CAR.HYUNDAI_IONIQ_5_PE: { + 0x160: 2, + 0x1DA: 100, + 0x1EA: 5, + 0x200: 5, + 0x345: 20, + 0x1E0: 5, + 0x38C: 20, + }, } def create_accelerator_brake_alt_spoof(bus: int, counter: int, brake_pressed: bool, accelerator_pressed: bool, car_fingerprint=None) -> CanData: - template = _KIA_EV9_ACCEL_BRAKE_ALT_TEMPLATE if car_fingerprint == CAR.KIA_EV9 else _ACCEL_BRAKE_ALT_TEMPLATE + if car_fingerprint == CAR.KIA_EV9: + template = _KIA_EV9_ACCEL_BRAKE_ALT_TEMPLATE + elif car_fingerprint == CAR.HYUNDAI_IONIQ_5_PE: + template = _HYUNDAI_IONIQ_5_PE_ACCEL_BRAKE_ALT_TEMPLATE + else: + template = _ACCEL_BRAKE_ALT_TEMPLATE d = bytearray(template) d[2] = counter & 0xFF # COUNTER (bit 16, 8-bit) d[4] = (d[4] & ~0x01) | (0x01 if brake_pressed else 0x00) # BRAKE_PRESSED (bit 32) diff --git a/opendbc_repo/opendbc/car/hyundai/interface.py b/opendbc_repo/opendbc/car/hyundai/interface.py index c2618258b..75add3ee2 100644 --- a/opendbc_repo/opendbc/car/hyundai/interface.py +++ b/opendbc_repo/opendbc/car/hyundai/interface.py @@ -171,6 +171,8 @@ class CarInterface(CarInterfaceBase): # panda safety or the carcontroller; the MDPS tolerating held torque at 0 speed # is being validated on-road. ret.steerAtStandstill = True + if candidate == CAR.HYUNDAI_IONIQ_5_PE: + ret.steerAtStandstill = True if ret.flags & HyundaiFlags.CCNC and not ret.flags & HyundaiFlags.CANFD_LKA_STEERING: ret.safetyConfigs[-1].safetyParam |= HyundaiSafetyFlags.CCNC.value @@ -287,6 +289,10 @@ class CarInterface(CarInterfaceBase): ret.longitudinalTuning.kiBP = [0.0, 8.0, 20.0, 35.0] ret.longitudinalTuning.kiV = [0.02, 0.03, 0.05, 0.07] + if candidate == CAR.HYUNDAI_IONIQ_5_PE: + ret.longitudinalActuatorDelay = 0.35 + ret.vEgoStarting = 0.4 + if candidate == CAR.KIA_EV9 and ret.openpilotLongitudinalControl: apply_kia_ev9_longitudinal_params(ret) @@ -335,8 +341,8 @@ class CarInterface(CarInterfaceBase): ecu_disabled = disable_ecu(can_recv, can_send, bus=bus, addr=addr, com_cont_req=communication_control, reset=bool(CP.flags & HyundaiFlags.CAN_CANFD_BLENDED)) - if CP.carFingerprint == CAR.HYUNDAI_IONIQ_6: - # Ioniq 6: track success/failure to auto-switch between openpilot long and stock ACC + if CP.carFingerprint in (CAR.HYUNDAI_IONIQ_6, CAR.HYUNDAI_IONIQ_5_PE): + # Track success/failure to auto-switch between openpilot long and stock ACC if ecu_disabled: ECU_DISABLE_TIMESTAMP = time.monotonic() params.put_bool("EcuDisableFailed", False) diff --git a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py index f8aadfccb..1c4f3bfde 100644 --- a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py @@ -182,6 +182,7 @@ class TestHyundaiFingerprint: for candidate, radar_addr in ( (CAR.HYUNDAI_KONA_EV_2022, MRREVO14F_RADAR_START_ADDR), (CAR.HYUNDAI_IONIQ_5, MRR30_RADAR_START_ADDR), + (CAR.HYUNDAI_IONIQ_5_PE, MRR35_RADAR_START_ADDR), (CAR.HYUNDAI_IONIQ_5_N, MRR30_RADAR_START_ADDR), (CAR.KIA_EV6, MRR30_RADAR_START_ADDR), (CAR.KIA_EV6_2025, MRR30_RADAR_START_ADDR), @@ -268,6 +269,32 @@ class TestHyundaiFingerprint: CP = CarInterface.get_params(CAR.KIA_EV9, fingerprint, ev9_car_fw, False, False, False, None) assert not CP.openpilotLongitudinalControl assert not (CP.safetyConfigs[-1].safetyParam & HyundaiSafetyFlags.CCNC) + + ioniq_5_pe_radar_config = get_radar_track_config(CAR.HYUNDAI_IONIQ_5_PE) + fingerprint = gen_empty_fingerprint() + fingerprint[CanBus(None, fingerprint).CAM][0x110] = 32 + fingerprint[ioniq_5_pe_radar_config.bus][ioniq_5_pe_radar_config.start_addr] = ioniq_5_pe_radar_config.expected_length + ioniq_5_pe_car_fw = [CarParams.CarFw(ecu=Ecu.adas, fwVersion=b"", address=0x730, brand="hyundai")] + CP = CarInterface.get_params(CAR.HYUNDAI_IONIQ_5_PE, fingerprint, ioniq_5_pe_car_fw, True, False, False, None) + assert CP.alphaLongitudinalAvailable + assert CP.openpilotLongitudinalControl + assert not CP.radarUnavailable + assert CP.flags & HyundaiFlags.CANFD_LKA_STEERING_ALT + assert CP.flags & HyundaiFlags.CCNC + assert CP.safetyConfigs[-1].safetyParam & HyundaiSafetyFlags.LONG + assert CP.safetyConfigs[-1].safetyParam & HyundaiSafetyFlags.CANFD_ANGLE_STEERING + assert CP.safetyConfigs[-1].safetyParam & HyundaiSafetyFlags.CCNC + + CP = CarInterface.get_params(CAR.HYUNDAI_IONIQ_5_PE, fingerprint, ioniq_5_pe_car_fw, False, False, False, None) + assert not CP.openpilotLongitudinalControl + assert not (CP.safetyConfigs[-1].safetyParam & HyundaiSafetyFlags.LONG) + + CP = CarInterface.get_params(CAR.HYUNDAI_IONIQ_5_PE, fingerprint, ioniq_5_pe_car_fw, True, False, False, None) + expected_bits = (HyundaiSafetyFlags.LONG | HyundaiSafetyFlags.CCNC | + HyundaiSafetyFlags.CANFD_LKA_STEERING | HyundaiSafetyFlags.CANFD_LKA_STEERING_ALT | + HyundaiSafetyFlags.CANFD_ANGLE_STEERING | HyundaiSafetyFlags.EV_GAS) + assert (CP.safetyConfigs[-1].safetyParam & expected_bits) == expected_bits + for candidate in HYUNDAI_NON_SCC_CARS: CP = CarInterface.get_params(candidate, gen_empty_fingerprint(), [], True, False, False, None) assert bool(CP.flags & HyundaiFlags.NON_SCC) @@ -320,13 +347,13 @@ class TestHyundaiFingerprint: assert direct_angle_request_allowed(8.47, 140.0, 140.0, True, controller.BASELINE_VM, controller.params) assert not direct_angle_request_allowed(8.47, 140.0, 140.0, False, controller.BASELINE_VM, controller.params) - def test_angle_platforms_disable_standstill_steering(self): + def test_angle_platforms_standstill_steering_flags(self): ev9_cp = CarInterface.get_params(CAR.KIA_EV9, gen_empty_fingerprint(), [], False, False, False, None) ioniq_5_pe_cp = CarInterface.get_params(CAR.HYUNDAI_IONIQ_5_PE, gen_empty_fingerprint(), [], False, False, False, None) sportage_cp = CarInterface.get_params(CAR.KIA_SPORTAGE_HEV_2026, gen_empty_fingerprint(), [], False, False, False, None) assert not ev9_cp.steerAtStandstill - assert not ioniq_5_pe_cp.steerAtStandstill + assert ioniq_5_pe_cp.steerAtStandstill assert not sportage_cp.steerAtStandstill @pytest.mark.parametrize("candidate", (CAR.KIA_K4_2025, CAR.KIA_CARNIVAL_2025, CAR.KIA_CARNIVAL_HEV_4TH_GEN)) @@ -1233,6 +1260,12 @@ class TestHyundaiFingerprint: ioniq_6_cp = CarInterface.get_params(CAR.HYUNDAI_IONIQ_6, gen_empty_fingerprint(), [], True, False, False, toggles) assert CarInterface.get_pid_accel_limits(ioniq_6_cp, 0.0, 0.0)[1] == pytest.approx(CarControllerParams.ACCEL_MAX) + def test_ioniq_5_pe_longitudinal_params_match_observed_response(self): + toggles = get_test_toggles() + CP = CarInterface.get_params(CAR.HYUNDAI_IONIQ_5_PE, gen_empty_fingerprint(), [], True, False, False, toggles) + assert CP.longitudinalActuatorDelay == pytest.approx(0.35) + assert CP.vEgoStarting == pytest.approx(0.4) + def test_ioniq_6_longitudinal_tuning_helper_matches_dynamic_profile(self): state = Ioniq6LongitudinalTuningState() @@ -1342,6 +1375,14 @@ class TestHyundaiFingerprint: assert not should_use_ev6_gt_line_stop_direct_tracking(False, True, 1.8, -2.05, -1.29) assert not should_use_ev6_gt_line_stop_direct_tracking(True, True, 1.8, -1.0, -1.29) + @pytest.mark.parametrize("candidate", (CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE)) + def test_ccnc_angle_long_carcontroller_initializes_ev9_tuning_state(self, candidate): + CP = CarInterface.get_params(candidate, gen_empty_fingerprint(), [], True, False, False, None) + controller = CarController(DBC[CP.carFingerprint], CP) + assert controller._ev9_long_tuning == EV9LongitudinalTuningState() + assert isinstance(controller._left_blindspot_warning, BlindspotWarningState) + assert isinstance(controller._right_blindspot_warning, BlindspotWarningState) + def test_ev9_longitudinal_tuning_matches_stock_stop_hold_release_timing(self): state = update_ev9_longitudinal_tuning(EV9LongitudinalTuningState(), True, True, 1.0) assert not state.stop_request @@ -1761,7 +1802,8 @@ class TestHyundaiFingerprint: CP = CarParams.new_message() CP.carFingerprint = CAR.HYUNDAI_IONIQ_5_PE CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.EV | HyundaiFlags.CANFD_ANGLE_STEERING | - HyundaiFlags.CANFD_LKA_STEERING | HyundaiFlags.CANFD_LKA_STEERING_ALT) + HyundaiFlags.CANFD_LKA_STEERING | HyundaiFlags.CANFD_LKA_STEERING_ALT | + HyundaiFlags.CCNC) CP.openpilotLongitudinalControl = False controller = CarController(DBC[CP.carFingerprint], CP) @@ -2504,9 +2546,10 @@ class TestHyundaiFingerprint: assert parser.vl["CCNC_0x161"]["HDA_ICON"] == 2 assert parser.vl["CCNC_0x161"]["LFA_ICON"] == 1 - def test_ev9_ccnc_acc_control_uses_packer_counter(self): + @pytest.mark.parametrize("candidate", (CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE)) + def test_ccnc_acc_control_uses_packer_counter(self, candidate): CP = CarParams.new_message() - CP.carFingerprint = CAR.KIA_EV9 + CP.carFingerprint = candidate CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.CCNC | HyundaiFlags.CANFD_ANGLE_STEERING | HyundaiFlags.CANFD_LKA_STEERING | HyundaiFlags.CANFD_LKA_STEERING_ALT) @@ -2530,10 +2573,17 @@ class TestHyundaiFingerprint: assert parser.vl["SCC_CONTROL"]["ACC_ObjDist"] == pytest.approx(27.5) assert parser.vl["SCC_CONTROL"]["ACC_ObjRelSpd"] == pytest.approx(-1.2) + @pytest.mark.parametrize("candidate", (CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE)) + def test_ccnc_adrv_templates_and_periods_present(self, candidate): + expected_addrs = {0x160, 0x1DA, 0x1EA, 0x200, 0x345, 0x161, 0x162, 0x1BA, 0x1E5, 0x1E0, 0x38C} + assert set(hyundaicanfd._CCNC_ADRV_TEMPLATES[candidate]) == expected_addrs + assert set(hyundaicanfd._CCNC_ADRV_PERIODS[candidate]).issubset(expected_addrs) + + @pytest.mark.parametrize("candidate", (CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE)) @pytest.mark.parametrize(("steering_pressed", "steering_active"), ((False, True), (True, False))) - def test_ev9_ccnc_steering_icon_tracks_controller_authority(self, monkeypatch, steering_pressed, steering_active): + def test_ccnc_steering_icon_tracks_controller_authority(self, monkeypatch, steering_pressed, steering_active, candidate): CP = CarParams.new_message() - CP.carFingerprint = CAR.KIA_EV9 + CP.carFingerprint = candidate CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.EV | HyundaiFlags.CCNC | HyundaiFlags.CANFD_ANGLE_STEERING | HyundaiFlags.CANFD_LKA_STEERING | HyundaiFlags.CANFD_LKA_STEERING_ALT) diff --git a/opendbc_repo/opendbc/car/hyundai/values.py b/opendbc_repo/opendbc/car/hyundai/values.py index 19905fa12..76102af0d 100644 --- a/opendbc_repo/opendbc/car/hyundai/values.py +++ b/opendbc_repo/opendbc/car/hyundai/values.py @@ -521,8 +521,8 @@ class CAR(Platforms): car_parts=CarParts.common([CarHarness.hyundai_q])) ], HYUNDAI_IONIQ_5.specs, - flags=HyundaiFlags.EV | HyundaiFlags.CANFD_ANGLE_STEERING, - radar_dbc=HYUNDAI_MRR30_RADAR_DBC, + flags=HyundaiFlags.EV | HyundaiFlags.CANFD_ANGLE_STEERING | HyundaiFlags.CCNC, + radar_dbc=HYUNDAI_MRR35_RADAR_DBC, ) HYUNDAI_IONIQ_5_N = HyundaiCanFDPlatformConfig( [HyundaiCarDocs("Hyundai Ioniq 5 N (with HDA II) 2024", car_parts=CarParts.common([CarHarness.hyundai_s]))], @@ -1183,13 +1183,13 @@ CANFD_RADAR_SCC_CAR = CAR.with_flags(HyundaiFlags.RADAR_SCC) # TODO: merge with # CAN-FD cars with ADAS ECUs that work with the communication-control path. CANFD_SECURITYACCESS_CAR = { - CAR.HYUNDAI_IONIQ_5, CAR.HYUNDAI_IONIQ_6, CAR.HYUNDAI_KONA_EV_2ND_GEN, CAR.KIA_EV9, + CAR.HYUNDAI_IONIQ_5, CAR.HYUNDAI_IONIQ_5_PE, CAR.HYUNDAI_IONIQ_6, CAR.HYUNDAI_KONA_EV_2ND_GEN, CAR.KIA_EV9, } CANFD_UNSUPPORTED_LONGITUDINAL_CAR = CAR.with_flags(HyundaiFlags.CANFD_NO_RADAR_DISABLE) - CANFD_SECURITYACCESS_CAR # TODO: merge with UNSUPPORTED_LONGITUDINAL_CAR -CANFD_ANGLE_LONGITUDINAL_CAR = {CAR.KIA_EV9} -CANFD_CORNER_RADAR_BSM_CAR = {CAR.HYUNDAI_IONIQ_6, CAR.KIA_EV9} +CANFD_ANGLE_LONGITUDINAL_CAR = {CAR.KIA_EV9, CAR.HYUNDAI_IONIQ_5_PE} +CANFD_CORNER_RADAR_BSM_CAR = {CAR.HYUNDAI_IONIQ_6, CAR.HYUNDAI_IONIQ_5_PE, CAR.KIA_EV9} CANFD_RADAR_LIVE_LONGITUDINAL_CAR = { - CAR.HYUNDAI_IONIQ_5, CAR.HYUNDAI_IONIQ_6, CAR.KIA_EV6, CAR.KIA_EV9, CAR.GENESIS_GV60_EV_1ST_GEN, + CAR.HYUNDAI_IONIQ_5, CAR.HYUNDAI_IONIQ_5_PE, CAR.HYUNDAI_IONIQ_6, CAR.KIA_EV6, CAR.KIA_EV9, CAR.GENESIS_GV60_EV_1ST_GEN, } RADAR_LIVE_LONGITUDINAL_CAR = CANFD_RADAR_LIVE_LONGITUDINAL_CAR | { CAR.HYUNDAI_IONIQ,