HKG: Interface refactor (#1292)
* refactor experimentalLongiudinalAvailable * refactor enableBsm * refactor Panda safety config * section headers * radarUnavailable to common long section * dashcam cars to car specific section
This commit is contained in:
parent
851d16108d
commit
9dc8b8edac
|
@ -17,19 +17,15 @@ class CarInterface(CarInterfaceBase):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs) -> structs.CarParams:
|
def _get_params(ret: structs.CarParams, candidate, fingerprint, car_fw, experimental_long, docs) -> structs.CarParams:
|
||||||
ret.carName = "hyundai"
|
ret.carName = "hyundai"
|
||||||
ret.radarUnavailable = RADAR_START_ADDR not in fingerprint[1] or DBC[ret.carFingerprint]["radar"] is None
|
|
||||||
|
|
||||||
# These cars have been put into dashcam only due to both a lack of users and test coverage.
|
|
||||||
# These cars likely still work fine. Once a user confirms each car works and a test route is
|
|
||||||
# added to opendbc/car/tests/routes.py, we can remove it from this list.
|
|
||||||
# FIXME: the Optima Hybrid 2017 uses a different SCC12 checksum
|
|
||||||
ret.dashcamOnly = candidate in {CAR.KIA_OPTIMA_H, }
|
|
||||||
|
|
||||||
hda2 = Ecu.adas in [fw.ecu for fw in car_fw]
|
hda2 = Ecu.adas in [fw.ecu for fw in car_fw]
|
||||||
CAN = CanBus(None, hda2, fingerprint)
|
CAN = CanBus(None, hda2, fingerprint)
|
||||||
|
|
||||||
if candidate in CANFD_CAR:
|
if candidate in CANFD_CAR:
|
||||||
# detect if car is hybrid
|
# Shared configuration for CAN-FD cars
|
||||||
|
ret.experimentalLongitudinalAvailable = candidate not in (CANFD_UNSUPPORTED_LONGITUDINAL_CAR | CANFD_RADAR_SCC_CAR)
|
||||||
|
ret.enableBsm = 0x1e5 in fingerprint[CAN.ECAN]
|
||||||
|
|
||||||
if 0x105 in fingerprint[CAN.ECAN]:
|
if 0x105 in fingerprint[CAN.ECAN]:
|
||||||
ret.flags |= HyundaiFlags.HYBRID.value
|
ret.flags |= HyundaiFlags.HYBRID.value
|
||||||
|
|
||||||
|
@ -50,44 +46,7 @@ class CarInterface(CarInterfaceBase):
|
||||||
ret.flags |= HyundaiFlags.CANFD_ALT_GEARS.value
|
ret.flags |= HyundaiFlags.CANFD_ALT_GEARS.value
|
||||||
if candidate not in CANFD_RADAR_SCC_CAR:
|
if candidate not in CANFD_RADAR_SCC_CAR:
|
||||||
ret.flags |= HyundaiFlags.CANFD_CAMERA_SCC.value
|
ret.flags |= HyundaiFlags.CANFD_CAMERA_SCC.value
|
||||||
else:
|
|
||||||
# Send LFA message on cars with HDA
|
|
||||||
if 0x485 in fingerprint[2]:
|
|
||||||
ret.flags |= HyundaiFlags.SEND_LFA.value
|
|
||||||
|
|
||||||
# These cars use the FCA11 message for the AEB and FCW signals, all others use SCC12
|
|
||||||
if 0x38d in fingerprint[0] or 0x38d in fingerprint[2]:
|
|
||||||
ret.flags |= HyundaiFlags.USE_FCA.value
|
|
||||||
|
|
||||||
ret.steerActuatorDelay = 0.1 # Default delay
|
|
||||||
ret.steerLimitTimer = 0.4
|
|
||||||
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
|
|
||||||
|
|
||||||
if candidate == CAR.KIA_OPTIMA_G4_FL:
|
|
||||||
ret.steerActuatorDelay = 0.2
|
|
||||||
|
|
||||||
# *** longitudinal control ***
|
|
||||||
if candidate in CANFD_CAR:
|
|
||||||
ret.experimentalLongitudinalAvailable = candidate not in (CANFD_UNSUPPORTED_LONGITUDINAL_CAR | CANFD_RADAR_SCC_CAR)
|
|
||||||
else:
|
|
||||||
ret.experimentalLongitudinalAvailable = candidate not in (UNSUPPORTED_LONGITUDINAL_CAR | CAMERA_SCC_CAR)
|
|
||||||
ret.openpilotLongitudinalControl = experimental_long and ret.experimentalLongitudinalAvailable
|
|
||||||
ret.pcmCruise = not ret.openpilotLongitudinalControl
|
|
||||||
|
|
||||||
ret.stoppingControl = True
|
|
||||||
ret.startingState = True
|
|
||||||
ret.vEgoStarting = 0.1
|
|
||||||
ret.startAccel = 1.0
|
|
||||||
ret.longitudinalActuatorDelay = 0.5
|
|
||||||
|
|
||||||
# *** feature detection ***
|
|
||||||
if candidate in CANFD_CAR:
|
|
||||||
ret.enableBsm = 0x1e5 in fingerprint[CAN.ECAN]
|
|
||||||
else:
|
|
||||||
ret.enableBsm = 0x58b in fingerprint[0]
|
|
||||||
|
|
||||||
# *** panda safety config ***
|
|
||||||
if candidate in CANFD_CAR:
|
|
||||||
cfgs = [get_safety_config(structs.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(structs.CarParams.SafetyModel.noOutput))
|
cfgs.insert(0, get_safety_config(structs.CarParams.SafetyModel.noOutput))
|
||||||
|
@ -101,7 +60,20 @@ class CarInterface(CarInterfaceBase):
|
||||||
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_ALT_BUTTONS
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CANFD_ALT_BUTTONS
|
||||||
if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC:
|
if ret.flags & HyundaiFlags.CANFD_CAMERA_SCC:
|
||||||
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_CAMERA_SCC
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
# Shared configuration for non CAN-FD cars
|
||||||
|
ret.experimentalLongitudinalAvailable = candidate not in (UNSUPPORTED_LONGITUDINAL_CAR | CAMERA_SCC_CAR)
|
||||||
|
ret.enableBsm = 0x58b in fingerprint[0]
|
||||||
|
|
||||||
|
# Send LFA message on cars with HDA
|
||||||
|
if 0x485 in fingerprint[2]:
|
||||||
|
ret.flags |= HyundaiFlags.SEND_LFA.value
|
||||||
|
|
||||||
|
# These cars use the FCA11 message for the AEB and FCW signals, all others use SCC12
|
||||||
|
if 0x38d in fingerprint[0] or 0x38d in fingerprint[2]:
|
||||||
|
ret.flags |= HyundaiFlags.USE_FCA.value
|
||||||
|
|
||||||
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(structs.CarParams.SafetyModel.hyundaiLegacy)]
|
ret.safetyConfigs = [get_safety_config(structs.CarParams.SafetyModel.hyundaiLegacy)]
|
||||||
|
@ -111,6 +83,24 @@ class CarInterface(CarInterfaceBase):
|
||||||
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
|
||||||
|
|
||||||
|
# Common lateral control setup
|
||||||
|
|
||||||
|
ret.centerToFront = ret.wheelbase * 0.4
|
||||||
|
ret.steerActuatorDelay = 0.1
|
||||||
|
ret.steerLimitTimer = 0.4
|
||||||
|
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
|
||||||
|
|
||||||
|
# Common longitudinal control setup
|
||||||
|
|
||||||
|
ret.radarUnavailable = RADAR_START_ADDR not in fingerprint[1] or DBC[ret.carFingerprint]["radar"] is None
|
||||||
|
ret.openpilotLongitudinalControl = experimental_long and ret.experimentalLongitudinalAvailable
|
||||||
|
ret.pcmCruise = not ret.openpilotLongitudinalControl
|
||||||
|
ret.stoppingControl = True
|
||||||
|
ret.startingState = True
|
||||||
|
ret.vEgoStarting = 0.1
|
||||||
|
ret.startAccel = 1.0
|
||||||
|
ret.longitudinalActuatorDelay = 0.5
|
||||||
|
|
||||||
if ret.openpilotLongitudinalControl:
|
if ret.openpilotLongitudinalControl:
|
||||||
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_LONG
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_LONG
|
||||||
if ret.flags & HyundaiFlags.HYBRID:
|
if ret.flags & HyundaiFlags.HYBRID:
|
||||||
|
@ -118,11 +108,18 @@ class CarInterface(CarInterfaceBase):
|
||||||
elif ret.flags & HyundaiFlags.EV:
|
elif ret.flags & HyundaiFlags.EV:
|
||||||
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_EV_GAS
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_EV_GAS
|
||||||
|
|
||||||
|
# Car specific configuration overrides
|
||||||
|
|
||||||
|
if candidate == CAR.KIA_OPTIMA_G4_FL:
|
||||||
|
ret.steerActuatorDelay = 0.2
|
||||||
|
|
||||||
if candidate in (CAR.HYUNDAI_KONA, CAR.HYUNDAI_KONA_EV, CAR.HYUNDAI_KONA_HEV, CAR.HYUNDAI_KONA_EV_2022):
|
if candidate in (CAR.HYUNDAI_KONA, CAR.HYUNDAI_KONA_EV, CAR.HYUNDAI_KONA_HEV, CAR.HYUNDAI_KONA_EV_2022):
|
||||||
ret.flags |= HyundaiFlags.ALT_LIMITS.value
|
ret.flags |= HyundaiFlags.ALT_LIMITS.value
|
||||||
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_ALT_LIMITS
|
ret.safetyConfigs[-1].safetyParam |= Panda.FLAG_HYUNDAI_ALT_LIMITS
|
||||||
|
|
||||||
ret.centerToFront = ret.wheelbase * 0.4
|
# Dashcam cars are missing a test route, or otherwise need validation
|
||||||
|
# TODO: Optima Hybrid 2017 uses a different SCC12 checksum
|
||||||
|
ret.dashcamOnly = candidate in {CAR.KIA_OPTIMA_H, }
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue