From c8a9eb5464294033fb0ab2def172e7e86c3e6592 Mon Sep 17 00:00:00 2001 From: firestar5683 <168790843+firestar5683@users.noreply.github.com> Date: Mon, 29 Jun 2026 12:55:54 -0500 Subject: [PATCH] EV9 the final countdown --- .../opendbc/car/hyundai/hyundaicanfd.py | 60 ++++++------------- .../opendbc/car/hyundai/tests/test_hyundai.py | 57 +++++++++++++++--- .../dbc/generator/hyundai/hyundai_canfd.dbc | 13 ++++ .../opendbc/dbc/hyundai_canfd_generated.dbc | 13 ++++ 4 files changed, 93 insertions(+), 50 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index ce8bd7932..db09fa590 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -131,47 +131,25 @@ def create_steering_messages(packer, CP, CAN, enabled, lat_active, apply_torque, lkas_values["LKAS_ANGLE_ACTIVE"] = 2 if lat_active else 1 lkas_values["ADAS_ACIAnglTqRedcGainVal"] = apply_torque if lat_active else 0.0 if ev9_angle_lkas_alt: - if lat_active: - lkas_values.update({ - "LKA_MODE": 0, - "LKA_AVAILABLE": 3, - "LKA_WARNING": 0, - "LKA_ICON": lka_icon, - "FCA_SYSWARN": 0, - "TORQUE_REQUEST": 0, - "STEER_REQ": 0, - "LFA_BUTTON": 0, - "LKA_ASSIST": 0, - "DAMP_FACTOR": 100, - "HAS_LANE_SAFETY": 0, - }) - elif lkas_base_values: - for signal in ("LKA_MODE", "LKA_AVAILABLE", "LKA_WARNING", "LKA_ICON", "FCA_SYSWARN", - "LFA_BUTTON", "LKA_ASSIST", "DAMP_FACTOR", "HAS_LANE_SAFETY"): - if signal in lkas_base_values: - lkas_values[signal] = lkas_base_values[signal] - lkas_values.update({ - "TORQUE_REQUEST": 0, - "STEER_REQ": 0, - }) - else: - lkas_values.update({ - "LKA_MODE": 0, - "LKA_AVAILABLE": 0, - "LKA_WARNING": 0, - "LKA_ICON": lka_icon, - "FCA_SYSWARN": 0, - "TORQUE_REQUEST": 0, - "STEER_REQ": 0, - "LFA_BUTTON": 0, - "LKA_ASSIST": 0, - "DAMP_FACTOR": 100, - "HAS_LANE_SAFETY": 0, - }) - # These signals overlap DAMP_FACTOR in the local DBC naming; omitting them - # preserves the stock angle-steering damping byte expected by the ADAS ECU. - lkas_values.pop("STEER_MODE", None) - lkas_values.pop("NEW_SIGNAL_2", None) + lkas_values = { + "LKA_OptUsmSta": 0, + "LKA_RcgSta": 3 if lat_active else 0, + "LKA_LHLnWrnSta": 0, + "LKA_RHLnWrnSta": 0, + "LKA_HndsoffSnd": 0, + "LKA_StrSnd": 0, + "LKA_SysIndReq": 2 if enabled else 1, + "StrTqReqVal": 0, + "ActToiSta": 0, + "ToiFltSta": 0, + "LFA_BUTTON": 0, + "LKA_SysWrn": 0, + "Damping_Gain": 100, + "LKAS_ANGLE_ACTIVE": 2 if lat_active else 1, + "LKA_UsmMod": 0, + "ADAS_StrAnglReqVal": apply_angle, + "ADAS_ACIAnglTqRedcGainVal": apply_torque if lat_active else 0.0, + } ret = [] if CP.flags & HyundaiFlags.CANFD_LKA_STEERING: diff --git a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py index 12c2c06ed..15cadf7ae 100644 --- a/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py +++ b/opendbc_repo/opendbc/car/hyundai/tests/test_hyundai.py @@ -1856,6 +1856,19 @@ class TestHyundaiFingerprint: parser.update([(1, lkas_msgs)]) assert parser.can_valid + assert parser.vl["LKAS_ALT"]["LKA_OptUsmSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_RcgSta"] == 3 + assert parser.vl["LKAS_ALT"]["LKA_LHLnWrnSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_RHLnWrnSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_HndsoffSnd"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_StrSnd"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_SysIndReq"] == 2 + assert parser.vl["LKAS_ALT"]["StrTqReqVal"] == 0 + assert parser.vl["LKAS_ALT"]["ActToiSta"] == 0 + assert parser.vl["LKAS_ALT"]["ToiFltSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_SysWrn"] == 0 + assert parser.vl["LKAS_ALT"]["Damping_Gain"] == 100 + assert parser.vl["LKAS_ALT"]["LKA_UsmMod"] == 0 assert parser.vl["LKAS_ALT"]["LKA_MODE"] == 0 assert parser.vl["LKAS_ALT"]["LKA_AVAILABLE"] == 3 assert parser.vl["LKAS_ALT"]["LKA_WARNING"] == 0 @@ -1871,7 +1884,7 @@ class TestHyundaiFingerprint: assert parser.vl["LKAS_ALT"]["ADAS_StrAnglReqVal"] == pytest.approx(-31.5) assert parser.vl["LKAS_ALT"]["ADAS_ACIAnglTqRedcGainVal"] == pytest.approx(0.44) - def test_ev9_angle_lkas_alt_preserves_stock_status_when_inactive(self): + def test_ev9_angle_lkas_alt_clears_stock_status_when_inactive(self): CP = CarParams.new_message() CP.carFingerprint = CAR.KIA_EV9 CP.flags = int(HyundaiFlags.CANFD | HyundaiFlags.EV | HyundaiFlags.CANFD_ANGLE_STEERING | @@ -1884,18 +1897,31 @@ class TestHyundaiFingerprint: stock_lkas = { "CHECKSUM": 1234, "COUNTER": 42, + "LKA_OptUsmSta": 6, "LKA_MODE": 2, + "LKA_RcgSta": 7, "LKA_AVAILABLE": 3, + "LKA_LHLnWrnSta": 3, + "LKA_RHLnWrnSta": 3, "LKA_WARNING": 1, + "LKA_HndsoffSnd": 1, + "LKA_StrSnd": 1, + "LKA_SysIndReq": 4, "LKA_ICON": 1, "FCA_SYSWARN": 1, + "StrTqReqVal": 17, "TORQUE_REQUEST": 17, + "ActToiSta": 3, "STEER_REQ": 1, + "ToiFltSta": 3, "LFA_BUTTON": 1, + "LKA_SysWrn": 15, "LKA_ASSIST": 1, + "Damping_Gain": 0, "STEER_MODE": 5, "NEW_SIGNAL_2": 0, "LKAS_ANGLE_ACTIVE": 2, + "LKA_UsmMod": 3, "HAS_LANE_SAFETY": 1, "ADAS_StrAnglReqVal": 12.3, "ADAS_ACIAnglTqRedcGainVal": 0.42, @@ -1910,18 +1936,31 @@ class TestHyundaiFingerprint: parser.update([(1, lkas_msgs)]) assert parser.can_valid - assert parser.vl["LKAS_ALT"]["LKA_MODE"] == 2 - assert parser.vl["LKAS_ALT"]["LKA_AVAILABLE"] == 3 - assert parser.vl["LKAS_ALT"]["LKA_WARNING"] == 1 + assert parser.vl["LKAS_ALT"]["LKA_OptUsmSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_RcgSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_LHLnWrnSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_RHLnWrnSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_HndsoffSnd"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_StrSnd"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_SysIndReq"] == 1 + assert parser.vl["LKAS_ALT"]["StrTqReqVal"] == 0 + assert parser.vl["LKAS_ALT"]["ActToiSta"] == 0 + assert parser.vl["LKAS_ALT"]["ToiFltSta"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_SysWrn"] == 0 + assert parser.vl["LKAS_ALT"]["Damping_Gain"] == 100 + assert parser.vl["LKAS_ALT"]["LKA_UsmMod"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_MODE"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_AVAILABLE"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_WARNING"] == 0 assert parser.vl["LKAS_ALT"]["LKA_ICON"] == 1 - assert parser.vl["LKAS_ALT"]["FCA_SYSWARN"] == 1 + assert parser.vl["LKAS_ALT"]["FCA_SYSWARN"] == 0 assert parser.vl["LKAS_ALT"]["TORQUE_REQUEST"] == 0 assert parser.vl["LKAS_ALT"]["STEER_REQ"] == 0 - assert parser.vl["LKAS_ALT"]["LFA_BUTTON"] == 1 - assert parser.vl["LKAS_ALT"]["LKA_ASSIST"] == 1 - assert parser.vl["LKAS_ALT"]["DAMP_FACTOR"] == 0 + assert parser.vl["LKAS_ALT"]["LFA_BUTTON"] == 0 + assert parser.vl["LKAS_ALT"]["LKA_ASSIST"] == 0 + assert parser.vl["LKAS_ALT"]["DAMP_FACTOR"] == 100 assert parser.vl["LKAS_ALT"]["LKAS_ANGLE_ACTIVE"] == 1 - assert parser.vl["LKAS_ALT"]["HAS_LANE_SAFETY"] == 1 + assert parser.vl["LKAS_ALT"]["HAS_LANE_SAFETY"] == 0 assert parser.vl["LKAS_ALT"]["ADAS_StrAnglReqVal"] == pytest.approx(-31.5) assert parser.vl["LKAS_ALT"]["ADAS_ACIAnglTqRedcGainVal"] == pytest.approx(0.0) diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index c0b5517e7..210546111 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -82,18 +82,31 @@ BO_ 261 ACCELERATOR_ALT: 32 XXX BO_ 272 LKAS_ALT: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ LKA_OptUsmSta : 24|3@1+ (1,0) [0|7] "" ADAS_DRV SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX + SG_ LKA_RcgSta : 27|3@1+ (1,0) [0|7] "" ADAS_DRV SG_ LKA_AVAILABLE : 27|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_LHLnWrnSta : 30|2@1+ (1,0) [0|3] "" ADAS_DRV + SG_ LKA_RHLnWrnSta : 32|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ LKA_WARNING : 32|1@1+ (1,0) [0|1] "" XXX + SG_ LKA_HndsoffSnd : 34|2@1+ (1,0) [0|3] "" ADAS_DRV + SG_ LKA_StrSnd : 36|2@1+ (1,0) [0|3] "" ADAS_DRV + SG_ LKA_SysIndReq : 38|3@1+ (1,0) [0|7] "" ADAS_DRV SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX + SG_ StrTqReqVal : 41|11@1+ (1,-1024) [0|4095] "" XXX SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX + SG_ ActToiSta : 52|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX + SG_ ToiFltSta : 54|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX + SG_ LKA_SysWrn : 60|4@1+ (1,0) [0|15] "" ADAS_DRV SG_ LKA_ASSIST : 62|1@1+ (1,0) [0|1] "" XXX + SG_ Damping_Gain : 64|8@1+ (1,0) [0|255] "" CGW SG_ STEER_MODE : 65|3@1+ (1,0) [0|1] "" XXX SG_ NEW_SIGNAL_2 : 70|2@0+ (1,0) [0|3] "" XXX SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX + SG_ LKA_UsmMod : 80|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX SG_ ADAS_StrAnglReqVal : 82|14@1- (0.1,0) [0|176.7] "Deg" GW_RGW,MDPS,SFA SG_ ADAS_ACIAnglTqRedcGainVal : 96|8@1+ (0.004,0) [0|1] "" GW_RGW,MDPS,SFA diff --git a/opendbc_repo/opendbc/dbc/hyundai_canfd_generated.dbc b/opendbc_repo/opendbc/dbc/hyundai_canfd_generated.dbc index fb9b336c1..f4c6f3c89 100644 --- a/opendbc_repo/opendbc/dbc/hyundai_canfd_generated.dbc +++ b/opendbc_repo/opendbc/dbc/hyundai_canfd_generated.dbc @@ -319,18 +319,31 @@ BO_ 261 ACCELERATOR_ALT: 32 XXX BO_ 272 LKAS_ALT: 32 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX + SG_ LKA_OptUsmSta : 24|3@1+ (1,0) [0|7] "" ADAS_DRV SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX + SG_ LKA_RcgSta : 27|3@1+ (1,0) [0|7] "" ADAS_DRV SG_ LKA_AVAILABLE : 27|2@1+ (1,0) [0|255] "" XXX + SG_ LKA_LHLnWrnSta : 30|2@1+ (1,0) [0|3] "" ADAS_DRV + SG_ LKA_RHLnWrnSta : 32|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ LKA_WARNING : 32|1@1+ (1,0) [0|1] "" XXX + SG_ LKA_HndsoffSnd : 34|2@1+ (1,0) [0|3] "" ADAS_DRV + SG_ LKA_StrSnd : 36|2@1+ (1,0) [0|3] "" ADAS_DRV + SG_ LKA_SysIndReq : 38|3@1+ (1,0) [0|7] "" ADAS_DRV SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX + SG_ StrTqReqVal : 41|11@1+ (1,-1024) [0|4095] "" XXX SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX + SG_ ActToiSta : 52|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX + SG_ ToiFltSta : 54|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX + SG_ LKA_SysWrn : 60|4@1+ (1,0) [0|15] "" ADAS_DRV SG_ LKA_ASSIST : 62|1@1+ (1,0) [0|1] "" XXX + SG_ Damping_Gain : 64|8@1+ (1,0) [0|255] "" CGW SG_ STEER_MODE : 65|3@1+ (1,0) [0|1] "" XXX SG_ NEW_SIGNAL_2 : 70|2@0+ (1,0) [0|3] "" XXX SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX + SG_ LKA_UsmMod : 80|2@1+ (1,0) [0|3] "" ADAS_DRV SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX SG_ ADAS_StrAnglReqVal : 82|14@1- (0.1,0) [0|176.7] "Deg" GW_RGW,MDPS,SFA SG_ ADAS_ACIAnglTqRedcGainVal : 96|8@1+ (0.004,0) [0|1] "" GW_RGW,MDPS,SFA