replace a bunch more cereal.car

pull/33208/head
Shane Smiskol 10 months ago
parent 48c0b7394f
commit eb52d701de
  1. 5
      selfdrive/car/body/carstate.py
  2. 2
      selfdrive/car/chrysler/carstate.py
  3. 11
      selfdrive/car/chrysler/interface.py
  4. 6
      selfdrive/car/chrysler/radar_interface.py
  5. 9
      selfdrive/car/ford/carstate.py
  6. 17
      selfdrive/car/ford/interface.py
  7. 8
      selfdrive/car/ford/radar_interface.py
  8. 9
      selfdrive/car/gm/carstate.py
  9. 19
      selfdrive/car/gm/interface.py
  10. 6
      selfdrive/car/gm/radar_interface.py
  11. 2
      selfdrive/car/honda/carstate.py
  12. 13
      selfdrive/car/honda/interface.py
  13. 6
      selfdrive/car/honda/radar_interface.py
  14. 4
      selfdrive/car/hyundai/carstate.py
  15. 17
      selfdrive/car/hyundai/interface.py
  16. 6
      selfdrive/car/hyundai/radar_interface.py
  17. 2
      selfdrive/car/mazda/carstate.py
  18. 9
      selfdrive/car/mazda/interface.py
  19. 3
      selfdrive/car/mock/interface.py
  20. 4
      selfdrive/car/nissan/carstate.py
  21. 13
      selfdrive/car/nissan/interface.py
  22. 4
      selfdrive/car/subaru/carstate.py
  23. 2
      selfdrive/car/tesla/carstate.py
  24. 4
      selfdrive/car/volkswagen/carstate.py
  25. 11
      selfdrive/car/volkswagen/interface.py

@ -1,4 +1,3 @@
from cereal import car
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car.interfaces import CarStateBase from openpilot.selfdrive.car.interfaces import CarStateBase
from openpilot.selfdrive.car.body.values import DBC from openpilot.selfdrive.car.body.values import DBC
@ -7,7 +6,7 @@ STARTUP_TICKS = 100
class CarState(CarStateBase): class CarState(CarStateBase):
def update(self, cp): def update(self, cp):
ret = car.CarState.new_message() ret = CarState.new_message()
ret.wheelSpeeds.fl = cp.vl['MOTORS_DATA']['SPEED_L'] ret.wheelSpeeds.fl = cp.vl['MOTORS_DATA']['SPEED_L']
ret.wheelSpeeds.fr = cp.vl['MOTORS_DATA']['SPEED_R'] ret.wheelSpeeds.fr = cp.vl['MOTORS_DATA']['SPEED_R']
@ -24,7 +23,7 @@ class CarState(CarStateBase):
ret.fuelGauge = cp.vl["BODY_DATA"]["BATT_PERCENTAGE"] / 100 ret.fuelGauge = cp.vl["BODY_DATA"]["BATT_PERCENTAGE"] / 100
# irrelevant for non-car # irrelevant for non-car
ret.gearShifter = car.CarState.GearShifter.drive ret.gearShifter = CarState.GearShifter.drive
ret.cruiseState.enabled = True ret.cruiseState.enabled = True
ret.cruiseState.available = True ret.cruiseState.available = True

@ -26,7 +26,7 @@ class CarState(CarStateBase):
def update(self, cp, cp_cam): def update(self, cp, cp_cam):
ret = car.CarState.new_message() ret = structs.CarState()
self.prev_distance_button = self.distance_button self.prev_distance_button = self.distance_button
self.distance_button = cp.vl["CRUISE_BUTTONS"]["ACC_Distance_Dec"] self.distance_button = cp.vl["CRUISE_BUTTONS"]["ACC_Distance_Dec"]

