69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
from iqdbc.car import structs
|
|
|
|
from iqdbc.lvbs.car.hyundai.values import HyundaiFlagsIQ
|
|
|
|
ESCC_MSG = 0x2AB
|
|
|
|
|
|
class EnhancedSmartCruiseControl:
|
|
def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams):
|
|
self.CP = CP
|
|
self.CP_IQ = CP_IQ
|
|
|
|
@property
|
|
def enabled(self):
|
|
return self.CP_IQ.flags & HyundaiFlagsIQ.ENHANCED_SCC
|
|
|
|
@property
|
|
def trigger_msg(self):
|
|
return ESCC_MSG
|
|
|
|
def update_car_state(self, car_state):
|
|
"""
|
|
This method is invoked by the CarController to update the car state on the ESCC object.
|
|
The updated state is then used to update SCC12 with the current car state values received through ESCC.
|
|
:param car_state:
|
|
:return:
|
|
"""
|
|
self.car_state = car_state
|
|
|
|
def update_scc12(self, values):
|
|
"""
|
|
Update SCC12 with the current car state values received through ESCC.
|
|
These values are sourced directly from the car's SCC radar and provide a more reliable source for AEB and FCA alerts.
|
|
:param values: SCC12 to be sent in dictionary form before being packed
|
|
:return: Nothing. SCC12 is updated in place.
|
|
"""
|
|
values["AEB_CmdAct"] = self.car_state.escc_cmd_act
|
|
values["CF_VSM_Warn"] = self.car_state.escc_aeb_warning
|
|
values["CF_VSM_DecCmdAct"] = self.car_state.escc_aeb_dec_cmd_act
|
|
values["CR_VSM_DecCmd"] = self.car_state.escc_aeb_dec_cmd
|
|
# TODO-IQ: we should read it from the car's settings and use that value.
|
|
# It may not be ideal to set this here directly.
|
|
# Observed flickering on the dashboard settings switching between "deactivated" and "active assistance" when sending AEB_Status = 1.
|
|
# These values could differ from the user's configuration from the car's settings.
|
|
# This indicates that SCC12 likely displays it on the dashboard, and another FCA message may also cause it to appear.
|
|
values["AEB_Status"] = 2 # AEB enabled
|
|
|
|
|
|
class EsccCarStateBase:
|
|
def __init__(self):
|
|
self.escc_aeb_warning = 0
|
|
self.escc_aeb_dec_cmd_act = 0
|
|
self.escc_cmd_act = 0
|
|
self.escc_aeb_dec_cmd = 0
|
|
|
|
|
|
class EsccCarController:
|
|
def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams):
|
|
self.ESCC = EnhancedSmartCruiseControl(CP, CP_IQ)
|
|
|
|
def update(self, car_state):
|
|
self.ESCC.update_car_state(car_state)
|
|
|
|
|
|
class EsccRadarInterfaceBase:
|
|
def __init__(self, CP: structs.CarParams, CP_IQ: structs.IQCarParams):
|
|
self.ESCC = EnhancedSmartCruiseControl(CP, CP_IQ)
|
|
self.use_escc = False
|