From b939efc7736bd94e4fb7e731a123da1c76823c42 Mon Sep 17 00:00:00 2001 From: Jason Wen Date: Sun, 25 May 2025 00:51:58 -0400 Subject: [PATCH] Hyundai CAN: re-enable auto-enable radar tracks (#945) * Hyundai CAN: re-enable auto-enable radar tracks * check if radar tracks config bit is already enabled * only show success message if already enabled * test if it would actually skip * 5 bytes only * tested skipping, revert * lint * move to opendbc right after fping * more * lint * bump --- common/params_keys.h | 4 -- opendbc_repo | 2 +- selfdrive/car/card.py | 1 - selfdrive/selfdrived/selfdrived.py | 1 - selfdrive/ui/qt/offroad/developer_panel.cc | 17 -------- selfdrive/ui/qt/offroad/developer_panel.h | 1 - sunnypilot/selfdrive/car/car_specific.py | 10 ----- sunnypilot/selfdrive/car/interfaces.py | 45 +--------------------- sunnypilot/selfdrive/selfdrived/events.py | 4 -- 9 files changed, 3 insertions(+), 82 deletions(-) diff --git a/common/params_keys.h b/common/params_keys.h index d3a9ea7d6..cb6f50cac 100644 --- a/common/params_keys.h +++ b/common/params_keys.h @@ -165,10 +165,6 @@ inline static std::unordered_map keys = { // sunnypilot car specific params {"HyundaiLongitudinalTuning", PERSISTENT}, - {"HyundaiRadarTracks", PERSISTENT}, - {"HyundaiRadarTracksConfirmed", PERSISTENT}, - {"HyundaiRadarTracksPersistent", PERSISTENT}, - {"HyundaiRadarTracksToggle", PERSISTENT}, {"DynamicExperimentalControl", PERSISTENT}, }; diff --git a/opendbc_repo b/opendbc_repo index 52d2957b4..c5d42d549 160000 --- a/opendbc_repo +++ b/opendbc_repo @@ -1 +1 @@ -Subproject commit 52d2957b47360e36c02d626ed02981123af79b24 +Subproject commit c5d42d54934a55808bea1a8acb081cfc62a273bc diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index fa4b10e0d..64e180367 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -274,7 +274,6 @@ class Car: # Initialize CarInterface, once controls are ready # TODO: this can make us miss at least a few cycles when doing an ECU knockout self.CI.init(self.CP, self.CP_SP, *self.can_callbacks) - sunnypilot_interfaces.init_interfaces(self.CP, self.CP_SP, self.params, *self.can_callbacks) # signal pandad to switch to car safety mode self.params.put_bool_nonblocking("ControlsReady", True) diff --git a/selfdrive/selfdrived/selfdrived.py b/selfdrive/selfdrived/selfdrived.py index 0b825869f..2ebc2815b 100755 --- a/selfdrive/selfdrived/selfdrived.py +++ b/selfdrive/selfdrived/selfdrived.py @@ -545,7 +545,6 @@ class SelfdriveD(CruiseHelper): self.personality = self.read_personality_param() self.mads.read_params() - self.car_events_sp.read_params() time.sleep(0.1) def run(self): diff --git a/selfdrive/ui/qt/offroad/developer_panel.cc b/selfdrive/ui/qt/offroad/developer_panel.cc index 4d9d8a6ce..3e9647d2c 100644 --- a/selfdrive/ui/qt/offroad/developer_panel.cc +++ b/selfdrive/ui/qt/offroad/developer_panel.cc @@ -45,18 +45,6 @@ DeveloperPanel::DeveloperPanel(SettingsWindow *parent) : ListWidget(parent) { }); addItem(experimentalLongitudinalToggle); - // TODO-SP: Move to Vehicles panel when ported back - hyundaiRadarTracksToggle = new ParamControl( - "HyundaiRadarTracksToggle", - tr("Hyundai: Enable Radar Tracks"), - tr("Enable this to attempt to enable radar tracks for Hyundai, Kia, and Genesis models equipped with the supported Mando SCC radar. " - "This allows sunnypilot to use radar data for improved lead tracking and overall longitudinal performance."), ""); - hyundaiRadarTracksToggle->setConfirmation(true, false); - QObject::connect(hyundaiRadarTracksToggle, &ParamControl::toggleFlipped, [=](bool state) { - updateToggles(offroad); - }); - addItem(hyundaiRadarTracksToggle); - enableGithubRunner = new ParamControl("EnableGithubRunner", tr("Enable GitHub runner service"), tr("Enables or disables the github runner service."), ""); addItem(enableGithubRunner); @@ -96,9 +84,6 @@ void DeveloperPanel::updateToggles(bool _offroad) { capnp::FlatArrayMessageReader cmsg(aligned_buf.align(cp_bytes.data(), cp_bytes.size())); cereal::CarParams::Reader CP = cmsg.getRoot(); - auto hyundai = CP.getBrand() == "hyundai"; - auto hyundai_mando_radar = hyundai && (CP.getFlags() & 4096); - if (!CP.getAlphaLongitudinalAvailable() || is_release) { params.remove("AlphaLongitudinalEnabled"); experimentalLongitudinalToggle->setEnabled(false); @@ -112,11 +97,9 @@ void DeveloperPanel::updateToggles(bool _offroad) { experimentalLongitudinalToggle->setVisible(CP.getAlphaLongitudinalAvailable() && !is_release); longManeuverToggle->setEnabled(hasLongitudinalControl(CP) && _offroad); - hyundaiRadarTracksToggle->setVisible(hyundai_mando_radar && hasLongitudinalControl(CP)); } else { longManeuverToggle->setEnabled(false); experimentalLongitudinalToggle->setVisible(false); - hyundaiRadarTracksToggle->setVisible(false); } experimentalLongitudinalToggle->refresh(); diff --git a/selfdrive/ui/qt/offroad/developer_panel.h b/selfdrive/ui/qt/offroad/developer_panel.h index 591e5f0fd..c15b574f5 100644 --- a/selfdrive/ui/qt/offroad/developer_panel.h +++ b/selfdrive/ui/qt/offroad/developer_panel.h @@ -19,7 +19,6 @@ private: ButtonControl* errorLogBtn; ParamControl* longManeuverToggle; ParamControl* experimentalLongitudinalToggle; - ParamControl* hyundaiRadarTracksToggle; ParamControl* enableGithubRunner; bool is_release; bool offroad = false; diff --git a/sunnypilot/selfdrive/car/car_specific.py b/sunnypilot/selfdrive/car/car_specific.py index 649aceca0..7e6f300d7 100644 --- a/sunnypilot/selfdrive/car/car_specific.py +++ b/sunnypilot/selfdrive/car/car_specific.py @@ -23,12 +23,6 @@ class CarSpecificEventsSP: self.params = params self.low_speed_alert = False - self.hyundai_radar_tracks = self.params.get_bool("HyundaiRadarTracks") - self.hyundai_radar_tracks_confirmed = self.params.get_bool("HyundaiRadarTracksConfirmed") - - def read_params(self): - self.hyundai_radar_tracks = self.params.get_bool("HyundaiRadarTracks") - self.hyundai_radar_tracks_confirmed = self.params.get_bool("HyundaiRadarTracksConfirmed") def update(self, CS: structs.CarState, events: Events): events_sp = EventsSP() @@ -48,8 +42,4 @@ class CarSpecificEventsSP: if self.low_speed_alert: events.add(EventName.belowSteerSpeed) - if self.CP.brand == 'hyundai': - if self.hyundai_radar_tracks and not self.hyundai_radar_tracks_confirmed: - events_sp.add(EventNameSP.hyundaiRadarTracksConfirmed) - return events_sp diff --git a/sunnypilot/selfdrive/car/interfaces.py b/sunnypilot/selfdrive/car/interfaces.py index f2019f5ed..e2a232a3e 100644 --- a/sunnypilot/selfdrive/car/interfaces.py +++ b/sunnypilot/selfdrive/car/interfaces.py @@ -5,12 +5,8 @@ This file is part of sunnypilot and is licensed under the MIT License. See the LICENSE.md file in the root directory for more details. """ -from opendbc.car import Bus, structs -from opendbc.car.can_definitions import CanRecvCallable, CanSendCallable -from opendbc.car.car_helpers import can_fingerprint +from opendbc.car import structs from opendbc.car.interfaces import CarInterfaceBase -from opendbc.car.hyundai.radar_interface import RADAR_START_ADDR -from opendbc.car.hyundai.values import HyundaiFlags, DBC as HYUNDAI_DBC from opendbc.sunnypilot.car.hyundai.longitudinal.helpers import LongitudinalTuningType from opendbc.sunnypilot.car.hyundai.values import HyundaiFlagsSP from openpilot.common.params import Params @@ -26,6 +22,7 @@ def log_fingerprint(CP: structs.CarParams) -> None: else: sentry.capture_fingerprint(CP.carFingerprint, CP.brand) + def _initialize_custom_longitudinal_tuning(CI: CarInterfaceBase, CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None) -> None: if params is None: @@ -63,47 +60,9 @@ def _initialize_neural_network_lateral_control(CI: CarInterfaceBase, CP: structs CP_SP.neuralNetworkLateralControl.fuzzyFingerprint = not exact_match -def _initialize_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None) -> None: - if params is None: - params = Params() - - if CP.brand == 'hyundai': - if CP.flags & HyundaiFlags.MANDO_RADAR and CP.radarUnavailable: - # Having this automatic without a toggle causes a weird process replay diff because - # somehow it sees fewer logs than intended - if params.get_bool("HyundaiRadarTracksToggle"): - CP_SP.flags |= HyundaiFlagsSP.ENABLE_RADAR_TRACKS.value - if params.get_bool("HyundaiRadarTracks"): - CP.radarUnavailable = False - - def setup_interfaces(CI: CarInterfaceBase, params: Params = None) -> None: CP = CI.CP CP_SP = CI.CP_SP _initialize_custom_longitudinal_tuning(CI, CP, CP_SP, params) _initialize_neural_network_lateral_control(CI, CP, CP_SP, params) - _initialize_radar_tracks(CP, CP_SP, params) - - -def _enable_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, can_recv: CanRecvCallable, - params: Params) -> None: - if CP.brand == 'hyundai': - if CP_SP.flags & HyundaiFlagsSP.ENABLE_RADAR_TRACKS: - can_recv() - _, fingerprint = can_fingerprint(can_recv) - radar_unavailable = RADAR_START_ADDR not in fingerprint[1] or Bus.radar not in HYUNDAI_DBC[CP.carFingerprint] - - radar_tracks = params.get_bool("HyundaiRadarTracks") - radar_tracks_persistent = params.get_bool("HyundaiRadarTracksPersistent") - - params.put_bool_nonblocking("HyundaiRadarTracksConfirmed", radar_tracks) - - if not radar_tracks_persistent: - params.put_bool_nonblocking("HyundaiRadarTracks", not radar_unavailable) - params.put_bool_nonblocking("HyundaiRadarTracksPersistent", True) - - -def init_interfaces(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params, - can_recv: CanRecvCallable, can_send: CanSendCallable): - _enable_radar_tracks(CP, CP_SP, can_recv, params) diff --git a/sunnypilot/selfdrive/selfdrived/events.py b/sunnypilot/selfdrive/selfdrived/events.py index 67672649c..d81345a14 100644 --- a/sunnypilot/selfdrive/selfdrived/events.py +++ b/sunnypilot/selfdrive/selfdrived/events.py @@ -122,10 +122,6 @@ EVENTS_SP: dict[int, dict[str, Alert | AlertCallbackType]] = { ET.NO_ENTRY: NoEntryAlert("Controls Mismatch: Lateral"), }, - EventNameSP.hyundaiRadarTracksConfirmed: { - ET.PERMANENT: NormalPermanentAlert("Radar tracks available. Restart the car to initialize") - }, - EventNameSP.experimentalModeSwitched: { ET.WARNING: NormalPermanentAlert("Experimental Mode Switched", duration=1.5) },