diff --git a/selfdrive/car/__init__.py b/selfdrive/car/__init__.py index 2c6a45d557..e459f2c28f 100644 --- a/selfdrive/car/__init__.py +++ b/selfdrive/car/__init__.py @@ -10,6 +10,7 @@ import capnp from cereal import car from panda.python.uds import SERVICE_TYPE from openpilot.selfdrive.car.can_definitions import CanData +from openpilot.selfdrive.car.data_structures import CarParams from openpilot.selfdrive.car.docs_definitions import CarDocs from openpilot.selfdrive.car.helpers import clip, interp @@ -204,8 +205,8 @@ def make_tester_present_msg(addr, bus, subaddr=None, suppress_response=False): return CanData(addr, bytes(dat), bus) -def get_safety_config(safety_model, safety_param = None): - ret = car.CarParams.SafetyConfig.new_message() +def get_safety_config(safety_model: CarParams.SafetyModel, safety_param: int = None) -> CarParams.SafetyConfig: + ret = CarParams.SafetyConfig() ret.safetyModel = safety_model if safety_param is not None: ret.safetyParam = safety_param diff --git a/selfdrive/car/body/interface.py b/selfdrive/car/body/interface.py index 79b4637a96..d202f12257 100644 --- a/selfdrive/car/body/interface.py +++ b/selfdrive/car/body/interface.py @@ -10,7 +10,7 @@ class CarInterface(CarInterfaceBase): def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): ret.notCar = True ret.carName = "body" - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.body)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.body)] ret.minSteerSpeed = -math.inf ret.maxLateralAccel = math.inf # TODO: set to a reasonable value @@ -21,7 +21,7 @@ class CarInterface(CarInterfaceBase): ret.radarUnavailable = True ret.openpilotLongitudinalControl = True - ret.steerControlType = car.CarParams.SteerControlType.angle + ret.steerControlType = CarParams.SteerControlType.angle return ret diff --git a/selfdrive/car/capnp_to_dataclass.py b/selfdrive/car/capnp_to_dataclass.py index 014a360420..1b3acd5f59 100644 --- a/selfdrive/car/capnp_to_dataclass.py +++ b/selfdrive/car/capnp_to_dataclass.py @@ -28,7 +28,7 @@ if __name__ == '__main__': if re.search(':.*;', line): if not in_struct: # print(line) - name, typ, cmt = re.search('([a-zA-Z]+)\s*@\s*\d+\s*:\s*([a-zA-Z0-9\(\)]+)(?:.*#(.*))?', line.strip()).groups() # noqa # type: ignore + name, typ, cmt = re.search('([a-zA-Z]+)\s*@\s*\d+\s*:\s*([a-zA-Z0-9\(\)]+)(?:.*#(.*))?', line.strip()).groups() # type: ignore # noqa # print((name, typ, cmt)) if name.endswith('DEPRECATED'): continue diff --git a/selfdrive/car/chrysler/interface.py b/selfdrive/car/chrysler/interface.py index bdacb25987..730c13f03b 100755 --- a/selfdrive/car/chrysler/interface.py +++ b/selfdrive/car/chrysler/interface.py @@ -21,7 +21,7 @@ class CarInterface(CarInterfaceBase): ret.steerLimitTimer = 0.4 # safety config - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.chrysler)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.chrysler)] if candidate in RAM_HD: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_CHRYSLER_RAM_HD elif candidate in RAM_DT: diff --git a/selfdrive/car/ford/interface.py b/selfdrive/car/ford/interface.py index f83b1e07e1..8cf2ff3910 100644 --- a/selfdrive/car/ford/interface.py +++ b/selfdrive/car/ford/interface.py @@ -8,7 +8,7 @@ from openpilot.selfdrive.car.ford.values import Ecu, FordFlags from openpilot.selfdrive.car.interfaces import CarInterfaceBase ButtonType = car.CarState.ButtonEvent.Type -TransmissionType = car.CarParams.TransmissionType +TransmissionType = CarParams.TransmissionType GearShifter = car.CarState.GearShifter @@ -19,14 +19,14 @@ class CarInterface(CarInterfaceBase): ret.dashcamOnly = bool(ret.flags & FordFlags.CANFD) ret.radarUnavailable = True - ret.steerControlType = car.CarParams.SteerControlType.angle + ret.steerControlType = CarParams.SteerControlType.angle ret.steerActuatorDelay = 0.2 ret.steerLimitTimer = 1.0 CAN = CanBus(fingerprint=fingerprint) - cfgs = [get_safety_config(car.CarParams.SafetyModel.ford)] + cfgs = [get_safety_config(CarParams.SafetyModel.ford)] if CAN.main >= 4: - cfgs.insert(0, get_safety_config(car.CarParams.SafetyModel.noOutput)) + cfgs.insert(0, get_safety_config(CarParams.SafetyModel.noOutput)) ret.safetyConfigs = cfgs ret.experimentalLongitudinalAvailable = True diff --git a/selfdrive/car/gm/interface.py b/selfdrive/car/gm/interface.py index 700dd060b0..da10c1c810 100755 --- a/selfdrive/car/gm/interface.py +++ b/selfdrive/car/gm/interface.py @@ -16,8 +16,8 @@ from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLater ButtonType = car.CarState.ButtonEvent.Type EventName = car.CarEvent.EventName GearShifter = car.CarState.GearShifter -TransmissionType = car.CarParams.TransmissionType -NetworkLocation = car.CarParams.NetworkLocation +TransmissionType = CarParams.TransmissionType +NetworkLocation = CarParams.NetworkLocation BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.DECEL_SET: ButtonType.decelCruise, CruiseButtons.MAIN: ButtonType.altButton3, CruiseButtons.CANCEL: ButtonType.cancel} @@ -49,7 +49,7 @@ class CarInterface(CarInterfaceBase): else: return CarInterfaceBase.get_steer_feedforward_default - def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, torque_params: car.CarParams.LateralTorqueTuning, lateral_accel_error: float, + def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, torque_params: CarParams.LateralTorqueTuning, lateral_accel_error: float, lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> float: friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation) @@ -71,7 +71,7 @@ class CarInterface(CarInterfaceBase): steer_torque = (sig(latcontrol_inputs.lateral_acceleration * a) * b) + (latcontrol_inputs.lateral_acceleration * c) return float(steer_torque) + friction - def torque_from_lateral_accel_neural(self, latcontrol_inputs: LatControlInputs, torque_params: car.CarParams.LateralTorqueTuning, lateral_accel_error: float, + def torque_from_lateral_accel_neural(self, latcontrol_inputs: LatControlInputs, torque_params: CarParams.LateralTorqueTuning, lateral_accel_error: float, lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> float: friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation) inputs = list(latcontrol_inputs) @@ -91,7 +91,7 @@ class CarInterface(CarInterfaceBase): @staticmethod def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): ret.carName = "gm" - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.gm)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.gm)] ret.autoResumeSng = False ret.enableBsm = 0x142 in fingerprint[CanBus.POWERTRAIN] diff --git a/selfdrive/car/honda/interface.py b/selfdrive/car/honda/interface.py index 5546ad453c..7f49f1c6e1 100755 --- a/selfdrive/car/honda/interface.py +++ b/selfdrive/car/honda/interface.py @@ -14,7 +14,7 @@ from openpilot.selfdrive.car.disable_ecu import disable_ecu ButtonType = car.CarState.ButtonEvent.Type EventName = car.CarEvent.EventName -TransmissionType = car.CarParams.TransmissionType +TransmissionType = CarParams.TransmissionType BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.DECEL_SET: ButtonType.decelCruise, CruiseButtons.MAIN: ButtonType.altButton3, CruiseButtons.CANCEL: ButtonType.cancel} SETTINGS_BUTTONS_DICT = {CruiseSettings.DISTANCE: ButtonType.gapAdjustCruise, CruiseSettings.LKAS: ButtonType.altButton1} @@ -39,7 +39,7 @@ class CarInterface(CarInterfaceBase): CAN = CanBus(ret, fingerprint) if candidate in HONDA_BOSCH: - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hondaBosch)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hondaBosch)] ret.radarUnavailable = True # Disable the radar and let openpilot control longitudinal # WARNING: THIS DISABLES AEB! @@ -48,7 +48,7 @@ class CarInterface(CarInterfaceBase): ret.openpilotLongitudinalControl = experimental_long ret.pcmCruise = not ret.openpilotLongitudinalControl else: - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hondaNidec)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hondaNidec)] ret.openpilotLongitudinalControl = True ret.pcmCruise = True diff --git a/selfdrive/car/hyundai/interface.py b/selfdrive/car/hyundai/interface.py index fbcf3ac345..b42ad05bf0 100644 --- a/selfdrive/car/hyundai/interface.py +++ b/selfdrive/car/hyundai/interface.py @@ -101,9 +101,9 @@ class CarInterface(CarInterfaceBase): # *** panda safety config *** if candidate in CANFD_CAR: - cfgs = [get_safety_config(car.CarParams.SafetyModel.hyundaiCanfd), ] + cfgs = [get_safety_config(CarParams.SafetyModel.hyundaiCanfd), ] if CAN.ECAN >= 4: - cfgs.insert(0, get_safety_config(car.CarParams.SafetyModel.noOutput)) + cfgs.insert(0, get_safety_config(CarParams.SafetyModel.noOutput)) ret.safetyConfigs = cfgs if ret.flags & HyundaiFlags.CANFD_HDA2: @@ -117,9 +117,9 @@ class CarInterface(CarInterfaceBase): else: if candidate in LEGACY_SAFETY_MODE_CAR: # these cars require a special panda safety mode due to missing counters and checksums in the messages - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hyundaiLegacy)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hyundaiLegacy)] else: - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.hyundai, 0)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hyundai, 0)] if candidate in CAMERA_SCC_CAR: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC diff --git a/selfdrive/car/mazda/interface.py b/selfdrive/car/mazda/interface.py index 7bf5668db7..a3950ab816 100755 --- a/selfdrive/car/mazda/interface.py +++ b/selfdrive/car/mazda/interface.py @@ -14,7 +14,7 @@ class CarInterface(CarInterfaceBase): @staticmethod def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): ret.carName = "mazda" - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.mazda)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.mazda)] ret.radarUnavailable = True ret.dashcamOnly = candidate not in (CAR.MAZDA_CX5_2022, CAR.MAZDA_CX9_2021) diff --git a/selfdrive/car/nissan/interface.py b/selfdrive/car/nissan/interface.py index 1590cd3d3f..b5c6ac56f5 100644 --- a/selfdrive/car/nissan/interface.py +++ b/selfdrive/car/nissan/interface.py @@ -13,14 +13,14 @@ class CarInterface(CarInterfaceBase): @staticmethod def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): ret.carName = "nissan" - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.nissan)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.nissan)] ret.autoResumeSng = False ret.steerLimitTimer = 1.0 ret.steerActuatorDelay = 0.1 - ret.steerControlType = car.CarParams.SteerControlType.angle + ret.steerControlType = CarParams.SteerControlType.angle ret.radarUnavailable = True if candidate == CAR.NISSAN_ALTIMA: diff --git a/selfdrive/car/subaru/interface.py b/selfdrive/car/subaru/interface.py index 4636579808..4472f4f302 100644 --- a/selfdrive/car/subaru/interface.py +++ b/selfdrive/car/subaru/interface.py @@ -1,4 +1,3 @@ -from cereal import car from panda import Panda from openpilot.selfdrive.car import get_safety_config from openpilot.selfdrive.car.data_structures import CarParams @@ -26,10 +25,10 @@ class CarInterface(CarInterfaceBase): if ret.flags & SubaruFlags.PREGLOBAL: ret.enableBsm = 0x25c in fingerprint[0] - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.subaruPreglobal)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.subaruPreglobal)] else: ret.enableBsm = 0x228 in fingerprint[0] - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.subaru)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.subaru)] if ret.flags & SubaruFlags.GLOBAL_GEN2: ret.safetyConfigs[0].safetyParam |= Panda.FLAG_SUBARU_GEN2 @@ -37,7 +36,7 @@ class CarInterface(CarInterfaceBase): ret.steerActuatorDelay = 0.1 if ret.flags & SubaruFlags.LKAS_ANGLE: - ret.steerControlType = car.CarParams.SteerControlType.angle + ret.steerControlType = CarParams.SteerControlType.angle else: CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning) diff --git a/selfdrive/car/tesla/interface.py b/selfdrive/car/tesla/interface.py index 9600cc2ebb..d6623b840f 100755 --- a/selfdrive/car/tesla/interface.py +++ b/selfdrive/car/tesla/interface.py @@ -1,5 +1,4 @@ #!/usr/bin/env python3 -from cereal import car from panda import Panda from openpilot.selfdrive.car import get_safety_config from openpilot.selfdrive.car.data_structures import CarParams @@ -17,7 +16,7 @@ class CarInterface(CarInterfaceBase): # how openpilot should be, hence dashcamOnly ret.dashcamOnly = True - ret.steerControlType = car.CarParams.SteerControlType.angle + ret.steerControlType = CarParams.SteerControlType.angle ret.longitudinalActuatorDelay = 0.5 # s ret.radarTimeStep = (1.0 / 8) # 8Hz @@ -29,12 +28,12 @@ class CarInterface(CarInterfaceBase): ret.openpilotLongitudinalControl = True flags |= Panda.FLAG_TESLA_LONG_CONTROL ret.safetyConfigs = [ - get_safety_config(car.CarParams.SafetyModel.tesla, flags), - get_safety_config(car.CarParams.SafetyModel.tesla, flags | Panda.FLAG_TESLA_POWERTRAIN), + get_safety_config(CarParams.SafetyModel.tesla, flags), + get_safety_config(CarParams.SafetyModel.tesla, flags | Panda.FLAG_TESLA_POWERTRAIN), ] else: ret.openpilotLongitudinalControl = False - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.tesla, flags)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.tesla, flags)] ret.steerLimitTimer = 1.0 ret.steerActuatorDelay = 0.25 diff --git a/selfdrive/car/toyota/interface.py b/selfdrive/car/toyota/interface.py index b6c0506446..6f789cde09 100644 --- a/selfdrive/car/toyota/interface.py +++ b/selfdrive/car/toyota/interface.py @@ -21,7 +21,7 @@ class CarInterface(CarInterfaceBase): @staticmethod def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): ret.carName = "toyota" - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.toyota)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.toyota)] ret.safetyConfigs[0].safetyParam = EPS_SCALE[candidate] # BRAKE_MODULE is on a different address for these cars diff --git a/selfdrive/car/volkswagen/interface.py b/selfdrive/car/volkswagen/interface.py index b35ac6266e..b5817c29ed 100644 --- a/selfdrive/car/volkswagen/interface.py +++ b/selfdrive/car/volkswagen/interface.py @@ -27,7 +27,7 @@ class CarInterface(CarInterfaceBase): if ret.flags & VolkswagenFlags.PQ: # Set global PQ35/PQ46/NMS parameters - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.volkswagenPq)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.volkswagenPq)] ret.enableBsm = 0x3BA in fingerprint[0] # SWA_1 if 0x440 in fingerprint[0] or docs: # Getriebe_1 @@ -50,7 +50,7 @@ class CarInterface(CarInterfaceBase): else: # Set global MQB parameters - ret.safetyConfigs = [get_safety_config(car.CarParams.SafetyModel.volkswagen)] + ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.volkswagen)] ret.enableBsm = 0x30F in fingerprint[0] # SWA_01 if 0xAD in fingerprint[0] or docs: # Getriebe_11