@ -1,17 +1,16 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from openpilot.selfdrive.car import create_button_events, get_safety_config from openpilot.selfdrive.car import create_button_events, get_safety_config, structs
from openpilot.selfdrive.car.chrysler.values import CAR, RAM_HD, RAM_DT, RAM_CARS, ChryslerFlags from openpilot.selfdrive.car.chrysler.values import CAR, RAM_HD, RAM_DT, RAM_CARS, ChryslerFlags
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
class CarInterface(CarInterfaceBase): class CarInterface(CarInterfaceBase):
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "chrysler" ret.carName = "chrysler"
ret.dashcamOnly = candidate in RAM_HD ret.dashcamOnly = candidate in RAM_HD
@ -21,7 +20,7 @@ class CarInterface(CarInterfaceBase):
ret.steerLimitTimer = 0.4 ret.steerLimitTimer = 0.4
# safety config # safety config
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.chrysler)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.chrysler)]
if candidate in RAM_HD: if candidate in RAM_HD:
ret.safetyConfigs[0].safetyParam |= Panda.FLAG_CHRYSLER_RAM_HD ret.safetyConfigs[0].safetyParam |= Panda.FLAG_CHRYSLER_RAM_HD
elif candidate in RAM_DT: elif candidate in RAM_DT:
@ -83,7 +82,7 @@ class CarInterface(CarInterfaceBase):
ret.buttonEvents = create_button_events(self.CS.distance_button, self.CS.prev_distance_button, {1: ButtonType.gapAdjustCruise}) ret.buttonEvents = create_button_events(self.CS.distance_button, self.CS.prev_distance_button, {1: ButtonType.gapAdjustCruise})
# events # events
events = self.create_common_events(ret, extra_gears=[car.CarState.GearShifter.low]) events = self.create_common_events(ret, extra_gears=[structs.CarState.GearShifter.low])
# Low speed steer alert hysteresis logic # Low speed steer alert hysteresis logic
if self.CP.minSteerSpeed > 0. and ret.vEgo < (self.CP.minSteerSpeed + 0.5): if self.CP.minSteerSpeed > 0. and ret.vEgo < (self.CP.minSteerSpeed + 0.5):

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from cereal import car from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.interfaces import RadarInterfaceBase
from openpilot.selfdrive.car.chrysler.values import DBC from openpilot.selfdrive.car.chrysler.values import DBC
@ -53,7 +53,7 @@ class RadarInterface(RadarInterfaceBase):
if self.trigger_msg not in self.updated_messages: if self.trigger_msg not in self.updated_messages:
return None return None
ret = car.RadarData.new_message() ret = structs.RadarData()
errors = [] errors = []
if not self.rcp.can_valid: if not self.rcp.can_valid:
errors.append("canError") errors.append("canError")
@ -64,7 +64,7 @@ class RadarInterface(RadarInterfaceBase):
trackId = _address_to_track(ii) trackId = _address_to_track(ii)
if trackId not in self.pts: if trackId not in self.pts:
self.pts[trackId] = car.RadarData.RadarPoint.new_message() self.pts[trackId] = structs.RadarData.RadarPoint()
self.pts[trackId].trackId = trackId self.pts[trackId].trackId = trackId
self.pts[trackId].aRel = float('nan') self.pts[trackId].aRel = float('nan')
self.pts[trackId].yvRel = float('nan') self.pts[trackId].yvRel = float('nan')

@ -1,14 +1,13 @@
from cereal import car
from opendbc.can.can_define import CANDefine from opendbc.can.can_define import CANDefine
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.structs import CarParams from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.ford.fordcan import CanBus from openpilot.selfdrive.car.ford.fordcan import CanBus
from openpilot.selfdrive.car.ford.values import DBC, CarControllerParams, FordFlags from openpilot.selfdrive.car.ford.values import DBC, CarControllerParams, FordFlags
from openpilot.selfdrive.car.interfaces import CarStateBase from openpilot.selfdrive.car.interfaces import CarStateBase
GearShifter = car.CarState.GearShifter GearShifter = structs.CarState.GearShifter
TransmissionType = CarParams.TransmissionType TransmissionType = structs.CarParams.TransmissionType
class CarState(CarStateBase): class CarState(CarStateBase):
@ -24,7 +23,7 @@ class CarState(CarStateBase):
self.distance_button = 0 self.distance_button = 0
def update(self, cp, cp_cam): def update(self, cp, cp_cam):
ret = car.CarState.new_message() ret = structs.CarState()
# Occasionally on startup, the ABS module recalibrates the steering pinion offset, so we need to block engagement # Occasionally on startup, the ABS module recalibrates the steering pinion offset, so we need to block engagement
# The vehicle usually recovers out of this state within a minute of normal driving # The vehicle usually recovers out of this state within a minute of normal driving

@ -1,32 +1,31 @@
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from openpilot.selfdrive.car import create_button_events, get_safety_config from openpilot.selfdrive.car import create_button_events, get_safety_config, structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.ford.fordcan import CanBus from openpilot.selfdrive.car.ford.fordcan import CanBus
from openpilot.selfdrive.car.ford.values import Ecu, FordFlags from openpilot.selfdrive.car.ford.values import Ecu, FordFlags
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
TransmissionType = CarParams.TransmissionType TransmissionType = structs.CarParams.TransmissionType
GearShifter = car.CarState.GearShifter GearShifter = structs.CarState.GearShifter
class CarInterface(CarInterfaceBase): class CarInterface(CarInterfaceBase):
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "ford" ret.carName = "ford"
ret.dashcamOnly = bool(ret.flags & FordFlags.CANFD) ret.dashcamOnly = bool(ret.flags & FordFlags.CANFD)
ret.radarUnavailable = True ret.radarUnavailable = True
ret.steerControlType = CarParams.SteerControlType.angle ret.steerControlType = structs.CarParams.SteerControlType.angle
ret.steerActuatorDelay = 0.2 ret.steerActuatorDelay = 0.2
ret.steerLimitTimer = 1.0 ret.steerLimitTimer = 1.0
CAN = CanBus(fingerprint=fingerprint) CAN = CanBus(fingerprint=fingerprint)
cfgs = [get_safety_config(CarParams.SafetyModel.ford)] cfgs = [get_safety_config(structs.CarParams.SafetyModel.ford)]
if CAN.main >= 4: if CAN.main >= 4:
cfgs.insert(0, get_safety_config(CarParams.SafetyModel.noOutput)) cfgs.insert(0, get_safety_config(structs.CarParams.SafetyModel.noOutput))
ret.safetyConfigs = cfgs ret.safetyConfigs = cfgs
ret.experimentalLongitudinalAvailable = True ret.experimentalLongitudinalAvailable = True

