mirror of
https://github.com/dragonpilot/dragonpilot.git
synced 2026-06-25 16:02:14 +08:00
98a491b1f2
Ford: parse ACC gap toggle button Use the ACC gap toggle button signal from the SCCM. There are two other signals for "increase" and "decrease" gap buttons, but no supported car has these buttons.
77 lines
2.7 KiB
Python
77 lines
2.7 KiB
Python
from cereal import car
|
|
from panda import Panda
|
|
from openpilot.common.conversions import Conversions as CV
|
|
from openpilot.selfdrive.car import create_button_events, get_safety_config
|
|
from openpilot.selfdrive.car.ford.fordcan import CanBus
|
|
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
|
|
GearShifter = car.CarState.GearShifter
|
|
|
|
|
|
class CarInterface(CarInterfaceBase):
|
|
@staticmethod
|
|
def _get_params(ret, candidate, fingerprint, car_fw, experimental_long, docs):
|
|
ret.carName = "ford"
|
|
ret.dashcamOnly = bool(ret.flags & FordFlags.CANFD)
|
|
|
|
ret.radarUnavailable = True
|
|
ret.steerControlType = car.CarParams.SteerControlType.angle
|
|
ret.steerActuatorDelay = 0.2
|
|
ret.steerLimitTimer = 1.0
|
|
|
|
ret.longitudinalTuning.kpBP = [0.]
|
|
ret.longitudinalTuning.kpV = [0.5]
|
|
ret.longitudinalTuning.kiV = [0.]
|
|
|
|
CAN = CanBus(fingerprint=fingerprint)
|
|
cfgs = [get_safety_config(car.CarParams.SafetyModel.ford)]
|
|
if CAN.main >= 4:
|
|
cfgs.insert(0, get_safety_config(car.CarParams.SafetyModel.noOutput))
|
|
ret.safetyConfigs = cfgs
|
|
|
|
ret.experimentalLongitudinalAvailable = True
|
|
if experimental_long:
|
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_FORD_LONG_CONTROL
|
|
ret.openpilotLongitudinalControl = True
|
|
|
|
if ret.flags & FordFlags.CANFD:
|
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_FORD_CANFD
|
|
|
|
# Auto Transmission: 0x732 ECU or Gear_Shift_by_Wire_FD1
|
|
found_ecus = [fw.ecu for fw in car_fw]
|
|
if Ecu.shiftByWire in found_ecus or 0x5A in fingerprint[CAN.main] or docs:
|
|
ret.transmissionType = TransmissionType.automatic
|
|
else:
|
|
ret.transmissionType = TransmissionType.manual
|
|
ret.minEnableSpeed = 20.0 * CV.MPH_TO_MS
|
|
|
|
# BSM: Side_Detect_L_Stat, Side_Detect_R_Stat
|
|
# TODO: detect bsm in car_fw?
|
|
ret.enableBsm = 0x3A6 in fingerprint[CAN.main] and 0x3A7 in fingerprint[CAN.main]
|
|
|
|
# LCA can steer down to zero
|
|
ret.minSteerSpeed = 0.
|
|
|
|
ret.autoResumeSng = ret.minEnableSpeed == -1.
|
|
ret.centerToFront = ret.wheelbase * 0.44
|
|
return ret
|
|
|
|
def _update(self, c):
|
|
ret = self.CS.update(self.cp, self.cp_cam)
|
|
|
|
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=[GearShifter.manumatic])
|
|
if not self.CS.vehicle_sensors_valid:
|
|
events.add(car.CarEvent.EventName.vehicleSensorsInvalid)
|
|
|
|
ret.events = events.to_msg()
|
|
|
|
return ret
|
|
|
|
def apply(self, c, now_nanos):
|
|
return self.CC.update(c, self.CS, now_nanos)
|