From b52bf0dd3f27f4f8b336e8c9ee7611de108ccbb5 Mon Sep 17 00:00:00 2001 From: ajouatom Date: Mon, 15 Dec 2025 17:24:35 +0900 Subject: [PATCH 01/19] fix.. carrot_man.. --- selfdrive/carrot/carrot_man.py | 1 + 1 file changed, 1 insertion(+) diff --git a/selfdrive/carrot/carrot_man.py b/selfdrive/carrot/carrot_man.py index 24f4d4f1f8..50525c1e52 100644 --- a/selfdrive/carrot/carrot_man.py +++ b/selfdrive/carrot/carrot_man.py @@ -379,6 +379,7 @@ def carrot_speed_serv(self, carrot_speed, frame): self.v_cruise_last = CS.vCruise else: self.v_cruise_change = 0 + return v_cruise_apply = max(min(CS.vCruise, v_ego_kph), 20) now = time.monotonic() From f19fdad01850313f3b00d60884d20fa6c63134b7 Mon Sep 17 00:00:00 2001 From: ajouatom Date: Wed, 17 Dec 2025 14:49:24 +0900 Subject: [PATCH 02/19] test blinker (left)_ --- opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py | 2 ++ opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index bd28358b52..996d8e1857 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -588,6 +588,8 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_DISTANCE'] = 2 values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ + if canfd_debug > 0: + values['LEFT_LANE_CHANGING'] = 1 ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) if CS.adrv_info_162 is not None: diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 2436f92f2b..1099c8e935 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -512,6 +512,11 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX SG_ HDA_MODE1 : 31|8@0+ (1,0) [0|255] "" XXX SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_4 : 35|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_8 : 36|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_LANE_CHANGING : 43|1@0+ (1,0) [0|1] "" XXX + SG_ NEW_SIGNAL_9 : 44|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_LANE_CHANGING : 45|1@0+ (1,0) [0|1] "" XXX SG_ LF_DETECT_DISTANCE : 46|11@1+ (0.1,0) [0|2047] "" XXX SG_ LF_DETECT_LATERAL : 70|7@0+ (0.1,0) [0|127] "" XXX SG_ LF_DETECT : 74|3@0+ (1,0) [0|7] "" XXX From f1bac28c41ca598d2abac8417075d22fb91802d4 Mon Sep 17 00:00:00 2001 From: ajouatom Date: Wed, 17 Dec 2025 15:14:05 +0900 Subject: [PATCH 03/19] fix. --- opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py | 3 ++- .../opendbc/dbc/generator/hyundai/hyundai_canfd.dbc | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 996d8e1857..b4c0fdfecd 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -589,7 +589,8 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ if canfd_debug > 0: - values['LEFT_LANE_CHANGING'] = 1 + values['LANE_CHANGING'] = 1 + values['LEFT1'] = 1 ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) if CS.adrv_info_162 is not None: diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 1099c8e935..0e44e46ab7 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -514,8 +514,10 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX SG_ NEW_SIGNAL_4 : 35|1@0+ (1,0) [0|1] "" XXX SG_ NEW_SIGNAL_8 : 36|1@0+ (1,0) [0|1] "" XXX - SG_ LEFT_LANE_CHANGING : 43|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_9 : 44|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT1 : 40|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT2 : 41|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT1 : 43|1@0+ (1,0) [0|1] "" XXX + SG_ LANE_CHANGING : 44|1@0+ (1,0) [0|1] "" XXX SG_ RIGHT_LANE_CHANGING : 45|1@0+ (1,0) [0|1] "" XXX SG_ LF_DETECT_DISTANCE : 46|11@1+ (0.1,0) [0|2047] "" XXX SG_ LF_DETECT_LATERAL : 70|7@0+ (0.1,0) [0|127] "" XXX From 703e3104119835223897c70ab358bb6541a7cb71 Mon Sep 17 00:00:00 2001 From: thftgr Date: Wed, 17 Dec 2025 22:26:49 +0900 Subject: [PATCH 04/19] 5w autolane cluster test --- .../opendbc/car/hyundai/hyundaicanfd.py | 105 ++++++++++++++++-- .../dbc/generator/hyundai/hyundai_canfd.dbc | 30 ++--- 2 files changed, 113 insertions(+), 22 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index b4c0fdfecd..352d6ef45f 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -149,7 +149,7 @@ def create_steering_messages_camera_scc(frame, packer, CP, CAN, CC, lat_active, values["HAS_LANE_SAFETY"] = 0 values["LKA_ACTIVE"] = 0 # NEW_SIGNAL_1 - values["DampingGain"] = 0 if lat_active else 100 + values["DampingGain"] = 0 if lat_active else 100 #values["VALUE63"] = 0 #values["VALUE82_SET256"] = 0 @@ -274,7 +274,7 @@ def create_lfahda_cluster(packer, CS, CAN, long_active, lat_active): values["HDA_CntrlModSta"] = 2 if long_active else 0 values["HDA_LFA_SymSta"] = 2 if lat_active else 0 - # + # else: return [] return [packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values)] @@ -289,7 +289,7 @@ def create_acc_control_scc2(packer, CAN, enabled, accel_last, accel, stopping, g acc_mode = 4 if enabled else 0 enabled = False accel = accel_last = 0.5 - + elif hyundai_jerk.carrot_cruise == 2: accel = accel_last = hyundai_jerk.carrot_cruise_accel @@ -346,7 +346,7 @@ def create_acc_control_scc2(packer, CAN, enabled, accel_last, accel, stopping, g # AccelLimitBandUpper, Lower values["SysFailState"] = 0 # 1: Performance degredation, 2: system temporairy unavailble, 3: SCC Service required , 눈이 묻어 레이더오류시... 2가 됨. 이때 가속을 안함... - values["AccelLimitBandUpper"] = 0.0 # 이값이 1.26일때 가속을 안하는 증상이 보임.. + values["AccelLimitBandUpper"] = 0.0 # 이값이 1.26일때 가속을 안하는 증상이 보임.. values["AccelLimitBandLower"] = 0.0 return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) @@ -540,7 +540,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["LANELINE_CURVATURE"] = (min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) if lat_active else 0 values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 and lat_active else 0 - # lane_color = 6 if lat_active else 2 + # lane_color = 6 if lat_active else 2 lane_color = 2 # 6: green, 2: white, 4: yellow if hud_control.leftLaneDepart: values["LANELINE_LEFT"] = 4 if (frame // 50) % 2 == 0 else 1 @@ -568,6 +568,8 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle if CS.adrv_info_1ea is not None: values = copy.copy(CS.adrv_info_1ea) + lat_active = CC.latActive + #values["HDA_MODE1"] = 8 #values["HDA_MODE2"] = 1 if values['LF_DETECT'] == 0 and hud_control.leadLeftDist > 0: @@ -589,8 +591,95 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ if canfd_debug > 0: - values['LANE_CHANGING'] = 1 - values['LEFT1'] = 1 + # values['LEFTBLINK1'] = 1 + + values['AUTOLANECHANGE_MSG_MAYBE'] = canfd_debug # 급커브 구간입니다. + + # values['AUTOLANECHANGE_MSG_MAYBE'] = 1 # 주변 상황을 확인하세요 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 2 # 작동 조건이 아닙니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 3 # 주행 차로를 분석중입니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 4 # 급커브 구간입니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 5 # 주행 중인 차로의 폭이 좁습니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 6 # 작동 구간이 아닙니다. + # values['AUTOLANECHANGE_MSG_MAYBE'] = 7 # 비상등이 켜져있습니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 8 # 주행속도가 낮습니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 9 # 핸들을 잡으십시오 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 10 # 작동 가능한 차로가 아닙니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 11 # 핸들 조작이 감지되었습니다. + # values['AUTOLANECHANGE_MSG_MAYBE'] = 12 # ok 버튼을 누르면 차로변경 보조기능이 켜집니다 + # values['AUTOLANECHANGE_MSG_MAYBE'] = 13 # 없음. + # values['AUTOLANECHANGE_MSG_MAYBE'] = 14 # 없음. + # values['AUTOLANECHANGE_MSG_MAYBE'] = 15 # 없음. + + # SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX + # values['HDA_MODE2'] = 1 # 0b001 차선변경 아이콘 회색 + # values['HDA_MODE2'] = 2 # 0b010 옆차선 녹색 + 차선변경 아이콘 녹색 + # values['HDA_MODE2'] = 3 # 0b011 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 + # values['HDA_MODE2'] = 4 # 0b100 옆차선 흰색 + 차선변경 아이콘 흰색 둘이 같이 삐르게 점멸 + # values['HDA_MODE2'] = 5 # 0b101 차로변경보조 기능 점검 경고 + # values['HDA_MODE2'] = 6 # 0b110 딱히 뭐 없음 + # values['HDA_MODE2'] = 7 # 0b111 딱히 뭐 없음 + + # 0 "IDLE" 1 "LEFT_CHECK" 3 "LEFT_CHANGING" 2 "RIGHT_CHECK" 4 "RIGHT_CHANGING"; + # 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; + + # SG_ LANE_CHANGING_1 : 45|3@0+ (1,0) [0|1] "" XXX + # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 + # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 + # values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 # 차선하나 넘어가면 꺼지는듯 + # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 # 차선하나 넘어가면 꺼지는듯 + # values['LANE_CHANGING_1'] = 5 # 딱히 뭐 없음 + # values['LANE_CHANGING_1'] = 6 # 딱히 뭐 없음 + # values['LANE_CHANGING_1'] = 7 # 딱히 뭐 없음 + + + + + # 차선 커브 + curvature = round(CS.out.steeringAngleDeg / 3) + # print(f"curvature1: {curvature}") + # print(f"curvature2: {max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) if lat_active else 0}") + # print(f"curvature3: {1 if curvature < 0 and lat_active else 0}") + # print(f"curvature2: {max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) }") + # print(f"curvature3: {1 if curvature < 0 else 0}") + + values["LANELINE_CURVATURE"] = max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) + values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 else 0 + + + # SG_ NEW_SIGNAL_3 : 239|8@0+ (1,0) [0|255] "" XXX + # SG_ NEW_SIGNAL_1 : 247|8@0+ (1,0) [0|255] "" XXX + # 15:15 둘이 합계가 30 임 차선이동간격인듯? + # 반응 없음 + # values['NEW_SIGNAL_3'] = 15 + # values['NEW_SIGNAL_1'] = 15 + + # LANE_CHANGING_1 이걸 같이 줘야 클러스터에서도 켜져있음.. 안주면 HUD 만 나옴 + # 차선변경 진행에 따라서 주면 될듯 + # print(f"FRAME: {frame}") + # tttctu = ((frame / 5) % 31) + # values['NEW_SIGNAL_3'] = (tttctu + 15) % 31 + # values['NEW_SIGNAL_1'] = (15 + 31 - tttctu) % 31 + # values['HDA_MODE2'] = 2 + + + # 차선변경 애니메이션 + # values['RIGHTBLINK1'] = 1 # 깜빡이 홀드 + # if tttctu == 0 : + # # 초기화를 안해주면 화살표가 안나옴 + # values['RIGHTBLINK1'] = 0 # 깜빡이 홀드 해제 + # values['LANE_CHANGING_1'] = 0 + # elif tttctu < 5 : + # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 + # else: + # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 + + + # tttctu = ((frame / 5) % 31) + # values['NEW_SIGNAL_3'] = 0 + tttctu + # values['NEW_SIGNAL_1'] = 30 - tttctu + + ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) if CS.adrv_info_162 is not None: @@ -714,7 +803,7 @@ def alt_cruise_buttons(packer, CP, CAN, buttons, cruise_btns_msg, cnt): cruise_btns_msg["COUNTER"] = (cruise_btns_msg["COUNTER"] + 1 + cnt) % 256 bus = CAN.ECAN if CP.flags & HyundaiFlags.CANFD_HDA2 else CAN.CAM return packer.make_can_msg("CRUISE_BUTTONS_ALT", bus, cruise_btns_msg) - + def hkg_can_fd_checksum(address: int, sig, d: bytearray) -> int: crc = 0 for i in range(2, len(d)): diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 0e44e46ab7..93548f8897 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -506,19 +506,16 @@ BO_ 480 LFAHDA_CLUSTER: 16 FR_CMR SG_ HDA_LFA_WrnSnd : 49|2@1+ (1,0) [0|0] "" Dummy SG_ HDA_InfoPUDis1 : 51|3@1+ (1,0) [0|7] "" CLU,CGW SG_ HDA_TDMRMDclReq : 54|2@1+ (1,0) [0|3] "" Dummy - + BO_ 490 ADRV_0x1ea: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ HDA_MODE1 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ LEFTBLINK1 : 29|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHTBLINK1 : 30|1@0+ (1,0) [0|1] "" XXX SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_4 : 35|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_8 : 36|1@0+ (1,0) [0|1] "" XXX - SG_ RIGHT1 : 40|1@0+ (1,0) [0|1] "" XXX - SG_ RIGHT2 : 41|1@0+ (1,0) [0|1] "" XXX - SG_ LEFT1 : 43|1@0+ (1,0) [0|1] "" XXX - SG_ LANE_CHANGING : 44|1@0+ (1,0) [0|1] "" XXX - SG_ RIGHT_LANE_CHANGING : 45|1@0+ (1,0) [0|1] "" XXX + SG_ LANE_LEFT : 36|2@0+ (1,0) [0|3] "" XXX + SG_ LANE_RIGHT : 41|2@0+ (1,0) [0|3] "" XXX + SG_ LANE_CHANGING_1 : 45|3@0+ (1,0) [0|1] "" XXX SG_ LF_DETECT_DISTANCE : 46|11@1+ (0.1,0) [0|2047] "" XXX SG_ LF_DETECT_LATERAL : 70|7@0+ (0.1,0) [0|127] "" XXX SG_ LF_DETECT : 74|3@0+ (1,0) [0|7] "" XXX @@ -532,11 +529,12 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ CORNER_RR_DIST : 162|9@1+ (0.1,0) [0|511] "m" XXX SG_ CORNER_RR_DETECT : 172|6@1+ (1,0) [0|63] "" XXX SG_ CORNER_RR_SIG : 184|1@0+ (1,0) [0|1] "" XXX - SG_ NEW_SIGNAL_5 : 205|1@0+ (1,0) [0|1] "" XXX - SG_ AUTOLANECHANGE_CONFIRM_MSG_MAYBE : 207|2@0+ (1,0) [0|3] "" XXX - SG_ NEW_SIGNAL_2 : 208|5@1+ (1,0) [0|31] "" XXX - SG_ NEW_SIGNAL_3 : 239|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_1 : 247|8@0+ (1,0) [0|255] "" XXX + SG_ AUTOLANECHANGE_MSG : 207|4@0+ (1,0) [0|3] "" XXX + SG_ LANELINE_CURVATURE : 208|4@1+ (1,0) [0|31] "" XXX + SG_ LANELINE_CURVATURE_DIRECTION : 212|1@0+ (1,0) [0|1] "" XXX + SG_ LANELINE_LEFT_POSITION : 239|8@0+ (1,0) [0|255] "" XXX + SG_ LANELINE_RIGHT_POSITION : 247|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_7 : 248|1@0+ (1,0) [0|1] "" XXX BO_ 507 CAM_0x1fb: 32 CAMERA SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX @@ -1001,6 +999,10 @@ VAL_ 480 HDA_LFA_SymSta 0 "Off" 1 "Gray" 2 "Green" 3 "Green blink" ; VAL_ 480 HDA_LFA_WrnSnd 0 "Off " 1 "Additional Warning Sound" 2 "Reserved" 3 "Error indicator" ; VAL_ 480 HDA_InfoPUDis1 0 "No Pop-up" 1 "System Automatic off (LFA)" 2 "System Automatic off (HDA)" 3 "Reserved" 4 "Reserved" 5 "Reserved" 6 "Not Used" 7 "Error Indicator" ; VAL_ 480 HDA_TDMRMDclReq 0 "Not automatically deactivated state of LFA (default)" 1 "Automatically deactivated state of LFA" 2 "Reserved" 3 "Reserved" ; +VAL_ 490 LANE_LEFT 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; +VAL_ 490 LANE_RIGHT 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; +VAL_ 490 LANE_CHANGING_1 0 "IDLE" 1 "LEFT_CHECK" 3 "LEFT_CHANGING" 2 "RIGHT_CHECK" 4 "RIGHT_CHANGING"; +VAL_ 490 LANELINE_CURVATURE_DIRECTION 0 "LEFT" 1 "RIGHT"; VAL_ 676 LEFT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 676 RIGHT_LANE_LINE 0 "Not Detected" 1 "Low Confidence" 2 "Medium Confidence" 3 "High Confidence"; VAL_ 736 MSLA_STATUS 0 "disabled" 1 "active" 2 "paused"; From cd13bf6a7001d4737ebb7e83c0f6a0f328514bd3 Mon Sep 17 00:00:00 2001 From: thftgr Date: Wed, 17 Dec 2025 23:29:56 +0900 Subject: [PATCH 05/19] =?UTF-8?q?=EC=B0=A8=EC=84=A0=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9,=20=EC=BB=A4=EB=B8=8C=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opendbc/car/hyundai/hyundaicanfd.py | 158 +++++++++--------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 352d6ef45f..43ce03f4e8 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -590,95 +590,95 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_DISTANCE'] = 2 values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ + # 차선 커브 HUD 랑 클러스터 둘다 휘어짐 + if lat_active or canfd_debug > 0: + curvature = round(CS.out.steeringAngleDeg / 3) + values["LANELINE_CURVATURE"] = max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) + values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 else 0 + else: + # 설정 안하면 0 이니까 굳이 할필요 있나? + values["LANELINE_CURVATURE"] = 0 + values["LANELINE_CURVATURE_DIRECTION"] = 0 + if canfd_debug > 0: - # values['LEFTBLINK1'] = 1 - - values['AUTOLANECHANGE_MSG_MAYBE'] = canfd_debug # 급커브 구간입니다. - - # values['AUTOLANECHANGE_MSG_MAYBE'] = 1 # 주변 상황을 확인하세요 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 2 # 작동 조건이 아닙니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 3 # 주행 차로를 분석중입니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 4 # 급커브 구간입니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 5 # 주행 중인 차로의 폭이 좁습니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 6 # 작동 구간이 아닙니다. - # values['AUTOLANECHANGE_MSG_MAYBE'] = 7 # 비상등이 켜져있습니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 8 # 주행속도가 낮습니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 9 # 핸들을 잡으십시오 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 10 # 작동 가능한 차로가 아닙니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 11 # 핸들 조작이 감지되었습니다. - # values['AUTOLANECHANGE_MSG_MAYBE'] = 12 # ok 버튼을 누르면 차로변경 보조기능이 켜집니다 - # values['AUTOLANECHANGE_MSG_MAYBE'] = 13 # 없음. - # values['AUTOLANECHANGE_MSG_MAYBE'] = 14 # 없음. - # values['AUTOLANECHANGE_MSG_MAYBE'] = 15 # 없음. - - # SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX - # values['HDA_MODE2'] = 1 # 0b001 차선변경 아이콘 회색 - # values['HDA_MODE2'] = 2 # 0b010 옆차선 녹색 + 차선변경 아이콘 녹색 - # values['HDA_MODE2'] = 3 # 0b011 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 - # values['HDA_MODE2'] = 4 # 0b100 옆차선 흰색 + 차선변경 아이콘 흰색 둘이 같이 삐르게 점멸 - # values['HDA_MODE2'] = 5 # 0b101 차로변경보조 기능 점검 경고 - # values['HDA_MODE2'] = 6 # 0b110 딱히 뭐 없음 - # values['HDA_MODE2'] = 7 # 0b111 딱히 뭐 없음 - - # 0 "IDLE" 1 "LEFT_CHECK" 3 "LEFT_CHANGING" 2 "RIGHT_CHECK" 4 "RIGHT_CHANGING"; - # 0 "IDLE" 1 "ON_SOURCE" 2 "ON_TARGET"; - - # SG_ LANE_CHANGING_1 : 45|3@0+ (1,0) [0|1] "" XXX + # values['LEFTBLINK1'] = 1 # 좌깜빡이 켜진상태 유지 + # values['RIGHTBLINK1'] = 1 # 우깜빡이 켜진상태 유지 + + # 이것들은 hud랑 연비막대 자리에 텍스트로 나옴 + # values['AUTOLANECHANGE_MSG'] = 1 # 주변 상황을 확인하세요 + # values['AUTOLANECHANGE_MSG'] = 2 # 작동 조건이 아닙니다 + # values['AUTOLANECHANGE_MSG'] = 3 # 주행 차로를 분석중입니다 + # values['AUTOLANECHANGE_MSG'] = 4 # 급커브 구간입니다 + # values['AUTOLANECHANGE_MSG'] = 5 # 주행 중인 차로의 폭이 좁습니다 + # values['AUTOLANECHANGE_MSG'] = 6 # 작동 구간이 아닙니다. + # values['AUTOLANECHANGE_MSG'] = 7 # 비상등이 켜져있습니다 + # values['AUTOLANECHANGE_MSG'] = 8 # 주행속도가 낮습니다 + # values['AUTOLANECHANGE_MSG'] = 9 # 핸들을 잡으십시오 + # values['AUTOLANECHANGE_MSG'] = 10 # 작동 가능한 차로가 아닙니다 + # values['AUTOLANECHANGE_MSG'] = 11 # 핸들 조작이 감지되었습니다. + # 얘는 우측 RPM 게이지에 크게 나옴 + # values['AUTOLANECHANGE_MSG'] = 12 # ok 버튼을 누르면 차로변경 보조기능이 켜집니다 + # values['AUTOLANECHANGE_MSG'] = 13 # 없음. + # values['AUTOLANECHANGE_MSG'] = 14 # 없음. + # values['AUTOLANECHANGE_MSG'] = 15 # 없음. + + # values['HDA_MODE2'] = 1 # 차선변경 아이콘 회색 + # values['HDA_MODE2'] = 2 # 옆차선 녹색 + 차선변경 아이콘 녹색 + # values['HDA_MODE2'] = 3 # 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 + # values['HDA_MODE2'] = 4 # 옆차선 흰색 + 차선변경 아이콘 흰색 둘이 같이 삐르게 점멸 + # values['HDA_MODE2'] = 5 # 차로변경보조 기능 점검 경고 + # values['HDA_MODE2'] = 6 # 딱히 뭐 없음 + # values['HDA_MODE2'] = 7 # 딱히 뭐 없음 + + # LANELINE_X_POSITION 값을 줘서 차선을 하나 넘어가면 화살표가 사라지는데 0 한번 넣어주면 다시 나옴. # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 - # values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 # 차선하나 넘어가면 꺼지는듯 - # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 # 차선하나 넘어가면 꺼지는듯 + # values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 + # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 # values['LANE_CHANGING_1'] = 5 # 딱히 뭐 없음 # values['LANE_CHANGING_1'] = 6 # 딱히 뭐 없음 # values['LANE_CHANGING_1'] = 7 # 딱히 뭐 없음 + # 자동차선변경할때 차선 포지션 15 중앙 0~30 + # 좌, 우 둘다 중앙 기준에서 각 방향으로 멀어짐 + # L30 R30 이면 아주 넓은 차선을 가짐. + # 어쩌면 콤마가 인식하는 차선폭 보고 조정 가능할듯.. + # 새로운 차선이 생기는게 아니라 그냥 반대방향으로 텔레포트 시킴.. ㅋㅋ + # LANE_CHANGING_1 이거 안켜주면 hud 에서만 움직임.. + if canfd_debug == 1: + # 중앙 + values['HDA_MODE2'] = 2 + values['LANE_CHANGING_1'] = 0 + values['LANELINE_LEFT_POSITION'] = 15 + values['LANELINE_RIGHT_POSITION'] = 15 + elif canfd_debug == 2: + # 왼쪽 + values['HDA_MODE2'] = 3 + lp_counter = (frame / 5) % 31 + if lp_counter == 0 : + values['LANE_CHANGING_1'] = 0 + else: + # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 + values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 + + values['LANELINE_LEFT_POSITION'] = (15 - lp_counter + 31) % 31 + values['LANELINE_RIGHT_POSITION'] = (lp_counter + 15) % 31 + + elif canfd_debug == 3: + # 오른쪽 + values['HDA_MODE2'] = 3 + lp_counter = (frame / 5) % 31 + if lp_counter == 0 : + values['LANE_CHANGING_1'] = 0 + else: + # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 + values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 + + values['LANELINE_LEFT_POSITION'] = (lp_counter + 15) % 31 + values['LANELINE_RIGHT_POSITION'] = (15 - lp_counter + 31) % 31 - # 차선 커브 - curvature = round(CS.out.steeringAngleDeg / 3) - # print(f"curvature1: {curvature}") - # print(f"curvature2: {max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) if lat_active else 0}") - # print(f"curvature3: {1 if curvature < 0 and lat_active else 0}") - # print(f"curvature2: {max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) }") - # print(f"curvature3: {1 if curvature < 0 else 0}") - - values["LANELINE_CURVATURE"] = max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) - values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 else 0 - - - # SG_ NEW_SIGNAL_3 : 239|8@0+ (1,0) [0|255] "" XXX - # SG_ NEW_SIGNAL_1 : 247|8@0+ (1,0) [0|255] "" XXX - # 15:15 둘이 합계가 30 임 차선이동간격인듯? - # 반응 없음 - # values['NEW_SIGNAL_3'] = 15 - # values['NEW_SIGNAL_1'] = 15 - - # LANE_CHANGING_1 이걸 같이 줘야 클러스터에서도 켜져있음.. 안주면 HUD 만 나옴 - # 차선변경 진행에 따라서 주면 될듯 - # print(f"FRAME: {frame}") - # tttctu = ((frame / 5) % 31) - # values['NEW_SIGNAL_3'] = (tttctu + 15) % 31 - # values['NEW_SIGNAL_1'] = (15 + 31 - tttctu) % 31 - # values['HDA_MODE2'] = 2 - - - # 차선변경 애니메이션 - # values['RIGHTBLINK1'] = 1 # 깜빡이 홀드 - # if tttctu == 0 : - # # 초기화를 안해주면 화살표가 안나옴 - # values['RIGHTBLINK1'] = 0 # 깜빡이 홀드 해제 - # values['LANE_CHANGING_1'] = 0 - # elif tttctu < 5 : - # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 - # else: - # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 - - - # tttctu = ((frame / 5) % 31) - # values['NEW_SIGNAL_3'] = 0 + tttctu - # values['NEW_SIGNAL_1'] = 30 - tttctu - ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) From 9424ee1fd30001d1e61094379698342975c09b5b Mon Sep 17 00:00:00 2001 From: thftgr Date: Thu, 18 Dec 2025 23:24:52 +0900 Subject: [PATCH 06/19] =?UTF-8?q?=EC=98=86=EB=91=90=EB=B6=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opendbc/car/hyundai/hyundaicanfd.py | 116 ++++++++++++------ .../dbc/generator/hyundai/hyundai_canfd.dbc | 12 +- 2 files changed, 82 insertions(+), 46 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 43ce03f4e8..62d9f5b4c5 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -572,6 +572,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle #values["HDA_MODE1"] = 8 #values["HDA_MODE2"] = 1 + """ if values['LF_DETECT'] == 0 and hud_control.leadLeftDist > 0: values['LF_DETECT'] = 3 if hud_control.leadLeftDist > 30 else 4 values['LF_DETECT_DISTANCE'] = hud_control.leadLeftDist @@ -580,7 +581,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RF_DETECT'] = 3 if hud_control.leadRightDist > 30 else 4 values['RF_DETECT_DISTANCE'] = hud_control.leadRightDist values['RF_DETECT_LATERAL'] = hud_control.leadRightLat - """ + if values['LR_DETECT'] == 0 and hud_control.leadLeftDist2 > 0: values['LR_DETECT'] = 4 values['LR_DETECT_DISTANCE'] = 2 @@ -590,17 +591,55 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_DISTANCE'] = 2 values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ - # 차선 커브 HUD 랑 클러스터 둘다 휘어짐 - if lat_active or canfd_debug > 0: - curvature = round(CS.out.steeringAngleDeg / 3) - values["LANELINE_CURVATURE"] = max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) - values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 else 0 - else: - # 설정 안하면 0 이니까 굳이 할필요 있나? - values["LANELINE_CURVATURE"] = 0 - values["LANELINE_CURVATURE_DIRECTION"] = 0 - if canfd_debug > 0: + # values['LF_DETECT'] = 0 안나옴 + # values['LF_DETECT'] = 1 회색 + # values['LF_DETECT'] = 2 흰색 + # values['LF_DETECT'] = 3 흰색 + # values['LF_DETECT'] = 4 안나옴 + + # 3.6 ~ 4.5 까지 서서히 어두워지다 사라짐 + # values['LF_DETECT_LATERAL'] = 0 ~ 4.5 + # values['LF_DETECT'] = 2 # 2 랑 3 둘다 동일한듯 + + # 0 ~ 150. 근데 100 부터는 동일함 + # values['LF_DETECT_DISTANCE'] = 50 + + values['LF_DETECT'] = 3 + values['LF_DETECT_LATERAL'] = 3.0 + values['LF_DETECT_DISTANCE'] = 0 + + values['RF_DETECT'] = 3 + values['RF_DETECT_LATERAL'] = 3.0 + values['RF_DETECT_DISTANCE'] = 0 + + + values['CORNER_LR_SIG'] = 1 + values['CORNER_LR_DETECT'] = 3.0 + values['CORNER_LR_DIST'] = 10 # 0 ~ 14 15부터 안보임 + + values['CORNER_RR_SIG'] = 1 + values['CORNER_RR_DETECT'] = 3.0 + values['CORNER_RR_DIST'] = 10 # 0 ~ 14 15부터 안보임 + + + # if canfd_debug == 1: + # values['LF_DETECT'] = 0 + # values['LF_DETECT_LATERAL'] = 2.9 + # values['LF_DETECT_DISTANCE'] = 12.0 + # elif canfd_debug == 2: + # values['LF_DETECT'] = 2 + # values['LF_DETECT_LATERAL'] = 3.1 + # values['LF_DETECT_DISTANCE'] = 12.0 + # elif canfd_debug == 3: + # values['LF_DETECT'] = 3 + # values['LF_DETECT_LATERAL'] = 3.2 + # values['LF_DETECT_DISTANCE'] = 12.0 + # elif canfd_debug == 4: + # values['LF_DETECT'] = 4 + # values['LF_DETECT_LATERAL'] = 3.3 + # values['LF_DETECT_DISTANCE'] = 12.0 + # values['LEFTBLINK1'] = 1 # 좌깜빡이 켜진상태 유지 # values['RIGHTBLINK1'] = 1 # 우깜빡이 켜진상태 유지 @@ -645,40 +684,37 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle # 어쩌면 콤마가 인식하는 차선폭 보고 조정 가능할듯.. # 새로운 차선이 생기는게 아니라 그냥 반대방향으로 텔레포트 시킴.. ㅋㅋ # LANE_CHANGING_1 이거 안켜주면 hud 에서만 움직임.. - if canfd_debug == 1: + if canfd_debug > 0: # 중앙 values['HDA_MODE2'] = 2 values['LANE_CHANGING_1'] = 0 values['LANELINE_LEFT_POSITION'] = 15 values['LANELINE_RIGHT_POSITION'] = 15 - elif canfd_debug == 2: - # 왼쪽 - values['HDA_MODE2'] = 3 - lp_counter = (frame / 5) % 31 - if lp_counter == 0 : - values['LANE_CHANGING_1'] = 0 - else: - # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 - values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 - - values['LANELINE_LEFT_POSITION'] = (15 - lp_counter + 31) % 31 - values['LANELINE_RIGHT_POSITION'] = (lp_counter + 15) % 31 - - elif canfd_debug == 3: - # 오른쪽 - values['HDA_MODE2'] = 3 - lp_counter = (frame / 5) % 31 - if lp_counter == 0 : - values['LANE_CHANGING_1'] = 0 - else: - # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 - values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 - - values['LANELINE_LEFT_POSITION'] = (lp_counter + 15) % 31 - values['LANELINE_RIGHT_POSITION'] = (15 - lp_counter + 31) % 31 - - - + # elif canfd_debug == 2: + # # 왼쪽 + # values['HDA_MODE2'] = 3 + # lp_counter = (frame / 5) % 31 + # if lp_counter == 0 : + # values['LANE_CHANGING_1'] = 0 + # else: + # # values['LANE_CHANGING_1'] = 1 # 왼쪽 화살표 + # values['LANE_CHANGING_1'] = 3 # 왼쪽 화살표 + 바닥 + + # values['LANELINE_LEFT_POSITION'] = (15 - lp_counter + 31) % 31 + # values['LANELINE_RIGHT_POSITION'] = (lp_counter + 15) % 31 + + # elif canfd_debug == 3: + # # 오른쪽 + # values['HDA_MODE2'] = 3 + # lp_counter = (frame / 5) % 31 + # if lp_counter == 0 : + # values['LANE_CHANGING_1'] = 0 + # else: + # # values['LANE_CHANGING_1'] = 2 # 오른쪽 화살표 + # values['LANE_CHANGING_1'] = 4 # 오른쪽 화살표 + 바닥 + + # values['LANELINE_LEFT_POSITION'] = (lp_counter + 15) % 31 + # values['LANELINE_RIGHT_POSITION'] = (15 - lp_counter + 31) % 31 ret.append(packer.make_can_msg("ADRV_0x1ea", CAN.ECAN, values)) diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 93548f8897..d1d7c0f5be 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -523,12 +523,12 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ RF_DETECT_LATERAL : 94|7@0+ (0.1,0) [0|127] "" XXX SG_ RF_DETECT : 98|3@0+ (1,0) [0|7] "" XXX SG_ SET_ME_FF : 120|8@1+ (1,0) [0|255] "" XXX - SG_ CORNER_LR_DIST : 138|9@1+ (0.1,0) [0|511] "m" XXX - SG_ CORNER_LR_DETECT : 152|6@1+ (1,0) [0|63] "" XXX - SG_ CORNER_LR_SIG : 160|1@0+ (1,0) [0|1] "" XXX - SG_ CORNER_RR_DIST : 162|9@1+ (0.1,0) [0|511] "m" XXX - SG_ CORNER_RR_DETECT : 172|6@1+ (1,0) [0|63] "" XXX - SG_ CORNER_RR_SIG : 184|1@0+ (1,0) [0|1] "" XXX + SG_ CORNER_LR_DIST : 139|8@1+ (0.1,0) [0|511] "m" XXX + SG_ CORNER_LR_DETECT : 152|6@1+ (0.1,0) [0|63] "" XXX + SG_ CORNER_LR_SIG : 162|3@0+ (1,0) [0|1] "" XXX + SG_ CORNER_RR_DIST : 163|8@1+ (0.1,0) [0|511] "m" XXX + SG_ CORNER_RR_DETECT : 172|6@1+ (0.1,0) [0|63] "" XXX + SG_ CORNER_RR_SIG : 186|3@0+ (1,0) [0|1] "" XXX SG_ AUTOLANECHANGE_MSG : 207|4@0+ (1,0) [0|3] "" XXX SG_ LANELINE_CURVATURE : 208|4@1+ (1,0) [0|31] "" XXX SG_ LANELINE_CURVATURE_DIRECTION : 212|1@0+ (1,0) [0|1] "" XXX From 7ac6e5f3016782986459f78940c41ea8bffd5536 Mon Sep 17 00:00:00 2001 From: thftgr Date: Sun, 21 Dec 2025 20:15:29 +0900 Subject: [PATCH 07/19] f --- .../dbc/generator/hyundai/hyundai_canfd.dbc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index d1d7c0f5be..c2d1a01286 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -510,12 +510,12 @@ BO_ 480 LFAHDA_CLUSTER: 16 FR_CMR BO_ 490 ADRV_0x1ea: 32 ADRV SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX - SG_ LEFTBLINK1 : 29|1@0+ (1,0) [0|1] "" XXX - SG_ RIGHTBLINK1 : 30|1@0+ (1,0) [0|1] "" XXX + SG_ LEFT_BLINK_HOLD : 29|1@0+ (1,0) [0|1] "" XXX + SG_ RIGHT_BLINK_HOLD : 30|1@0+ (1,0) [0|1] "" XXX SG_ HDA_MODE2 : 32|3@1+ (1,0) [0|3] "" XXX SG_ LANE_LEFT : 36|2@0+ (1,0) [0|3] "" XXX SG_ LANE_RIGHT : 41|2@0+ (1,0) [0|3] "" XXX - SG_ LANE_CHANGING_1 : 45|3@0+ (1,0) [0|1] "" XXX + SG_ LANE_CHANGING : 45|3@0+ (1,0) [0|1] "" XXX SG_ LF_DETECT_DISTANCE : 46|11@1+ (0.1,0) [0|2047] "" XXX SG_ LF_DETECT_LATERAL : 70|7@0+ (0.1,0) [0|127] "" XXX SG_ LF_DETECT : 74|3@0+ (1,0) [0|7] "" XXX @@ -523,12 +523,12 @@ BO_ 490 ADRV_0x1ea: 32 ADRV SG_ RF_DETECT_LATERAL : 94|7@0+ (0.1,0) [0|127] "" XXX SG_ RF_DETECT : 98|3@0+ (1,0) [0|7] "" XXX SG_ SET_ME_FF : 120|8@1+ (1,0) [0|255] "" XXX - SG_ CORNER_LR_DIST : 139|8@1+ (0.1,0) [0|511] "m" XXX - SG_ CORNER_LR_DETECT : 152|6@1+ (0.1,0) [0|63] "" XXX - SG_ CORNER_LR_SIG : 162|3@0+ (1,0) [0|1] "" XXX - SG_ CORNER_RR_DIST : 163|8@1+ (0.1,0) [0|511] "m" XXX - SG_ CORNER_RR_DETECT : 172|6@1+ (0.1,0) [0|63] "" XXX - SG_ CORNER_RR_SIG : 186|3@0+ (1,0) [0|1] "" XXX + SG_ LR_DETECT_DISTANCE : 139|8@1+ (0.1,0) [0|511] "m" XXX + SG_ LR_DETECT_LATERAL : 152|6@1+ (0.1,0) [0|63] "" XXX + SG_ LR_DETECT : 162|3@0+ (1,0) [0|1] "" XXX + SG_ RR_DETECT_DISTANCE : 163|8@1+ (0.1,0) [0|511] "m" XXX + SG_ RR_DETECT_LATERAL : 172|6@1+ (0.1,0) [0|63] "" XXX + SG_ RR_DETECT : 186|3@0+ (1,0) [0|1] "" XXX SG_ AUTOLANECHANGE_MSG : 207|4@0+ (1,0) [0|3] "" XXX SG_ LANELINE_CURVATURE : 208|4@1+ (1,0) [0|31] "" XXX SG_ LANELINE_CURVATURE_DIRECTION : 212|1@0+ (1,0) [0|1] "" XXX From 1a15f9cffa8890ebb27553b0b0796c468f82b4df Mon Sep 17 00:00:00 2001 From: Comma Device Date: Tue, 30 Dec 2025 18:58:02 +0900 Subject: [PATCH 08/19] ff --- .../opendbc/car/hyundai/hyundaicanfd.py | 68 ++++++++++--------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 62d9f5b4c5..dcb7053fc8 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -591,7 +591,17 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values['RR_DETECT_DISTANCE'] = 2 values['RR_DETECT_LATERAL'] = hud_control.leadRightLat2 """ - if canfd_debug > 0: + # 차선 커브 HUD 랑 클러스터 둘다 휘어짐 + if lat_active or canfd_debug > 0: + curvature = round(CS.out.steeringAngleDeg / 3) + values["LANELINE_CURVATURE"] = max(0,min(abs(curvature), 15) + (-1 if curvature < 0 else 0)) + values["LANELINE_CURVATURE_DIRECTION"] = 1 if curvature < 0 else 0 + else: + # 설정 안하면 0 이니까 굳이 할필요 있나? + values["LANELINE_CURVATURE"] = 0 + values["LANELINE_CURVATURE_DIRECTION"] = 0 + + # if canfd_debug > 0: # values['LF_DETECT'] = 0 안나옴 # values['LF_DETECT'] = 1 회색 # values['LF_DETECT'] = 2 흰색 @@ -605,22 +615,22 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle # 0 ~ 150. 근데 100 부터는 동일함 # values['LF_DETECT_DISTANCE'] = 50 - values['LF_DETECT'] = 3 - values['LF_DETECT_LATERAL'] = 3.0 - values['LF_DETECT_DISTANCE'] = 0 + # values['LF_DETECT'] = 3 + # values['LF_DETECT_LATERAL'] = 3.0 + # values['LF_DETECT_DISTANCE'] = 0 - values['RF_DETECT'] = 3 - values['RF_DETECT_LATERAL'] = 3.0 - values['RF_DETECT_DISTANCE'] = 0 + # values['RF_DETECT'] = 3 + # values['RF_DETECT_LATERAL'] = 3.0 + # values['RF_DETECT_DISTANCE'] = 0 - values['CORNER_LR_SIG'] = 1 - values['CORNER_LR_DETECT'] = 3.0 - values['CORNER_LR_DIST'] = 10 # 0 ~ 14 15부터 안보임 + # values['CORNER_LR_SIG'] = 1 + # values['CORNER_LR_DETECT'] = 3.0 + # values['CORNER_LR_DIST'] = 10 # 0 ~ 14 15부터 안보임 - values['CORNER_RR_SIG'] = 1 - values['CORNER_RR_DETECT'] = 3.0 - values['CORNER_RR_DIST'] = 10 # 0 ~ 14 15부터 안보임 + # values['CORNER_RR_SIG'] = 1 + # values['CORNER_RR_DETECT'] = 3.0 + # values['CORNER_RR_DIST'] = 10 # 0 ~ 14 15부터 안보임 # if canfd_debug == 1: @@ -684,12 +694,12 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle # 어쩌면 콤마가 인식하는 차선폭 보고 조정 가능할듯.. # 새로운 차선이 생기는게 아니라 그냥 반대방향으로 텔레포트 시킴.. ㅋㅋ # LANE_CHANGING_1 이거 안켜주면 hud 에서만 움직임.. - if canfd_debug > 0: + # if canfd_debug > 0: # 중앙 - values['HDA_MODE2'] = 2 - values['LANE_CHANGING_1'] = 0 - values['LANELINE_LEFT_POSITION'] = 15 - values['LANELINE_RIGHT_POSITION'] = 15 + # values['HDA_MODE2'] = 2 + # values['LANE_CHANGING_1'] = 0 + # values['LANELINE_LEFT_POSITION'] = 15 + # values['LANELINE_RIGHT_POSITION'] = 15 # elif canfd_debug == 2: # # 왼쪽 # values['HDA_MODE2'] = 3 @@ -771,19 +781,15 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["VIBRATE"] = 1 ret.append(packer.make_can_msg("CCNC_0x162", CAN.ECAN, values)) - if canfd_debug > 0: - if frame % 20 == 0: # 아직 시험중.. - if CS.hda_info_4a3 is not None: - values = copy.copy(CS.hda_info_4a3) - #if canfd_debug == 1: - values["SIGNAL_0"] = 5 - values["NEW_SIGNAL_1"] = 4 - values["SPEED_LIMIT"] = 80 - values["NEW_SIGNAL_3"] = 154 - values["NEW_SIGNAL_4"] = 9 - values["NEW_SIGNAL_5"] = 0 - values["NEW_SIGNAL_6"] = 256 - ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + if frame % 20 == 0: # 아직 시험중.. + if CS.hda_info_4a3 is not None: + values = copy.copy(CS.hda_info_4a3) + if canfd_debug > 0: + values["LinkClass"] = 1 + values["SpeedUnit"] = 1 + values["SPEED_LIMIT"] = 100 + + ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) return ret From 7b7e781fc1edc1905d1468af5553b0dc943e1dc0 Mon Sep 17 00:00:00 2001 From: Comma Device Date: Fri, 2 Jan 2026 11:04:07 +0900 Subject: [PATCH 09/19] ff --- .../opendbc/car/hyundai/carcontroller.py | 18 ++++++------ .../opendbc/car/hyundai/hyundaicanfd.py | 28 +++++++++++++++---- .../dbc/generator/hyundai/hyundai_canfd.dbc | 13 +++++---- 3 files changed, 40 insertions(+), 19 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carcontroller.py b/opendbc_repo/opendbc/car/hyundai/carcontroller.py index 6396aa4f2f..4b2a8a3289 100644 --- a/opendbc_repo/opendbc/car/hyundai/carcontroller.py +++ b/opendbc_repo/opendbc/car/hyundai/carcontroller.py @@ -163,7 +163,7 @@ def update(self, CC, CS, now_nanos): self.steerDeltaDownLC = steerDeltaDownLC else: self.steerDeltaDownLC = self.steerDeltaDown - + self.soft_hold_mode = 1 if params.get_int("AutoCruiseControl") > 1 else 2 self.hapticFeedbackWhenSpeedCamera = int(params.get_int("HapticFeedbackWhenSpeedCamera")) @@ -184,7 +184,7 @@ def update(self, CC, CS, now_nanos): else: self.params.STEER_DELTA_UP = self.steerDeltaUp self.params.STEER_DELTA_DOWN = self.steerDeltaDown - + angle_control = self.CP.flags & HyundaiFlags.ANGLE_CONTROL # steering torque @@ -196,7 +196,7 @@ def update(self, CC, CS, now_nanos): self.angle_limit_counter, self.max_angle_frames, MAX_ANGLE_CONSECUTIVE_FRAMES) - #apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw, + #apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw, # CS.out.steeringAngleDeg, CC.latActive, self.params.ANGLE_LIMITS) MAX_LAT_ACCEL = 8.0 @@ -211,7 +211,7 @@ def update(self, CC, CS, now_nanos): rate_deg_s = calc_rate_limit_by_lat_accel(self.apply_angle_last, CS.out.vEgoRaw, self.CP.wheelbase, MAX_LAT_ACCEL, MAX_RATE_LOW, MAX_RATE_HIGH) if not same_dir: rate_deg_s = min(rate_deg_s * UNWIND_SCALE, UNWIND_MAX) - + rate_deg_per_tick = rate_deg_s * DT_CTRL apply_angle = np.clip(actuators.steeringAngleDeg, self.apply_angle_last - rate_deg_per_tick, @@ -274,7 +274,7 @@ def update(self, CC, CS, now_nanos): active_speed_decel = hud_control.activeCarrot == 3 and self.activeCarrot != 3 # 3: Speed Decel self.activeCarrot = hud_control.activeCarrot - if active_speed_decel and self.speedCameraHapticEndFrame < 0: # 과속카메라 감속시작 + if active_speed_decel and self.speedCameraHapticEndFrame < 0: # 과속카메라 감속시작 self.speedCameraHapticEndFrame = self.frame + (8.0 / DT_CTRL) #8초간 켜줌. elif not active_speed_decel: self.speedCameraHapticEndFrame = -1 @@ -331,7 +331,7 @@ def update(self, CC, CS, now_nanos): # LFA and HDA icons if self.frame % 5 == 0 and camera_scc: - can_sends.extend(hyundaicanfd.create_lfahda_cluster(self.packer, CS, self.CAN, CC.longActive, CC.latActive)) + can_sends.extend(hyundaicanfd.create_lfahda_cluster(self.packer, CS, self.CAN, CC.longActive, CC.latActive, self.canfd_debug)) # blinkers if hda2 and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS: @@ -365,7 +365,7 @@ def update(self, CC, CS, now_nanos): can_sends.extend(hyundaicanfd.forward_button_message(self.packer, self.CAN, self.frame, CS, send_button, self.MainMode_ACC_trigger, self.LFA_trigger)) else: can_sends.extend(self.create_button_messages(CC, CS, use_clu11=False)) - + else: can_sends.append(hyundaican.create_lkas11(self.packer, self.frame, self.CP, apply_torque, apply_steer_req, torque_fault, CS.lkas11, sys_warning, sys_state, CC.enabled, @@ -384,7 +384,7 @@ def update(self, CC, CS, now_nanos): #jerk = 3.0 if actuators.longControlState == LongCtrlState.pid else 1.0 use_fca = self.CP.flags & HyundaiFlags.USE_FCA.value if camera_scc: - + can_sends.extend(hyundaican.create_acc_commands_scc(self.packer, CC.enabled, accel, self.hyundai_jerk, int(self.frame / 2), hud_control, set_speed_in_units, stopping, CC.cruiseControl.override, casper_opt, CS, self.soft_hold_mode)) @@ -609,7 +609,7 @@ def check_carrot_cruise(self, CC, CS, hud_control, stopping, accel, a_target): self.carrot_cruise_accel = max(carrot_cruise, self.carrot_cruise_accel - 1.0 * DT_CTRL) # 점진적으로 줄임. if self.carrot_cruise == 0: self.carrot_cruise_accel = CS.out.aEgo - + def make_jerk(self, CP, CS, accel, actuators, hud_control): if actuators.longControlState == LongCtrlState.stopping: self.jerk = self.jerk_u_min / 2 - CS.out.aEgo diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index dcb7053fc8..39298601ec 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -267,14 +267,12 @@ def create_acc_cancel(packer, CP, CAN, cruise_info_copy): }) return packer.make_can_msg("SCC_CONTROL", CAN.ECAN, values) -def create_lfahda_cluster(packer, CS, CAN, long_active, lat_active): +def create_lfahda_cluster(packer, CS, CAN, long_active, lat_active, canfd_debug): if CS.lfahda_cluster_info is not None: - values = {} # + values = {} values["HDA_CntrlModSta"] = 2 if long_active else 0 values["HDA_LFA_SymSta"] = 2 if lat_active else 0 - - # else: return [] return [packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values)] @@ -671,6 +669,16 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle # values['AUTOLANECHANGE_MSG'] = 14 # 없음. # values['AUTOLANECHANGE_MSG'] = 15 # 없음. + if canfd_debug > 0 : + # print(f"CS.lfahda_cluster_info {CS.lfahda_cluster_info is not None}\r\n") + if CS.lfahda_cluster_info is not None: + if CS.lfahda_cluster_info["HDA_CntrlModSta"] == 0: + values['HDA_MODE2'] = 1 # 차선변경 아이콘 회색 + elif CS.lfahda_cluster_info["HDA_CntrlModSta"] == 1: + values['HDA_MODE2'] = 3 # 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 + elif CS.lfahda_cluster_info["HDA_CntrlModSta"] == 2: + values['HDA_MODE2'] = 2 # 옆차선 녹색 + 차선변경 아이콘 녹색 + # values['HDA_MODE2'] = 1 # 차선변경 아이콘 회색 # values['HDA_MODE2'] = 2 # 옆차선 녹색 + 차선변경 아이콘 녹색 # values['HDA_MODE2'] = 3 # 옆차선 녹색 + 차선변경 아이콘 녹색 둘이 같이 점멸 @@ -787,10 +795,20 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle if canfd_debug > 0: values["LinkClass"] = 1 values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 values["SPEED_LIMIT"] = 100 ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - + if frame % 10 == 0: + if CS.new_msg_4b4 is not None: + if canfd_debug > 0: + values = copy.copy(CS.new_msg_4b4) + values["NEW_SIGNAL_2"] = 59 + values["NEW_SIGNAL_7"] = 2 + values["NEW_SIGNAL_5"] = 2 + values["NEW_SIGNAL_4"] = 76 + values["NEW_SIGNAL_6"] = 4 + ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) return ret def create_adrv_messages(CP, packer, CAN, frame): diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index c2d1a01286..2dd4e27234 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -852,11 +852,14 @@ BO_ 1187 HDA_INFO_4A3: 8 XXX BO_ 1204 NEW_MSG_4B4: 8 XXX SG_ NEW_SIGNAL_1 : 7|8@0+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_8 : 15|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_2 : 23|16@0+ (1,0) [0|65535] "" XXX - SG_ NEW_SIGNAL_7 : 35|4@0+ (1,0) [0|15] "" XXX - SG_ NEW_SIGNAL_3 : 39|4@0+ (1,0) [0|15] "" XXX - SG_ NEW_SIGNAL_4 : 47|8@0+ (1,0) [0|255] "" XXX - SG_ NEW_SIGNAL_5 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ NEW_SIGNAL_13 : 17|2@0+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_12 : 18|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_3 : 21|7@1+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_14 : 30|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_2 : 36|7@1+ (1,0) [0|127] "" XXX + SG_ NEW_SIGNAL_7 : 45|3@0+ (1,0) [0|7] "" XXX + SG_ NEW_SIGNAL_5 : 46|2@1+ (1,0) [0|31] "" XXX + SG_ NEW_SIGNAL_4 : 48|8@1+ (1,0) [0|255] "" XXX SG_ NEW_SIGNAL_6 : 63|8@0+ (1,0) [0|255] "" XXX BO_ 1259 LOCAL_TIME2: 8 XXX From 750c336b2f79227727afc383727fbdcc709fd616 Mon Sep 17 00:00:00 2001 From: Comma Device Date: Mon, 5 Jan 2026 20:11:14 +0900 Subject: [PATCH 10/19] ff --- opendbc_repo/opendbc/car/hyundai/carstate.py | 17 +++++++++------- .../opendbc/car/hyundai/hyundaicanfd.py | 20 +++++++++++++------ .../dbc/generator/hyundai/hyundai_canfd.dbc | 2 ++ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index 527ba4fb8c..b09ae8b444 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -86,6 +86,7 @@ def __init__(self, CP): self.adrv_info_160 = None self.adrv_info_162 = None self.hda_info_4a3 = None + self.cluster_speed_limit = None self.new_msg_4b4 = None self.tcs_info_373 = None self.mdps_info = {} @@ -138,7 +139,7 @@ def __init__(self, CP): self.SCC14 = True if 905 in fingerprints[bus_cruise] else False self.FCA11 = False self.FCA11_bus = Bus.cam - + self.HAS_LFA_BUTTON = True if 913 in fingerprints[0] else False self.CRUISE_BUTTON_ALT = True if 1007 in fingerprints[0] else False @@ -151,6 +152,7 @@ def __init__(self, CP): self.ADRV_0x1ea = True if 0x1ea in fingerprints[cam_bus] else False self.ADRV_0x160 = True if 0x160 in fingerprints[cam_bus] else False self.LFAHDA_CLUSTER = True if 480 in fingerprints[cam_bus] else False + self.CLUSTER_SPEED_LIMIT = True if 0x1fa in fingerprints[pt_bus] else False self.HDA_INFO_4A3 = True if 0x4a3 in fingerprints[pt_bus] else False self.NEW_MSG_4B4 = True if 0x4b4 in fingerprints[pt_bus] else False self.GEAR = True if 69 in fingerprints[pt_bus] else False @@ -163,7 +165,7 @@ def __init__(self, CP): self.cp_bsm = None self.time_zone = "UTC" - + self.controls_ready_count = 0 def update(self, can_parsers) -> structs.CarState: @@ -459,7 +461,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: ret.steeringAngleDeg = cp.vl["MDPS"]["STEERING_ANGLE_2"] * -1 else: ret.steeringAngleDeg = cp.vl["STEERING_SENSORS"]["STEERING_ANGLE"] * -1 - + ret.steeringTorque = cp.vl["MDPS"]["STEERING_COL_TORQUE"] ret.steeringTorqueEps = cp.vl["MDPS"]["STEERING_OUT_TORQUE"] ret.steeringPressed = self.update_steering_pressed(abs(ret.steeringTorque) > self.params.STEER_THRESHOLD, 5) @@ -470,7 +472,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: if self.STEER_TOUCH_2AF: self.steer_touch_info = cp.vl["STEER_TOUCH_2AF"] - blinkers_info = cp.vl["BLINKERS"] + blinkers_info = cp.vl["BLINKERS"] left_blinker_lamp = blinkers_info["LEFT_LAMP"] or blinkers_info["LEFT_LAMP_ALT"] right_blinker_lamp = blinkers_info["RIGHT_LAMP"] or blinkers_info["RIGHT_LAMP_ALT"] ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, left_blinker_lamp, right_blinker_lamp) @@ -497,7 +499,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.MainMode_ACC = cp_cam.vl["SCC_CONTROL"]["MainMode_ACC"] == 1 self.ACCMode = cp_cam.vl["SCC_CONTROL"]["ACCMode"] self.LFA_ICON = cp_cam.vl["LFAHDA_CLUSTER"]["HDA_LFA_SymSta"] - + if self.CP.openpilotLongitudinalControl: # These are not used for engage/disengage since openpilot keeps track of state using the buttons ret.cruiseState.enabled = cp.vl["TCS"]["ACC_REQ"] == 1 @@ -524,7 +526,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: if self.LFAHDA_CLUSTER: self.lfahda_cluster_info = cp_cam.vl["LFAHDA_CLUSTER"] - + corner = False self.adrv_info_161 = cp_cam.vl["ADRV_0x161"] if self.CCNC_0x161 else None self.adrv_info_162 = cp_cam.vl["CCNC_0x162"] if self.CCNC_0x162 else None @@ -547,6 +549,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.adrv_info_160 = cp_cam.vl["ADRV_0x160"] if self.ADRV_0x160 else None self.hda_info_4a3 = cp.vl["HDA_INFO_4A3"] if self.HDA_INFO_4A3 else None + self.cluster_speed_limit = cp.vl["CLUSTER_SPEED_LIMIT"] if self.CLUSTER_SPEED_LIMIT else None if self.hda_info_4a3 is not None: speedLimit = self.hda_info_4a3["SPEED_LIMIT"] if not self.is_metric: @@ -561,7 +564,7 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.new_msg_4b4 = cp.vl["NEW_MSG_4B4"] if self.NEW_MSG_4B4 else None self.tcs_info_373 = cp.vl["TCS"] - + ret.gearStep = cp.vl["GEAR"]["GEAR_STEP"] if self.GEAR else 0 if 1 <= ret.gearStep <= 8 and ret.gearShifter == GearShifter.unknown: ret.gearShifter = GearShifter.drive diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 39298601ec..2d22108bde 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -797,18 +797,26 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SpeedUnit"] = 1 values["Frwinfo"] = 0 values["SPEED_LIMIT"] = 100 - ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - if frame % 10 == 0: + if CS.new_msg_4b4 is not None: if canfd_debug > 0: values = copy.copy(CS.new_msg_4b4) - values["NEW_SIGNAL_2"] = 59 - values["NEW_SIGNAL_7"] = 2 + values["NEW_SIGNAL_2"] = 7 + values["NEW_SIGNAL_7"] = 1 values["NEW_SIGNAL_5"] = 2 - values["NEW_SIGNAL_4"] = 76 - values["NEW_SIGNAL_6"] = 4 + values["NEW_SIGNAL_4"] = 80 + values["NEW_SIGNAL_6"] = 5 ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + if CS.cluster_speed_limit is not None: + if canfd_debug > 0: + values = copy.copy(CS.cluster_speed_limit) + values["SPEED_LIMIT_1"] = 100 + values["SPEED_LIMIT_2"] = 100 + values["SPEED_LIMIT_3"] = 105 + ret.append(packer.make_can_msg("CLUSTER_SPEED_LIMIT",CAN.CAM,values)) + + return ret def create_adrv_messages(CP, packer, CAN, frame): diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 2dd4e27234..ef6aa54fba 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -794,6 +794,8 @@ BO_ 485 BLINDSPOTS_FRONT_CORNER_1: 16 XXX SG_ NEW_SIGNAL_9 : 55|8@0+ (1,0) [0|255] "" XXX BO_ 506 CLUSTER_SPEED_LIMIT: 32 CAM + SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX + SG_ COUNTER : 23|8@0+ (1,0) [0|255] "" XXX SG_ SPEED_LIMIT_1 : 39|7@0+ (1,0) [0|255] "" XXX SG_ SPEED_LIMIT_2 : 47|7@0+ (1,0) [0|255] "" XXX SG_ SECONDARY_LIMIT_1 : 79|8@0+ (1,0) [0|127] "" XXX From 8bc10eec6673acd32f37b95faae70514df603bd8 Mon Sep 17 00:00:00 2001 From: Comma Device Date: Mon, 5 Jan 2026 20:49:52 +0900 Subject: [PATCH 11/19] ff --- .../opendbc/car/hyundai/hyundaicanfd.py | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 2d22108bde..ed102721db 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -793,27 +793,46 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle if CS.hda_info_4a3 is not None: values = copy.copy(CS.hda_info_4a3) if canfd_debug > 0: - values["LinkClass"] = 1 - values["SpeedUnit"] = 1 - values["Frwinfo"] = 0 - values["SPEED_LIMIT"] = 100 + if canfd_debug == 1: + values["LinkClass"] = 2 + values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 + values["SPEED_LIMIT"] = 40 + elif canfd_debug == 2: + values["LinkClass"] = 1 + values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 + values["SPEED_LIMIT"] = 100 ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) if CS.new_msg_4b4 is not None: if canfd_debug > 0: values = copy.copy(CS.new_msg_4b4) - values["NEW_SIGNAL_2"] = 7 - values["NEW_SIGNAL_7"] = 1 - values["NEW_SIGNAL_5"] = 2 - values["NEW_SIGNAL_4"] = 80 - values["NEW_SIGNAL_6"] = 5 + if canfd_debug == 1: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 1 + values["NEW_SIGNAL_4"] = 73 + values["NEW_SIGNAL_6"] = 2 + elif canfd_debug == 2: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 2 + values["NEW_SIGNAL_4"] = 80 + values["NEW_SIGNAL_6"] = 5 ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + if CS.cluster_speed_limit is not None: if canfd_debug > 0: values = copy.copy(CS.cluster_speed_limit) - values["SPEED_LIMIT_1"] = 100 - values["SPEED_LIMIT_2"] = 100 - values["SPEED_LIMIT_3"] = 105 + if canfd_debug == 1: + values["SPEED_LIMIT_1"] = 0 + values["SPEED_LIMIT_2"] = 0 + values["SPEED_LIMIT_3"] = 0 + elif canfd_debug == 2: + values["SPEED_LIMIT_1"] = 100 + values["SPEED_LIMIT_2"] = 100 + values["SPEED_LIMIT_3"] = 105 ret.append(packer.make_can_msg("CLUSTER_SPEED_LIMIT",CAN.CAM,values)) From f4878e45fa6d5ef0aa3665d737ec5bf0e2f2bb6a Mon Sep 17 00:00:00 2001 From: Comma Device Date: Mon, 5 Jan 2026 21:52:17 +0900 Subject: [PATCH 12/19] dd --- .../opendbc/car/hyundai/hyundaicanfd.py | 5 ++-- .../safety/safety/safety_hyundai_canfd.h | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index ed102721db..948d47f729 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -472,7 +472,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle ret.append(packer.make_can_msg(CS.cruise_btns_msg_canfd, CAN.CAM, values)) - if frame % 5 == 0: + if frame % 5 == 0: # 20hz if CS.adrv_info_161 is not None: main_enabled = CS.out.cruiseState.available cruise_enabled = CC.enabled @@ -789,7 +789,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["VIBRATE"] = 1 ret.append(packer.make_can_msg("CCNC_0x162", CAN.ECAN, values)) - if frame % 20 == 0: # 아직 시험중.. + if frame % 20 == 0: # 5hz if CS.hda_info_4a3 is not None: values = copy.copy(CS.hda_info_4a3) if canfd_debug > 0: @@ -805,6 +805,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT"] = 100 ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + if frame % 10 == 0: # 10hz if CS.new_msg_4b4 is not None: if canfd_debug > 0: values = copy.copy(CS.new_msg_4b4) diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index 9229eb710a..2bd938ac27 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -70,14 +70,22 @@ const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { {0x110, 0, 32}, // LKAS_ALT (272) {0x110, 1, 32}, // LKAS_ALT (272) - {0x50, 1, 16}, // - {0x51, 1, 32}, // + {0x50, 1, 16}, // + {0x51, 1, 32}, // {353, 0, 32}, // ADRV_353 {354, 0, 32}, // CORNER_RADAR_HIGHWAY {512, 0, 8}, // ADRV_0x200 - {1187, 2, 8}, // 4A3 - {1204, 2, 8}, // 4B4 + {0x4a3, 2, 8}, // 4A3 1187 + {0x4b4, 2, 8}, // 4B4 1204 + + {0x4b8, 2, 8}, // test + {0x4b9, 2, 8}, // test + {0x4ba, 2, 8}, // test + {0x4be, 2, 8}, // test + {0x4bf, 2, 8}, // test + {0x4c1, 2, 8}, // test + {0x4DC, 2, 8}, // test {203, 0, 24}, // CB {373, 2, 24}, // TCS(0x175) @@ -198,7 +206,7 @@ RxCheck hyundai_canfd_hda2_long_rx_checks[] = { }; RxCheck hyundai_canfd_hda2_long_rx_checks_scc2[] = { HYUNDAI_CANFD_COMMON_RX_CHECKS(0) - HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) + HYUNDAI_CANFD_BUTTONS_ADDR_CHECK(0) }; RxCheck hyundai_canfd_hda2_long_alt_buttons_rx_checks[] = { HYUNDAI_CANFD_COMMON_RX_CHECKS(1) @@ -215,8 +223,8 @@ const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; bool hyundai_canfd_alt_buttons = false; bool hyundai_canfd_hda2_alt_steering = false; -int canfd_tx_addr[32] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 1187, 1204, 203, 0, }; -int canfd_tx_hz[32] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 0, }; +int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 1187, 1204, 203, 1208,1209,1210,1214,1215,1217,1244, 0,}; +int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 5, 5, 5, 5, 5, 5, 5, 0,}; uint32_t canfd_tx_timeout[32] = { 0, }; int canfd_tx_addr2[32] = { 0x4a3, 373, 506, 463, 426, 234, 687, 0 }; int canfd_tx_hz2[32] = { 5, 50, 10, 50, 50, 100, 10, 0 }; @@ -485,7 +493,7 @@ static int hyundai_canfd_fwd_hook(int bus_num, int addr) { //if (addr == 908) bus_fwd = -1; //else if (addr == 1402) bus_fwd = -1; // - // Ʒڵ ڵ .. + // �Ʒ��ڵ��� ���������ڵ� ����.. �� //if (addr == 698) bus_fwd = -1; //if (addr == 1848) bus_fwd = -1; //if (addr == 1996) bus_fwd = -1; @@ -536,7 +544,7 @@ static safety_config hyundai_canfd_init(uint16_t param) { else print("no camera_scc \n"); if (hyundai_canfd_alt_buttons) { // carrot : for CANIVAL 4TH HDA2 print("hyundai safety canfd_hda2 long_alt_buttons\n"); - if (hyundai_camera_scc) ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); + if (hyundai_camera_scc) ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks_scc2, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); else ret = BUILD_SAFETY_CFG(hyundai_canfd_hda2_long_alt_buttons_rx_checks, HYUNDAI_CANFD_HDA2_LONG_TX_MSGS); } else { From 4cf1183a04e92fcd5f979fa14ad918c37c1a31af Mon Sep 17 00:00:00 2001 From: Comma Device Date: Mon, 5 Jan 2026 22:33:47 +0900 Subject: [PATCH 13/19] dd --- opendbc_repo/opendbc/car/hyundai/carstate.py | 30 +++++++ .../opendbc/car/hyundai/hyundaicanfd.py | 83 ++++++++++++++++++- .../dbc/generator/hyundai/hyundai_canfd.dbc | 70 ++++++++++++++++ 3 files changed, 182 insertions(+), 1 deletion(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index b09ae8b444..ea4367959b 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -88,6 +88,15 @@ def __init__(self, CP): self.hda_info_4a3 = None self.cluster_speed_limit = None self.new_msg_4b4 = None + + self.new_msg_4b8 = None + self.new_msg_4b9 = None + self.new_msg_4ba = None + self.new_msg_4be = None + self.new_msg_4bf = None + self.new_msg_4c1 = None + self.new_msg_4dc = None + self.tcs_info_373 = None self.mdps_info = {} self.steer_touch_info = {} @@ -155,6 +164,15 @@ def __init__(self, CP): self.CLUSTER_SPEED_LIMIT = True if 0x1fa in fingerprints[pt_bus] else False self.HDA_INFO_4A3 = True if 0x4a3 in fingerprints[pt_bus] else False self.NEW_MSG_4B4 = True if 0x4b4 in fingerprints[pt_bus] else False + + self.NEW_MSG_4B8 = True if 0x4B8 in fingerprints[pt_bus] else False + self.NEW_MSG_4B9 = True if 0x4B9 in fingerprints[pt_bus] else False + self.NEW_MSG_4BA = True if 0x4BA in fingerprints[pt_bus] else False + self.NEW_MSG_4BE = True if 0x4BE in fingerprints[pt_bus] else False + self.NEW_MSG_4BF = True if 0x4BF in fingerprints[pt_bus] else False + self.NEW_MSG_4C1 = True if 0x4C1 in fingerprints[pt_bus] else False + self.NEW_MSG_4DC = True if 0x4DC in fingerprints[pt_bus] else False + self.GEAR = True if 69 in fingerprints[pt_bus] else False self.GEAR_ALT = True if 64 in fingerprints[pt_bus] else False self.CAM_0x362 = True if 0x362 in fingerprints[alt_bus] else False @@ -563,6 +581,18 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.time_zone = ZoneInfo(NUMERIC_TO_TZ.get(country_code, "UTC")) self.new_msg_4b4 = cp.vl["NEW_MSG_4B4"] if self.NEW_MSG_4B4 else None + + self.new_msg_4b8 = cp.vl["NEW_MSG_4B8"] if self.NEW_MSG_4B8 else None + self.new_msg_4b9 = cp.vl["NEW_MSG_4B9"] if self.NEW_MSG_4B9 else None + self.new_msg_4ba = cp.vl["NEW_MSG_4BA"] if self.NEW_MSG_4BA else None + self.new_msg_4be = cp.vl["NEW_MSG_4BE"] if self.NEW_MSG_4BE else None + self.new_msg_4bf = cp.vl["NEW_MSG_4BF"] if self.NEW_MSG_4BF else None + self.new_msg_4c1 = cp.vl["NEW_MSG_4C1"] if self.NEW_MSG_4C1 else None + self.new_msg_4dc = cp.vl["NEW_MSG_4DC"] if self.NEW_MSG_4DC else None + + + + self.tcs_info_373 = cp.vl["TCS"] ret.gearStep = cp.vl["GEAR"]["GEAR_STEP"] if self.GEAR else 0 diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 948d47f729..bf64bc86b6 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -805,7 +805,6 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT"] = 100 ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - if frame % 10 == 0: # 10hz if CS.new_msg_4b4 is not None: if canfd_debug > 0: values = copy.copy(CS.new_msg_4b4) @@ -823,6 +822,88 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["NEW_SIGNAL_6"] = 5 ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + if canfd_debug > 0: + if CS.new_msg_4b8 is not None: + values = copy.copy(CS.new_msg_4b8) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) + if CS.new_msg_4b9 is not None: + values = copy.copy(CS.new_msg_4b9) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + if CS.new_msg_4ba is not None: + values = copy.copy(CS.new_msg_4ba) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) + if CS.new_msg_4be is not None: + values = copy.copy(CS.new_msg_4be) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) + if CS.new_msg_4bf is not None: + values = copy.copy(CS.new_msg_4bf) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) + if CS.new_msg_4c1 is not None: + values = copy.copy(CS.new_msg_4c1) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) + if CS.new_msg_4dc is not None: + values = copy.copy(CS.new_msg_4dc) + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) + + if frame % 10 == 0: # 10hz + + if CS.cluster_speed_limit is not None: if canfd_debug > 0: values = copy.copy(CS.cluster_speed_limit) diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index ef6aa54fba..9832f0c3f8 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -759,6 +759,76 @@ BO_ 1043 BLINKERS: 8 XXX BO_ 1240 CLUSTER_INFO: 8 XXX SG_ DISTANCE_UNIT : 0|1@1+ (1,0) [0|1] "" XXX +BO_ 1208 NEW_MSG_4B8: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1209 NEW_MSG_4B9: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1214 NEW_MSG_4BE: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1215 NEW_MSG_4BF: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1217 NEW_MSG_4C1: 8 XXX + SG_ BYTE_1: 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2: 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3: 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4: 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5: 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6: 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7: 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8: 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1227 NEW_MSG_4CB: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|63] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + +BO_ 1244 NEW_MSG_4DC: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + BO_ 442 BLINDSPOTS_REAR_CORNERS: 24 XXX SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX From fb2e3ff21f01e0ac17692ad2c9f118559871eff4 Mon Sep 17 00:00:00 2001 From: Comma Device Date: Tue, 6 Jan 2026 19:56:11 +0900 Subject: [PATCH 14/19] aa --- .../opendbc/car/hyundai/hyundaicanfd.py | 93 ++++--------------- .../safety/safety/safety_hyundai_canfd.h | 10 +- 2 files changed, 23 insertions(+), 80 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index bf64bc86b6..5fede53ccc 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -805,105 +805,32 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT"] = 100 ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - if CS.new_msg_4b4 is not None: - if canfd_debug > 0: - values = copy.copy(CS.new_msg_4b4) - if canfd_debug == 1: - values["NEW_SIGNAL_2"] = 54 - values["NEW_SIGNAL_7"] = 1 - values["NEW_SIGNAL_5"] = 1 - values["NEW_SIGNAL_4"] = 73 - values["NEW_SIGNAL_6"] = 2 - elif canfd_debug == 2: - values["NEW_SIGNAL_2"] = 54 - values["NEW_SIGNAL_7"] = 1 - values["NEW_SIGNAL_5"] = 2 - values["NEW_SIGNAL_4"] = 80 - values["NEW_SIGNAL_6"] = 5 - ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) - if canfd_debug > 0: + + if canfd_debug != 2: if CS.new_msg_4b8 is not None: values = copy.copy(CS.new_msg_4b8) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) if CS.new_msg_4b9 is not None: values = copy.copy(CS.new_msg_4b9) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) if CS.new_msg_4ba is not None: values = copy.copy(CS.new_msg_4ba) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) if CS.new_msg_4be is not None: values = copy.copy(CS.new_msg_4be) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) if CS.new_msg_4bf is not None: values = copy.copy(CS.new_msg_4bf) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) if CS.new_msg_4c1 is not None: values = copy.copy(CS.new_msg_4c1) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) if CS.new_msg_4dc is not None: values = copy.copy(CS.new_msg_4dc) - values["BYTE_1"] = 0xFF - values["BYTE_2"] = 0xFF - values["BYTE_3"] = 0xFF - values["BYTE_4"] = 0xFF - values["BYTE_5"] = 0xFF - values["BYTE_6"] = 0xFF - values["BYTE_7"] = 0xFF - values["BYTE_8"] = 0xFF ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) if frame % 10 == 0: # 10hz - - if CS.cluster_speed_limit is not None: if canfd_debug > 0: values = copy.copy(CS.cluster_speed_limit) @@ -917,6 +844,22 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT_3"] = 105 ret.append(packer.make_can_msg("CLUSTER_SPEED_LIMIT",CAN.CAM,values)) + if CS.new_msg_4b4 is not None: + values = copy.copy(CS.new_msg_4b4) + if canfd_debug > 0: + if canfd_debug == 1: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 1 + values["NEW_SIGNAL_4"] = 73 + values["NEW_SIGNAL_6"] = 2 + elif canfd_debug == 2: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 2 + values["NEW_SIGNAL_4"] = 80 + values["NEW_SIGNAL_6"] = 5 + # ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) return ret diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index 2bd938ac27..cdf080f9fd 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -223,11 +223,11 @@ const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; bool hyundai_canfd_alt_buttons = false; bool hyundai_canfd_hda2_alt_steering = false; -int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 1187, 1204, 203, 1208,1209,1210,1214,1215,1217,1244, 0,}; -int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 5, 5, 5, 5, 5, 5, 5, 0,}; +int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 0x4a3, 0x4b4, 203, 1208,1209,1210,1214,1215,1217,1244, 0,}; +int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 5, 5, 5, 5, 5, 5, 5, 0,}; uint32_t canfd_tx_timeout[32] = { 0, }; -int canfd_tx_addr2[32] = { 0x4a3, 373, 506, 463, 426, 234, 687, 0 }; -int canfd_tx_hz2[32] = { 5, 50, 10, 50, 50, 100, 10, 0 }; +int canfd_tx_addr2[32] = { 0x4a3, 0x4b4, 373, 506, 463, 426, 234, 687, 1208,1209,1210,1214,1215,1217,1244, 0 }; +int canfd_tx_hz2[32] = { 5, 10, 50, 10, 50, 50, 100, 10, 5, 5, 5, 5, 5, 5, 5, 0 }; uint32_t canfd_tx_timeout2[32] = { 0, }; uint32_t canfd_tx_time[32] = { 0, }; uint32_t canfd_tx_time2[32] = { 0, }; @@ -445,7 +445,7 @@ static int hyundai_canfd_fwd_hook(int bus_num, int addr) { if (bus_num == 0) { bus_fwd = 2; for (int i = 0; canfd_tx_addr2[i] > 0; i++) { - if (addr == canfd_tx_addr2[i] && (now - canfd_tx_time2[i]) < canfd_tx_timeout2[i]) { + if ((addr == 0x4b4) || (addr == canfd_tx_addr2[i] && (now - canfd_tx_time2[i]) < canfd_tx_timeout2[i])) { bus_fwd = -1; break; } From 7f85f6a3306f61a3790f7404e247f0aa54bb6a99 Mon Sep 17 00:00:00 2001 From: Comma Device Date: Tue, 6 Jan 2026 20:14:22 +0900 Subject: [PATCH 15/19] dd --- .../opendbc/car/hyundai/hyundaicanfd.py | 8 ++++---- .../safety/safety/safety_hyundai_canfd.h | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 5fede53ccc..d3bd9c7fa1 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -807,7 +807,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle - if canfd_debug != 2: + if canfd_debug <= 2: if CS.new_msg_4b8 is not None: values = copy.copy(CS.new_msg_4b8) ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) @@ -838,7 +838,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT_1"] = 0 values["SPEED_LIMIT_2"] = 0 values["SPEED_LIMIT_3"] = 0 - elif canfd_debug == 2: + elif canfd_debug >= 2: values["SPEED_LIMIT_1"] = 100 values["SPEED_LIMIT_2"] = 100 values["SPEED_LIMIT_3"] = 105 @@ -853,13 +853,13 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["NEW_SIGNAL_5"] = 1 values["NEW_SIGNAL_4"] = 73 values["NEW_SIGNAL_6"] = 2 - elif canfd_debug == 2: + elif canfd_debug >= 2: values["NEW_SIGNAL_2"] = 54 values["NEW_SIGNAL_7"] = 1 values["NEW_SIGNAL_5"] = 2 values["NEW_SIGNAL_4"] = 80 values["NEW_SIGNAL_6"] = 5 - # ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) return ret diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index cdf080f9fd..fd7dfc739d 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -85,7 +85,7 @@ const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { {0x4be, 2, 8}, // test {0x4bf, 2, 8}, // test {0x4c1, 2, 8}, // test - {0x4DC, 2, 8}, // test + {0x4dc, 2, 8}, // test {203, 0, 24}, // CB {373, 2, 24}, // TCS(0x175) @@ -226,8 +226,8 @@ bool hyundai_canfd_hda2_alt_steering = false; int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 0x4a3, 0x4b4, 203, 1208,1209,1210,1214,1215,1217,1244, 0,}; int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 5, 5, 5, 5, 5, 5, 5, 0,}; uint32_t canfd_tx_timeout[32] = { 0, }; -int canfd_tx_addr2[32] = { 0x4a3, 0x4b4, 373, 506, 463, 426, 234, 687, 1208,1209,1210,1214,1215,1217,1244, 0 }; -int canfd_tx_hz2[32] = { 5, 10, 50, 10, 50, 50, 100, 10, 5, 5, 5, 5, 5, 5, 5, 0 }; +int canfd_tx_addr2[32] = { 0x4a3, 373, 506, 463, 426, 234, 687, 1208,1209,1210,1214,1215,1217,1244, 0 }; +int canfd_tx_hz2[32] = { 5, 50, 10, 50, 50, 100, 10, 5, 5, 5, 5, 5, 5, 5, 0 }; uint32_t canfd_tx_timeout2[32] = { 0, }; uint32_t canfd_tx_time[32] = { 0, }; uint32_t canfd_tx_time2[32] = { 0, }; @@ -441,11 +441,21 @@ int addr_list_count2 = 0; static int hyundai_canfd_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; uint32_t now = microsecond_timer_get(); + if (addr == 0x4a3) { return -1; } + if (addr == 0x4b4) { return -1; } + if (addr == 0x4b8) { return -1; } + if (addr == 0x4b9) { return -1; } + if (addr == 0x4ba) { return -1; } + if (addr == 0x4be) { return -1; } + if (addr == 0x4bf) { return -1; } + if (addr == 0x4c1) { return -1; } + if (addr == 0x4dc) { return -1; } if (bus_num == 0) { bus_fwd = 2; + for (int i = 0; canfd_tx_addr2[i] > 0; i++) { - if ((addr == 0x4b4) || (addr == canfd_tx_addr2[i] && (now - canfd_tx_time2[i]) < canfd_tx_timeout2[i])) { + if (addr == canfd_tx_addr2[i] && (now - canfd_tx_time2[i]) < canfd_tx_timeout2[i]) { bus_fwd = -1; break; } From 6ee9651c9bad6ad86ce8ddbf6c73cf6784791e5a Mon Sep 17 00:00:00 2001 From: Comma Device Date: Tue, 6 Jan 2026 22:19:18 +0900 Subject: [PATCH 16/19] aa --- .../opendbc/car/hyundai/hyundaicanfd.py | 73 +++++++++---------- .../dbc/generator/hyundai/hyundai_canfd.dbc | 10 +++ .../safety/safety/safety_hyundai_canfd.h | 23 +++--- 3 files changed, 58 insertions(+), 48 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index d3bd9c7fa1..8918798e67 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -805,30 +805,28 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT"] = 100 ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - - - if canfd_debug <= 2: - if CS.new_msg_4b8 is not None: - values = copy.copy(CS.new_msg_4b8) - ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) - if CS.new_msg_4b9 is not None: - values = copy.copy(CS.new_msg_4b9) - ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) - if CS.new_msg_4ba is not None: - values = copy.copy(CS.new_msg_4ba) - ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) - if CS.new_msg_4be is not None: - values = copy.copy(CS.new_msg_4be) - ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) - if CS.new_msg_4bf is not None: - values = copy.copy(CS.new_msg_4bf) - ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) - if CS.new_msg_4c1 is not None: - values = copy.copy(CS.new_msg_4c1) - ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) - if CS.new_msg_4dc is not None: - values = copy.copy(CS.new_msg_4dc) - ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) + if canfd_debug != 3: + if CS.new_msg_4b8 is not None: + values = copy.copy(CS.new_msg_4b8) + ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) + if CS.new_msg_4b9 is not None: + values = copy.copy(CS.new_msg_4b9) + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + if CS.new_msg_4ba is not None: + values = copy.copy(CS.new_msg_4ba) + ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) + if CS.new_msg_4be is not None: + values = copy.copy(CS.new_msg_4be) + ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) + if CS.new_msg_4bf is not None: + values = copy.copy(CS.new_msg_4bf) + ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) + if CS.new_msg_4c1 is not None: + values = copy.copy(CS.new_msg_4c1) + ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) + if CS.new_msg_4dc is not None: + values = copy.copy(CS.new_msg_4dc) + ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) if frame % 10 == 0: # 10hz if CS.cluster_speed_limit is not None: @@ -846,21 +844,22 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle if CS.new_msg_4b4 is not None: values = copy.copy(CS.new_msg_4b4) - if canfd_debug > 0: - if canfd_debug == 1: - values["NEW_SIGNAL_2"] = 54 - values["NEW_SIGNAL_7"] = 1 - values["NEW_SIGNAL_5"] = 1 - values["NEW_SIGNAL_4"] = 73 - values["NEW_SIGNAL_6"] = 2 - elif canfd_debug >= 2: - values["NEW_SIGNAL_2"] = 54 - values["NEW_SIGNAL_7"] = 1 - values["NEW_SIGNAL_5"] = 2 - values["NEW_SIGNAL_4"] = 80 - values["NEW_SIGNAL_6"] = 5 + # if canfd_debug > 0: + # if canfd_debug == 1: + # values["NEW_SIGNAL_2"] = 54 + # values["NEW_SIGNAL_7"] = 1 + # values["NEW_SIGNAL_5"] = 1 + # values["NEW_SIGNAL_4"] = 73 + # values["NEW_SIGNAL_6"] = 2 + # elif canfd_debug >= 2: + # values["NEW_SIGNAL_2"] = 54 + # values["NEW_SIGNAL_7"] = 1 + # values["NEW_SIGNAL_5"] = 2 + # values["NEW_SIGNAL_4"] = 80 + # values["NEW_SIGNAL_6"] = 5 ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + return ret def create_adrv_messages(CP, packer, CAN, frame): diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 9832f0c3f8..25743a51e0 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -779,6 +779,16 @@ BO_ 1209 NEW_MSG_4B9: 8 XXX SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX +BO_ 1210 NEW_MSG_4BA: 8 XXX + SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_3 : 23|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_4 : 31|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_5 : 39|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_6 : 47|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_7 : 55|8@0+ (1,0) [0|255] "" XXX + SG_ BYTE_8 : 63|8@0+ (1,0) [0|255] "" XXX + BO_ 1214 NEW_MSG_4BE: 8 XXX SG_ BYTE_1 : 7|8@0+ (1,0) [0|255] "" XXX SG_ BYTE_2 : 15|8@0+ (1,0) [0|255] "" XXX diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index fd7dfc739d..a00c7b925d 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -108,8 +108,8 @@ const CanMsg HYUNDAI_CANFD_HDA1_TX_MSGS[] = { {353, 0, 32}, // ADRV_353 {354, 0, 32}, // CORNER_RADAR_HIGHWAY {512, 0, 8}, // ADRV_0x200 - {1187, 2, 8}, // 4A3 - {1204, 2, 8}, // 4B4 + // {1187, 2, 8}, // 4A3 + // {1204, 2, 8}, // 4B4 {373, 2, 24}, // TCS(0x175) {234, 2, 24}, // MDPS {687, 2, 8}, // STEER_TOUCH_2AF @@ -223,14 +223,14 @@ const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; bool hyundai_canfd_alt_buttons = false; bool hyundai_canfd_hda2_alt_steering = false; -int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 0x4a3, 0x4b4, 203, 1208,1209,1210,1214,1215,1217,1244, 0,}; -int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 5, 10, 100, 5, 5, 5, 5, 5, 5, 5, 0,}; -uint32_t canfd_tx_timeout[32] = { 0, }; -int canfd_tx_addr2[32] = { 0x4a3, 373, 506, 463, 426, 234, 687, 1208,1209,1210,1214,1215,1217,1244, 0 }; -int canfd_tx_hz2[32] = { 5, 50, 10, 50, 50, 100, 10, 5, 5, 5, 5, 5, 5, 5, 0 }; -uint32_t canfd_tx_timeout2[32] = { 0, }; -uint32_t canfd_tx_time[32] = { 0, }; -uint32_t canfd_tx_time2[32] = { 0, }; +int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 0x4a3, 0x4b4, 203, 0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc, 0,}; +int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 20, 20, 100, 20, 20, 20, 20, 20, 20, 20, 0,}; +uint32_t canfd_tx_timeout[64] = { 0, }; +int canfd_tx_addr2[64] = { 373, 506, 463, 426, 234, 687, 0 }; +int canfd_tx_hz2[64] = { 50, 10, 50, 50, 100, 10, 0 }; +uint32_t canfd_tx_timeout2[64] = { 0, }; +uint32_t canfd_tx_time[64] = { 0, }; +uint32_t canfd_tx_time2[64] = { 0, }; int hyundai_canfd_hda2_get_lkas_addr(void) { return hyundai_canfd_hda2_alt_steering ? 0x110 : 0x50; @@ -531,9 +531,10 @@ static int hyundai_canfd_fwd_hook(int bus_num, int addr) { static safety_config hyundai_canfd_init(uint16_t param) { - for (int i = 0; i < 32; i++) { + for (int i = 0; i < 64; i++) { if (canfd_tx_addr[i] > 0) canfd_tx_timeout[i] = 1. / canfd_tx_hz[i] * 1000000 + 20000; // add 20ms for safety if (canfd_tx_addr2[i] > 0) canfd_tx_timeout2[i] = 1. / canfd_tx_hz2[i] * 1000000 + 20000; // add 20ms for safety + // if (canfd_tx_addr[i] == 0 && canfd_tx_addr2[i] == 0) break; } hyundai_common_init(param); From d5a367480f46b97f977eedd55cc4fc73b8b307fd Mon Sep 17 00:00:00 2001 From: Comma Device Date: Wed, 7 Jan 2026 00:21:45 +0900 Subject: [PATCH 17/19] da --- opendbc_repo/opendbc/car/hyundai/carstate.py | 16 ++-- .../opendbc/car/hyundai/hyundaicanfd.py | 89 ++++++++++--------- .../safety/safety/safety_hyundai_canfd.h | 24 +++-- 3 files changed, 67 insertions(+), 62 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index ea4367959b..7c7a1d3396 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -133,7 +133,7 @@ def __init__(self, CP): fingerprints_str = Params().get("FingerPrints", encoding='utf-8') fingerprints = ast.literal_eval(fingerprints_str) - #print("fingerprints =", fingerprints) + # print("fingerprints =", fingerprints) ecu_disabled = False if self.CP.openpilotLongitudinalControl and not (self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC): ecu_disabled = True @@ -165,13 +165,13 @@ def __init__(self, CP): self.HDA_INFO_4A3 = True if 0x4a3 in fingerprints[pt_bus] else False self.NEW_MSG_4B4 = True if 0x4b4 in fingerprints[pt_bus] else False - self.NEW_MSG_4B8 = True if 0x4B8 in fingerprints[pt_bus] else False - self.NEW_MSG_4B9 = True if 0x4B9 in fingerprints[pt_bus] else False - self.NEW_MSG_4BA = True if 0x4BA in fingerprints[pt_bus] else False - self.NEW_MSG_4BE = True if 0x4BE in fingerprints[pt_bus] else False - self.NEW_MSG_4BF = True if 0x4BF in fingerprints[pt_bus] else False - self.NEW_MSG_4C1 = True if 0x4C1 in fingerprints[pt_bus] else False - self.NEW_MSG_4DC = True if 0x4DC in fingerprints[pt_bus] else False + self.NEW_MSG_4B8 = True if 0x4b8 in fingerprints[pt_bus] else False + self.NEW_MSG_4B9 = True if 0x4b9 in fingerprints[pt_bus] else False + self.NEW_MSG_4BA = True if 0x4ba in fingerprints[pt_bus] else False + self.NEW_MSG_4BE = True if 0x4be in fingerprints[pt_bus] else False + self.NEW_MSG_4BF = True if 0x4bf in fingerprints[pt_bus] else False + self.NEW_MSG_4C1 = True if 0x4c1 in fingerprints[pt_bus] else False + self.NEW_MSG_4DC = True if 0x4dc in fingerprints[pt_bus] else False self.GEAR = True if 69 in fingerprints[pt_bus] else False self.GEAR_ALT = True if 64 in fingerprints[pt_bus] else False diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index 8918798e67..a7233d017e 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -453,7 +453,14 @@ def forward_button_message(packer, CAN, frame, CS, cruise_button, MainMode_ACC_t def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle, left_lane_warning, right_lane_warning, canfd_debug, MainMode_ACC_trigger, LFA_trigger): ret = [] + # if CS.new_msg_4b9 is not None: + # print(f"============new_msg_4b9==========\r\n") + + # if CS.new_msg_4b4 is not None: + # print(f"============new_msg_4b4==========\r\n") + if CP.flags & HyundaiFlags.CAMERA_SCC.value: + if frame % 2 == 0: if CS.adrv_info_160 is not None: values = copy.copy(CS.adrv_info_160) @@ -789,44 +796,44 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["VIBRATE"] = 1 ret.append(packer.make_can_msg("CCNC_0x162", CAN.ECAN, values)) - if frame % 20 == 0: # 5hz - if CS.hda_info_4a3 is not None: - values = copy.copy(CS.hda_info_4a3) - if canfd_debug > 0: - if canfd_debug == 1: - values["LinkClass"] = 2 - values["SpeedUnit"] = 1 - values["Frwinfo"] = 0 - values["SPEED_LIMIT"] = 40 - elif canfd_debug == 2: - values["LinkClass"] = 1 - values["SpeedUnit"] = 1 - values["Frwinfo"] = 0 - values["SPEED_LIMIT"] = 100 - ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - - if canfd_debug != 3: - if CS.new_msg_4b8 is not None: - values = copy.copy(CS.new_msg_4b8) - ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) - if CS.new_msg_4b9 is not None: - values = copy.copy(CS.new_msg_4b9) - ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) - if CS.new_msg_4ba is not None: - values = copy.copy(CS.new_msg_4ba) - ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) - if CS.new_msg_4be is not None: - values = copy.copy(CS.new_msg_4be) - ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) - if CS.new_msg_4bf is not None: - values = copy.copy(CS.new_msg_4bf) - ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) - if CS.new_msg_4c1 is not None: - values = copy.copy(CS.new_msg_4c1) - ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) - if CS.new_msg_4dc is not None: - values = copy.copy(CS.new_msg_4dc) - ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) + # if frame % 20 == 0: # 5hz + # if CS.hda_info_4a3 is not None: + # values = copy.copy(CS.hda_info_4a3) + # if canfd_debug > 0: + # if canfd_debug == 1: + # values["LinkClass"] = 2 + # values["SpeedUnit"] = 1 + # values["Frwinfo"] = 0 + # values["SPEED_LIMIT"] = 40 + # elif canfd_debug == 2: + # values["LinkClass"] = 1 + # values["SpeedUnit"] = 1 + # values["Frwinfo"] = 0 + # values["SPEED_LIMIT"] = 100 + # ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + if frame % 100 == 0: # 1hz + if canfd_debug > 0: + if CS.new_msg_4b8 is not None: + values = copy.copy(CS.new_msg_4b8) + ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) + if CS.new_msg_4b9 is not None: + values = copy.copy(CS.new_msg_4b9) + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + if CS.new_msg_4ba is not None: + values = copy.copy(CS.new_msg_4ba) + ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) + if CS.new_msg_4be is not None: + values = copy.copy(CS.new_msg_4be) + ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) + if CS.new_msg_4bf is not None: + values = copy.copy(CS.new_msg_4bf) + ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) + if CS.new_msg_4c1 is not None: + values = copy.copy(CS.new_msg_4c1) + ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) + if CS.new_msg_4dc is not None: + values = copy.copy(CS.new_msg_4dc) + ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) if frame % 10 == 0: # 10hz if CS.cluster_speed_limit is not None: @@ -842,8 +849,8 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT_3"] = 105 ret.append(packer.make_can_msg("CLUSTER_SPEED_LIMIT",CAN.CAM,values)) - if CS.new_msg_4b4 is not None: - values = copy.copy(CS.new_msg_4b4) + # if CS.new_msg_4b4 is not None: + # values = copy.copy(CS.new_msg_4b4) # if canfd_debug > 0: # if canfd_debug == 1: # values["NEW_SIGNAL_2"] = 54 @@ -857,7 +864,7 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle # values["NEW_SIGNAL_5"] = 2 # values["NEW_SIGNAL_4"] = 80 # values["NEW_SIGNAL_6"] = 5 - ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + # ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) return ret diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index a00c7b925d..71aa09ecde 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -223,11 +223,11 @@ const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; bool hyundai_canfd_alt_buttons = false; bool hyundai_canfd_hda2_alt_steering = false; -int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 0x4a3, 0x4b4, 203, 0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc, 0,}; -int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 20, 20, 100, 20, 20, 20, 20, 20, 20, 20, 0,}; +int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 203, 0x4a3, 0x4b4, 0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc, 0,}; +int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 100, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0,}; uint32_t canfd_tx_timeout[64] = { 0, }; -int canfd_tx_addr2[64] = { 373, 506, 463, 426, 234, 687, 0 }; -int canfd_tx_hz2[64] = { 50, 10, 50, 50, 100, 10, 0 }; +int canfd_tx_addr2[64] = { 0x4b4, 0x4b8,0x4b8, 0x4b9, 373, 506, 463, 426, 234, 687, 0 }; +int canfd_tx_hz2[64] = { 20, 20, 20, 20, 50, 10, 50, 50, 100, 10, 0 }; uint32_t canfd_tx_timeout2[64] = { 0, }; uint32_t canfd_tx_time[64] = { 0, }; uint32_t canfd_tx_time2[64] = { 0, }; @@ -441,15 +441,13 @@ int addr_list_count2 = 0; static int hyundai_canfd_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; uint32_t now = microsecond_timer_get(); - if (addr == 0x4a3) { return -1; } - if (addr == 0x4b4) { return -1; } - if (addr == 0x4b8) { return -1; } - if (addr == 0x4b9) { return -1; } - if (addr == 0x4ba) { return -1; } - if (addr == 0x4be) { return -1; } - if (addr == 0x4bf) { return -1; } - if (addr == 0x4c1) { return -1; } - if (addr == 0x4dc) { return -1; } + // if (bus_num == 0 && addr == 0x4b8) { return -1; } + // if (bus_num == 0 && addr == 0x4b9) { return -1; } + // if (bus_num == 0 && addr == 0x4ba) { return -1; } + // if (bus_num == 0 && addr == 0x4be) { return -1; } + // if (bus_num == 0 && addr == 0x4bf) { return -1; } + // if (bus_num == 0 && addr == 0x4c1) { return -1; } + // if (bus_num == 0 && addr == 0x4dc) { return -1; } if (bus_num == 0) { bus_fwd = 2; From c479349e68f600cc9fcd1da2a22739acd803f1ca Mon Sep 17 00:00:00 2001 From: Comma Device Date: Wed, 7 Jan 2026 13:16:38 +0900 Subject: [PATCH 18/19] dd --- .../opendbc/safety/safety/safety_hyundai_canfd.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index 71aa09ecde..fb0c8a832c 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -441,13 +441,13 @@ int addr_list_count2 = 0; static int hyundai_canfd_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; uint32_t now = microsecond_timer_get(); - // if (bus_num == 0 && addr == 0x4b8) { return -1; } - // if (bus_num == 0 && addr == 0x4b9) { return -1; } - // if (bus_num == 0 && addr == 0x4ba) { return -1; } - // if (bus_num == 0 && addr == 0x4be) { return -1; } - // if (bus_num == 0 && addr == 0x4bf) { return -1; } - // if (bus_num == 0 && addr == 0x4c1) { return -1; } - // if (bus_num == 0 && addr == 0x4dc) { return -1; } + if (addr == 0x4b8) { return -1; } + if (addr == 0x4b9) { return -1; } + if (addr == 0x4ba) { return -1; } + if (addr == 0x4be) { return -1; } + if (addr == 0x4bf) { return -1; } + if (addr == 0x4c1) { return -1; } + if (addr == 0x4dc) { return -1; } if (bus_num == 0) { bus_fwd = 2; From 5f50d49a71f6c00fc1f7386dde7bd8c5702904bf Mon Sep 17 00:00:00 2001 From: Comma Device Date: Wed, 7 Jan 2026 21:30:24 +0900 Subject: [PATCH 19/19] dddd --- opendbc_repo/opendbc/car/hyundai/carstate.py | 35 ++--- .../opendbc/car/hyundai/hyundaicanfd.py | 148 +++++++++++------- .../dbc/generator/hyundai/hyundai_canfd.dbc | 1 + .../safety/safety/safety_hyundai_canfd.h | 36 +++-- 4 files changed, 124 insertions(+), 96 deletions(-) diff --git a/opendbc_repo/opendbc/car/hyundai/carstate.py b/opendbc_repo/opendbc/car/hyundai/carstate.py index 7c7a1d3396..be15b0f2dc 100644 --- a/opendbc_repo/opendbc/car/hyundai/carstate.py +++ b/opendbc_repo/opendbc/car/hyundai/carstate.py @@ -89,13 +89,8 @@ def __init__(self, CP): self.cluster_speed_limit = None self.new_msg_4b4 = None - self.new_msg_4b8 = None + self.hda2_counter = 99 self.new_msg_4b9 = None - self.new_msg_4ba = None - self.new_msg_4be = None - self.new_msg_4bf = None - self.new_msg_4c1 = None - self.new_msg_4dc = None self.tcs_info_373 = None self.mdps_info = {} @@ -165,14 +160,6 @@ def __init__(self, CP): self.HDA_INFO_4A3 = True if 0x4a3 in fingerprints[pt_bus] else False self.NEW_MSG_4B4 = True if 0x4b4 in fingerprints[pt_bus] else False - self.NEW_MSG_4B8 = True if 0x4b8 in fingerprints[pt_bus] else False - self.NEW_MSG_4B9 = True if 0x4b9 in fingerprints[pt_bus] else False - self.NEW_MSG_4BA = True if 0x4ba in fingerprints[pt_bus] else False - self.NEW_MSG_4BE = True if 0x4be in fingerprints[pt_bus] else False - self.NEW_MSG_4BF = True if 0x4bf in fingerprints[pt_bus] else False - self.NEW_MSG_4C1 = True if 0x4c1 in fingerprints[pt_bus] else False - self.NEW_MSG_4DC = True if 0x4dc in fingerprints[pt_bus] else False - self.GEAR = True if 69 in fingerprints[pt_bus] else False self.GEAR_ALT = True if 64 in fingerprints[pt_bus] else False self.CAM_0x362 = True if 0x362 in fingerprints[alt_bus] else False @@ -565,9 +552,10 @@ def update_canfd(self, can_parsers) -> structs.CarState: ret.leftLatDist = self.adrv_info_1ea["LF_DETECT_LATERAL"] ret.rightLatDist = self.adrv_info_1ea["RF_DETECT_LATERAL"] self.adrv_info_160 = cp_cam.vl["ADRV_0x160"] if self.ADRV_0x160 else None + self.cluster_speed_limit = cp.vl["CLUSTER_SPEED_LIMIT"] if self.CLUSTER_SPEED_LIMIT else None self.hda_info_4a3 = cp.vl["HDA_INFO_4A3"] if self.HDA_INFO_4A3 else None - self.cluster_speed_limit = cp.vl["CLUSTER_SPEED_LIMIT"] if self.CLUSTER_SPEED_LIMIT else None + if self.hda_info_4a3 is not None: speedLimit = self.hda_info_4a3["SPEED_LIMIT"] if not self.is_metric: @@ -582,16 +570,13 @@ def update_canfd(self, can_parsers) -> structs.CarState: self.new_msg_4b4 = cp.vl["NEW_MSG_4B4"] if self.NEW_MSG_4B4 else None - self.new_msg_4b8 = cp.vl["NEW_MSG_4B8"] if self.NEW_MSG_4B8 else None - self.new_msg_4b9 = cp.vl["NEW_MSG_4B9"] if self.NEW_MSG_4B9 else None - self.new_msg_4ba = cp.vl["NEW_MSG_4BA"] if self.NEW_MSG_4BA else None - self.new_msg_4be = cp.vl["NEW_MSG_4BE"] if self.NEW_MSG_4BE else None - self.new_msg_4bf = cp.vl["NEW_MSG_4BF"] if self.NEW_MSG_4BF else None - self.new_msg_4c1 = cp.vl["NEW_MSG_4C1"] if self.NEW_MSG_4C1 else None - self.new_msg_4dc = cp.vl["NEW_MSG_4DC"] if self.NEW_MSG_4DC else None - - - + # self.new_msg_4b8 = cp.vl["NEW_MSG_4B8"] # if self.NEW_MSG_4B8 else None + # self.new_msg_4b9 = cp.vl["NEW_MSG_4B9"] # if self.NEW_MSG_4B9 else None + # self.new_msg_4ba = cp.vl["NEW_MSG_4BA"] # if self.NEW_MSG_4BA else None + # self.new_msg_4be = cp.vl["NEW_MSG_4BE"] # if self.NEW_MSG_4BE else None + # self.new_msg_4bf = cp.vl["NEW_MSG_4BF"] # if self.NEW_MSG_4BF else None + # self.new_msg_4c1 = cp.vl["NEW_MSG_4C1"] # if self.NEW_MSG_4C1 else None + # self.new_msg_4dc = cp.vl["NEW_MSG_4DC"] # if self.NEW_MSG_4DC else None self.tcs_info_373 = cp.vl["TCS"] diff --git a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py index a7233d017e..c97aa4d63b 100644 --- a/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py +++ b/opendbc_repo/opendbc/car/hyundai/hyundaicanfd.py @@ -796,44 +796,84 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["VIBRATE"] = 1 ret.append(packer.make_can_msg("CCNC_0x162", CAN.ECAN, values)) - # if frame % 20 == 0: # 5hz - # if CS.hda_info_4a3 is not None: - # values = copy.copy(CS.hda_info_4a3) - # if canfd_debug > 0: - # if canfd_debug == 1: - # values["LinkClass"] = 2 - # values["SpeedUnit"] = 1 - # values["Frwinfo"] = 0 - # values["SPEED_LIMIT"] = 40 - # elif canfd_debug == 2: - # values["LinkClass"] = 1 - # values["SpeedUnit"] = 1 - # values["Frwinfo"] = 0 - # values["SPEED_LIMIT"] = 100 - # ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) - if frame % 100 == 0: # 1hz - if canfd_debug > 0: - if CS.new_msg_4b8 is not None: - values = copy.copy(CS.new_msg_4b8) - ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) - if CS.new_msg_4b9 is not None: - values = copy.copy(CS.new_msg_4b9) - ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) - if CS.new_msg_4ba is not None: - values = copy.copy(CS.new_msg_4ba) - ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) - if CS.new_msg_4be is not None: - values = copy.copy(CS.new_msg_4be) - ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) - if CS.new_msg_4bf is not None: - values = copy.copy(CS.new_msg_4bf) - ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) - if CS.new_msg_4c1 is not None: - values = copy.copy(CS.new_msg_4c1) - ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) - if CS.new_msg_4dc is not None: - values = copy.copy(CS.new_msg_4dc) - ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) + if frame % 20 == 0: # 5HZ + if CS.hda_info_4a3 is not None: + values = copy.copy(CS.hda_info_4a3) + if canfd_debug > 0: + if canfd_debug == 1: + values["LinkClass"] = 2 + values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 + values["SPEED_LIMIT"] = 40 + elif canfd_debug == 2: + values["LinkClass"] = 1 + values["SpeedUnit"] = 1 + values["Frwinfo"] = 0 + values["SPEED_LIMIT"] = 100 + ret.append(packer.make_can_msg("HDA_INFO_4A3", CAN.CAM, values)) + + if not CC.enabled : # 크루즈가 꺼지면 + CS.hda2_counter = 99 # 옆두부 메세지 카운터 리셋 + elif CC.enabled and CS.hda2_counter == 99: # 크루즈가 켜지면 + CS.hda2_counter = 0 # 옆두부 메세지 카운터 리셋 + + if frame % 5 == 0 and CS.hda2_counter < 6: # 20 Hz tick + CS.hda2_counter += 1 + values = {} + if CS.hda2_counter in [1,2,3]: + # 00 00 80 8A 32 30 01 00 + values["BYTE_1"] = 0x00 + values["BYTE_2"] = 0x00 + values["BYTE_3"] = 0x80 + values["BYTE_4"] = 0x8A + values["BYTE_5"] = 0x32 + values["BYTE_6"] = 0x30 + values["BYTE_7"] = 0x01 + values["BYTE_8"] = 0x00 + elif CS.hda2_counter in [4,5,6]: + values["BYTE_1"] = 0xFF + values["BYTE_2"] = 0xFF + values["BYTE_3"] = 0xFF + values["BYTE_4"] = 0xFF + values["BYTE_5"] = 0xFF + values["BYTE_6"] = 0xFF + values["BYTE_7"] = 0xFF + values["BYTE_8"] = 0xFF + print(f"NEW_MSG_4B9: {values}\r\n") + ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + + + + # if frame % 10 == 0: # 10 Hz tick + # ctu = ((frame // 10) % 10) + 1 # 1 ~ 10 + # print(f"=== ctu === {ctu}") + # values = {} + # values["BYTE_1"] = ctu + # ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + + # if frame % 10 == 0: # 1hz + # if canfd_debug > 0: + # if CS.new_msg_4b8 is not None: + # values = copy.copy(CS.new_msg_4b8) + # ret.append(packer.make_can_msg("NEW_MSG_4B8", CAN.CAM, values)) + # if CS.new_msg_4b9 is not None: + # values = copy.copy(CS.new_msg_4b9) + # ret.append(packer.make_can_msg("NEW_MSG_4B9", CAN.CAM, values)) + # if CS.new_msg_4ba is not None: + # values = copy.copy(CS.new_msg_4ba) + # ret.append(packer.make_can_msg("NEW_MSG_4BA", CAN.CAM, values)) + # if CS.new_msg_4be is not None: + # values = copy.copy(CS.new_msg_4be) + # ret.append(packer.make_can_msg("NEW_MSG_4BE", CAN.CAM, values)) + # if CS.new_msg_4bf is not None: + # values = copy.copy(CS.new_msg_4bf) + # ret.append(packer.make_can_msg("NEW_MSG_4BF", CAN.CAM, values)) + # if CS.new_msg_4c1 is not None: + # values = copy.copy(CS.new_msg_4c1) + # ret.append(packer.make_can_msg("NEW_MSG_4C1", CAN.CAM, values)) + # if CS.new_msg_4dc is not None: + # values = copy.copy(CS.new_msg_4dc) + # ret.append(packer.make_can_msg("NEW_MSG_4DC", CAN.CAM, values)) if frame % 10 == 0: # 10hz if CS.cluster_speed_limit is not None: @@ -849,22 +889,22 @@ def create_ccnc_messages(CP, packer, CAN, frame, CC, CS, hud_control, disp_angle values["SPEED_LIMIT_3"] = 105 ret.append(packer.make_can_msg("CLUSTER_SPEED_LIMIT",CAN.CAM,values)) - # if CS.new_msg_4b4 is not None: - # values = copy.copy(CS.new_msg_4b4) - # if canfd_debug > 0: - # if canfd_debug == 1: - # values["NEW_SIGNAL_2"] = 54 - # values["NEW_SIGNAL_7"] = 1 - # values["NEW_SIGNAL_5"] = 1 - # values["NEW_SIGNAL_4"] = 73 - # values["NEW_SIGNAL_6"] = 2 - # elif canfd_debug >= 2: - # values["NEW_SIGNAL_2"] = 54 - # values["NEW_SIGNAL_7"] = 1 - # values["NEW_SIGNAL_5"] = 2 - # values["NEW_SIGNAL_4"] = 80 - # values["NEW_SIGNAL_6"] = 5 - # ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) + if CS.new_msg_4b4 is not None: + values = copy.copy(CS.new_msg_4b4) + if canfd_debug > 0: + if canfd_debug == 1: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 1 + values["NEW_SIGNAL_4"] = 73 + values["NEW_SIGNAL_6"] = 2 + elif canfd_debug >= 2: + values["NEW_SIGNAL_2"] = 54 + values["NEW_SIGNAL_7"] = 1 + values["NEW_SIGNAL_5"] = 2 + values["NEW_SIGNAL_4"] = 80 + values["NEW_SIGNAL_6"] = 5 + ret.append(packer.make_can_msg("NEW_MSG_4B4", CAN.CAM, values)) return ret diff --git a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc index 25743a51e0..9c5e359ff2 100644 --- a/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc +++ b/opendbc_repo/opendbc/dbc/generator/hyundai/hyundai_canfd.dbc @@ -928,6 +928,7 @@ BO_ 1187 HDA_INFO_4A3: 8 XXX SG_ CountryCode : 16|10@1+ (1,0) [0|1023] "" XXX SG_ MapSource : 27|3@1+ (1,0) [0|7] "" XXX SG_ TollExist : 30|2@1+ (1,0) [0|3] "" XXX + SG_ NEW_SIGNAL_1 : 37|6@0+ (1,0) [0|63] "" XXX SG_ TunnelExist : 38|2@1+ (1,0) [0|3] "" XXX SG_ NEW_SIGNAL_6 : 47|24@0+ (1,0) [0|16777215] "" XXX diff --git a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h index fb0c8a832c..b890472565 100644 --- a/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h +++ b/opendbc_repo/opendbc/safety/safety/safety_hyundai_canfd.h @@ -79,13 +79,13 @@ const CanMsg HYUNDAI_CANFD_HDA2_LONG_TX_MSGS[] = { {0x4a3, 2, 8}, // 4A3 1187 {0x4b4, 2, 8}, // 4B4 1204 - {0x4b8, 2, 8}, // test + // {0x4b8, 2, 8}, // test {0x4b9, 2, 8}, // test - {0x4ba, 2, 8}, // test - {0x4be, 2, 8}, // test - {0x4bf, 2, 8}, // test - {0x4c1, 2, 8}, // test - {0x4dc, 2, 8}, // test + // {0x4ba, 2, 8}, // test + // {0x4be, 2, 8}, // test + // {0x4bf, 2, 8}, // test + // {0x4c1, 2, 8}, // test + // {0x4dc, 2, 8}, // test {203, 0, 24}, // CB {373, 2, 24}, // TCS(0x175) @@ -223,11 +223,11 @@ const int HYUNDAI_PARAM_CANFD_HDA2_ALT_STEERING = 128; bool hyundai_canfd_alt_buttons = false; bool hyundai_canfd_hda2_alt_steering = false; -int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 203, 0x4a3, 0x4b4, 0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc, 0,}; -int canfd_tx_hz[64] = { 100,100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 100, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0,}; +int canfd_tx_addr[64] = { 80, 81, 272, 282, 298, 352, 353, 354, 442, 485, 416, 437, 506, 474, 480, 490, 512, 676, 866, 837, 1402, 908, 1848, 203, 0x4a3, 0x4b4, 0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc, 0,}; +int canfd_tx_hz[64] = { 100, 100, 100, 100, 100, 50, 20, 20, 20, 20, 50, 20, 10, 1, 20, 20, 20, 20, 10, 5, 10, 5, 10, 100, 5, 10, 1, 20, 10, 1, 1, 1, 1, 0,}; uint32_t canfd_tx_timeout[64] = { 0, }; -int canfd_tx_addr2[64] = { 0x4b4, 0x4b8,0x4b8, 0x4b9, 373, 506, 463, 426, 234, 687, 0 }; -int canfd_tx_hz2[64] = { 20, 20, 20, 20, 50, 10, 50, 50, 100, 10, 0 }; +int canfd_tx_addr2[64] = { 0x4a3, 0x4b4, /*0x4b8, 0x4b9, 0x4ba, 0x4be, 0x4bf, 0x4c1, 0x4dc,*/ 373, 506, 463, 426, 234, 687, 0, }; +int canfd_tx_hz2[64] = { 5, 10, /* 1, 1, 10, 1, 1, 1, 1,*/ 50, 10, 50, 50, 100, 10, 0, }; uint32_t canfd_tx_timeout2[64] = { 0, }; uint32_t canfd_tx_time[64] = { 0, }; uint32_t canfd_tx_time2[64] = { 0, }; @@ -441,13 +441,15 @@ int addr_list_count2 = 0; static int hyundai_canfd_fwd_hook(int bus_num, int addr) { int bus_fwd = -1; uint32_t now = microsecond_timer_get(); - if (addr == 0x4b8) { return -1; } - if (addr == 0x4b9) { return -1; } - if (addr == 0x4ba) { return -1; } - if (addr == 0x4be) { return -1; } - if (addr == 0x4bf) { return -1; } - if (addr == 0x4c1) { return -1; } - if (addr == 0x4dc) { return -1; } + if (bus_num == 0 && addr == 0x4a3) { return -1; } + if (bus_num == 0 && addr == 0x4b4) { return -1; } + if (bus_num == 0 && addr == 0x4b8) { return -1; } + // if (bus_num == 0 && addr == 0x4b9) { return -1; } + if (bus_num == 0 && addr == 0x4ba) { return -1; } + if (bus_num == 0 && addr == 0x4be) { return -1; } + if (bus_num == 0 && addr == 0x4bf) { return -1; } + if (bus_num == 0 && addr == 0x4c1) { return -1; } + if (bus_num == 0 && addr == 0x4dc) { return -1; } if (bus_num == 0) { bus_fwd = 2;