mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-15 00:43:46 +08:00
106 lines
5.3 KiB
Python
106 lines
5.3 KiB
Python
from opendbc.car.structs import car
|
|
from opendbc.car.honda.stock_aol import qualified as qualified_stock, BOSCH_WORDS, NIDEC_WORDS, temporary_restriction, ALT_RADAR_STOCK, CLASSIC_BOSCH
|
|
from openpilot.starpilot.car.honda.stock_intent import HondaStockCardIntent
|
|
from opendbc.car.honda.values import CAR, HondaFlags, HondaSafetyFlags
|
|
from openpilot.starpilot.aol.policy import AolVehiclePolicy
|
|
|
|
|
|
CLASSIC_BOSCH_AOL_CARS = frozenset((
|
|
CAR.HONDA_NBOX_2G, CAR.HONDA_ACCORD, CAR.HONDA_CIVIC_BOSCH, CAR.HONDA_CIVIC_BOSCH_DIESEL,
|
|
CAR.HONDA_CRV_5G, CAR.HONDA_CRV_HYBRID, CAR.ACURA_RDX_3G, CAR.HONDA_INSIGHT,
|
|
CAR.HONDA_E, CAR.HONDA_E_ADVANCE,
|
|
))
|
|
_CLASSIC_BOSCH_AOL_IDS = frozenset(str(candidate) for candidate in CLASSIC_BOSCH_AOL_CARS)
|
|
_NON_CLASSIC_BOSCH_FLAGS = HondaFlags.BOSCH_RADARLESS | HondaFlags.BOSCH_CANFD | HondaFlags.BOSCH_ALT_RADAR
|
|
_AOL_SAFETY_PARAMS = frozenset((
|
|
int(HondaSafetyFlags.BOSCH_LONG),
|
|
int(HondaSafetyFlags.BOSCH_LONG | HondaSafetyFlags.ALT_BRAKE),
|
|
int(HondaSafetyFlags.BOSCH_LONG | HondaSafetyFlags.AOL_BOSCH_LONG),
|
|
int(HondaSafetyFlags.BOSCH_LONG | HondaSafetyFlags.ALT_BRAKE | HondaSafetyFlags.AOL_BOSCH_LONG),
|
|
))
|
|
|
|
|
|
def qualified_honda(CP) -> bool:
|
|
rdx = CP.carFingerprint == CAR.ACURA_RDX_3G
|
|
word = int(CP.safetyConfigs[0].safetyParam) if len(CP.safetyConfigs) == 1 else -1
|
|
return (word in ((131, 163) if rdx else _AOL_SAFETY_PARAMS) and
|
|
str(CP.carFingerprint) in _CLASSIC_BOSCH_AOL_IDS and
|
|
CP.brand == 'honda' and bool(CP.flags & HondaFlags.BOSCH) and
|
|
not bool(CP.flags & _NON_CLASSIC_BOSCH_FLAGS) and
|
|
bool(CP.openpilotLongitudinalControl) and not bool(CP.pcmCruise) and
|
|
not bool(CP.notCar) and not bool(CP.passive) and not bool(CP.dashcamOnly) and
|
|
len(CP.safetyConfigs) == 1 and
|
|
CP.safetyConfigs[0].safetyModel == car.CarParams.SafetyModel.hondaBosch and
|
|
int(CP.safetyConfigs[0].safetyParam) in (_AOL_SAFETY_PARAMS | {131, 163}))
|
|
|
|
|
|
def policy_for(CP) -> AolVehiclePolicy:
|
|
if qualified_stock(CP):
|
|
safety_addition = 256 if CP.carFingerprint == CAR.HONDA_ODYSSEY_TWN else 0
|
|
if CP.flags & HondaFlags.GAS_INTERCEPTOR:
|
|
safety_addition |= int(HondaSafetyFlags.NIDEC_PEDAL_AOL)
|
|
if CP.carFingerprint in CLASSIC_BOSCH and CP.openpilotLongitudinalControl:
|
|
safety_addition |= int(HondaSafetyFlags.CLASSIC_LONG_AOL | HondaSafetyFlags.AOL_BOSCH_LONG)
|
|
if CP.carFingerprint in ALT_RADAR_STOCK:
|
|
if CP.carFingerprint == CAR.ACURA_MDX_4G:
|
|
safety_addition |= int(HondaSafetyFlags.STOCK_TJA)
|
|
if CP.openpilotLongitudinalControl:
|
|
safety_addition |= int(HondaSafetyFlags.ALT_RADAR_AOL | HondaSafetyFlags.AOL_BOSCH_LONG)
|
|
return AolVehiclePolicy(intent_supported=True, settings_supported=True, runtime_supported=True,
|
|
normal_runtime_supported=True, ordinary_axis_ack_required=qualified_stock(CP, marked_only=True), explicit_latch=True,
|
|
alternative_experience_addition=32,
|
|
safety_param_addition=safety_addition)
|
|
qualified = qualified_honda(CP)
|
|
return AolVehiclePolicy(
|
|
intent_supported=qualified, settings_supported=qualified,
|
|
runtime_supported=qualified and bool(int(CP.safetyConfigs[0].safetyParam) & 0x20),
|
|
distance_personality=qualified,
|
|
safety_param_addition=0x20 if qualified else 0,
|
|
)
|
|
|
|
|
|
def native_profile_supported(model: int, param: int) -> bool:
|
|
return ((model == int(car.CarParams.SafetyModel.hondaBosch) and param in BOSCH_WORDS | {34, 35, 163}) or
|
|
(model == int(car.CarParams.SafetyModel.hondaNidec) and param in NIDEC_WORDS))
|
|
|
|
|
|
def native_accepts_cp(CP, model: int, param: int) -> bool:
|
|
# Honda's native receipt checks the safety profile, then the shared exact CP match.
|
|
if qualified_stock(CP, marked_only=True):
|
|
return (native_profile_supported(model, param) and model == int(CP.safetyConfigs[-1].safetyModel.raw) and
|
|
param == CP.safetyConfigs[-1].safetyParam)
|
|
return qualified_honda(CP) and param == CP.safetyConfigs[0].safetyParam and param in (34, 35, 163)
|
|
|
|
|
|
def native_latch_rejected(CP, native):
|
|
return qualified_stock(CP, marked_only=True) and native.requestedLateral and not native.lateralAllowed
|
|
|
|
|
|
def ordinary_axis_request_allowed(CP, CS):
|
|
return qualified_stock(CP, marked_only=True) and CS.canValid and not CS.canTimeout and not CS.steerFaultPermanent
|
|
|
|
|
|
def retain_on_native_denial(CP, native, state):
|
|
return temporary_restriction(CP, state)
|
|
|
|
|
|
def create_intent(CP, settings):
|
|
if qualified_stock(CP):
|
|
safety_addition = 256 if CP.carFingerprint == CAR.HONDA_ODYSSEY_TWN else 0
|
|
if CP.flags & HondaFlags.GAS_INTERCEPTOR:
|
|
safety_addition |= int(HondaSafetyFlags.NIDEC_PEDAL_AOL)
|
|
if CP.carFingerprint in CLASSIC_BOSCH and CP.openpilotLongitudinalControl:
|
|
safety_addition |= int(HondaSafetyFlags.CLASSIC_LONG_AOL | HondaSafetyFlags.AOL_BOSCH_LONG)
|
|
if CP.carFingerprint in ALT_RADAR_STOCK:
|
|
if CP.carFingerprint == CAR.ACURA_MDX_4G:
|
|
safety_addition |= int(HondaSafetyFlags.STOCK_TJA)
|
|
if CP.openpilotLongitudinalControl:
|
|
safety_addition |= int(HondaSafetyFlags.ALT_RADAR_AOL | HondaSafetyFlags.AOL_BOSCH_LONG)
|
|
return HondaStockCardIntent(CP, settings)
|
|
from openpilot.starpilot.aol.intent import AolCardIntent
|
|
return AolCardIntent(settings)
|
|
|
|
|
|
def aol_safety_config(CP):
|
|
return CP.safetyConfigs[-1] if qualified_stock(CP, marked_only=True) else None
|