@ -1,6 +1,6 @@
from math import cos, sin from math import cos, sin
from cereal import car
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.ford.fordcan import CanBus from openpilot.selfdrive.car.ford.fordcan import CanBus
from openpilot.selfdrive.car.ford.values import DBC, RADAR from openpilot.selfdrive.car.ford.values import DBC, RADAR
@ -58,7 +58,7 @@ class RadarInterface(RadarInterfaceBase):
if self.trigger_msg not in self.updated_messages: if self.trigger_msg not in self.updated_messages:
return None return None
ret = car.RadarData.new_message() ret = structs.RadarData()
errors = [] errors = []
if not self.rcp.can_valid: if not self.rcp.can_valid:
errors.append("canError") errors.append("canError")
@ -89,7 +89,7 @@ class RadarInterface(RadarInterfaceBase):
# radar point only valid if there have been enough valid measurements # radar point only valid if there have been enough valid measurements
if self.valid_cnt[ii] > 0: if self.valid_cnt[ii] > 0:
if ii not in self.pts: if ii not in self.pts:
self.pts[ii] = car.RadarData.RadarPoint.new_message() self.pts[ii] = structs.RadarData.RadarPoint()
self.pts[ii].trackId = self.track_id self.pts[ii].trackId = self.track_id
self.track_id += 1 self.track_id += 1
self.pts[ii].dRel = cpt['X_Rel'] # from front of car self.pts[ii].dRel = cpt['X_Rel'] # from front of car
@ -112,7 +112,7 @@ class RadarInterface(RadarInterfaceBase):
i = (ii - 1) * 4 + scanIndex i = (ii - 1) * 4 + scanIndex
if i not in self.pts: if i not in self.pts:
self.pts[i] = car.RadarData.RadarPoint.new_message() self.pts[i] = structs.RadarData.RadarPoint()
self.pts[i].trackId = self.track_id self.pts[i].trackId = self.track_id
self.pts[i].aRel = float('nan') self.pts[i].aRel = float('nan')
self.pts[i].yvRel = float('nan') self.pts[i].yvRel = float('nan')

@ -1,15 +1,14 @@
import copy import copy
from cereal import car
from opendbc.can.can_define import CANDefine from opendbc.can.can_define import CANDefine
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.helpers import mean from openpilot.selfdrive.car.helpers import mean
from openpilot.selfdrive.car.interfaces import CarStateBase from openpilot.selfdrive.car.interfaces import CarStateBase
from openpilot.selfdrive.car.gm.values import DBC, AccState, CanBus, STEER_THRESHOLD from openpilot.selfdrive.car.gm.values import DBC, AccState, CanBus, STEER_THRESHOLD
TransmissionType = CarParams.TransmissionType TransmissionType = structs.CarParams.TransmissionType
NetworkLocation = CarParams.NetworkLocation NetworkLocation = structs.CarParams.NetworkLocation
STANDSTILL_THRESHOLD = 10 * 0.0311 * CV.KPH_TO_MS STANDSTILL_THRESHOLD = 10 * 0.0311 * CV.KPH_TO_MS
@ -31,7 +30,7 @@ class CarState(CarStateBase):
self.distance_button = 0 self.distance_button = 0
def update(self, pt_cp, cam_cp, loopback_cp): def update(self, pt_cp, cam_cp, loopback_cp):
ret = car.CarState.new_message() ret = structs.CarState()
self.prev_cruise_buttons = self.cruise_buttons self.prev_cruise_buttons = self.cruise_buttons
self.prev_distance_button = self.distance_button self.prev_distance_button = self.distance_button

@ -6,18 +6,17 @@ from math import fabs, exp
from panda import Panda from panda import Panda
from openpilot.common.basedir import BASEDIR from openpilot.common.basedir import BASEDIR
from openpilot.selfdrive.car import create_button_events, get_safety_config, get_friction from openpilot.selfdrive.car import create_button_events, get_safety_config, get_friction, structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.gm.radar_interface import RADAR_HEADER_MSG from openpilot.selfdrive.car.gm.radar_interface import RADAR_HEADER_MSG
from openpilot.selfdrive.car.gm.values import CAR, CruiseButtons, CarControllerParams, EV_CAR, CAMERA_ACC_CAR, CanBus from openpilot.selfdrive.car.gm.values import CAR, CruiseButtons, CarControllerParams, EV_CAR, CAMERA_ACC_CAR, CanBus
from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, FRICTION_THRESHOLD, LatControlInputs, NanoFFModel from openpilot.selfdrive.car.interfaces import CarInterfaceBase, TorqueFromLateralAccelCallbackType, FRICTION_THRESHOLD, LatControlInputs, NanoFFModel
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName EventName = car.CarEvent.EventName
GearShifter = car.CarState.GearShifter GearShifter = structs.CarState.GearShifter
TransmissionType = CarParams.TransmissionType TransmissionType = structs.CarParams.TransmissionType
NetworkLocation = CarParams.NetworkLocation NetworkLocation = structs.CarParams.NetworkLocation
BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.DECEL_SET: ButtonType.decelCruise, BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.DECEL_SET: ButtonType.decelCruise,
CruiseButtons.MAIN: ButtonType.altButton3, CruiseButtons.CANCEL: ButtonType.cancel} CruiseButtons.MAIN: ButtonType.altButton3, CruiseButtons.CANCEL: ButtonType.cancel}
@ -49,7 +48,7 @@ class CarInterface(CarInterfaceBase):
else: else:
return CarInterfaceBase.get_steer_feedforward_default return CarInterfaceBase.get_steer_feedforward_default
def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, torque_params: CarParams.LateralTorqueTuning, lateral_accel_error: float, def torque_from_lateral_accel_siglin(self, latcontrol_inputs: LatControlInputs, torque_params: structs.CarParams.LateralTorqueTuning, lateral_accel_error: float,
lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> 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) friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation)
@ -71,7 +70,7 @@ class CarInterface(CarInterfaceBase):
steer_torque = (sig(latcontrol_inputs.lateral_acceleration * a) * b) + (latcontrol_inputs.lateral_acceleration * c) steer_torque = (sig(latcontrol_inputs.lateral_acceleration * a) * b) + (latcontrol_inputs.lateral_acceleration * c)
return float(steer_torque) + friction return float(steer_torque) + friction
def torque_from_lateral_accel_neural(self, latcontrol_inputs: LatControlInputs, torque_params: CarParams.LateralTorqueTuning, lateral_accel_error: float, def torque_from_lateral_accel_neural(self, latcontrol_inputs: LatControlInputs, torque_params: structs.CarParams.LateralTorqueTuning, lateral_accel_error: float,
lateral_accel_deadzone: float, friction_compensation: bool, gravity_adjusted: bool) -> 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) friction = get_friction(lateral_accel_error, lateral_accel_deadzone, FRICTION_THRESHOLD, torque_params, friction_compensation)
inputs = list(latcontrol_inputs) inputs = list(latcontrol_inputs)
@ -89,9 +88,9 @@ class CarInterface(CarInterfaceBase):
return self.torque_from_lateral_accel_linear return self.torque_from_lateral_accel_linear
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "gm" ret.carName = "gm"
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.gm)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.gm)]
ret.autoResumeSng = False ret.autoResumeSng = False
ret.enableBsm = 0x142 in fingerprint[CanBus.POWERTRAIN] ret.enableBsm = 0x142 in fingerprint[CanBus.POWERTRAIN]

