Hyundai CAN Longitudinal: Lenient parsing for auto-enabled radar configs

This commit is contained in:
Jason Wen
2024-05-24 06:22:20 +00:00
parent 3f7bf0c167
commit 0953fb6bf2
2 changed files with 12 additions and 3 deletions
+4 -3
View File
@@ -78,7 +78,6 @@ class CarInterface(CarInterfaceBase):
if 0x2AB in fingerprint[0]:
ret.spFlags |= HyundaiFlagsSP.SP_ENHANCED_SCC.value
ret.radarUnavailable = False
if 0x53E in fingerprint[2]:
ret.spFlags |= HyundaiFlagsSP.SP_LKAS12.value
@@ -94,14 +93,12 @@ class CarInterface(CarInterfaceBase):
ret.experimentalLongitudinalAvailable = candidate not in (CANFD_UNSUPPORTED_LONGITUDINAL_CAR | CANFD_RADAR_SCC_CAR | NON_SCC_CAR)
if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC and not hda2:
ret.spFlags |= HyundaiFlagsSP.SP_CAMERA_SCC_LEAD.value
ret.radarUnavailable = False
else:
ret.longitudinalTuning.kpV = [0.5]
ret.longitudinalTuning.kiV = [0.0]
ret.experimentalLongitudinalAvailable = candidate not in (UNSUPPORTED_LONGITUDINAL_CAR | NON_SCC_CAR)
if candidate in CAMERA_SCC_CAR:
ret.spFlags |= HyundaiFlagsSP.SP_CAMERA_SCC_LEAD.value
ret.radarUnavailable = False
ret.openpilotLongitudinalControl = experimental_long and ret.experimentalLongitudinalAvailable
ret.pcmCruise = not ret.openpilotLongitudinalControl
@@ -112,6 +109,10 @@ class CarInterface(CarInterfaceBase):
ret.longitudinalActuatorDelayLowerBound = 0.5
ret.longitudinalActuatorDelayUpperBound = 0.5
if DBC[ret.carFingerprint]["radar"] is None:
if ret.spFlags & (HyundaiFlagsSP.SP_ENHANCED_SCC | HyundaiFlagsSP.SP_CAMERA_SCC_LEAD):
ret.radarUnavailable = False
# *** feature detection ***
if candidate in CANFD_CAR:
ret.enableBsm = 0x1e5 in fingerprint[CAN.ECAN]
+8
View File
@@ -48,6 +48,8 @@ class RadarInterface(RadarInterfaceBase):
self.radar_off_can = CP.radarUnavailable
self.rcp = get_radar_can_parser(CP)
self.sp_radar_tracks = CP.spFlags & HyundaiFlagsSP.SP_RADAR_TRACKS
def update(self, can_strings):
if self.radar_off_can or (self.rcp is None):
return super().update(None)
@@ -61,6 +63,12 @@ class RadarInterface(RadarInterfaceBase):
rr = self._update(self.updated_messages)
self.updated_messages.clear()
radar_error = []
if rr is not None:
radar_error = rr.errors
if list(radar_error) and self.sp_radar_tracks:
return super().update(None)
return rr
def _update(self, updated_messages):