Car port adapted from HotIce0/openpilot develop_byd_comma4 to sunnypilot's opendbc API (CP_SP signatures, (ret, ret_sp) carstate returns): - opendbc/car/byd/: interface, carstate, carcontroller, bydcan, values, fingerprints (BYD_SEAL_PERFORMANCE_25 with full 91-msg fingerprint) - opendbc/dbc/byd_common.dbc - Brand registration: car/values.py, car/fingerprints.py (+MIGRATION), car.capnp SafetyModel byd @35, torque_data/params.toml - safety/modes/byd.h: SAFETY_BYD 35U with real TX checks (steer torque cmd checks, longitudinal accel checks), MADS LKAS button from PCM_BUTTONS (944), pcm_cruise_check, ESC vehicle_moving. MISRA clean. - safety/tests/test_byd.py: 120 tests (stock + longitudinal variants) - opendbc/sunnypilot/car/byd/mads.py: MadsCarState tracking the dedicated LKAS steering wheel button - sunnypilot/mads/mads.py: allow_always for byd (dedicated LKAS button) - panda: restore SConstruct/SConscript build system, rebuild panda_h7.bin.signed (TIZI) with SAFETY_BYD + MADS lateral gating Known limitation: BYD_HAN_EV_23 fingerprint is a subset of the Seal's, so HAN requires FINGERPRINT=BYD_HAN_EV_23 env var (live fingerprint cannot distinguish it; Seal fingerprints natively).
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from opendbc.car import get_safety_config, structs
|
|
from opendbc.car.common.conversions import Conversions as CV
|
|
from opendbc.car.interfaces import CarInterfaceBase
|
|
from opendbc.car.byd.carcontroller import CarController
|
|
from opendbc.car.byd.carstate import CarState
|
|
from opendbc.car.byd.values import CAR, BydFlags, BydSafetyFlags
|
|
|
|
|
|
class CarInterface(CarInterfaceBase):
|
|
CarState = CarState
|
|
CarController = CarController
|
|
|
|
@staticmethod
|
|
def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, alpha_long, is_release, docs) -> structs.CarParams:
|
|
ret.brand = "byd"
|
|
ret.dashcamOnly = False
|
|
|
|
ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.byd)]
|
|
|
|
# lateral control parameters
|
|
ret.steerActuatorDelay = 0.3
|
|
ret.steerLimitTimer = 0.5
|
|
|
|
if candidate in (CAR.BYD_HAN_EV_23, CAR.BYD_SEAL_PERFORMANCE_25):
|
|
ret.steerControlType = structs.CarParams.SteerControlType.torque
|
|
|
|
ret.minEnableSpeed = -1.
|
|
ret.minSteerSpeed = 0.1 * CV.KPH_TO_MS
|
|
ret.steerLimitTimer = 0.5
|
|
|
|
if ret.steerControlType == structs.CarParams.SteerControlType.torque:
|
|
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
|
|
|
|
# longitudinal control parameters
|
|
ret.alphaLongitudinalAvailable = True
|
|
if alpha_long:
|
|
ret.openpilotLongitudinalControl = True
|
|
ret.startingState = True
|
|
ret.startAccel = 0.1
|
|
ret.flags |= BydFlags.LONG_CONTROL.value
|
|
ret.safetyConfigs[0].safetyParam |= BydSafetyFlags.LONG_CONTROL.value
|
|
ret.vEgoStopping = 0.1
|
|
ret.vEgoStarting = 0.1
|
|
ret.stoppingDecelRate = 0.3
|
|
|
|
# TODO: add radar support
|
|
ret.radarUnavailable = True
|
|
|
|
return ret
|