@ -1,7 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import math import math
from cereal import car
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.gm.values import DBC, CanBus from openpilot.selfdrive.car.gm.values import DBC, CanBus
from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.interfaces import RadarInterfaceBase
@ -52,7 +52,7 @@ class RadarInterface(RadarInterfaceBase):
if self.trigger_msg not in self.updated_messages: if self.trigger_msg not in self.updated_messages:
return None return None
ret = car.RadarData.new_message() ret = structs.RadarData()
header = self.rcp.vl[RADAR_HEADER_MSG] header = self.rcp.vl[RADAR_HEADER_MSG]
fault = header['FLRRSnsrBlckd'] or header['FLRRSnstvFltPrsntInt'] or \ fault = header['FLRRSnsrBlckd'] or header['FLRRSnstvFltPrsntInt'] or \
header['FLRRYawRtPlsblityFlt'] or header['FLRRHWFltPrsntInt'] or \ header['FLRRYawRtPlsblityFlt'] or header['FLRRHWFltPrsntInt'] or \
@ -82,7 +82,7 @@ class RadarInterface(RadarInterfaceBase):
targetId = cpt['TrkObjectID'] targetId = cpt['TrkObjectID']
currentTargets.add(targetId) currentTargets.add(targetId)
if targetId not in self.pts: if targetId not in self.pts:
self.pts[targetId] = car.RadarData.RadarPoint.new_message() self.pts[targetId] = structs.RadarData.RadarPoint()
self.pts[targetId].trackId = targetId self.pts[targetId].trackId = targetId
distance = cpt['TrkRange'] distance = cpt['TrkRange']
self.pts[targetId].dRel = distance # from front of car self.pts[targetId].dRel = distance # from front of car

@ -106,7 +106,7 @@ class CarState(CarStateBase):
self.dash_speed_seen = False self.dash_speed_seen = False
def update(self, cp, cp_cam, cp_body): def update(self, cp, cp_cam, cp_body):
ret = car.CarState.new_message() ret = structs.CarState()
# car params # car params
v_weight_v = [0., 1.] # don't trust smooth speed at low values to avoid premature zero snapping v_weight_v = [0., 1.] # don't trust smooth speed at low values to avoid premature zero snapping

