From 0953fb6bf221d245661ce56fc31a51db508ca7b7 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Fri, 24 May 2024 06:22:20 +0000 Subject: [PATCH] Hyundai CAN Longitudinal: Lenient parsing for auto-enabled radar configs --- selfdrive/car/hyundai/interface.py | 7 ++++--- selfdrive/car/hyundai/radar_interface.py | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index f1c2d05e38..79eaf88384 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -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] diff --git a/selfdrive/car/hyundai/radar_interface.py b/selfdrive/car/hyundai/radar_interface.py index e470011737..2d822befd4 100644 --- a/selfdrive/car/hyundai/radar_interface.py +++ b/selfdrive/car/hyundai/radar_interface.py @@ -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):