From 63ba5e864f6861f014bcead12677eb1073aaab71 Mon Sep 17 00:00:00 2001 From: Discountchubbs <159560811+Discountchubbs@users.noreply.github.com> Date: Sat, 29 Mar 2025 19:45:15 -0700 Subject: [PATCH] car: abstract sunnypilot interfaces (#721) * Method abstracting radar tracks in interfaces.py This makes the code more maintainable for future implementations to this file * Method abstracting radar tracks in interfaces.py This makes the code more maintainable for future implementations to this file * Add type annotation to params in initialize_car_interface_sp * rename * just internal --------- Co-authored-by: DevTekVE Co-authored-by: Jason Wen --- selfdrive/car/card.py | 4 ++-- selfdrive/car/tests/test_car_interfaces.py | 2 +- .../controls/lib/tests/test_latcontrol.py | 2 +- sunnypilot/selfdrive/car/interfaces.py | 18 +++++++++++++----- .../lib/nnlc/tests/test_fingerprint.py | 2 +- .../controls/lib/nnlc/tests/test_load_model.py | 2 +- 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/selfdrive/car/card.py b/selfdrive/car/card.py index 33c229958d..1cfab5f753 100755 --- a/selfdrive/car/card.py +++ b/selfdrive/car/card.py @@ -108,7 +108,7 @@ class Car: fixed_fingerprint = json.loads(self.params.get("CarPlatformBundle", encoding='utf-8') or "{}").get("platform", None) self.CI = get_car(*self.can_callbacks, obd_callback(self.params), experimental_long_allowed, num_pandas, cached_params, fixed_fingerprint) - sunnypilot_interfaces.setup_car_interface_sp(self.CI.CP, self.CI.CP_SP, self.params) + sunnypilot_interfaces.setup_interfaces(self.CI.CP, self.CI.CP_SP, self.params) self.RI = interfaces[self.CI.CP.carFingerprint].RadarInterface(self.CI.CP, self.CI.CP_SP) self.CP = self.CI.CP self.CP_SP = self.CI.CP_SP @@ -274,7 +274,7 @@ 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.initialize_car_interface_sp(self.CP, self.CP_SP, self.params, *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/car/tests/test_car_interfaces.py b/selfdrive/car/tests/test_car_interfaces.py index cb6260f195..60020fe972 100644 --- a/selfdrive/car/tests/test_car_interfaces.py +++ b/selfdrive/car/tests/test_car_interfaces.py @@ -45,7 +45,7 @@ class TestCarInterfaces: experimental_long=args['experimental_long'], docs=False) car_params_sp = CarInterface.get_params_sp(car_params, car_name, args['fingerprints'], args['car_fw'], experimental_long=args['experimental_long'], docs=False) - sunnypilot_interfaces.setup_car_interface_sp(car_params, car_params_sp) + sunnypilot_interfaces.setup_interfaces(car_params, car_params_sp) car_params = car_params.as_reader() car_interface = CarInterface(car_params, car_params_sp) assert car_params diff --git a/selfdrive/controls/lib/tests/test_latcontrol.py b/selfdrive/controls/lib/tests/test_latcontrol.py index ed620c69cf..3bf9be9d92 100644 --- a/selfdrive/controls/lib/tests/test_latcontrol.py +++ b/selfdrive/controls/lib/tests/test_latcontrol.py @@ -23,7 +23,7 @@ class TestLatControl: CP = CarInterface.get_non_essential_params(car_name) CP_SP = CarInterface.get_non_essential_params_sp(CP, car_name) CI = CarInterface(CP, CP_SP) - sunnypilot_interfaces.setup_car_interface_sp(CP, CP_SP) + sunnypilot_interfaces.setup_interfaces(CP, CP_SP) CP_SP = convert_to_capnp(CP_SP) VM = VehicleModel(CP) diff --git a/sunnypilot/selfdrive/car/interfaces.py b/sunnypilot/selfdrive/car/interfaces.py index cd0d078036..5fac76c283 100644 --- a/sunnypilot/selfdrive/car/interfaces.py +++ b/sunnypilot/selfdrive/car/interfaces.py @@ -26,7 +26,7 @@ def log_fingerprint(CP: structs.CarParams) -> None: sentry.capture_fingerprint(CP.carFingerprint, CP.brand) -def initialize_neural_network_lateral_control(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None, +def _initialize_neural_network_lateral_control(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None, enabled: bool = False) -> None: if params is None: params = Params() @@ -47,7 +47,7 @@ def initialize_neural_network_lateral_control(CP: structs.CarParams, CP_SP: stru CP_SP.neuralNetworkLateralControl.fuzzyFingerprint = not exact_match -def setup_car_interface_sp(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None): +def _initialize_radar_tracks(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None) -> None: if params is None: params = Params() @@ -60,11 +60,14 @@ def setup_car_interface_sp(CP: structs.CarParams, CP_SP: structs.CarParamsSP, pa if params.get_bool("HyundaiRadarTracks"): CP.radarUnavailable = False - initialize_neural_network_lateral_control(CP, CP_SP, params) + +def setup_interfaces(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params: Params = None): + _initialize_neural_network_lateral_control(CP, CP_SP, params) + _initialize_radar_tracks(CP, CP_SP, params) -def initialize_car_interface_sp(CP: structs.CarParams, CP_SP: structs.CarParamsSP, params, can_recv: CanRecvCallable, - can_send: CanSendCallable): +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() @@ -79,3 +82,8 @@ def initialize_car_interface_sp(CP: structs.CarParams, CP_SP: structs.CarParamsS 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/controls/lib/nnlc/tests/test_fingerprint.py b/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_fingerprint.py index b659e213d1..97f927502a 100644 --- a/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_fingerprint.py +++ b/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_fingerprint.py @@ -24,7 +24,7 @@ class TestNNLCFingerprintBase: CP_SP = CarInterface.get_non_essential_params_sp(CP, car_name) CI = CarInterface(CP, CP_SP) - sunnypilot_interfaces.setup_car_interface_sp(CP, CP_SP, Params()) + sunnypilot_interfaces.setup_interfaces(CP, CP_SP, Params()) return CI diff --git a/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_load_model.py b/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_load_model.py index f768308299..38fd994831 100644 --- a/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_load_model.py +++ b/sunnypilot/selfdrive/controls/lib/nnlc/tests/test_load_model.py @@ -22,7 +22,7 @@ class TestNNTorqueModel: CP_SP = CarInterface.get_non_essential_params_sp(CP, car_name) CI = CarInterface(CP, CP_SP) - sunnypilot_interfaces.setup_car_interface_sp(CP, CP_SP, params) + sunnypilot_interfaces.setup_interfaces(CP, CP_SP, params) CP_SP = convert_to_capnp(CP_SP)