@ -1,20 +1,19 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from openpilot.selfdrive.car import create_button_events, get_safety_config, structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.helpers import interp from openpilot.selfdrive.car.helpers import interp
from openpilot.selfdrive.car.honda.hondacan import CanBus from openpilot.selfdrive.car.honda.hondacan import CanBus
from openpilot.selfdrive.car.honda.values import CarControllerParams, CruiseButtons, CruiseSettings, HondaFlags, CAR, HONDA_BOSCH, \ from openpilot.selfdrive.car.honda.values import CarControllerParams, CruiseButtons, CruiseSettings, HondaFlags, CAR, HONDA_BOSCH, \
HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_RADARLESS HONDA_NIDEC_ALT_SCM_MESSAGES, HONDA_BOSCH_RADARLESS
from openpilot.selfdrive.car import create_button_events, get_safety_config
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
from openpilot.selfdrive.car.disable_ecu import disable_ecu from openpilot.selfdrive.car.disable_ecu import disable_ecu
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName EventName = car.CarEvent.EventName
TransmissionType = CarParams.TransmissionType TransmissionType = structs.CarParams.TransmissionType
BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.DECEL_SET: ButtonType.decelCruise, BUTTONS_DICT = {CruiseButtons.RES_ACCEL: ButtonType.accelCruise, CruiseButtons.DECEL_SET: ButtonType.decelCruise,
CruiseButtons.MAIN: ButtonType.altButton3, CruiseButtons.CANCEL: ButtonType.cancel} CruiseButtons.MAIN: ButtonType.altButton3, CruiseButtons.CANCEL: ButtonType.cancel}
SETTINGS_BUTTONS_DICT = {CruiseSettings.DISTANCE: ButtonType.gapAdjustCruise, CruiseSettings.LKAS: ButtonType.altButton1} SETTINGS_BUTTONS_DICT = {CruiseSettings.DISTANCE: ButtonType.gapAdjustCruise, CruiseSettings.LKAS: ButtonType.altButton1}
@ -33,13 +32,13 @@ class CarInterface(CarInterfaceBase):
return CarControllerParams.NIDEC_ACCEL_MIN, interp(current_speed, ACCEL_MAX_BP, ACCEL_MAX_VALS) return CarControllerParams.NIDEC_ACCEL_MIN, interp(current_speed, ACCEL_MAX_BP, ACCEL_MAX_VALS)
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "honda" ret.carName = "honda"
CAN = CanBus(ret, fingerprint) CAN = CanBus(ret, fingerprint)
if candidate in HONDA_BOSCH: if candidate in HONDA_BOSCH:
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hondaBosch)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hondaBosch)]
ret.radarUnavailable = True ret.radarUnavailable = True
# Disable the radar and let openpilot control longitudinal # Disable the radar and let openpilot control longitudinal
# WARNING: THIS DISABLES AEB! # WARNING: THIS DISABLES AEB!
@ -48,7 +47,7 @@ class CarInterface(CarInterfaceBase):
ret.openpilotLongitudinalControl = experimental_long ret.openpilotLongitudinalControl = experimental_long
ret.pcmCruise = not ret.openpilotLongitudinalControl ret.pcmCruise = not ret.openpilotLongitudinalControl
else: else:
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hondaNidec)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hondaNidec)]
ret.openpilotLongitudinalControl = True ret.openpilotLongitudinalControl = True
ret.pcmCruise = True ret.pcmCruise = True

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from cereal import car
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.interfaces import RadarInterfaceBase
from openpilot.selfdrive.car.honda.values import DBC from openpilot.selfdrive.car.honda.values import DBC
@ -47,7 +47,7 @@ class RadarInterface(RadarInterfaceBase):
return rr return rr
def _update(self, updated_messages): def _update(self, updated_messages):
ret = car.RadarData.new_message() ret = structs.RadarData()
for ii in sorted(updated_messages): for ii in sorted(updated_messages):
cpt = self.rcp.vl[ii] cpt = self.rcp.vl[ii]
@ -57,7 +57,7 @@ class RadarInterface(RadarInterfaceBase):
self.radar_wrong_config = cpt['RADAR_STATE'] == 0x69 self.radar_wrong_config = cpt['RADAR_STATE'] == 0x69
elif cpt['LONG_DIST'] < 255: elif cpt['LONG_DIST'] < 255:
if ii not in self.pts or cpt['NEW_TRACK']: if ii not in self.pts or cpt['NEW_TRACK']:
self.pts[ii] = car.RadarData.RadarPoint.new_message() self.pts[ii] = structs.RadarData.RadarPoint()
self.pts[ii].trackId = self.track_id self.pts[ii].trackId = self.track_id
self.track_id += 1 self.track_id += 1
self.pts[ii].dRel = cpt['LONG_DIST'] # from front of car self.pts[ii].dRel = cpt['LONG_DIST'] # from front of car

@ -56,7 +56,7 @@ class CarState(CarStateBase):
if self.CP.carFingerprint in CANFD_CAR: if self.CP.carFingerprint in CANFD_CAR:
return self.update_canfd(cp, cp_cam) return self.update_canfd(cp, cp_cam)
ret = car.CarState.new_message() ret = structs.CarState()
cp_cruise = cp_cam if self.CP.carFingerprint in CAMERA_SCC_CAR else cp cp_cruise = cp_cam if self.CP.carFingerprint in CAMERA_SCC_CAR else cp
self.is_metric = cp.vl["CLU11"]["CF_Clu_SPEED_UNIT"] == 0 self.is_metric = cp.vl["CLU11"]["CF_Clu_SPEED_UNIT"] == 0
speed_conv = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS speed_conv = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS
@ -169,7 +169,7 @@ class CarState(CarStateBase):
return ret return ret
def update_canfd(self, cp, cp_cam): def update_canfd(self, cp, cp_cam):
ret = car.CarState.new_message() ret = structs.CarState()
self.is_metric = cp.vl["CRUISE_BUTTONS_ALT"]["DISTANCE_UNIT"] != 1 self.is_metric = cp.vl["CRUISE_BUTTONS_ALT"]["DISTANCE_UNIT"] != 1
speed_factor = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS speed_factor = CV.KPH_TO_MS if self.is_metric else CV.MPH_TO_MS

