Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kia: Sorento 2024 Port #1569

Draft
wants to merge 20 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion opendbc/car/hyundai/carcontroller.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,11 @@ def update(self, CC, CS, now_nanos):
self.CP.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING))

# LFA and HDA icons
if self.frame % 5 == 0 and (not hda2 or hda2_long):
if self.frame % 5 == 0 and (not hda2 or hda2_long) and self.car_fingerprint not in (CAR.KIA_SORENTO_2024,):
can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled))
if self.frame % 5 == 0 and (not hda2 or hda2_long) and self.car_fingerprint in (CAR.KIA_SORENTO_2024,):
can_sends.append(hyundaicanfd.create_msg_161(self.packer, self.CAN, CC.enabled, CS.msg_161, self.CP, hud_control, CS, CC, self.frame))
can_sends.append(hyundaicanfd.create_msg_162(self.packer, self.CAN, CC.enabled, CS.msg_162, self.CP, hud_control))

# blinkers
if hda2 and self.CP.flags & HyundaiFlags.ENABLE_BLINKERS:
Expand Down
18 changes: 15 additions & 3 deletions opendbc/car/hyundai/carstate.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ def __init__(self, CP):
self.buttons_counter = 0

self.cruise_info = {}
self.msg_161 = {}
self.msg_162 = {}

# On some cars, CLU15->CF_Clu_VehicleSpeed can oscillate faster than the dash updates. Sample at 5 Hz
self.cluster_speed = 0
Expand Down Expand Up @@ -224,13 +226,14 @@ def update_canfd(self, can_parsers) -> structs.CarState:

# TODO: alt signal usage may be described by cp.vl['BLINKERS']['USE_ALT_LAMP']
left_blinker_sig, right_blinker_sig = "LEFT_LAMP", "RIGHT_LAMP"
if self.CP.carFingerprint == CAR.HYUNDAI_KONA_EV_2ND_GEN:
if self.CP.carFingerprint in (CAR.HYUNDAI_KONA_EV_2ND_GEN, CAR.KIA_SORENTO_2024):
left_blinker_sig, right_blinker_sig = "LEFT_LAMP_ALT", "RIGHT_LAMP_ALT"
ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, cp.vl["BLINKERS"][left_blinker_sig],
cp.vl["BLINKERS"][right_blinker_sig])
if self.CP.enableBsm:
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] != 0
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] != 0
alt = "_ALT" if self.CP.carFingerprint == CAR.KIA_SORENTO_2024 else ""
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"][f"FL_INDICATOR{alt}"] != 0
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"][f"FR_INDICATOR{alt}"] != 0

# cruise state
# CAN FD cars enable on main button press, set available if no TCS faults preventing engagement
Expand Down Expand Up @@ -267,6 +270,10 @@ def update_canfd(self, can_parsers) -> structs.CarState:
ret.buttonEvents = [*create_button_events(self.cruise_buttons[-1], prev_cruise_buttons, BUTTONS_DICT),
*create_button_events(self.main_buttons[-1], prev_main_buttons, {1: ButtonType.mainCruise})]

if self.CP.carFingerprint in (CAR.KIA_SORENTO_2024,):
self.msg_161 = copy.copy(cp_cam.vl["MSG_161"])
self.msg_162 = copy.copy(cp_cam.vl["MSG_162"])

return ret

def get_can_parsers_canfd(self, CP):
Expand Down Expand Up @@ -314,6 +321,11 @@ def get_can_parsers_canfd(self, CP):
cam_messages += [
("SCC_CONTROL", 50),
]
if self.CP.carFingerprint in (CAR.KIA_SORENTO_2024,):
cam_messages += [
("MSG_161", 20),
("MSG_162", 20),
]

