Skip to content

Commit 643fe3b

Browse files
authored
HKG: parse speed limit (commaai#118)
HKG: parse speed limits
1 parent f3a44c1 commit 643fe3b

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

selfdrive/car/hyundai/carstate.py

+28
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ def __init__(self, CP):
4949
self.escc_aeb_dec_cmd_act = 0
5050
self.escc_cmd_act = 0
5151
self.escc_aeb_dec_cmd = 0
52+
self._speed_limit_clu = 0
5253

5354
def update(self, cp, cp_cam):
5455
if self.CP.carFingerprint in CANFD_CAR:
@@ -174,6 +175,9 @@ def update(self, cp, cp_cam):
174175
self.cruise_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwState"])
175176
self.main_buttons.extend(cp.vl_all["CLU11"]["CF_Clu_CruiseSwMain"])
176177

178+
self._update_traffic_signals(self.CP, cp, cp_cam)
179+
ret.cruiseState.speedLimit = self._calculate_speed_limit() * speed_conv
180+
177181
return ret
178182

179183
def update_canfd(self, cp, cp_cam):
@@ -247,8 +251,20 @@ def update_canfd(self, cp, cp_cam):
247251
if self.CP.flags & HyundaiFlags.CANFD_HDA2:
248252
self.cam_0x2a4 = copy.copy(cp_cam.vl["CAM_0x2a4"])
249253

254+
if self.CP.flags & HyundaiFlags.SP_NAV_MSG:
255+
self._update_traffic_signals(self.CP, cp, cp_cam)
256+
ret.cruiseState.speedLimit = self._calculate_speed_limit() * speed_factor
257+
250258
return ret
251259

260+
def _update_traffic_signals(self, CP, cp, cp_cam):
261+
speed_limit_clu_canfd = cp if self.CP.flags & HyundaiFlags.CANFD_HDA2 else cp_cam
262+
self._speed_limit_clu = speed_limit_clu_canfd.vl["CLUSTER_SPEED_LIMIT"]["SPEED_LIMIT_1"] if CP.carFingerprint in CANFD_CAR else\
263+
cp.vl["Navi_HU"]["SpeedLim_Nav_Clu"]
264+
265+
def _calculate_speed_limit(self):
266+
return self._speed_limit_clu if self._speed_limit_clu not in (0, 255) else 0
267+
252268
@staticmethod
253269
def get_can_parser(CP):
254270
if CP.carFingerprint in CANFD_CAR:
@@ -404,6 +420,10 @@ def get_can_parser(CP):
404420
]
405421
checks.append(("ESCC", 50))
406422

423+
if CP.flags & HyundaiFlags.SP_NAV_MSG:
424+
signals.append(("SpeedLim_Nav_Clu", "Navi_HU"))
425+
checks.append(("Navi_HU", 5))
426+
407427
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 0)
408428

409429
@staticmethod
@@ -554,6 +574,10 @@ def get_can_parser_canfd(CP):
554574
("ACCELERATOR_BRAKE_ALT", 100),
555575
]
556576

577+
if CP.flags & HyundaiFlags.CANFD_HDA2 and CP.flags & HyundaiFlags.SP_NAV_MSG:
578+
signals.append(("SPEED_LIMIT_1", "CLUSTER_SPEED_LIMIT"))
579+
checks.append(("CLUSTER_SPEED_LIMIT", 10))
580+
557581
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, get_e_can_bus(CP))
558582

559583
@staticmethod
@@ -581,4 +605,8 @@ def get_cam_can_parser_canfd(CP):
581605
("SCC_CONTROL", 50),
582606
]
583607

608+
if not (CP.flags & HyundaiFlags.CANFD_HDA2) and CP.flags & HyundaiFlags.SP_NAV_MSG:
609+
signals.append(("SPEED_LIMIT_1", "CLUSTER_SPEED_LIMIT"))
610+
checks.append(("CLUSTER_SPEED_LIMIT", 10))
611+
584612
return CANParser(DBC[CP.carFingerprint]["pt"], signals, checks, 6)

selfdrive/car/hyundai/interface.py

+6
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,15 @@ def _get_params(ret, candidate, fingerprint, car_fw, experimental_long):
252252
if candidate in CANFD_CAR:
253253
bus = 5 if ret.flags & HyundaiFlags.CANFD_HDA2 else 4
254254
ret.enableBsm = 0x1e5 in fingerprint[bus]
255+
256+
if 0x1fa in fingerprint[bus]:
257+
ret.flags |= HyundaiFlags.SP_NAV_MSG.value
255258
else:
256259
ret.enableBsm = 0x58b in fingerprint[0]
257260

261+
if 0x544 in fingerprint[0]:
262+
ret.flags |= HyundaiFlags.SP_NAV_MSG.value
263+
258264
# *** panda safety config ***
259265
if candidate in CANFD_CAR:
260266
ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.noOutput),

selfdrive/car/hyundai/values.py

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ class HyundaiFlags(IntFlag):
6464
USE_FCA = 256
6565
SP_ENHANCED_SCC = 512
6666
SP_CAN_LFA_BTN = 1024
67+
SP_NAV_MSG = 2048
6768

6869

6970
class CAR:

0 commit comments

Comments
 (0)