Skip to content

Commit cc8a2cc

Browse files
sunnyhaibindevtekve
authored andcommitted
Implement angle control for Hyundai Ioniq 5 PE
This update adds angle control functionality specifically for the Hyundai Ioniq 5 PE model. Changes were made across several files and variables to accommodate this additional feature. This control type provides enhanced handling and steering performance depending on the driving conditions, given its ability to adjust steering angle precisely. Angle control stems from the angle of the steering wheel rather than torque, providing a more sophisticated steering response. In the Hyundai Ioniq 5 PE, adjustments for the input angle and torque calculations have been added, ensuring a more dynamic and responsive driving experience. Variable additions include '`apply_angle_last`', '`lkas_max_torque`' and '`driver_applied_torque_reducer`', and a new condition was created for if the driver is manually applying some torque. All of these changes allow for the application of correct torque when the driver is not actively steering, emulating the behavior of a stock LKAS system when engaged.
1 parent 4fa4acd commit cc8a2cc

File tree

9 files changed

+141
-21
lines changed

9 files changed

+141
-21
lines changed

docs/CARS.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!--- AUTOGENERATED FROM selfdrive/car/CARS_template.md, DO NOT EDIT. --->
22

3-
# Support Information for 345 Known Cars
3+
# Support Information for 346 Known Cars
44