return {
Bus.pt: CANParser(DBC[CP.carFingerprint][Bus.pt], pt_messages, CanBus(CP).ECAN),
Expand Down
8 changes: 8 additions & 0 deletions opendbc/car/hyundai/fingerprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -1107,6 +1107,14 @@
b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.06 99110-P2000 ',
b'\xf1\x00MQ4_ SCC FHCUP 1.00 1.08 99110-P2000 ',
],
},
CAR.KIA_SORENTO_2024: {
(Ecu.fwdCamera, 0x7c4, None): [
b'\xf1\x00MQ4 MFC AT AUS RHD 1.01 1.04 99210-P2550 231127',
],
(Ecu.fwdRadar, 0x7d0, None): [
b'\xf1\x00MQ4_ RDR ----- 1.00 1.01 99110-P2500 ',
],
},
CAR.KIA_SORENTO_HEV_4TH_GEN: {
(Ecu.fwdCamera, 0x7c4, None): [
Expand Down
93 changes: 93 additions & 0 deletions opendbc/car/hyundai/hyundaicanfd.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from opendbc.car import CanBusBase
from opendbc.car.common.conversions import Conversions as CV
from opendbc.car.common.numpy_fast import clip
from opendbc.car.hyundai.values import HyundaiFlags

Expand Down Expand Up @@ -119,6 +120,98 @@ def create_lfahda_cluster(packer, CAN, enabled):
}
return packer.make_can_msg("LFAHDA_CLUSTER", CAN.ECAN, values)

def create_msg_161(packer, CAN, enabled, msg_161, car_params, hud_control, car_state, car_control, frame):
values = msg_161.copy()

# HIDE ALERTS
if values.get("ALERTS_5") == 5: # USE SWITCH OR PEDAL TO ACCELERATE
values["ALERTS_5"] = 0
if values.get("ALERTS_2") == 5: # CONSIDER TAKING A BREAK
values.update({"ALERTS_2": 0, "SOUNDS_2": 0, "DAW_ICON": 0})

# LANELINES
curvature = {
i: (31 if i == -1 else 13 - abs(i + 15)) if i < 0 else 15 + i
for i in range(-15, 16)
}
values.update({
"LANELINE_CURVATURE": curvature.get(max(-15, min(int(car_state.out.steeringAngleDeg / 3), 15)), 14) if enabled else 15,
"LFA_ICON": 2 if enabled else 0,
"LKA_ICON": 4 if enabled else 0,
"LANELINE_LEFT": 2 if enabled else 0,
"LANELINE_RIGHT": 2 if enabled else 0,
"CENTERLINE": 1 if enabled else 0,
})

# LCA
if enabled:
speed_below_threshold = car_state.out.vEgo < 8.94
values.update({
"LCA_LEFT_ICON": 0 if car_state.out.leftBlindspot or speed_below_threshold else 2 if car_control.leftBlinker else 1,
"LCA_RIGHT_ICON": 0 if car_state.out.rightBlindspot or speed_below_threshold else 2 if car_control.rightBlinker else 1,
"LCA_LEFT_ARROW": 2 if car_control.leftBlinker else 0,
"LCA_RIGHT_ARROW": 2 if car_control.rightBlinker else 0,
})

# LANE DEPARTURE
if hud_control.leftLaneDepart:
values["LANELINE_LEFT"] = 4 if (frame // 50) % 2 == 0 else 1
if hud_control.rightLaneDepart:
values["LANELINE_RIGHT"] = 4 if (frame // 50) % 2 == 0 else 1

if car_params.openpilotLongitudinalControl:
# HIDE ALERTS
if values.get("ALERTS_5") == 4: # SMART CRUISE CONTROL CONDITIONS NOT MET
values["ALERTS_5"] = 0

# SETSPEED
values["SETSPEED"] = 3 if enabled else 1
values["SETSPEED_HUD"] = 2 if enabled else 1
values["SETSPEED_SPEED"] = 25 if (s := round(car_state.out.vCruiseCluster * CV.KPH_TO_MPH)) > 100 else s

# DISTANCE
if 1 <= hud_control.leadDistanceBars <= 3:
values["DISTANCE"] = hud_control.leadDistanceBars
values["DISTANCE_SPACING"] = 1 if enabled else 0
values["DISTANCE_LEAD"] = 2 if enabled and hud_control.leadVisible else 1 if enabled else 0
values["DISTANCE_CAR"] = 2 if enabled else 1
values["ALERTS_3"] = hud_control.leadDistanceBars + 6
else:
values["DISTANCE"] = 0
values["DISTANCE_SPACING"] = 0
values["DISTANCE_LEAD"] = 0
values["DISTANCE_CAR"] = 0

# BACKGROUND
values["BACKGROUND"] = 1 if enabled else 7

return packer.make_can_msg("MSG_161", CAN.ECAN, values)

def create_msg_162(packer, CAN, enabled, msg_162, car_params, hud_control):
values = msg_162.copy()

# HIDE FAULTS
values.update({
"FAULT_LSS": 0,
"FAULT_HDA": 0,
"FAULT_DAS": 0,
})

# LANE DEPARTURE
if hud_control.leftLaneDepart or hud_control.rightLaneDepart:
values["VIBRATE"] = 1

if car_params.openpilotLongitudinalControl:
# *** TODO *** LEAD_DISTANCE/LEAD_LATERAL
# LEAD
if hud_control.leadVisible:
values["LEAD"] = 2 if enabled else 1
values["LEAD_DISTANCE"] = 100
else:
values["LEAD"] = 0
values["LEAD_DISTANCE"] = 0

return packer.make_can_msg("MSG_162", CAN.ECAN, values)

def create_acc_control(packer, CAN, enabled, accel_last, accel, stopping, gas_override, set_speed, hud_control):
jerk = 5
Expand Down
4 changes: 4 additions & 0 deletions opendbc/car/hyundai/values.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,10 @@ class CAR(Platforms):
CarSpecs(mass=3957 * CV.LB_TO_KG, wheelbase=2.81, steerRatio=13.5), # average of the platforms
flags=HyundaiFlags.RADAR_SCC,
)
KIA_SORENTO_2024 = HyundaiCanFDPlatformConfig(
[HyundaiCarDocs("Kia Sorento 2024", car_parts=CarParts.common([CarHarness.hyundai_a]))],
CarSpecs(mass=3957 * CV.LB_TO_KG, wheelbase=2.81, steerRatio=13.5),
)
KIA_SORENTO_HEV_4TH_GEN = HyundaiCanFDPlatformConfig(
[
HyundaiCarDocs("Kia Sorento Hybrid 2021-23", "All", car_parts=CarParts.common([CarHarness.hyundai_a])),
Expand Down
1 change: 1 addition & 0 deletions opendbc/car/tests/routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ class CarTestRoute(NamedTuple):
CarTestRoute("36e10531feea61a4|2022-07-25--13-37-42", HYUNDAI.HYUNDAI_TUCSON_4TH_GEN), # hybrid
CarTestRoute("5875672fc1d4bf57|2020-07-23--21-33-28", HYUNDAI.KIA_SORENTO),
CarTestRoute("1d0d000db3370fd0|2023-01-04--22-28-42", HYUNDAI.KIA_SORENTO_4TH_GEN, segment=5),
CarTestRoute("60380edf6d76cb45/00000004--e450afc26c", HYUNDAI.KIA_SORENTO_2024),
CarTestRoute("fc19648042eb6896|2023-08-16--11-43-27", HYUNDAI.KIA_SORENTO_HEV_4TH_GEN, segment=14),
CarTestRoute("628935d7d3e5f4f7|2022-11-30--01-12-46", HYUNDAI.KIA_SORENTO_HEV_4TH_GEN), # plug-in hybrid
CarTestRoute("9c917ba0d42ffe78|2020-04-17--12-43-19", HYUNDAI.HYUNDAI_PALISADE),
Expand Down
1 change: 1 addition & 0 deletions opendbc/car/torque_data/override.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
"HYUNDAI_STARIA_4TH_GEN" = [1.8, 2.0, 0.15]
"GENESIS_GV70_ELECTRIFIED_1ST_GEN" = [1.9, 1.9, 0.09]
"GENESIS_G80_2ND_GEN_FL" = [2.5819356441497803, 2.5, 0.11244568973779678]
"KIA_SORENTO_2024" = [2.5, 2.5, 0.1]

# Dashcam or fallback configured as ideal car
"MOCK" = [10.0, 10, 0.0]
Expand Down
112 changes: 112 additions & 0 deletions opendbc/dbc/hyundai_canfd.dbc
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,8 @@ BO_ 442 BLINDSPOTS_REAR_CORNERS: 24 XXX
SG_ FL_INDICATOR : 46|6@0+ (1,0) [0|1] "" XXX
SG_ FR_INDICATOR : 54|6@0+ (1,0) [0|63] "" XXX
SG_ RIGHT_BLOCKED : 64|1@0+ (1,0) [0|1] "" XXX
SG_ FL_INDICATOR_ALT : 138|1@0+ (1,0) [0|1] "" XXX
SG_ FR_INDICATOR_ALT : 141|1@0+ (1,0) [0|1] "" XXX

BO_ 874 BLINDSPOTS_FRONT_CORNER_2: 16 XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
Expand Down Expand Up @@ -658,6 +660,116 @@ BO_ 1264 LOCAL_TIME: 8 XXX
SG_ MINUTES : 21|6@0+ (1,0) [0|63] "" XXX
SG_ SECONDS : 31|8@0+ (1,0) [0|59] "" XXX

BO_ 353 MSG_161: 32 CCNC
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
SG_ FCA_ICON : 24|3@1+ (1,0) [0|7] "" XXX
SG_ FCA_ALT_ICON : 27|3@1+ (1,0) [0|7] "" XXX
SG_ LKA_ICON : 30|3@1+ (1,0) [0|3] "" XXX
SG_ HBA_ICON : 33|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_1 : 36|4@1+ (1,0) [0|15] "" XXX
SG_ ZEROS_2 : 40|2@1+ (1,0) [0|3] "" XXX
SG_ FCA_IMAGE : 42|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_3 : 45|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_4 : 48|3@1+ (1,0) [0|7] "" XXX
SG_ BCA_LEFT : 51|3@1+ (1,0) [0|7] "" XXX
SG_ BCA_RIGHT : 54|3@1+ (1,0) [0|7] "" XXX
SG_ LCA_LEFT_ARROW : 57|3@1+ (1,0) [0|7] "" XXX
SG_ LCA_RIGHT_ARROW : 60|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_5 : 63|1@0+ (1,0) [0|1] "" XXX
SG_ CENTERLINE : 64|2@1+ (1,0) [0|3] "" XXX
SG_ TARGET : 66|3@1+ (1,0) [0|7] "" XXX
SG_ TARGET_POSITION : 69|11@1+ (1,0) [0|7] "" XXX
SG_ LANELINE_LEFT : 80|4@1+ (1,0) [0|15] "" XXX
SG_ LANELINE_LEFT_POSITION : 84|6@1+ (1,0) [0|15] "" XXX
SG_ LANELINE_RIGHT : 90|4@1+ (1,0) [0|15] "" XXX
SG_ LANELINE_RIGHT_POSITION : 94|6@1+ (1,0) [0|3] "" XXX
SG_ LANELINE_CURVATURE : 100|5@1- (1,15) [0|31] "" XXX
SG_ LANE_HIGHLIGHT : 105|4@1+ (1,0) [0|15] "" XXX
SG_ LANE_HIGHLIGHT_DISTANCE : 109|11@1+ (1,0) [0|7] "" XXX
SG_ LANE_LEFT : 120|3@1+ (1,0) [0|7] "" XXX
SG_ LANE_RIGHT : 123|3@1+ (1,0) [0|7] "" XXX
SG_ LANE_ZOOM : 126|2@1+ (1,0) [0|3] "" XXX
SG_ ALERTS_1 : 128|6@1+ (1,0) [0|63] "" XXX
SG_ ALERTS_2 : 134|5@1+ (1,0) [0|3] "" XXX
SG_ ALERTS_3 : 139|4@1+ (1,0) [0|15] "" XXX
SG_ ALERTS_4 : 143|9@1+ (1,0) [0|511] "" XXX
SG_ ALERTS_5 : 152|5@1+ (1,0) [0|7] "" XXX
SG_ MUTE : 157|3@1+ (1,0) [0|7] "" XXX
SG_ SOUNDS_1 : 160|4@1+ (1,0) [0|3] "" XXX
SG_ SOUNDS_2 : 164|4@1+ (1,0) [0|3] "" XXX
SG_ SOUNDS_3 : 168|4@1+ (1,0) [0|15] "" XXX
SG_ SOUNDS_4 : 172|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_6 : 175|1@0+ (1,0) [0|1] "" XXX
SG_ ZEROS_7 : 176|5@1+ (1,0) [0|31] "" XXX
SG_ SETSPEED_HUD : 181|3@1+ (1,0) [0|3] "" XXX
SG_ DISTANCE_LEAD : 184|5@1+ (1,0) [0|31] "" XXX
SG_ DISTANCE_CAR : 189|3@1+ (1,0) [0|7] "" XXX
SG_ DISTANCE_SPACING : 192|4@1+ (1,0) [0|15] "" XXX
SG_ DISTANCE : 196|4@1+ (1,0) [0|7] "" XXX
SG_ SETSPEED_SPEED : 200|8@1+ (1,0) [0|255] "" XXX
SG_ SETSPEED : 208|4@1+ (1,0) [0|3] "" XXX
SG_ HDA_ICON : 212|4@1+ (1,0) [0|3] "" XXX
SG_ SLA_ICON : 216|4@1+ (1,0) [0|15] "" XXX
SG_ NAV_ICON : 220|4@1+ (1,0) [0|3] "" XXX
SG_ LFA_ICON : 224|4@1+ (1,0) [0|3] "" XXX
SG_ LCA_LEFT_ICON : 228|4@1+ (1,0) [0|15] "" XXX
SG_ LCA_RIGHT_ICON : 232|4@1+ (1,0) [0|15] "" XXX
SG_ BACKGROUND : 236|4@1+ (1,0) [0|15] "" XXX
SG_ DAW_ICON : 240|3@1+ (1,0) [0|7] "" XXX
SG_ CAR_CIRCLE : 243|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_8 : 246|2@1+ (1,0) [0|3] "" XXX
SG_ ZEROS_9 : 248|8@1+ (1,0) [0|255] "" XXX

BO_ 354 MSG_162: 32 CCNC
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
SG_ SPEEDLIMIT_STYLE : 24|4@1+ (1,0) [0|7] "" XXX
SG_ SPEEDLIMIT_FLASH : 28|4@1+ (1,0) [0|15] "" XXX
SG_ SPEEDLIMIT : 32|8@1+ (1,0) [0|255] "" XXX
SG_ SIGNS : 40|8@1+ (1,0) [0|15] "" XXX
SG_ SPEEDLIMIT_WEATHER : 48|4@1+ (1,0) [0|15] "" XXX
SG_ VIBRATE : 52|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_1 : 55|1@0+ (1,0) [0|1] "" XXX
SG_ ZEROS_2 : 56|8@1+ (1,0) [0|255] "" XXX
SG_ LEAD : 64|5@1+ (1,0) [0|31] "" XXX
SG_ LEAD_DISTANCE : 69|11@1+ (1,0) [0|2047] "" XXX
SG_ LEAD_LATERAL : 80|7@1+ (1,0) [0|127] "" XXX
SG_ ZEROS_3 : 87|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_ALT : 88|5@1+ (1,0) [0|31] "" XXX
SG_ LEAD_ALT_DISTANCE : 93|11@1+ (1,0) [0|2047] "" XXX
SG_ LEAD_ALT_LATERAL : 104|7@1+ (1,0) [0|127] "" XXX
SG_ ZEROS_4 : 111|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_LEFT : 112|5@1+ (1,0) [0|31] "" XXX
SG_ LEAD_LEFT_DISTANCE : 117|11@1+ (1,0) [0|2047] "" XXX
SG_ LEAD_LEFT_LATERAL : 128|7@1+ (1,0) [0|127] "" XXX
SG_ ZEROS_5 : 135|1@0+ (1,0) [0|1] "" XXX
SG_ LEAD_RIGHT : 136|5@1+ (1,0) [0|31] "" XXX
SG_ LEAD_RIGHT_DISTANCE : 141|11@1+ (1,0) [0|2047] "" XXX
SG_ LEAD_RIGHT_LATERAL : 152|7@1+ (1,0) [0|127] "" XXX
SG_ ZEROS_6 : 159|1@0+ (1,0) [0|1] "" XXX
SG_ ZEROS_7 : 160|8@1+ (1,0) [0|255] "" XXX
SG_ ZEROS_8 : 168|8@1+ (1,0) [0|255] "" XXX
SG_ ZEROS_9 : 176|8@1+ (1,0) [0|255] "" XXX
SG_ ZEROS_10 : 184|8@1+ (1,0) [0|255] "" XXX
SG_ ZEROS_11 : 192|8@1+ (1,0) [0|255] "" XXX
SG_ ZEROS_12 : 200|8@1+ (1,0) [0|255] "" XXX
SG_ ZEROS_13 : 208|5@1+ (1,0) [0|31] "" XXX
SG_ FAULT_FSS : 213|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_FCA : 216|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_LSS : 219|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_SLA : 222|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_DAW : 225|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_HBA : 228|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_SCC : 231|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_LFA : 234|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_HDA : 237|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_LCA : 240|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_HDP : 243|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_DAS : 246|3@1+ (1,0) [0|7] "" XXX
SG_ FAULT_ESS : 249|3@1+ (1,0) [0|7] "" XXX
SG_ ZEROS_14 : 252|4@1+ (1,0) [0|15] "" XXX

CM_ 272 "Alternative LKAS message, used on cars such as 2023 Ioniq 6, 2nd gen Kona. Matches LKAS except size is 32 bytes";
CM_ 676 "Contains signals with detailed lane line information. Used by ADAS ECU on HDA 2 vehicles to operate LFA.";
CM_ 866 "Contains signals with detailed lane line information. Used by ADAS ECU on HDA 2 vehicles to operate LFA. Used on cars that use message 272.";
Expand Down
Loading