@ -1,17 +1,16 @@
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from openpilot.selfdrive.car.structs import CarParams from openpilot.selfdrive.car import create_button_events, get_safety_config, structs
from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus from openpilot.selfdrive.car.hyundai.hyundaicanfd import CanBus
from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, CANFD_RADAR_SCC_CAR, \ from openpilot.selfdrive.car.hyundai.values import HyundaiFlags, CAR, DBC, CANFD_CAR, CAMERA_SCC_CAR, CANFD_RADAR_SCC_CAR, \
CANFD_UNSUPPORTED_LONGITUDINAL_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, \ CANFD_UNSUPPORTED_LONGITUDINAL_CAR, EV_CAR, HYBRID_CAR, LEGACY_SAFETY_MODE_CAR, \
UNSUPPORTED_LONGITUDINAL_CAR, Buttons UNSUPPORTED_LONGITUDINAL_CAR, Buttons
from openpilot.selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR from openpilot.selfdrive.car.hyundai.radar_interface import RADAR_START_ADDR
from openpilot.selfdrive.car import create_button_events, get_safety_config
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
from openpilot.selfdrive.car.disable_ecu import disable_ecu from openpilot.selfdrive.car.disable_ecu import disable_ecu
Ecu = CarParams.Ecu Ecu = structs.CarParams.Ecu
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName EventName = car.CarEvent.EventName
ENABLE_BUTTONS = (Buttons.RES_ACCEL, Buttons.SET_DECEL, Buttons.CANCEL) ENABLE_BUTTONS = (Buttons.RES_ACCEL, Buttons.SET_DECEL, Buttons.CANCEL)
BUTTONS_DICT = {Buttons.RES_ACCEL: ButtonType.accelCruise, Buttons.SET_DECEL: ButtonType.decelCruise, BUTTONS_DICT = {Buttons.RES_ACCEL: ButtonType.accelCruise, Buttons.SET_DECEL: ButtonType.decelCruise,
@ -20,7 +19,7 @@ BUTTONS_DICT = {Buttons.RES_ACCEL: ButtonType.accelCruise, Buttons.SET_DECEL: Bu
class CarInterface(CarInterfaceBase): class CarInterface(CarInterfaceBase):
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "hyundai" ret.carName = "hyundai"
ret.radarUnavailable = RADAR_START_ADDR not in fingerprint[1] or DBC[ret.carFingerprint]["radar"] is None ret.radarUnavailable = RADAR_START_ADDR not in fingerprint[1] or DBC[ret.carFingerprint]["radar"] is None
@ -101,9 +100,9 @@ class CarInterface(CarInterfaceBase):
# *** panda safety config *** # *** panda safety config ***
if candidate in CANFD_CAR: if candidate in CANFD_CAR:
cfgs = [get_safety_config(CarParams.SafetyModel.hyundaiCanfd), ] cfgs = [get_safety_config(structs.CarParams.SafetyModel.hyundaiCanfd), ]
if CAN.ECAN >= 4: if CAN.ECAN >= 4:
cfgs.insert(0, get_safety_config(CarParams.SafetyModel.noOutput)) cfgs.insert(0, get_safety_config(structs.CarParams.SafetyModel.noOutput))
ret.safetyConfigs = cfgs ret.safetyConfigs = cfgs
if ret.flags & HyundaiFlags.CANFD_HDA2: if ret.flags & HyundaiFlags.CANFD_HDA2:
@ -117,9 +116,9 @@ class CarInterface(CarInterfaceBase):
else: else:
if candidate in LEGACY_SAFETY_MODE_CAR: if candidate in LEGACY_SAFETY_MODE_CAR:
# these cars require a special panda safety mode due to missing counters and checksums in the messages # these cars require a special panda safety mode due to missing counters and checksums in the messages
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hyundaiLegacy)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hyundaiLegacy)]
else: else:
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.hyundai, 0)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hyundai, 0)]
if candidate in CAMERA_SCC_CAR: if candidate in CAMERA_SCC_CAR:
ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC ret.safetyConfigs[0].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC

@ -1,7 +1,7 @@
import math import math
from cereal import car
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.interfaces import RadarInterfaceBase from openpilot.selfdrive.car.interfaces import RadarInterfaceBase
from openpilot.selfdrive.car.hyundai.values import DBC from openpilot.selfdrive.car.hyundai.values import DBC
@ -44,7 +44,7 @@ class RadarInterface(RadarInterfaceBase):
return rr return rr
def _update(self, updated_messages): def _update(self, updated_messages):
ret = car.RadarData.new_message() ret = structs.RadarData()
if self.rcp is None: if self.rcp is None:
return ret return ret
@ -58,7 +58,7 @@ class RadarInterface(RadarInterfaceBase):
msg = self.rcp.vl[f"RADAR_TRACK_{addr:x}"] msg = self.rcp.vl[f"RADAR_TRACK_{addr:x}"]
if addr not in self.pts: if addr not in self.pts:
self.pts[addr] = car.RadarData.RadarPoint.new_message() self.pts[addr] = structs.RadarData.RadarPoint()
self.pts[addr].trackId = self.track_id self.pts[addr].trackId = self.track_id
self.track_id += 1 self.track_id += 1

@ -23,7 +23,7 @@ class CarState(CarStateBase):
def update(self, cp, cp_cam): def update(self, cp, cp_cam):
ret = car.CarState.new_message() ret = structs.CarState()
self.prev_distance_button = self.distance_button self.prev_distance_button = self.distance_button
self.distance_button = cp.vl["CRZ_BTNS"]["DISTANCE_LESS"] self.distance_button = cp.vl["CRZ_BTNS"]["DISTANCE_LESS"]

