@@ -49,6 +49,7 @@ def __init__(self, CP):
49
49
self .escc_aeb_dec_cmd_act = 0
50
50
self .escc_cmd_act = 0
51
51
self .escc_aeb_dec_cmd = 0
52
+ self ._speed_limit_clu = 0
52
53
53
54
def update (self , cp , cp_cam ):
54
55
if self .CP .carFingerprint in CANFD_CAR :
@@ -174,6 +175,9 @@ def update(self, cp, cp_cam):
174
175
self .cruise_buttons .extend (cp .vl_all ["CLU11" ]["CF_Clu_CruiseSwState" ])
175
176
self .main_buttons .extend (cp .vl_all ["CLU11" ]["CF_Clu_CruiseSwMain" ])
176
177
178
+ self ._update_traffic_signals (self .CP , cp , cp_cam )
179
+ ret .cruiseState .speedLimit = self ._calculate_speed_limit () * speed_conv
180
+
177
181
return ret
178
182
179
183
def update_canfd (self , cp , cp_cam ):
@@ -247,8 +251,20 @@ def update_canfd(self, cp, cp_cam):
247
251
if self .CP .flags & HyundaiFlags .CANFD_HDA2 :
248
252
self .cam_0x2a4 = copy .copy (cp_cam .vl ["CAM_0x2a4" ])
249
253
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
+
250
258
return ret
251
259
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
+
252
268
@staticmethod
253
269
def get_can_parser (CP ):
254
270
if CP .carFingerprint in CANFD_CAR :
@@ -404,6 +420,10 @@ def get_can_parser(CP):
404
420
]
405
421
checks .append (("ESCC" , 50 ))
406
422
423
+ if CP .flags & HyundaiFlags .SP_NAV_MSG :
424
+ signals .append (("SpeedLim_Nav_Clu" , "Navi_HU" ))
425
+ checks .append (("Navi_HU" , 5 ))
426
+
407
427
return CANParser (DBC [CP .carFingerprint ]["pt" ], signals , checks , 0 )
408
428
409
429
@staticmethod
@@ -554,6 +574,10 @@ def get_can_parser_canfd(CP):
554
574
("ACCELERATOR_BRAKE_ALT" , 100 ),
555
575
]
556
576
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
+
557
581
return CANParser (DBC [CP .carFingerprint ]["pt" ], signals , checks , get_e_can_bus (CP ))
558
582
559
583
@staticmethod
@@ -581,4 +605,8 @@ def get_cam_can_parser_canfd(CP):
581
605
("SCC_CONTROL" , 50 ),
582
606
]
583
607
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
+
584
612
return CANParser (DBC [CP .carFingerprint ]["pt" ], signals , checks , 6 )
0 commit comments