55
|Make|Model|Package|Support Level|
66
|---|---|---|:---:|
@@ -107,6 +107,7 @@
107107
|Hyundai|Ioniq 5 (Southeast Asia and Europe only) 2022-24|All|[Upstream](#upstream)|
108108
|Hyundai|Ioniq 5 (with HDA II) 2022-24|Highway Driving Assist II|[Upstream](#upstream)|
109109
|Hyundai|Ioniq 5 (without HDA II) 2022-24|Highway Driving Assist|[Upstream](#upstream)|
110+
|Hyundai|Ioniq 5 PE (with HDA II) 2025+|Highway Driving Assist II|[Upstream](#upstream)|
110111
|Hyundai|Ioniq 6 (with HDA II) 2023-24|Highway Driving Assist II|[Upstream](#upstream)|
111112
|Hyundai|Ioniq Electric 2019|Smart Cruise Control (SCC)|[Upstream](#upstream)|
112113
|Hyundai|Ioniq Electric 2020|All|[Upstream](#upstream)|

opendbc/car/hyundai/carcontroller.py

+59-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import numpy as np
22
from opendbc.can.packer import CANPacker
3-
from opendbc.car import Bus, DT_CTRL, apply_driver_steer_torque_limits, common_fault_avoidance, make_tester_present_msg, structs
3+
from opendbc.car import Bus, DT_CTRL, apply_driver_steer_torque_limits, apply_std_steer_angle_limits, common_fault_avoidance, \
4+
make_tester_present_msg, structs
45
from opendbc.car.common.conversions import Conversions as CV
56
from opendbc.car.hyundai import hyundaicanfd, hyundaican
67
from opendbc.car.hyundai.carstate import CarState
@@ -59,6 +60,9 @@ def __init__(self, dbc_names, CP, CP_SP):
5960
self.apply_steer_last = 0
6061
self.car_fingerprint = CP.carFingerprint
6162
self.last_button_frame = 0
63+
self.apply_angle_last = 0
64+
self.lkas_max_torque = 0
65+
self.driver_applied_torque_reducer = 0
6266

6367
def update(self, CC, CC_SP, CS, now_nanos):
6468
EsccCarController.update(self, CS)
@@ -75,8 +79,56 @@ def update(self, CC, CC_SP, CS, now_nanos):
7579
self.angle_limit_counter, MAX_ANGLE_FRAMES,
7680
MAX_ANGLE_CONSECUTIVE_FRAMES)
7781

82+
apply_angle = apply_std_steer_angle_limits(actuators.steeringAngleDeg, self.apply_angle_last, CS.out.vEgoRaw, self.params)
83+
84+
# Figure out torque value. On Stock when LKAS is active, this is variable,
85+
# but 0 when LKAS is not actively steering, so because we're "tricking" ADAS
86+
# into thinking LKAS is always active, we need to make sure we're applying
87+
# torque when the driver is not actively steering. The default value chosen
88+
# here is based on observations of the stock LKAS system when it's engaged
89+
# CS.out.steeringPressed and steeringTorque are based on the
90+
# STEERING_COL_TORQUE value
91+
MAX_TORQUE = 240
92+
# Interpolate a percent to apply to max torque based on vEgo value, which is
93+
# the "best estimate of speed". This means that under 20 (units?) we will
94+
# apply less torque, and over 20 we will apply the full calculated torque.
95+
ego_weight = np.interp(CS.out.vEgo, [0, 5, 10, 20], [0.2, 0.3, 0.5, 1.0])
96+
97+
# Track if and how long the driver has been applying torque and create a
98+
# value to reduce the max torque applied. This block will cause the
99+
# `driver_applied_torque_reducer` to settle to value between 30 and 150.
100+
# While the driver applies torque the value will decrease to 30, and while
101+
# the driver is not applying torque the value will increase to 150.
102+
if abs(CS.out.steeringTorque) > 200:
103+
# If the driver is applying some torque manually, reduce the value down to 30 (the min)
104+
self.driver_applied_torque_reducer -= 1
105+
if self.driver_applied_torque_reducer < 30:
106+
self.driver_applied_torque_reducer = 30
107+
else:
108+
# While the driver is not applying torque, increase the value up to 150 (the max)
109+
self.driver_applied_torque_reducer += 1
110+
if self.driver_applied_torque_reducer > 150:
111+
self.driver_applied_torque_reducer = 150
112+
113+
if self.driver_applied_torque_reducer < 150:
114+
# If the driver has just started applying torque, the reducer value will
115+
# be around 150 so we won't reduce the max torque much. As the driver
116+
# continues to apply torque, the reducer value will decrease to 30, so we
117+
# will reduce the max torque more to fight them less (at this level we'll
118+
# be doing 1/5 of the torque)
119+
self.lkas_max_torque = int(round(MAX_TORQUE * ego_weight * (self.driver_applied_torque_reducer / 150)))
120+
else:
121+
# A torque reducer value of 150 means the driver has not been applying
122+
# torque for a while, so we will apply the full max torque value, adjusted
123+
# by the ego weight (based on driving speed)
124+
self.lkas_max_torque = MAX_TORQUE * ego_weight
125+
78126
if not CC.latActive:
127+
apply_angle = CS.out.steeringAngleDeg
79128
apply_steer = 0
129+
self.lkas_max_torque = 0
130+
131+
self.apply_angle_last = apply_angle
80132

81133
# Hold torque with induced temporary fault when cutting the actuation bit
82134
torque_fault = CC.latActive and not apply_steer_req
@@ -115,15 +167,18 @@ def update(self, CC, CC_SP, CS, now_nanos):
115167
hda2_long = hda2 and self.CP.openpilotLongitudinalControl
116168

117169
# steering control
118-
can_sends.extend(hyundaicanfd.create_steering_messages(self.packer, self.CP, self.CAN, CC.enabled, apply_steer_req, apply_steer, self.lkas_icon))
170+
can_sends.extend(hyundaicanfd.create_steering_messages(self.packer, self.CP, self.CAN, CC.enabled,
171+
apply_steer_req, CS.out.steeringPressed,
172+
apply_steer, self.lkas_icon, apply_angle, self.lkas_max_torque))
119173

120174
# prevent LFA from activating on HDA2 by sending "no lane lines detected" to ADAS ECU
121175
if self.frame % 5 == 0 and hda2:
122176
can_sends.append(hyundaicanfd.create_suppress_lfa(self.packer, self.CAN, CS.hda2_lfa_block_msg,
123177
self.CP.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING))
124178

125179
# LFA and HDA icons
126-
if self.frame % 5 == 0 and (not hda2 or hda2_long):
180+
update_lfahda_icons = (not hda2 or hda2_long) or self.CP.flags & HyundaiFlags.ANGLE_CONTROL
181+
if self.frame % 5 == 0 and update_lfahda_icons:
127182
can_sends.append(hyundaicanfd.create_lfahda_cluster(self.packer, self.CAN, CC.enabled, self.lfa_icon))
128183

129184
# blinkers
@@ -175,6 +230,7 @@ def update(self, CC, CC_SP, CS, now_nanos):
175230
new_actuators = actuators.as_builder()
176231
new_actuators.steer = apply_steer / self.params.STEER_MAX
177232
new_actuators.steerOutputCan = apply_steer
233+
new_actuators.steeringAngleDeg = apply_angle
178234
new_actuators.accel = accel
179235

180236
self.frame += 1

opendbc/car/hyundai/carstate.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -237,13 +237,17 @@ def update_canfd(self, can_parsers) -> structs.CarState:
237237

238238
# TODO: alt signal usage may be described by cp.vl['BLINKERS']['USE_ALT_LAMP']
239239
left_blinker_sig, right_blinker_sig = "LEFT_LAMP", "RIGHT_LAMP"
240-
if self.CP.carFingerprint == CAR.HYUNDAI_KONA_EV_2ND_GEN:
240+
if self.CP.carFingerprint in (CAR.HYUNDAI_KONA_EV_2ND_GEN, CAR.HYUNDAI_IONIQ_5_PE):
241241
left_blinker_sig, right_blinker_sig = "LEFT_LAMP_ALT", "RIGHT_LAMP_ALT"
242242
ret.leftBlinker, ret.rightBlinker = self.update_blinker_from_lamp(50, cp.vl["BLINKERS"][left_blinker_sig],
243243
cp.vl["BLINKERS"][right_blinker_sig])
244244
if self.CP.enableBsm:
245-
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] != 0
246-
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] != 0
245+
if self.CP.flags & HyundaiFlags.ANGLE_CONTROL:
246+
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["INDICATOR_LEFT_FOUR"] != 0
247+
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["INDICATOR_RIGHT_FOUR"] != 0
248+
else:
249+
ret.leftBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FL_INDICATOR"] != 0
250+
ret.rightBlindspot = cp.vl["BLINDSPOTS_REAR_CORNERS"]["FR_INDICATOR"] != 0
247251

248252
# cruise state
249253
# CAN FD cars enable on main button press, set available if no TCS faults preventing engagement

opendbc/car/hyundai/fingerprints.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -1018,6 +1018,16 @@
10181018
b'\xf1\x00NE1 MFC AT USA LHD 1.00 1.06 99211-GI010 230110',
10191019
],
10201020
},
1021+
CAR.HYUNDAI_IONIQ_5_PE: {
1022+
(Ecu.fwdRadar, 0x7d0, None): [
1023+
b'\xf1\x00NE__ RDR ----- 1.00 1.00 99110-PI000 ',
1024+
b'\xf1\x00NE__ RDR ----- 1.00 1.01 99110-GI500 '
1025+
],
1026+
(Ecu.fwdCamera, 0x7C4, None): [
1027+
b'\xf1\x00NE MFC AT USA LHD 1.00 1.01 99211-PI000 240905',
1028+
b'\xf1\x00NE MFC AT EUR LHD 1.00 1.03 99211-GI500 240809',
1029+
],
1030+
},
10211031
CAR.HYUNDAI_IONIQ_6: {
10221032
(Ecu.fwdRadar, 0x7d0, None): [
10231033
b'\xf1\x00CE__ RDR ----- 1.00 1.01 99110-KL000 ',
@@ -1192,5 +1202,5 @@
11921202
(Ecu.fwdRadar, 0x7d0, None): [
11931203
b'\xf1\x00US4_ RDR ----- 1.00 1.00 99110-CG000 ',
11941204
],
1195-
},
1205+
}
11961206
}

opendbc/car/hyundai/hyundaicanfd.py

+17-5
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,32 @@ def CAM(self):
3434
return self._cam
3535

3636

37-
def create_steering_messages(packer, CP, CAN, enabled, lat_active, apply_steer, lkas_icon):
37+
def create_steering_messages(packer, CP, CAN, enabled, lat_active, steering_pressed, apply_steer, lkas_icon, apply_angle, max_torque):
3838

3939
ret = []
4040

4141
values = {
42-
"LKA_MODE": 2,
42+
"LKA_MODE": 0,
4343
"LKA_ICON": lkas_icon,
44-
"TORQUE_REQUEST": apply_steer,
44+
"TORQUE_REQUEST": 0, #apply_steer,
4545
"LKA_ASSIST": 0,
46-
"STEER_REQ": 1 if lat_active else 0,
46+
"STEER_REQ": 0, # 1 if lat_active else 0,
4747
"STEER_MODE": 0,
4848
"HAS_LANE_SAFETY": 0, # hide LKAS settings
49-
"NEW_SIGNAL_1": 0,
49+
"LKA_ACTIVE": 3 if lat_active else 0, # this changes sometimes, 3 seems to indicate engaged
5050
"NEW_SIGNAL_2": 0,
51+
"LKAS_ANGLE_CMD": -apply_angle,
52+
"LKAS_ANGLE_ACTIVE": 2 if lat_active else 1,
53+
# a torque scale value? ramps up when steering, highest seen is 234
54+
# "UNKNOWN": 50 if lat_active and not steering_pressed else 0,
55+
"UNKNOWN": max_torque if lat_active else 0,
56+
# TODO: Commenting these out to see if the fix a regression
57+
#"NEW_SIGNAL_1": 10,
58+
#"NEW_SIGNAL_3": 9,
59+
#"NEW_SIGNAL_4": 1,
60+
#"NEW_SIGNAL_5": 1,
61+
#"NEW_SIGNAL_6": 1,
62+
#"NEW_SIGNAL_7": 1,
5163
}
5264

5365
if CP.flags & HyundaiFlags.CANFD_HDA2:

opendbc/car/hyundai/interface.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from opendbc.car.hyundai.hyundaicanfd import CanBus
44
from opendbc.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_RADAR_SCC_CAR, \
55
CANFD_UNSUPPORTED_LONGITUDINAL_CAR, \
6-
UNSUPPORTED_LONGITUDINAL_CAR
6+
UNSUPPORTED_LONGITUDINAL_CAR, ANGLE_CONTROL_CAR
77
from opendbc.car.hyundai.radar_interface import RADAR_START_ADDR
88
from opendbc.car.interfaces import CarInterfaceBase
99
from opendbc.car.disable_ecu import disable_ecu
@@ -63,8 +63,8 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experime
6363

6464
if ret.flags & HyundaiFlags.CANFD_HDA2:
6565
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2
66-
if ret.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING:
67-
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING
66+
if ret.flags & HyundaiFlags.CANFD_HDA2_ALT_STEERING:
67+
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_HDA2_ALT_STEERING
6868
if ret.flags & HyundaiFlags.CANFD_ALT_BUTTONS:
6969
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_ALT_BUTTONS
7070
if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC:
@@ -97,7 +97,11 @@ def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experime
9797
ret.centerToFront = ret.wheelbase * 0.4
9898
ret.steerActuatorDelay = 0.1
9999
ret.steerLimitTimer = 0.4
100-
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
100+
101+
if candidate in ANGLE_CONTROL_CAR:
102+
ret.steerControlType = structs.CarParams.SteerControlType.angle
103+
else:
104+
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
101105

102106
if ret.flags & HyundaiFlags.ALT_LIMITS:
103107
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_ALT_LIMITS

opendbc/car/hyundai/values.py

+13-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from dataclasses import dataclass, field
33
from enum import Enum, IntFlag
44

5-
from opendbc.car import Bus, CarSpecs, DbcDict, PlatformConfig, Platforms, uds
5+
from opendbc.car import AngleRateLimit, Bus, CarSpecs, DbcDict, PlatformConfig, Platforms, uds
66
from opendbc.car.common.conversions import Conversions as CV
77
from opendbc.car.structs import CarParams
88
from opendbc.car.docs_definitions import CarFootnote, CarHarness, CarDocs, CarParts, Column
@@ -15,6 +15,10 @@ class CarControllerParams:
1515
ACCEL_MIN = -3.5 # m/s
1616
ACCEL_MAX = 2.0 # m/s
1717

18+
# seen changing at 0.2 deg/frame down, 0.1 deg/frame up at 100Hz
19+
ANGLE_RATE_LIMIT_UP = AngleRateLimit(speed_bp=[0., 5., 15.], angle_v=[5., .8, .15])
20+
ANGLE_RATE_LIMIT_DOWN = AngleRateLimit(speed_bp=[0., 5., 15.], angle_v=[5., 3.5, 0.4])
21+
1822
def __init__(self, CP):
1923
self.STEER_DELTA_UP = 3
2024
self.STEER_DELTA_DOWN = 7
@@ -97,6 +101,7 @@ class HyundaiFlags(IntFlag):
97101

98102
MIN_STEER_32_MPH = 2 ** 23
99103

104+
ANGLE_CONTROL = 2 ** 24
100105

101106
class Footnote(Enum):
102107
CANFD = CarFootnote(
@@ -315,6 +320,11 @@ class CAR(Platforms):
315320
CarSpecs(mass=1948, wheelbase=2.97, steerRatio=14.26, tireStiffnessFactor=0.65),
316321
flags=HyundaiFlags.EV,
317322
)
323+
HYUNDAI_IONIQ_5_PE = HyundaiCanFDPlatformConfig(
324+
[HyundaiCarDocs("Hyundai Ioniq 5 PE (with HDA II) 2025+", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_q]))],
325+
HYUNDAI_IONIQ_5.specs,
326+
flags=HyundaiFlags.EV | HyundaiFlags.ANGLE_CONTROL,
327+
)
318328
HYUNDAI_IONIQ_6 = HyundaiCanFDPlatformConfig(
319329
[HyundaiCarDocs("Hyundai Ioniq 6 (with HDA II) 2023-24", "Highway Driving Assist II", car_parts=CarParts.common([CarHarness.hyundai_p]))],
320330
HYUNDAI_IONIQ_5.specs,
@@ -762,4 +772,6 @@ def match_fw_to_car_fuzzy(live_fw_versions, vin, offline_fw_versions) -> set[str
762772
# HyundaiFlags.CANFD_RADAR_SCC | HyundaiFlags.CANFD_NO_RADAR_DISABLE | )
763773
UNSUPPORTED_LONGITUDINAL_CAR = CAR.with_flags(HyundaiFlags.LEGACY) | CAR.with_flags(HyundaiFlags.UNSUPPORTED_LONGITUDINAL)
764774

775+
ANGLE_CONTROL_CAR = CAR.with_flags(HyundaiFlags.ANGLE_CONTROL)
776+
765777
DBC = CAR.create_dbc_map()

opendbc/car/torque_data/override.toml

+3
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,6 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
8080
# Manually checked
8181
"HONDA_CIVIC_2022" = [2.5, 1.2, 0.15]
8282
"HONDA_HRV_3G" = [2.5, 1.2, 0.2]
83+
84+
# Hyundai/Kia/Genesis angle control
85+
"HYUNDAI_IONIQ_5_PE" = [nan, 3.0, nan]

opendbc/dbc/hyundai_canfd.dbc

+21-3
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ BO_ 80 LKAS: 16 XXX
6868
SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX
6969
SG_ NEW_SIGNAL_3 : 111|8@0+ (1,0) [0|255] "" XXX
7070
SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX
71+
SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX
72+
SG_ LKAS_ANGLE_CMD : 82|14@1- (-0.1,0) [0|511] "" XXX
73+
SG_ UNKNOWN : 96|8@1+ (1,0) [0|255] "" XXX
7174

7275
BO_ 81 ADRV_0x51: 32 ADRV
7376
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
@@ -128,7 +131,7 @@ BO_ 272 LKAS_ALT: 32 XXX
128131
SG_ STEER_REQ : 52|1@1+ (1,0) [0|1] "" XXX
129132
SG_ TORQUE_REQUEST : 41|11@1+ (1,-1024) [0|4095] "" XXX
130133
SG_ LKA_ICON : 38|2@1+ (1,0) [0|255] "" XXX
131-
SG_ NEW_SIGNAL_1 : 27|2@1+ (1,0) [0|255] "" XXX
134+
SG_ LKA_ACTIVE : 27|2@1+ (1,0) [0|255] "" XXX
132135
SG_ LFA_BUTTON : 56|1@1+ (1,0) [0|255] "" XXX
133136
SG_ COUNTER : 16|8@1+ (1,0) [0|255] "" XXX
134137
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
@@ -137,9 +140,17 @@ BO_ 272 LKAS_ALT: 32 XXX
137140
SG_ LKA_ASSIST : 62|1@1+ (1,0) [0|1] "" XXX
138141
SG_ LKA_MODE : 24|3@1+ (1,0) [0|7] "" XXX
139142
SG_ NEW_SIGNAL_2 : 70|2@0+ (1,0) [0|3] "" XXX
143+
SG_ LKAS_ANGLE_ACTIVE : 77|2@0+ (1,0) [0|3] "" XXX
140144
SG_ HAS_LANE_SAFETY : 80|1@0+ (1,0) [0|1] "" XXX
141-
SG_ NEW_SIGNAL_3 : 111|8@0+ (1,0) [0|255] "" XXX
145+
SG_ LKAS_ANGLE_CMD : 82|14@1- (-0.1,0) [0|511] "" XXX
146+
SG_ UNKNOWN : 96|8@1+ (1,0) [0|255] "" XXX
147+
SG_ NEW_SIGNAL_3 : 108|5@0+ (1,0) [0|255] "" XXX
142148
SG_ FCA_SYSWARN : 40|1@0+ (1,0) [0|1] "" XXX
149+
SG_ NEW_SIGNAL_1 : 75|4@0+ (1,0) [0|15] "" XXX
150+
SG_ NEW_SIGNAL_6 : 225|1@0+ (1,0) [0|1] "" XXX
151+
SG_ NEW_SIGNAL_5 : 228|1@0+ (1,0) [0|1] "" XXX
152+
SG_ NEW_SIGNAL_4 : 231|1@0+ (1,0) [0|1] "" XXX
153+
SG_ NEW_SIGNAL_7 : 232|1@0+ (1,0) [0|1] "" XXX
143154

144155
BO_ 293 STEERING_SENSORS: 16 XXX
145156
SG_ CHECKSUM : 0|16@1+ (1,0) [0|65535] "" XXX
@@ -595,7 +606,12 @@ BO_ 442 BLINDSPOTS_REAR_CORNERS: 24 XXX
595606
SG_ COLLISION_AVOIDANCE_ACTIVE : 68|1@0+ (1,0) [0|1] "" XXX
596607
SG_ LEFT_MB : 30|1@0+ (1,0) [0|3] "" XXX
597608
SG_ LEFT_BLOCKED : 24|1@0+ (1,0) [0|1] "" XXX
598-
SG_ MORE_LEFT_PROB : 32|1@1+ (1,0) [0|3] "" XXX
609+
SG_ INDICATOR_LEFT_TWO : 30|1@0+ (1,0) [0|3] "" XXX
610+
SG_ INDICATOR_RIGHT_TWO : 32|1@1+ (1,0) [0|3] "" XXX
611+
SG_ INDICATOR_LEFT_THREE : 128|1@0+ (1,0) [0|1] "" XXX
612+
SG_ INDICATOR_RIGHT_THREE : 130|1@0+ (1,0) [0|1] "" XXX
613+
SG_ INDICATOR_LEFT_FOUR : 138|1@0+ (1,0) [0|1] "" XXX
614+
SG_ INDICATOR_RIGHT_FOUR : 141|1@0+ (1,0) [0|1] "" XXX
599615
SG_ FL_INDICATOR : 46|6@0+ (1,0) [0|1] "" XXX
600616
SG_ FR_INDICATOR : 54|6@0+ (1,0) [0|63] "" XXX
601617
SG_ RIGHT_BLOCKED : 64|1@0+ (1,0) [0|1] "" XXX
@@ -666,6 +682,7 @@ CM_ 1043 "Lamp signals do not seem universal on cars that use LKAS_ALT, but stal
666682
CM_ SG_ 80 HAS_LANE_SAFETY "If 0, hides LKAS 'Lane Safety' menu from vehicle settings";
667683
CM_ SG_ 96 BRAKE_PRESSURE "User applied brake pedal pressure. Ramps from computer applied pressure on falling edge of cruise. Cruise cancels if !=0";
668684
CM_ SG_ 101 BRAKE_POSITION "User applied brake pedal position, max is ~700. Signed on some vehicles";
685+
CM_ SG_ 272 LKAS_ANGLE_CMD "tracks MDPS->STEERING_ANGLE when not engaged, not STEERING_SENSORS->STEERING_ANGLE";
669686
CM_ SG_ 373 PROBABLY_EQUIP "aeb equip?";
670687
CM_ SG_ 373 ACCEnable "Likely a copy of CAN's TCS13->ACCEnable";
671688
CM_ SG_ 373 DriverBraking "Likely derived from BRAKE->BRAKE_POSITION";
@@ -689,6 +706,7 @@ VAL_ 80 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green" ;
689706
VAL_ 80 LKA_MODE 1 "warning only" 2 "assist" 6 "off" ;
690707
VAL_ 96 TRACTION_AND_STABILITY_CONTROL 0 "On" 5 "Limited" 1 "Off";
691708
VAL_ 234 LKA_FAULT 0 "ok" 1 "lka fault" ;
709+
VAL_ 272 LKAS_ANGLE_ACTIVE 1 "not active" 2 "active";
692710
VAL_ 272 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green" ;
693711
VAL_ 272 LKA_MODE 1 "warning only" 2 "assist" 6 "off" ;
694712
VAL_ 298 LKA_ICON 0 "hidden" 1 "grey" 2 "green" 3 "flashing green" ;

0 commit comments

Comments
 (0)