@ -1,20 +1,19 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from cereal import car from cereal import car
from openpilot.selfdrive.car import create_button_events, get_safety_config from openpilot.selfdrive.car import create_button_events, get_safety_config, structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.mazda.values import CAR, LKAS_LIMITS from openpilot.selfdrive.car.mazda.values import CAR, LKAS_LIMITS
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName EventName = car.CarEvent.EventName
class CarInterface(CarInterfaceBase): class CarInterface(CarInterfaceBase):
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "mazda" ret.carName = "mazda"
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.mazda)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.mazda)]
ret.radarUnavailable = True ret.radarUnavailable = True
ret.dashcamOnly = candidate not in (CAR.MAZDA_CX5_2022, CAR.MAZDA_CX9_2021) ret.dashcamOnly = candidate not in (CAR.MAZDA_CX5_2022, CAR.MAZDA_CX9_2021)

@ -1,5 +1,4 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from cereal import car
import cereal.messaging as messaging import cereal.messaging as messaging
from openpilot.selfdrive.car.structs import CarParams from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
@ -26,7 +25,7 @@ class CarInterface(CarInterfaceBase):
self.sm.update(0) self.sm.update(0)
gps_sock = 'gpsLocationExternal' if self.sm.recv_frame['gpsLocationExternal'] > 1 else 'gpsLocation' gps_sock = 'gpsLocationExternal' if self.sm.recv_frame['gpsLocationExternal'] > 1 else 'gpsLocation'
ret = car.CarState.new_message() ret = structs.CarState()
ret.vEgo = self.sm[gps_sock].speed ret.vEgo = self.sm[gps_sock].speed
ret.vEgoRaw = self.sm[gps_sock].speed ret.vEgoRaw = self.sm[gps_sock].speed

@ -1,8 +1,8 @@
import copy import copy
from collections import deque from collections import deque
from cereal import car
from opendbc.can.can_define import CANDefine from opendbc.can.can_define import CANDefine
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.interfaces import CarStateBase from openpilot.selfdrive.car.interfaces import CarStateBase
from openpilot.selfdrive.car.nissan.values import CAR, DBC, CarControllerParams from openpilot.selfdrive.car.nissan.values import CAR, DBC, CarControllerParams
@ -24,7 +24,7 @@ class CarState(CarStateBase):
self.distance_button = 0 self.distance_button = 0
def update(self, cp, cp_adas, cp_cam): def update(self, cp, cp_adas, cp_cam):
ret = car.CarState.new_message() ret = structs.CarState()
self.prev_distance_button = self.distance_button self.prev_distance_button = self.distance_button
self.distance_button = cp.vl["CRUISE_THROTTLE"]["FOLLOW_DISTANCE_BUTTON"] self.distance_button = cp.vl["CRUISE_THROTTLE"]["FOLLOW_DISTANCE_BUTTON"]

@ -1,26 +1,25 @@
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from openpilot.selfdrive.car import create_button_events, get_safety_config from openpilot.selfdrive.car import create_button_events, get_safety_config, structs
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
from openpilot.selfdrive.car.nissan.values import CAR from openpilot.selfdrive.car.nissan.values import CAR
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
class CarInterface(CarInterfaceBase): class CarInterface(CarInterfaceBase):
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs):
ret.carName = "nissan" ret.carName = "nissan"
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.nissan)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.nissan)]
ret.autoResumeSng = False ret.autoResumeSng = False
ret.steerLimitTimer = 1.0 ret.steerLimitTimer = 1.0
ret.steerActuatorDelay = 0.1 ret.steerActuatorDelay = 0.1
ret.steerControlType = CarParams.SteerControlType.angle ret.steerControlType = structs.CarParams.SteerControlType.angle
ret.radarUnavailable = True ret.radarUnavailable = True
if candidate == CAR.NISSAN_ALTIMA: if candidate == CAR.NISSAN_ALTIMA:
@ -35,7 +34,7 @@ class CarInterface(CarInterfaceBase):
ret.buttonEvents = create_button_events(self.CS.distance_button, self.CS.prev_distance_button, {1: ButtonType.gapAdjustCruise}) ret.buttonEvents = create_button_events(self.CS.distance_button, self.CS.prev_distance_button, {1: ButtonType.gapAdjustCruise})
events = self.create_common_events(ret, extra_gears=[car.CarState.GearShifter.brake]) events = self.create_common_events(ret, extra_gears=[CarState.GearShifter.brake])
if self.CS.lkas_enabled: if self.CS.lkas_enabled:
events.add(car.CarEvent.EventName.invalidLkasSetting) events.add(car.CarEvent.EventName.invalidLkasSetting)

@ -1,7 +1,7 @@
import copy import copy
from cereal import car
from opendbc.can.can_define import CANDefine from opendbc.can.can_define import CANDefine
from opendbc.can.parser import CANParser from opendbc.can.parser import CANParser
from openpilot.selfdrive.car import structs
from openpilot.selfdrive.car.conversions import Conversions as CV from openpilot.selfdrive.car.conversions import Conversions as CV
from openpilot.selfdrive.car.interfaces import CarStateBase from openpilot.selfdrive.car.interfaces import CarStateBase
from openpilot.selfdrive.car.subaru.values import DBC, CanBus, SubaruFlags from openpilot.selfdrive.car.subaru.values import DBC, CanBus, SubaruFlags
@ -17,7 +17,7 @@ class CarState(CarStateBase):
self.angle_rate_calulator = CanSignalRateCalculator(50) self.angle_rate_calulator = CanSignalRateCalculator(50)
def update(self, cp, cp_cam, cp_body): def update(self, cp, cp_cam, cp_body):
ret = car.CarState.new_message() ret = structs.CarState()
throttle_msg = cp.vl["Throttle"] if not (self.CP.flags & SubaruFlags.HYBRID) else cp_body.vl["Throttle_Hybrid"] throttle_msg = cp.vl["Throttle"] if not (self.CP.flags & SubaruFlags.HYBRID) else cp_body.vl["Throttle_Hybrid"]
ret.gas = throttle_msg["Throttle_Pedal"] / 255. ret.gas = throttle_msg["Throttle_Pedal"] / 255.

@ -21,7 +21,7 @@ class CarState(CarStateBase):
self.das_control_counters = deque(maxlen=32) self.das_control_counters = deque(maxlen=32)
def update(self, cp, cp_cam): def update(self, cp, cp_cam):
ret = car.CarState.new_message() ret = structs.CarState()
# Vehicle speed # Vehicle speed
ret.vEgoRaw = cp.vl["ESP_B"]["ESP_vehicleSpeed"] * CV.KPH_TO_MS ret.vEgoRaw = cp.vl["ESP_B"]["ESP_vehicleSpeed"] * CV.KPH_TO_MS

@ -36,7 +36,7 @@ class CarState(CarStateBase):
if self.CP.flags & VolkswagenFlags.PQ: if self.CP.flags & VolkswagenFlags.PQ:
return self.update_pq(pt_cp, cam_cp, ext_cp, trans_type) return self.update_pq(pt_cp, cam_cp, ext_cp, trans_type)
ret = car.CarState.new_message() ret = structs.CarState()
# Update vehicle speed and acceleration from ABS wheel speeds. # Update vehicle speed and acceleration from ABS wheel speeds.
ret.wheelSpeeds = self.get_wheel_speeds( ret.wheelSpeeds = self.get_wheel_speeds(
pt_cp.vl["ESP_19"]["ESP_VL_Radgeschw_02"], pt_cp.vl["ESP_19"]["ESP_VL_Radgeschw_02"],
@ -156,7 +156,7 @@ class CarState(CarStateBase):
return ret return ret
def update_pq(self, pt_cp, cam_cp, ext_cp, trans_type): def update_pq(self, pt_cp, cam_cp, ext_cp, trans_type):
ret = car.CarState.new_message() ret = structs.CarState()
# Update vehicle speed and acceleration from ABS wheel speeds. # Update vehicle speed and acceleration from ABS wheel speeds.
ret.wheelSpeeds = self.get_wheel_speeds( ret.wheelSpeeds = self.get_wheel_speeds(
pt_cp.vl["Bremse_3"]["Radgeschw__VL_4_1"], pt_cp.vl["Bremse_3"]["Radgeschw__VL_4_1"],

@ -1,11 +1,10 @@
from cereal import car from cereal import car
from panda import Panda from panda import Panda
from openpilot.selfdrive.car import get_safety_config from openpilot.selfdrive.car import get_safety_config, structs
from openpilot.selfdrive.car.structs import CarParams
from openpilot.selfdrive.car.interfaces import CarInterfaceBase from openpilot.selfdrive.car.interfaces import CarInterfaceBase
from openpilot.selfdrive.car.volkswagen.values import CAR, CANBUS, CarControllerParams, NetworkLocation, TransmissionType, GearShifter, VolkswagenFlags from openpilot.selfdrive.car.volkswagen.values import CAR, CANBUS, CarControllerParams, NetworkLocation, TransmissionType, GearShifter, VolkswagenFlags
ButtonType = car.CarState.ButtonEvent.Type ButtonType = structs.CarState.ButtonEvent.Type
EventName = car.CarEvent.EventName EventName = car.CarEvent.EventName
@ -21,13 +20,13 @@ class CarInterface(CarInterfaceBase):
self.cp_ext = self.cp_cam self.cp_ext = self.cp_cam
@staticmethod @staticmethod
def _get_params(ret: CarParams, candidate: CAR, fingerprint, car_fw, experimental_long, docs): def _get_params(ret: structs.CarParams, candidate: CAR, fingerprint, car_fw, experimental_long, docs):
ret.carName = "volkswagen" ret.carName = "volkswagen"
ret.radarUnavailable = True ret.radarUnavailable = True
if ret.flags & VolkswagenFlags.PQ: if ret.flags & VolkswagenFlags.PQ:
# Set global PQ35/PQ46/NMS parameters # Set global PQ35/PQ46/NMS parameters
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.volkswagenPq)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.volkswagenPq)]
ret.enableBsm = 0x3BA in fingerprint[0] # SWA_1 ret.enableBsm = 0x3BA in fingerprint[0] # SWA_1
if 0x440 in fingerprint[0] or docs: # Getriebe_1 if 0x440 in fingerprint[0] or docs: # Getriebe_1
@ -50,7 +49,7 @@ class CarInterface(CarInterfaceBase):
else: else:
# Set global MQB parameters # Set global MQB parameters
ret.safetyConfigs = [get_safety_config(CarParams.SafetyModel.volkswagen)] ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.volkswagen)]
ret.enableBsm = 0x30F in fingerprint[0] # SWA_01 ret.enableBsm = 0x30F in fingerprint[0] # SWA_01
if 0xAD in fingerprint[0] or docs: # Getriebe_11 if 0xAD in fingerprint[0] or docs: # Getriebe_11

Loading…
Cancel
Save