//***************************************************************************** // (C) Automotive Lighting Reutlingen GmbH // Tuebinger Strasse 123, 72762 Reutlingen, Germany // // Automotive Lighting Reutlingen GmbH owns all the rights to this work. // This work shall not be copied, reproduced, used, modified, transferred // or its information shall not be disclosed without the prior written // authorization of Automotive Lighting Reutlingen GmbH. //***************************************************************************** //----------------------------------------------------------------------------- /// \file SysMon.c /// /// \brief Hq01 /// //----------------------------------------------------------------------------- #define REVISE_VERSION_VC1 #define RTE_ALLOW_CROSS_HEADER_INCLUSION #define BOOSTER_ERROR_DEFECT //#define E2E_Remove #include #include #include #include #include #include #include #include "SysMon_Util_Time.h" #include //#include #include #include #include #include //#include //#include //#include "Nm.h" #include #include //============================================================================= // Local globals //============================================================================= #include //#define WATCHDOG_TEST #define MIN_CURRENT_LB 510U #define MIN_PWM_LB 13120U // number of LED channels #define CDDBOOST_Cfg_NbOfChannels 1u #define SYSMON_VBAT_MIN (applicationCodingData.System.Network_Management.KL15_Min) #define SYSMON_MASK_ALL_CHANNELS 0xFFFU //FuSa Coding data and CRC data address #define CODING_FUSA_CRC_ADDRESS 0x102042BEUL #define CODING_FUSA_START_ADDRESS 0x102042C2UL #define CODING_FUSA_END_ADDRESS 0x1020430DUL//0x10204301UL #define CY_SWAP_ENDIAN32(x) ((uint32)((((x) >> 24u) & 0x000000FFu) | (((x) & 0x00FF0000u) >> 8u) | \ (((x) & 0x0000FF00u) << 8u) | ((x) << 24u))) #define SYSMON_SCALE_100_VOLTAGE_UINT8_UINT32(x) ((uint32)((uint32)(x) * 100U )) #ifndef E2E_Remove #define SYSMON_E2EERROR_DEBOUNCE_COUNTER 19U #endif #define SYSMON_FUSAERROR_COUNTER 20U #define SYSMON_TRANSMITERROR_COUNTER 10U #define VCCX3_ShortToGND_TIMEUP 20U #define VCCX3_ShortToVBAT_TIMEUP 20U #define VCCX3_RECOVER_TIMEUP 20U #define LedOnthreshold ((applicationCodingData.Led1.LedSupplyVoltage.LED_VBAT_MIN_ON_V) * 100) #define LedOffthreshold ((applicationCodingData.Led1.LedSupplyVoltage.LED_VBAT_MIN_OFF_V)* 100) /*Macro*/ /*----------------------------DTC-start-----------------------------------------------------------------------------*/ /*Macro definition*/ #define SYSMON_DTC_DEBOUNCE 20U /* debounce 20*10ms */ #define SYSMON_IGN_ON 2U /* Ignition ON */ #define SYSMON_VOLTAGE_ENABLE_MAX 16000U /* Unit: 0.001 V; Values: 16V */ #define SYSMON_VOLTAGE_ENABLE_MIN 9000U /* Unit: 0.001 V; Values: 9V */ #define NMM_IN_NORMAL_STATE 0x04U /* Normal Operation State *//* done */ #define SYSMON_FLAG_ON 1U /* SysMon Flag ON */ #define SYSMON_FLAG_OFF 0U /* SysMon Flag OFF */ #define DTC_STATUS_PASSED 0U /* Monitor reports qualified test result passed. */ #define DTC_STATUS_FAILED 1U /* Monitor reports qualified test result failed.*/ #define DTC_STATUS_PRE_PASSED 2U /* Monitor reports non-qualified test result pre-passed(debounced Dem-internally). */ #define DTC_STATUS_PRE_FAILED 3U /* Monitor reports non-qualified test result pre-failed(debounced Dem-internally). */ #define FAULT_DTC_ERROR 1U /* Error */ #define FAULT_DTC_NOERROR 0U /* No Error */ #define DTC_STATUS_MASK 0x01U /* No Error */ /*FaultInformationForDTC Macro definition*/ /*LB*/ #define LB_OPENLOAD FaultInformationForDTC.LowBeam.OpenLoad /* LB 0x1: OpenLoad */ #define LB_SHORTTOGND FaultInformationForDTC.LowBeam.ShortToGnd /* LB 0x2: ShortCircuit GND */ #define LB_SHORTTOUBAT FaultInformationForDTC.LowBeam.ShortToUbat /* LB 0x3: ShortCircuit BAT */ #define LB_OVERCURRENT FaultInformationForDTC.LowBeam.Overcurrent /* LB 0x5: Over current */ #define LB_THERSHUTDOWN FaultInformationForDTC.LowBeam.OverThermalShutDown /* LB 0x6: Thermal shutdown */ #define LB_BOOSTERFAULT FaultInformationForDTC.LowBeam.BoosterFault /* LB 0x4: LED driver error */ #define LB_LMMFAULT FaultInformationForDTC.LowBeam.LmmFault /* LB 0xA: MLC LED error */ #define LB_VOLDEFAULT FaultInformationForDTC.LowBeam.VoltageDebounceFault /* LB 0x7: Voltage out of tolerance*/ #define LB_MLCFAULT FaultInformationForDTC.LowBeam.LmmCommunication /* LB 0xB: MLC Communication error */ #define LB_RCODFAULT FaultInformationForDTC.LowBeam.RCodFault /* LB 0x8: Binning error */ #define LB_NTCFAULT FaultInformationForDTC.LowBeam.NtcFault /* LB 0x9: NTC error */ /*HB*/ #define HB_OPENLOAD FaultInformationForDTC.HighBeam.OpenLoad /* HB 0x1: OpenLoad */ #define HB_SHORTTOGND FaultInformationForDTC.HighBeam.ShortToGnd /* HB 0x2: ShortCircuit GND */ #define HB_SHORTTOUBAT FaultInformationForDTC.HighBeam.ShortToUbat /* HB 0x3: ShortCircuit BAT */ #define HB_OVERCURRENT FaultInformationForDTC.HighBeam.Overcurrent /* HB 0x5: Over current */ #define HB_THERSHUTDOWN FaultInformationForDTC.HighBeam.OverThermalShutDown /* HB 0x6: Thermal shutdown */ #define HB_BOOSTERFAULT FaultInformationForDTC.HighBeam.BoosterFault /* HB 0x4: LED driver error */ #define HB_LMMFAULT FaultInformationForDTC.HighBeam.LmmFault /* HB 0xA: MLC LED error */ #define HB_VOLDEFAULT FaultInformationForDTC.HighBeam.VoltageDebounceFault /* HB 0x7: Voltage out of tolerance*/ #define HB_MLCFAULT FaultInformationForDTC.HighBeam.LmmCommunication /* HB 0xB: MLC Communication error */ #define HB_RCODFAULT FaultInformationForDTC.HighBeam.RCodFault /* HB 0x8: Binning error */ #define HB_NTCFAULT FaultInformationForDTC.HighBeam.NtcFault /* HB 0x9: NTC error */ /*DRL*/ #define DRL_OPENLOAD FaultInformationForDTC.DaytimeRunningLight.OpenLoad /* DRL 0x1:OpenLoad */ #define DRL_SHORTTOGND FaultInformationForDTC.DaytimeRunningLight.ShortToGnd /* DRL 0x2:ShortCircuit GND */ #define DRL_SHORTTOUBAT FaultInformationForDTC.DaytimeRunningLight.ShortToUbat /* DRL 0x3:ShortCircuit BAT */ #define DRL_OVERCURRENT FaultInformationForDTC.DaytimeRunningLight.Overcurrent /* DRL 0x5:Over current */ #define DRL_THERSHUTDOWN FaultInformationForDTC.DaytimeRunningLight.OverThermalShutDown /* DRL 0x6:Thermal shutdown */ #define DRL_BOOSTERFAULT FaultInformationForDTC.DaytimeRunningLight.BoosterFault /* DRL 0x4:LED driver error */ #define DRL_LMMFAULT FaultInformationForDTC.DaytimeRunningLight.LmmFault /* DRL 0xA:MLC LED error */ #define DRL_VOLDEFAULT FaultInformationForDTC.DaytimeRunningLight.VoltageDebounceFault /* DRL 0x7:Voltage out of tolerance*/ #define DRL_MLCFAULT FaultInformationForDTC.DaytimeRunningLight.LmmCommunication /* DRL 0xB:MLC Communication error */ #define DRL_RCODFAULT FaultInformationForDTC.DaytimeRunningLight.RCodFault /* DRL 0x8: Binning error */ #define DRL_NTCFAULT FaultInformationForDTC.DaytimeRunningLight.NtcFault /* DRL 0x9: NTC error */ /*POS*/ #define POS_OPENLOAD FaultInformationForDTC.PositionLight.OpenLoad /* POS 0x1:OpenLoad */ #define POS_SHORTTOGND FaultInformationForDTC.PositionLight.ShortToGnd /* POS 0x2:ShortCircuit GND */ #define POS_SHORTTOUBAT FaultInformationForDTC.PositionLight.ShortToUbat /* POS 0x3:ShortCircuit BAT */ #define POS_OVERCURRENT FaultInformationForDTC.PositionLight.Overcurrent /* POS 0x5:Over current */ #define POS_THERSHUTDOWN FaultInformationForDTC.PositionLight.OverThermalShutDown /* POS 0x6:Thermal shutdown */ #define POS_BOOSTERFAULT FaultInformationForDTC.PositionLight.BoosterFault /* POS 0x4:LED driver error */ #define POS_LMMFAULT FaultInformationForDTC.PositionLight.LmmFault /* POS 0xA:MLC LED error */ #define POS_VOLDEFAULT FaultInformationForDTC.PositionLight.VoltageDebounceFault/*POS 0x7:Voltage out of tolerance*/ #define POS_MLCFAULT FaultInformationForDTC.PositionLight.LmmCommunication /* POS 0xB:MLC Communication error*/ #define POS_RCODFAULT FaultInformationForDTC.PositionLight.RCodFault /* POS 0x8: Binning error */ #define POS_NTCFAULT FaultInformationForDTC.PositionLight.NtcFault /* POS 0x9: NTC error */ /*CL*/ #define CL_OPENLOAD FaultInformationForDTC.CorneringLight.OpenLoad /* CL 0x1: OpenLoad */ #define CL_SHORTTOGND FaultInformationForDTC.CorneringLight.ShortToGnd /* CL 0x2: ShortCircuit GND */ #define CL_SHORTTOUBAT FaultInformationForDTC.CorneringLight.ShortToUbat /* CL 0x3: ShortCircuit BAT */ #define CL_OVERCURRENT FaultInformationForDTC.CorneringLight.Overcurrent /* CL 0x5: Over current */ #define CL_THERSHUTDOWN FaultInformationForDTC.CorneringLight.OverThermalShutDown /* CL 0x6: Thermal shutdown */ #define CL_BOOSTERFAULT FaultInformationForDTC.CorneringLight.BoosterFault /* CL 0x4: LED driver error */ #define CL_LMMFAULT FaultInformationForDTC.CorneringLight.LmmFault /* CL 0xA: MLC LED error */ #define CL_VOLDEFAULT FaultInformationForDTC.CorneringLight.VoltageDebounceFault/* CL 0x7: Voltage out of tolerance*/ #define CL_MLCFAULT FaultInformationForDTC.CorneringLight.LmmCommunication /* CL 0xB: MLC Communication error */ #define CL_RCODFAULT FaultInformationForDTC.CorneringLight.RCodFault /* CL 0x8: Binning error */ #define CL_NTCFAULT FaultInformationForDTC.CorneringLight.NtcFault /* CL 0x9: NTC error */ /*TI*/ #define TI_OPENLOAD FaultInformationForDTC.TurnIndicator.OpenLoad /* TI 0x1: OpenLoad */ #define TI_SHORTTOGND FaultInformationForDTC.TurnIndicator.ShortToGnd /* TI 0x2: ShortCircuit GND */ #define TI_SHORTTOUBAT FaultInformationForDTC.TurnIndicator.ShortToUbat /* TI 0x3: ShortCircuit BAT */ #define TI_OVERCURRENT FaultInformationForDTC.TurnIndicator.Overcurrent /* TI 0x5: Over current */ #define TI_THERSHUTDOWN FaultInformationForDTC.TurnIndicator.OverThermalShutDown /* TI 0x6: Thermal shutdown */ #define TI_BOOSTERFAULT FaultInformationForDTC.TurnIndicator.BoosterFault /* TI 0x4: LED driver error */ #define TI_LMMFAULT FaultInformationForDTC.TurnIndicator.LmmFault /* TI 0xA: MLC LED error */ #define TI_VOLDEFAULT FaultInformationForDTC.TurnIndicator.VoltageDebounceFault /* TI 0x7: Voltage out of tolerance*/ #define TI_MLCFAULT FaultInformationForDTC.TurnIndicator.LmmCommunication /* TI 0xB: MLC Communication error */ #define TI_RCODFAULT FaultInformationForDTC.TurnIndicator.RCodFault /* TI 0x8: Binning error */ #define TI_NTCFAULT FaultInformationForDTC.TurnIndicator.NtcFault /* TI 0x9: NTC error */ /*SIG*/ #define SIG_OPENLOAD FaultInformationForDTC.SignalLight.OpenLoad /* SIG 0x1: OpenLoad */ #define SIG_SHORTTOGND FaultInformationForDTC.SignalLight.ShortToGnd /* SIG 0x2: ShortCircuit GND */ #define SIG_SHORTTOUBAT FaultInformationForDTC.SignalLight.ShortToUbat /* SIG 0x3: ShortCircuit BAT */ #define SIG_OVERCURRENT FaultInformationForDTC.SignalLight.Overcurrent /* SIG 0x5: Over current */ #define SIG_THERSHUTDOWN FaultInformationForDTC.SignalLight.OverThermalShutDown /* SIG 0x6: Thermal shutdown */ #define SIG_BOOSTERFAULT FaultInformationForDTC.SignalLight.BoosterFault /* SIG 0x4: LED driver error */ #define SIG_LMMFAULT FaultInformationForDTC.SignalLight.LmmFault /* SIG 0xA: MLC LED error */ #define SIG_VOLDEFAULT FaultInformationForDTC.SignalLight.VoltageDebounceFault /* SIG 0x7: Voltage out of tolerance*/ #define SIG_MLCFAULT FaultInformationForDTC.SignalLight.LmmCommunication /* SIG 0xB: MLC Communication error */ #define SIG_RCODFAULT FaultInformationForDTC.SignalLight.RCodFault /* SIG 0x8: Binning error */ #define SIG_NTCFAULT FaultInformationForDTC.SignalLight.NtcFault /* SIG 0x9: NTC error */ /*----------------------------DTC-end ------------------------------------------------------------------------------*/ //#define BUSOFF_START (uint8)1 //#define BUSOFF_STOP (uint8)0 #define CAN_DELAY_DEBOUNCE_MAX_TIMES 32U // 10ms per cycle, total 200ms uint8 SysMon_ucLightCtrlCmdTimeOutCntr; uint8 SysMon_ucVedCmdTimeOutCntr; uint8 Vccx3ShortToGNDDebonceTimer = 0U; uint8 Vccx3ShortToVBATDebonceTimer = 0U; uint8 CANCCommunicationStatus = 0U; uint8 DetectIGState = 1U; //Off uint8 DetectIGStateLastVaue = 1U; //Off uint8 LBSafetyCheckCnt = 0U; uint8 TISafetyCheckCnt = 0U; uint8 PosSafetyCheckCnt = 0U; uint8 CanDelayDebounceCheckCnt = 0; uint8 TIOffBuckChannel[3] = { 0,3, 6 }; uint8 PosOnBuckChannel[3] = { 9,10,11}; boolean VccX3ShortToGND = FALSE; boolean VccX3ShortToVBAT = FALSE; boolean LBSafetyCheckFlag = FALSE; boolean TISafetyCheckFlag = FALSE; boolean PosSafetyCheckFlag = FALSE; boolean SysMon_boLightCtrlError = FALSE; tisPositionLightFct LastValueCanfailSysMonPositionLightFctReq; tisTurnIndFct LastValueCanfailSysMonTurnIndFctReq; tisLowBeamFct LastValueCanfailSysMonLowBeamFctReq; tisAnimationEnable SysMonCeremonyCammand_Enable; tisVehicleInfoState SysMonVehicleSts; tisAFSCommandState SysMonAfsSts; tisMatrixHBCommandState SysMonHBmatrixSts; extern FunctionValidStatus FusaSignalValidStatus; uint8 SysMon_ucUnknownMountingLeft; uint8 SysMon_ucUnknownMountingRight; //extern uint8 Cdd_GblBusOffIndication; //============================================================================= // Start definitions of static or uninitialized variables of type of type structures, unions, or arrays //============================================================================= #define ctaaSysMon_START_SEC_VAR_NO_INIT_UNSPECIFIED #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. tisMsgTimeoutErr SysMon_MsgTimeoutErr; tisMsgCrcSqcErr SysMon_MsgCrcSqcErr; /*type structures*/ /*----------------------------DTC-start------------------------*/ LedFunction_Type FaultInformationForDTC; /* DTC Fault*/ //STATIC_AL Nm_ModeType ucSysMon_GetNMMode; //STATIC_AL Nm_StateType ucSysMon_GetNMState; //Read Port Data Elements tisLowBeamFctSts SysMon_DTC_LowBeamFctSts; tisHighBeamFctSts SysMon_DTC_HighBeamFctSts; tisTurnIndFctSts SysMon_DTC_TurnIndFctSts; tisDayTimeRunningLightFctSts SysMon_DTC_DayTimeRunningLightFctSts; tisCornerLightFctSts SysMon_DTC_CornerLightFctSts; tisPositionLightFctSts SysMon_DTC_PositionLightFctSts; /*----------------------------DTC-end -----------------------*/ // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_NO_INIT_UNSPECIFIED #include "ctaaSysMon_MemMap.h" //============================================================================= // End definitions of static or uninitialized variables of type of type structures, unions, or arrays //============================================================================= //============================================================================= // Start definitions of uninitialized 8 bit variables //============================================================================= #define ctaaSysMon_START_SEC_VAR_NO_INIT_8 #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. STATIC_AL uint8 SysMon_IoStatusFault0_ucErrInternalCom; STATIC_AL uint8 SysMon_ucErrorBitMaskBuckChannel; STATIC_AL tiu8Crc0 SysMon_ucCrc0; STATIC_AL SysMon_EnumSignalState SysMon_BlinkerState; //Indicates if the blinker shall be turned off due signal problems (timeout, CRC, Alive Counter, failures) STATIC_AL uint8 SysMon_eErr1CntLed, SysMon_eErr2CntBoost, SysMon_eErr3CntSwitch, SysMon_eErr4CntMlc; STATIC_AL tisPositionLightFct CanfailSysMonPositionLightFctReq; STATIC_AL tisTurnIndFct CanfailSysMonTurnIndFctReq; STATIC_AL tisLowBeamFct CanfailSysMonLowBeamFctReq; STATIC_AL tisHighBeamFct CanfailSysMonHighBeamFctReq; #ifndef E2E_Remove uint8 SysMon_E2EError = 0U; #endif /*type static 8 bit variables */ /*----------------------------DTC-start----------------------------------------------*/ uint8 ucErrorIndication; /* Temp No interface*//* Need check again*/ STATIC_AL uint8 ucErrorUartCan; /* Temp No interface*//* Need check again*/ STATIC_AL uint8 ucECUInternalErrorSts; STATIC_AL uint8 ucSysMon_EftCrcStatus; STATIC_AL uint8 ucCodMCodingDataStatus; /* Temp No interface*//* Need check again*/ STATIC_AL uint8 ucSysMon_Enable_Cond_flag1; /* Precondition E0 */ STATIC_AL uint8 ucSysMon_Enable_Cond_flag2; /* Precondition E1 */ STATIC_AL uint8 ucSysMon_Enable_WakeUp; /* weather WAKEUP */ STATIC_AL uint16 ucSysMon_Enable_WakeUp_Counter;/* WAKEUP counter */ STATIC_AL uint8 ucDTC_oldSta_LB_SIG; /* B165296 LB+SIG error */ STATIC_AL uint8 ucDTC_oldSta_HB; /* B165396 HB error */ STATIC_AL uint8 ucDTC_oldSta_DRL_POS; /* B165496 DRL&POS Error */ STATIC_AL uint8 ucDTC_oldSta_CL; /* B165596 CL Error */ STATIC_AL uint8 ucDTC_oldSta_TI; /* B165696 TI Error */ STATIC_AL uint8 ucDTC_oldSta_ECU_internal;/* B165096 ECU internal errors */ STATIC_AL uint8 ucDTC_oldSta_ECU_board; /* B165196 ECU board errors */ STATIC_AL uint8 ucDTC_oldSta_CAN_Message; /* U240688 CAN Message defect */ STATIC_AL uint8 ucDTC_oldSta_Uart_CAN; /* U240788 Uart CAN error */ STATIC_AL uint8 ucDTC_oldSta_Step; /* B165796 Step error */ STATIC_AL uint8 ucDTC_oldSta_FAN; /* B165896 FAN error */ STATIC_AL uint8 ucDTC_newSta_LB_SIG; /* B165296 LB+SIG error */ STATIC_AL uint8 ucDTC_newSta_HB; /* B165396 HB error */ STATIC_AL uint8 ucDTC_newSta_DRL_POS; /* B165496 DRL&POS Error */ STATIC_AL uint8 ucDTC_newSta_CL; /* B165596 CL Error */ STATIC_AL uint8 ucDTC_newSta_TI; /* B165696 TI Error */ STATIC_AL uint8 ucDTC_newSta_ECU_internal;/* B165096 ECU internal errors */ STATIC_AL uint8 ucDTC_newSta_ECU_board; /* B165196 ECU board errors */ STATIC_AL uint8 ucDTC_newSta_CAN_Message; /* U240688 CAN Message defect */ STATIC_AL uint8 ucDTC_newSta_Uart_CAN; /* U240788 Uart CAN error */ STATIC_AL uint8 ucDTC_newSta_Step; /* B165796 Step error */ STATIC_AL uint8 ucDTC_newSta_FAN; /* B165896 FAN error */ /*Snapshot data variables*/ STATIC_AL uint8 ucDTC_Sta_CAN_MessageErr; STATIC_AL uint8 ucDTC_Sta_Uart_CANErr; STATIC_AL uint8 ucDTC_Sta_StepErr; STATIC_AL uint8 ucDTC_Sta_FANErr; /*----------------------------DTC-end -------------------------------*/ STATIC_AL uint8 errercount = 0; // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_NO_INIT_8 #include "ctaaSysMon_MemMap.h" #define ctaaSysMon_START_SEC_VAR_INIT_BOOLEAN #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. boolean SysMon_bLBDelayStart = FALSE; // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_INIT_BOOLEAN #include "ctaaSysMon_MemMap.h" //============================================================================= // End definitions of uninitialized 8 bit variables //============================================================================= //============================================================================= // Start definitions of static or initialized 8 bit variables //============================================================================= #define ctaaSysMon_START_SEC_VAR_INIT_8 #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. boolean IsLightSourceErrorFree = TRUE; STATIC_AL boolean SysMon_boInitialized = FALSE; STATIC_AL boolean SysMon_boBusOff = FALSE; //-- ppComCanStatusFault0, tisCanStatusFault, STATIC_AL boolean SysMon_boFltBusOff = FALSE; STATIC_AL uint8 SysMon_ucErrInternalCom = 0U; STATIC_AL uint8 SysMon_ucVariant = SYSMON_COD_VARIANT_UNKNOWN; STATIC_AL uint8 SysMon_ucLbTimerDelay = SYSMON_TURN_ON_DELAY; STATIC_AL tieDataStatus SysMon_CodingDataStatus = 0U; STATIC_AL SysMon_EnumEcuMountingSide SysMon_eMountingSide = eRightMoutningSide; //-- SysMon only ever knows left or right STATIC_AL uint8 FuSaErrCntr = SYSMON_FUSAERROR_COUNTER; STATIC_AL uint8 SysMon_ucTransmitErrCounter = SYSMON_TRANSMITERROR_COUNTER; STATIC_AL boolean SysMon_boIsTxError = FALSE; tisMountSideUnknow SysMon_PeerMountSameSide = {0U}; // 0 means no err, receive peer state info // 1 means err, can't receive peer info STATIC_AL tisLightCtrlCmdState SysMon_LightCtrlCmdError = {0U}; // 0 means no can msg err // 1 means there are can msg err, releated to 'SysMon_boLightCtrlError' #ifndef E2E_Remove STATIC_AL uint8 SysMon_MaxRepeatedCounter1 = 0u; STATIC_AL uint8 SysMon_MaxRepeatedCounter2 = 0u; STATIC_AL uint8 SysMon_MaxRepeatedCounter3 = 0u; STATIC_AL uint8 SysMon_MaxRepeatedCounter4 = 0u; #endif // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_INIT_8 #include "ctaaSysMon_MemMap.h" //============================================================================= // End definitions of static or initialized 8 bit variables //============================================================================= //STATIC_AL tisCddBoostStatus SysMon_BoosterErr; // -------------- Start variable definitions. #define ctaaSysMon_START_SEC_VAR_NO_INIT_16 #include "ctaaSysMon_MemMap.h" STATIC_AL uint16 usIsVBoostUndervoltage; /* Temp No interface*//* Need check again*/ STATIC_AL uint16 usIsVBoostOvervoltage; /* Temp No interface*//* Need check again*/ // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_NO_INIT_16 #include "ctaaSysMon_MemMap.h" //============================================================================= // start definitions of static or initialized 32 bit variables //============================================================================= #define ctaaSysMon_START_SEC_VAR_INIT_32 #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. STATIC_AL uint32 counter = 0U; //-- counter scheduler STATIC_AL uint32 SysMon_WaitCntUntilDtcAllowed = SYSMON_WAIT_CNT_UNTIL_DTC; //-- does count to zero triggered by cyclic. If zero then DTCs are allowed. STATIC_AL uint32 aulLedVoltageCurr[NO_OF_LED_DRV_CHANNEL] = {0}; STATIC_AL uint32 aulLedVoltagePrev = 0; // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_INIT_32 #include "ctaaSysMon_MemMap.h" //============================================================================= // end definitions of static or initialized 32 bit variables //============================================================================= #define E2E_Remove //============================================================================= // Start definitions of uninitialized 32 bit variables //============================================================================= #define ctaaSysMon_START_SEC_VAR_NO_INIT_32 #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. STATIC_AL tiu32Voltage_mV SysMon_Voltage_Mean; STATIC_AL tiu32Voltage_mV SysMon_Voltage_Min; STATIC_AL tiu32Voltage_mV SysMon_KL15VoltageSts; STATIC_AL tiu32Voltage_mV SysMon_VLedOfLastErrorDetection; STATIC_AL uint32 aumaxBoostVolt; /*type static 32 bit variables */ /*----------------------------DTC-start---------------------------------------------------------------*/ /*Variable definition*/ /* EC 4: System Voltage way: It's just a temporary way to deal with a situstion*/ //STATIC_AL uint32 SysMon_IoHwAbUserVCCValue; /*EC 4: System Voltage *//* Need check again*/ //STATIC_AL uint8 SysMon_IoHwAbUserVCCSts; /* B165196 ECU board errors*//* Need check again*/ /* 0x7: No VCC Short to Gnd */ /* 0x8: No VCC Short to Battery */ /* 0x9: No VCC open load */ /*----------------------------DTC-end ---------------------------------------------------------------*/ // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_NO_INIT_32 #include "ctaaSysMon_MemMap.h" //============================================================================= // End definitions of uninitialized 32 bit variables //===================================================================== //============================================================================= // Start definitions of status or initialzied variables of type of type structures, unions, or arrays //============================================================================= #define ctaaSysMon_START_SEC_VAR_NO_INIT_UNSPECIFIED #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. STATIC_AL tisLsTarget_ASIL SysMon_LsTarget_ASIL; STATIC_AL tisLsTarget_ASIL SysMon_LsTarget_ASIL_NT; STATIC_AL tisLsTarget SysMon_aLsTarget[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; STATIC_AL tisLsTarget_percArr SysMon_aStatTargetDerated; STATIC_AL tisSpiStatusFault_ASIL SysMon_SpiStatusFault_ASIL; //Read Port Data Elements STATIC_AL tisStatusSpinningFront SysMon_StatusSpinningFront; STATIC_AL tisLsTarget1 SysMon_LsTarget[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; STATIC_AL tieTLsRedLevelArr SysMon_TLsRedLevel; STATIC_AL tisLsTarget_percArr SysMon_aStatTargetDerated; tisCddLedStatus_ASIL SysMon_CddLedStatus_ASIL; STATIC_AL tisCddBoostStatus SysMon_CddBoostStatus; //STATIC_AL tisNetworkMngmntSts SysMon_NetworkMngmntSts; tisSysVoltStatus SysMon_SysVoltStatus; STATIC_AL tisLedBuckDriverSettings SysMon_LedBuckDriverSettings; //For Safety path change STATIC_AL tisAllSwitchTarget SysMon_AllSwitchTarget; STATIC_AL tisAllMlcTargets SysMon_AllMlcTargets; //STATIC_AL tiu16Percent_1_328_2DArr SysMon_TargetsMlcData; STATIC_AL tiu16Percent_1_328Arr16 SysMon_TargetsMlcData[8]; STATIC_AL tisAllSwitchStatus SysMon_AllSwitchStatus; STATIC_AL tisAllMlcSwitchAndAllSensorStatus SysMon_AllMlcSwitchAndAllSensorStatus; STATIC_AL tieSafetyCodingErrorReason SysMon_SafetyCodingErrorReason; uint8 SysMon_LedOnOffSts[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; boolean SysMon_LedErrFreeSts[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; boolean SysMon_LedErrFailsafeSts[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; STATIC_AL tisStepperTgt SysMonStepperTgt; tisHssStatusErrorArr SysMon_HssStatusError; uint32 ulReadAdcMeanVCCX_3 = 5000U; tisBinningResistor RSensBinning[20]; tiu16BinNtcErrorBitMaskIoChannel SysMon_RSensErrorBitMaskNTC; uint8 LastChannelStatus[12] = { 1,1,1,1,1,1,1,1,1,1,1,1 }; //mountingside error tSysMonCounterMonitor SysMon_ExepcetedMountSideRight; tSysMonCounterMonitor SysMon_ExepcetedMountSideLeft; //massage timeout tSysMonCounterMonitor SysMon_VehicleInfoCommunication_Error; //monitor VehicleInfo massage timeout tSysMonCounterMonitor SysMon_AFSCommandCommunication_Error; //monitor AFSCommand massage timeout tSysMonCounterMonitor SysMon_MatrixHBCommandCommunication_Error; //monitor MatrixHBCommand massage timeout //HSS error tSysMonCounterMonitor Ssymon_HSS_FAN_Error; //monitor FAN error tSysMonCounterMonitor Ssymon_HSS_ISD_Error; //monitor ISD error //NTC&Binning error //stepper error tSysMonCounterMonitor Ssymon_Stepper_Error; //monitor Stepper error //Buck SPI error tSysMonCounterMonitor Ssymon_Buck_SPI_Error; //monitor Buck SPI error /*type static arrays struct*/ /*----------------------------DTC-start-----------------------*/ STATIC_AL tisIgnitioinSts SysMonIgnitionSts;/*Need check again*/ STATIC_AL tieMountingSideRaw ulMountSideRaw; /*Snapshot data arrays*/ STATIC_AL uint8 ucDTC_Sta_LB_SIGErr[2]; STATIC_AL uint8 ucDTC_Sta_HBErr[2]; STATIC_AL uint8 ucDTC_Sta_DRL_POSErr[2]; STATIC_AL uint8 ucDTC_Sta_CLErr[2]; STATIC_AL uint8 ucDTC_Sta_TIErr[2]; STATIC_AL uint8 ucDTC_Sta_ECU_internalErr[2]; STATIC_AL uint8 ucDTC_Sta_ECU_boardErr[2]; /*----------------------------DTC-end --------------------*/ uint8 SysMon_u8TurnIndErrerSts; // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_NO_INIT_UNSPECIFIED #include "ctaaSysMon_MemMap.h" //============================================================================= // End definitions of status or initialzied variables of type of type structures, unions, or arrays //============================================================================= //============================================================================= // Start definitions of static or initialized variables of type of type structures, unions, or arrays //============================================================================= #define ctaaSysMon_START_SEC_VAR_INIT_UNSPECIFIED #include "ctaaSysMon_MemMap.h" // -------------- Start variable definitions. //STATIC_AL boolean SysMon_boRightHandEcu = TRUE; //-- SysMon only ever knows left or right //STATIC_AL tisLsSafetyStatusErrorArr SysMon_LsSafetyStatusError = {0}; tisLsSafetyStatusErrorArr SysMon_LsSafetyStatusError = {0}; tisLsSafetyStatusErrorArr SysMon_LedErrorTypes = {0}; STATIC_AL tisLsTargetEnable_ASIL SysMon_LsTargetEnable_ASIL = { .aboLsEnable = {TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE}, .ucCrc = 0u, }; // -------------- Stop variable definitions. #define ctaaSysMon_STOP_SEC_VAR_INIT_UNSPECIFIED #include "ctaaSysMon_MemMap.h" //============================================================================= // End definitions of static or initialized variables of type of type structures, unions, or arrays //============================================================================= //============================================================================= // Start declaration or definitions of functions //============================================================================= #define ctaaSysMon_START_SEC_CODE #include "ctaaSysMon_MemMap.h" // -------------- Start function declarations or definitions. //-- SysMon private functions --- STATIC_AL void SysMon_PeerSideJudge_Init(void); STATIC_AL void SysMon_Init(void); //STATIC_AL void SysMon_InitPhase2(void); STATIC_AL void SysMon_DeInit(void); STATIC_AL void SysMon_Cycle10ms(void); STATIC_AL void SysMon_InitEcuMountingSide(void); //STATIC_AL void SysMon_InitPDUhandlers(void); STATIC_AL void SysMon_CheckMinPWMandCurrent(uint32 ChannelIdx); STATIC_AL void SysMon_Cycle10ms_HandleLowBeam(void); STATIC_AL void SysMon_WriteRTE(void); STATIC_AL void SysMon_CheckPeerSideEcuStatesExist(void); STATIC_AL void SysMon_CheckAnyCanError(void); STATIC_AL void SysMon_ReadRTE(void); STATIC_AL void SysMon_GetBoostVoltage(void); STATIC_AL boolean SysMon_IsEcuNotCoded(void); #ifndef E2E_Remove STATIC_AL void SysMon_E2EWrapperReadRTE(void); STATIC_AL void SysMon_E2EWrapperWriteRTE(void); #endif STATIC_AL void SysMon_LedBuckModeSettings(void); STATIC_AL boolean SysMon_IsLightSourceFailsafeError(uint32 ulLsIdx); STATIC_AL void SysMon_CanFailCtrlLight(void); STATIC_AL void SysMon_CanFailCtrlLB(void); STATIC_AL void SysMon_CanFailCtrlPOS(void); STATIC_AL void SysMon_CanFailCtrlTI(void); STATIC_AL void HW_CANConsistencyjudgment(tSysMonSignal_U8 *LightFunction, HWStatusDebounce HWStatus, uint8 *SafetyCheckCnt, boolean *SafetyCheckFlag); STATIC_AL void SysMon_Init_DTC_Check(void); STATIC_AL void SysMon_DTC_Check(void); STATIC_AL void SysMon_CheckTurnIndErrSts(void); /*functions*/ /*----------------------------DTC-start------------------------------------------------------------*/ /*Function declaration*/ STATIC_AL void SysMon_DTC_InitCtrl(void); STATIC_AL void SysMon_DTC_MainCtrl(void); STATIC_AL void SysMon_DTC_Precond_Judge(void); STATIC_AL void SysMon_DTC_OldState_Ctrl(void); STATIC_AL void SysMon_DTC_NewState_Ctrl(void); STATIC_AL void SysMon_DTC_SetFailure(void); /*----------------------------DTC-end ------------------------------------------------------------*/ STATIC_AL void DoTiErrorStatus(void); STATIC_AL uint8 ucErrorCount = 0; STATIC_AL uint8 TIStatus = 0; STATIC_AL uint8 TICurrentStatus = 0; //-------------------------------------------------------------------------------------------------- /// \brief SysMon's public initialization function /// \param none /// \note /// \return - //-------------------------------------------------------------------------------------------------- void ctaaSysMon_riSysMonInit(void) { #ifndef E2E_Remove (void)E2EPW_WriteInit_ppaseSysMonLsTarget0_sSetting(); (void)E2EPW_ReadInit_ppareCddLedStatus_sStatus(); (void)E2EPW_ReadInit_ppareCddBoostStatus_sBoostSts(); (void)E2EPW_WriteInit_ppaseSysMonSwiTarget_sAllSwitchTarget(); (void)E2EPW_ReadInit_ppareCddSwiStatus_sAllSwitchStatus(); (void)E2EPW_WriteInit_ppaseSysMonMxTarget0_sAllMlcTargets(); (void)E2EPW_ReadInit_ppareCddMlcMxSwitchAndSensorStatus0_sAllMlcSwitchAndAllSensorStatus(); (void)E2EPW_WriteInit_ppaseSysMonLedBuckDriverSettings_sSettings(); #endif SysMon_Init(); } //added by Amie FUNC(void, ctaaSysMon_CODE) roSysMon_CriticalOsError( uint8 fatalError) { } //-------------------------------------------------------------------------------------------------- /// \brief SysMon's public de-initialization function /// \param none /// \note /// \return - //-------------------------------------------------------------------------------------------------- void ctaaSysMon_rdSysMonDeInit(void) { SysMon_DeInit(); } //-------------------------------------------------------------------------------------------------- /// \brief SysMon's public cyclic function /// \param none /// \note /// \return - //-------------------------------------------------------------------------------------------------- void ctaaSysMon_rpSysMon10ms(void) { SysMon_Cycle10ms(); } void ctaaSysMon_rrCan1LightControlCommand(void) { } void ctaaSysMon_rrCan1HLM_3F1(void) { SysMonTX_AnimStatesInfo_L_PrepareForCan(); } FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1HRM_593_Msg ( void ) { /* rrCan1HRM_593_Msg_Start User Code start*/ SysMonTX_AnimStatesInfo_R_PrepareForCan(); /* rrCan1HRM_593_Msg_Start User Code end*/ } FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1HRM_5AE_Msg ( void ) { /* rrCan1HRM_5AE_Msg_Start User Code start*/ SysMonTX_WakeUpAndSleepReason_R_PrepareForCan(); /* rrCan1HRM_5AE_Msg_Start User Code end*/ } FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1HLM_5B5_Msg ( void ) { /* rrCan1HLM_5B5_Msg_Start User Code start*/ SysMonTX_WakeUpAndSleepReason_L_PrepareForCan(); /* rrCan1HLM_5B5_Msg_Start User Code end*/ } void ctaaSysMon_rrCan1RxHLM_L_STATES_Info(void) { } void ctaaSysMon_rrCan1RxNM_ELM(void) { } void ctaaSysMon_rrCan1RxNM_HLM_L(void) { } void ctaaSysMon_rrCan1RxNM_HLM_R(void) { } void ctaaSysMon_rrCan1GW320_ResetReq_Msg_L(void) { SysMon_CAN1CANRx320_L(); } void ctaaSysMon_rrCan1GW320_ResetReq_Msg_R(void) { SysMon_CAN1CANRx320_R(); } void ctaaSysMon_rrCan1Gw187Speed_L(void) { SysMon_CAN1CANRx187_L(); } void ctaaSysMon_rrCan1Gw187Speed_R(void) { SysMon_CAN1CANRx187_R(); } void ctaaSysMon_rrCan1BDC28BPowerStatusFeedback_L(void) { SysMon_CAN1CANRx28B_L(); } void ctaaSysMon_rrCan1BDC28BPowerStatusFeedback_R(void) { SysMon_CAN1CANRx28B_R(); } void roSysMon_SetB2CanBusOff(void) { SysMon_SetB2CanBusOff(); } void roSysMon_ResetB2CanBusOff(void) { SysMon_ResetB2CanBusOff(); } FUNC(Std_ReturnType, ctaaSysMon_CODE) ctaaSysMon_roSysMon_GetSafetyCodingErrorReason( P2VAR(tieSafetyCodingErrorReason, AUTOMATIC, RTE_APPL_DATA) eCodingErrorReason) { SysMon_Rte_Read_CodMCodingDataStatus0_sVal(&SysMon_CodingDataStatus); //Coding Data Statu if(SysMon_CodingDataStatus == TRUE) { if (SysMon_IsFuSaCodingValid() == TRUE) { SysMon_SafetyCodingErrorReason = 0xFE; //Valid CRC } else { SysMon_SafetyCodingErrorReason = 0x04U;// FuSa CRC Error } } else { SysMon_SafetyCodingErrorReason = 0x04U; } *eCodingErrorReason = SysMon_SafetyCodingErrorReason; return RTE_E_OK; } void ctaaSysMon_rrCan1LowBeamStatusTransmissionError(void) { } void rrCan1LowBeamStatusTransmissionError(void) { Std_ReturnType eRet = RTE_E_OK; if(SysMon_eMountingSide == eLeftMoutningSide) { eRet = SysMon_Rte_Feedback_sLhsStatesInfo(); } else { eRet = SysMon_Rte_Feedback_sRhsStatesInfo(); } if (eRet == RTE_E_INVALID || eRet == RTE_E_COM_STOPPED || eRet == RTE_E_TIMEOUT) { //Decrement debounce counter if(SysMon_ucTransmitErrCounter > 0u) { SysMon_ucTransmitErrCounter--; if(SysMon_ucTransmitErrCounter == 0u) { //Consider board fault TRUE SysMon_boIsTxError = TRUE; } else { //Do Nothing } } else { //Do Nothing } } else if (eRet == RTE_E_TRANSMIT_ACK) { //if (Cdd_GblBusOffIndication == BUSOFF_START) //{ // (void)Rte_Call_ppaclSysMonCan1StatusFault0_SysMon_ResetB2CanBusOff(); // Cdd_GblBusOffIndication = BUSOFF_STOP; //} if (SysMon_IsCanBusOff() == 1U) { //(void)Rte_Call_ppaclSwc_ServicesCan1StatusFault0_SysMon_ResetB2CanBusOff(); //(void)Rte_Call_ppaclSysMonCan1StatusFault0_SysMon_ResetB2CanBusOff(); } //Increment debounce counter if(SysMon_ucTransmitErrCounter < SYSMON_TRANSMITERROR_COUNTER) { SysMon_ucTransmitErrCounter++; if(SysMon_ucTransmitErrCounter == SYSMON_TRANSMITERROR_COUNTER) { // Consider board fault FALSE SysMon_boIsTxError = FALSE; } else { //Do Nothing } } else { //Do Nothing } } else { //Do Nothing } } STATIC_AL void SysMon_PeerSideJudge_Init(void) { SysMonRx_initCounterMonitor(&SysMon_ExepcetedMountSideRight, PEER_MOUNTING_SIDE_DEBOUNCE_TIME, PEER_MOUNTING_SIDE_DEBOUNCE_TIME); SysMonRx_initCounterMonitor(&SysMon_ExepcetedMountSideLeft, PEER_MOUNTING_SIDE_DEBOUNCE_TIME, PEER_MOUNTING_SIDE_DEBOUNCE_TIME); } //-------------------------------------------------------------------------------------------------- /// \brief SysMon initialization which is called whenever riSysMonInit is invoked. /// \param none /// \return - //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_Init(void) { SysMon_boBusOff = FALSE; SysMon_boFltBusOff = FALSE; SysMon_InitEcuMountingSide(); SysMon_PeerSideJudge_Init(); SysMon_Init_DTC_Check(); SysMon_WaitCntUntilDtcAllowed = SYSMON_WAIT_CNT_UNTIL_DTC; //-- forbid DTC in the first 100 msec, counter triggered by cyclic //SysMon_LedCtrl_Init((CONST_AL tisLsTarget*) &SysMon_aLsTarget[0u], &SysMon_LsTarget_ASIL); SysMon_LedDiag_Init((CONST_AL tisLsTarget*) &SysMon_aLsTarget[0u], (CONST_AL tisCddLedStatus_ASIL*) &SysMon_CddLedStatus_ASIL, (tisLsSafetyStatusError*) &SysMon_LsSafetyStatusError[0u], &SysMon_LsTarget_ASIL); // SysMon_InitPDUhandlers(); SysMon_boInitialized = TRUE; SysMon_Rte_Read_CodMCodingDataStatus0_sVal(&SysMon_CodingDataStatus); //Coding Data Status if(SysMon_CodingDataStatus == TRUE) { switch (applicationCodingData.System.VariantSelection.HeadlightsVariant) { case HEADLIGHTS_VARIANT_MID: { SysMon_ucVariant = SYSMON_COD_VARIANT_MID; } break; case HEADLIGHTS_VARIANT_LOW_1: { SysMon_ucVariant = SYSMON_COD_VARIANT_BASE_OPT1; } break; case HEADLIGHTS_VARIANT_LOW_2: { SysMon_ucVariant = SYSMON_COD_VARIANT_BASE; } break; case HEADLIGHTS_VARIANT_HIGH: {SysMon_ucVariant = SYSMON_COD_VARIANT_HIGH;} break; default: {SysMon_ucVariant = SYSMON_COD_VARIANT_UNKNOWN;} break; } } else { SysMon_ucVariant = SYSMON_COD_VARIANT_UNKNOWN; } //Read Coding data status #if !defined(UNIT_TEST) // Init blinker //SysMon_Blinker_Init(); #endif SysMon_ucLightCtrlCmdTimeOutCntr = 0U; SysMon_GetBoostVoltage(); SysMon_DTC_InitCtrl(); // HWStatusInit(); SysMon_WriteRTE(); SysMon_LightCtrlCmd_Init(); SysMon_BlinkerState = eSysMonSigState_Valid; } //-------------------------------------------------------------------------------------------------- /// \brief SysMon_ReadFusi_Min_PWM_Current_RTE read Fusi_Min_PWM_LMXX_ASIL information from RTE Ports //-------------------------------------------------------------------------------------------------- void SysMon_ReadFusi_Min_PWM_Current_RTE(void) { SysMon_LsTarget_ASIL.asLsVal[3].unCurrent = 0U; SysMon_aLsTarget[3].unCurrent = 0U; SysMon_LsTarget_ASIL.asLsVal[3].unDutyCycle = 0U; SysMon_aLsTarget[3].unDutyCycle = 0U; } //-------------------------------------------------------------------------------------------------- /// Write peer ecu state result to RTE Ports for SysMon to CtrlStp //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_CheckPeerSideEcuStatesExist(void) { if (SysMon_eMountingSide == eRightMoutningSide) { if (SysMon_ucUnknownMountingLeft == 0U) { SysMonRx_HandlePduQualityCounterMonitorSuccess(&SysMon_ExepcetedMountSideLeft); } else { SysMonRx_HandlePduQualityCounterMonitorFail(&SysMon_ExepcetedMountSideLeft); } if (SysMon_ExepcetedMountSideLeft.isDebounced == TRUE) { SysMon_PeerMountSameSide.uMountSideUnknow = 1U; } else { SysMon_PeerMountSameSide.uMountSideUnknow = 0U; } } else if (SysMon_eMountingSide == eLeftMoutningSide) { if (SysMon_ucUnknownMountingRight == 0U) { SysMonRx_HandlePduQualityCounterMonitorSuccess(&SysMon_ExepcetedMountSideRight); } else { SysMonRx_HandlePduQualityCounterMonitorFail(&SysMon_ExepcetedMountSideRight); } if (SysMon_ExepcetedMountSideRight.isDebounced == TRUE) { SysMon_PeerMountSameSide.uMountSideUnknow = 1U; } else { SysMon_PeerMountSameSide.uMountSideUnknow = 0U; } } else { //mountsideunknow SysMon_PeerMountSameSide.uMountSideUnknow = 1U; } } //-------------------------------------------------------------------------------------------------- /// Write ligth ctrl cmd state to RTE Ports for SysMon to CtrlStp //----------------------------------------------------------------------------------------------- STATIC_AL void SysMon_CheckAnyCanError(void) { if (CanDelayDebounceCheckCnt >= CAN_DELAY_DEBOUNCE_MAX_TIMES) { if (SysMon_boLightCtrlError == TRUE) { SysMon_LightCtrlCmdError.LightCtrlCmdState = 1U; } else { SysMon_LightCtrlCmdError.LightCtrlCmdState = 0U; } } else { // do nothing, after init 200ms internal, can may not be ok, need no check } } //-------------------------------------------------------------------------------------------------- /// Write information to RTE Ports for SysMon //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_WriteRTE(void) { uint8 ucCrc = 0u; uint8 ucChnlIndx = 0; boolean boVccX3ShortToGND = FALSE; boolean boVccX3ShortToVBAT = FALSE; tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; //Calculate Crc 8 bits 0x2F (x8 + x5 +x3 + x2 + x +1) to ASIL relevant RTE messages //PRQA S 310 2 // Cast needed ucCrc = Crc_CalculateCRC8H2F((const uint8*)&SysMon_LsTarget_ASIL.asLsVal[0u], sizeof(SysMon_LsTarget_ASIL.asLsVal), 0xFFu, TRUE); //Add calculated Crc to the RTE message SysMon_LsTarget_ASIL.ulCrc = ucCrc; //Calculate Crc 8 bits 0x2F (x8 + x5 +x3 + x2 + x +1) to ASIL relevant RTE messages //PRQA S 310 1 // Cast needed //HONGQI_Comment-- ucCrc = Crc_CalculateCRC8H2F((const uint8*)&SysMon_LsTargetEnable_ASIL.aboLsEnable[0u], sizeof(SysMon_LsTargetEnable_ASIL.aboLsEnable), 0xFFu, TRUE); //Add calculated Crc to the RTE message //SysMon_LsTargetEnable_ASIL.ucCrc = ucCrc; // (void)Bsw_MemCpy(&(SysMon_LsTarget_ASIL.asLsVal), &SysMon_LsTarget, sizeof(SysMon_LsTarget)); //Handle Low Beam state in Failsafe with Min PWM and Current //SysMon_Cycle10ms_HandleLowBeam(); //When a light is requested, it is necessary to check the parameters related to functional safety CheckSafetyParameters(); if(SysMon_ucLbTimerDelay == 0u) { /* HQGIF-1640- LB still on without LB request when IG OFF 70ms timer now properly handled after FUSA Verification */ SysMon_bLBDelayStart = FALSE; SysMon_ucLbTimerDelay = SYSMON_TURN_ON_DELAY; } else { /* FUSA Verification will begin once 70ms timer expires */ if (SysMon_bLBDelayStart == TRUE) { //Start timer of 70 ms SysMon_ucLbTimerDelay--; //SysMon_bLBDelayStart = FALSE; } else { /* Do nothing */ } } SysMon_LsTarget_ASIL.lVBoost[0] = aumaxBoostVolt; //SysMon_LsTarget_ASIL.ucCrc = Crc0; SysMon_LsTarget_ASIL_NT.lVBoost[0] = aumaxBoostVolt; //For sending Led error status to CtrlLed //(void)memset(SysMon_LsSafetyStatusError, 0, sizeof(SysMon_LsSafetyStatusError)); (void)Bsw_MemCpy(SysMon_LsSafetyStatusError, 0, sizeof(SysMon_LsSafetyStatusError)); for( ucChnlIndx = 0 ; ucChnlIndx < SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS; ucChnlIndx++) { /* LED status */ SysMon_LedOnOffSts[ucChnlIndx] = SysMon_CddLedStatus_ASIL.asStatus[ucChnlIndx].eChnSts; switch(SysMon_CddLedStatus_ASIL.asStatus[ucChnlIndx].eChnSts) { case LED_STATUS_OFF: // LED off SysMon_LsSafetyStatusError[ucChnlIndx].eStatOn = eStatusOnOff_STAT_OFF; break; case LED_STATUS_ON: // LED on SysMon_LsSafetyStatusError[ucChnlIndx].eStatOn = eStatusOnOff_STAT_ON; break; case LED_STATUS_UNKNOWN: // LED on SysMon_LsSafetyStatusError[ucChnlIndx].eStatOn = eStatusOnOff_STAT_SNA; break; default: // Do nothing break; } /* LED error */ switch(SysMon_CddLedStatus_ASIL.asStatus[ucChnlIndx].eErr) { case LED_ERR_NO_SUPPORT: // Not supported due to EFT data // Do nothing break; case LED_ERR_RESET: // Still in "reset" state // Do nothing break; case LED_ERR_DISABLED: // Normal operation, no test // Do nothing break; case LED_ERR_DIAG_IDLE: // Normal operation // Do nothing break; case LED_ERR_STATUS_OK: // Normal operation // Do nothing break; case LED_ERR_OPEN_LOAD: // Open load SysMon_LsSafetyStatusError[ucChnlIndx].eErrOpenLoad = 1U; break; case LED_ERR_SHORT_TO_GROUND: // Short to GND SysMon_LsSafetyStatusError[ucChnlIndx].eErrShortToGnd = 1U; break; case LED_ERR_SHORT_TO_UBAT: // Short to supply SysMon_LsSafetyStatusError[ucChnlIndx].eErrShortToSupply = 1U; break; case LED_ERR_UNDERVOLTAGE: // Undervoltage SysMon_LsSafetyStatusError[ucChnlIndx].eErrVLedOutOfTolerance = 1U; break; case LED_ERR_OVERVOLTAGE: // Overvoltage SysMon_LsSafetyStatusError[ucChnlIndx].eErrVLedOutOfTolerance = 1U; break; case LED_ERR_THERMAL: // Thermal shutdown SysMon_LsSafetyStatusError[ucChnlIndx].eErrDrvThermalShutdown = 1U; break; case LED_ERR_OVERCURRENT: // Overcurrent SysMon_LsSafetyStatusError[ucChnlIndx].eErrOvercurrent = 1U; break; case LED_ERR_SPI: // SPI error // Do nothing break; case LED_ERR_CRC: // CRC error SysMon_LsSafetyStatusError[ucChnlIndx].eErrCodCrc = 1U; break; default: // Do nothing break; } #ifdef BOOSTER_ERROR_DEFECT #else if ((IsVBoostLowErrActive == TRUE) || (IsVBoostHighErrActive == TRUE)) { SysMon_LsSafetyStatusError[ucChnlIndx].eErrDrvInternal = 1U; } else { //do nothing } #endif //Update LED error status SysMon_LedErrFreeSts[ucChnlIndx] = SysMon_Leddiag_IsLightSourceErrorFree(ucChnlIndx);// PRQA S 4404 // program architecture and readability SysMon_LedErrFailsafeSts[ucChnlIndx] = SysMon_IsLightSourceFailsafeError(ucChnlIndx); } boVccX3ShortToGND = SysMon_IsVccX3ShortToGND(); boVccX3ShortToVBAT = SysMon_IsVccX3ShortToVBAT(); /*When check VCCX3's ADC find it is error ,SysMon_LsTarget_ASIL's DutyCycle will be set to 0,then CddLed_Adapter will disable the channel by using function "void CddTps92520_SetDutyCycle_1_32768(const uint32 ulChnIdx, const uint16 unDuty)"*/ if ((boVccX3ShortToGND == TRUE) || (boVccX3ShortToVBAT == TRUE)) { //HB SysMon_LsTarget_ASIL.asLsVal[2].unDutyCycle = 0; SysMon_LsTarget_ASIL.asLsVal[4].unDutyCycle = 0; SysMon_LsTarget_ASIL.asLsVal[8].unDutyCycle = 0; //TI SysMon_LsTarget_ASIL.asLsVal[0].unDutyCycle = 0; SysMon_LsTarget_ASIL.asLsVal[3].unDutyCycle = 0; SysMon_LsTarget_ASIL.asLsVal[6].unDutyCycle = 0; //POS & DRL SysMon_LsTarget_ASIL.asLsVal[9].unDutyCycle = 0; SysMon_LsTarget_ASIL.asLsVal[10].unDutyCycle = 0; SysMon_LsTarget_ASIL.asLsVal[11].unDutyCycle = 0; } //Write Led Buck Mode Settings SysMon_LedBuckModeSettings(); SysMon_Rte_Write_SysMonLsTargetEnable0_sSetting(&SysMon_LsTargetEnable_ASIL); SysMon_Rte_Write_SysMonLsStatusError0_asVal(SysMon_LsSafetyStatusError); SysMon_Rte_Write_SysMonLsStatusError0_ucErrInternalCom(SysMon_ucErrInternalCom); SysMon_Rte_Write_LsStatusError1_ulVLedOfLastErrorDetection(SysMon_VLedOfLastErrorDetection); SysMon_Rte_Write_LsStatusError2_ucErrorBitMaskBuckChannel(SysMon_ucErrorBitMaskBuckChannel); (void)Bsw_MemCpy(&SysMon_AllMlcTargets.aunDutyCycle, &SysMon_TargetsMlcData, sizeof(tiu16Percent_1_328_2DArr)); //For Safety path change SysMon_Rte_Write_AllMlcSwitch_StatusRecord((const tisAllMlcSwitchStatus *)&(SysMon_AllMlcSwitchAndAllSensorStatus.sAllMlcSwitchStatus)); SysMon_Rte_Write_SysMonMxTarget0_sAllMlcTargets(&SysMon_AllMlcTargets); SysMon_Rte_Write_AllSwitchStatus((const tisAllSwitchStatus *)&SysMon_AllSwitchStatus); SysMon_Rte_Write_AllMlcSensor_Status((const tisAllMlcSensorStatus *)&(SysMon_AllMlcSwitchAndAllSensorStatus.sAllMlcSensorStatus)); // to check the peer side info SysMon_CheckPeerSideEcuStatesExist(); if (SysMon_PeerMountSameSide.uMountSideUnknow == 1U && CanDelayDebounceCheckCnt >= CAN_DELAY_DEBOUNCE_MAX_TIMES) { SysMon_CanFailCtrlLB(); SysMon_CanFailCtrlPOS(); SysMon_CanFailCtrlTI(); } else { // do nothing } SysMon_Rte_Write_MountingSideUnknown(&SysMon_PeerMountSameSide); // to check any error in light ctrl msg SysMon_CheckAnyCanError(); SysMon_Rte_Write_LightCtroCmdState(&SysMon_LightCtrlCmdError); SysMon_LightCtrlCmd_WriteRTE(); //SysMonTX_AnimStatesInfo_PrepareForCan(); #ifndef E2E_Remove SysMon_E2EWrapperWriteRTE(); #else // (void)Bsw_MemCpy(&SysMon_AllMlcTargets.aunDutyCycle, &SysMon_TargetsMlcData, sizeof(tiu16Percent_1_328_2DArr)); //Add modify 11-11 (void)Rte_Write_ppaseSysMonSwiTarget_sAllSwitchTarget((tisAllSwitchTarget *)&SysMon_AllSwitchTarget); /*add explanation 2022.11.14 */ // SysMon_Rte_Write_SysMonMxTarget0_sAllMlcTargets(&SysMon_AllMlcTargets); #endif // (void)Bsw_MemCpy(&(SysMon_LsTarget_ASIL_NT.asLsVal), &SysMon_LsTarget, sizeof(SysMon_LsTarget)); for (uint8 ucChIdx = 0u; ucChIdx < (uint8)SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS; ucChIdx++) { GetDualCurrentSts(); SysMon_LsTarget_ASIL_NT.asLsVal[ucChIdx].unCurrent = AppM_asAppMLsTargetSetting[ucChIdx].unCurrent1; SysMon_LsTarget_ASIL_NT.asLsVal[ucChIdx].unDutyCycle = AppM_asAppMLsTargetSetting[ucChIdx].unDutyCycle; } if (GetDualCurrentSts() == 1) { SysMon_LsTarget_ASIL_NT.asLsVal[1].unCurrent = AppM_asAppMLsTargetSetting[1].unCurrent2; } DoTiErrorStatus(); Rte_Write_ppaseSysMonLsTarget0_sSetting(&SysMon_LsTarget_ASIL_NT); }// PRQA S 5310, 5316, 5324, 5330 1 // program architecture and readability //-------------------------------------------------------------------------------------------------- /// \brief Read information from RTE Ports //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_ReadRTE(void) { /*tisSpiStatusFault_ASIL SpiStatusFault_ASIL; tisBuckStatusFault_ASIL BuckStatusFault_ASIL; uint8 ucErrInternalCom; uint8 ucCrc;*/ //uint8 ucChnlIndx = 0; //Read LED Status from Fctr and Ls Target from AppM SysMon_Rte_Read_CtrlStpStepperActual0_StatusSpinningFront(&SysMon_StatusSpinningFront); //Stepper Motor status SysMon_Rte_Read_SpiStatusFault0_sStatusFault(&SysMon_SpiStatusFault_ASIL); //Spi Fault Status SysMon_Rte_Read_AppMLsTarget0_asSetting(SysMon_LsTarget) ; // AppM Target value SysMon_Rte_Read_AppMStatusError0_aeStatTLsRedLevel(&SysMon_TLsRedLevel); //AppM error SysMon_Rte_Read_AppMStatusError0_asStatTargetDerated((tisLsTarget_perc*) &SysMon_aStatTargetDerated[0u]); //(void)SysMon_E2EPW_Read_CddLed_Status(&SysMon_CddLedStatus_ASIL);// LED Status //(void)SysMon_E2EPW_Read_CddBoost_Status(&SysMon_CddBoostStatus); //Boost Status SysMon_Rte_Read_IoHwAbUserEcuSupply0_ulActualMean(&SysMon_Voltage_Mean); //ECU Voltage SysMon_Rte_Read_IoHwAbUserEcuSupply0_ulActualMin(&SysMon_Voltage_Min); //ECU Min Voltage SysMon_Rte_Read_IoHwAbUserIoStatusFault0_ucCrc(&SysMon_ucCrc0); SysMon_Rte_Read_IoHwAbUserIoStatusFault0_ucErrInternalCom(&SysMon_ucErrInternalCom); //SysMon_Rte_Read_NetMgmtSts_sNetworkMngmgtSts(&SysMon_NetworkMngmntSts); SysMon_Rte_Read_CodMCodingDataStatus0_sVal(&SysMon_CodingDataStatus); SysMon_Rte_Read_SysVoltStatus_sSysVoltStatus(&SysMon_SysVoltStatus); #ifndef E2E_Remove SysMon_Rte_Read_CddNmMode_Status(&SysMon_EcuNmModes); //Read ECU NM states #else SysMon_EcuNmModes = H5_WAKE_UP_MODE; #endif //For Safety path change SysMon_Rte_Read_CtrlHssSwiTarget(&SysMon_AllSwitchTarget); SysMon_Rte_Read_CtrlPxlMxTarget0_sAllMlcTargets(SysMon_TargetsMlcData); SysMon_Rte_Read_IoHwAbUserHwWakeupSts0_unMeanHwWakeUpVolt(&SysMon_KL15VoltageSts); SysMon_Rte_Read_ppareSigPrepStepperTgtReq_sStepperTgtReq(&SysMonStepperTgt); SysMon_Rte_Read_ppareCtrlHssStatusError0_sVal((tisHssStatusError *)&SysMon_HssStatusError[0u]); /* 0x00 eCddBoost_NoSupport Boosters not supported 0x01 eCddBoost_Reset Booster Reset 0x02 eCddBoost_StatusOk Booster status OK 0x03 eCddBoost_ErrVoltLo Booster supply voltage Low 0x04 eCddBoost_ErrVoltHi Booster supply voltage High 0x05 eCddBoost_ErrThermShutdn Booster error thermal shutdown 0x06 eCddBoost_ErrSpi Booster error SPI communication 0x07 Reserved Reserved*/ /*DTC Read*/ SysMon_Rte_Read_ppareSigPrepIgnitionSts_sIgnitionSts(&SysMonIgnitionSts); /*EC 2: Ignition Status*/ //SysMon_Rte_Read_ppareIoHwAbUserVCC_ulActualMean(&SysMon_IoHwAbUserVCCValue); /*EC 4: System Voltage */ //Nm_GetState(0x00,&ucSysMon_GetNMState,&ucSysMon_GetNMMode);/* Need check again */ /* B165096 Set cond 0x1: Mount side known*/ //SysMon_Rte_Call_IoHwAbUserMountingSide0_IoHwAbUser_GetMountingSideRaw(&ulMountSideRaw); /* B165096 Set cond 0x4: Mount side known*/ SysMon_Rte_Read_ppareCodMCodingDataStatus0_eFUSACodingDataStatus(&ucCodMCodingDataStatus); /* B165096 Set cond 0x2C0x5-0xA*/ SysMon_Rte_Call_ECUInternalError(&ucECUInternalErrorSts);/* Need check again */ SysMon_Rte_Call_CddEftCrcStatus0(&ucSysMon_EftCrcStatus); /* B165196 ECU board errors 0x1,0x2*/ usIsVBoostUndervoltage = SysMon_Rte_Read_IsVBoostUndervoltage(); usIsVBoostOvervoltage = SysMon_Rte_Read_IsVBoostOvervoltage(); /* B165196 ECU board errors errors 0x7,0x8,0x9*/ //SysMon_Rte_Read_ppareIoHwAbUserVCCSts_ulActualMean(&SysMon_IoHwAbUserVCCSts);/* changed */ /*U240688 CAN Message defect*/ //SysMon_Rte_Read_ppareCAN_Message_defectStatus(&ucErrorIndication);/* changed */ /* U240788 Uart CAN error*/ //SysMon_Rte_Read_ppareErrorUartCanStatus(&ucErrorUartCan);/* CddMlcUart_ErrorHandling Need check*/ for (uint32 ul = 0u; ul < CDDBOOST_Cfg_NbOfChannels; ul++) { //SysMon_BoosterErr.aStatus[ul]= SysMon_CddBoostStatus.aStatus[ul]; } //SysMon_BoosterErr.ucCrc = SysMon_CddBoostStatus.ucCrc; #ifndef E2E_Remove SysMon_E2EWrapperReadRTE(); #else (void)Rte_Read_ppareCddLedStatus_sStatus(&SysMon_CddLedStatus_ASIL); /*add explanation 2022.11.14 */ (void)Rte_Read_ppareCddBoostStatus_sBoostSts(&SysMon_CddBoostStatus); /*add explanation 2022.11.14 */ (void)Rte_Read_ppareCddSwiStatus_sAllSwitchStatus(&SysMon_AllSwitchStatus); /*add explanation 2022.11.14 */ (void)Rte_Read_ppareCddMlcMxSwitchAndSensorStatus0_sAllMlcSwitchAndAllSensorStatus(&SysMon_AllMlcSwitchAndAllSensorStatus); /*add explanation 2022.11.14 */ #endif Rte_Read_ppareIoHwAbUserVCC_ulActualMean(&ulReadAdcMeanVCCX_3); Rte_Read_ppareRSensBinning0_asAct(&RSensBinning); Rte_Read_ppareRSensNtcStatusError0_unErrorBitMask_NtcIoChannel(&SysMon_RSensErrorBitMaskNTC); Rte_Read_ppareSigPrepAnimationEnable_sAnimationEnable(&SysMonCeremonyCammand_Enable); Rte_Read_ppareSigPrepVehicleInfoState_sVehicleInfoState(&SysMonVehicleSts); Rte_Read_ppareSigPrepAFSCommandState_Element(&SysMonAfsSts); Rte_Read_ppareSigPrepMatrixHBCommandState_Element(&SysMonHBmatrixSts); //Read LED Status from Fctr for DTC SysMon_Rte_Read_LowBeamSts_sLowBeamFctSts(&SysMon_DTC_LowBeamFctSts); //Low Beam Status SysMon_Rte_Read_HighBeamSts_sHighBeamFctSts(&SysMon_DTC_HighBeamFctSts); //High Beam Status SysMon_Rte_Read_TurnIndSts_sTurnIndFctSts(&SysMon_DTC_TurnIndFctSts); //Turn Indicator Status SysMon_Rte_Read_DayTimeRunningLightSts_sDrlFctReqSts(&SysMon_DTC_DayTimeRunningLightFctSts); //DRL Status SysMon_Rte_Read_CornerLightSts_sCornerLightFctSts(&SysMon_DTC_CornerLightFctSts); //Corner Light Status SysMon_Rte_Read_PositionLightSts_sPositionLightFctSts(&SysMon_DTC_PositionLightFctSts); //Position Light SysMon_LightCtrlCmd_ReadRTE(); } // PRQA S 5324 1 // //-------------------------------------------------------------------------------------------------- /// \brief Helper to initialize ECU mounting side information /// \param none /// \note Only left or right is provided. RTE function is expected never to fail. /// Called whenever riSysMonInit is called. /// \return - //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_InitEcuMountingSide(void) { static tieMountingSideRaw ucSideRaw = 0xAAU; static tieMountingSide ucSide = 0xAAU; Std_ReturnType retCodeSide = SysMon_Rte_Call_IoHwAbUserMountingSide1_IoHwAbUser_GetMountingSide(&ucSide); Std_ReturnType retCodeSideRaw = SysMon_Rte_Call_IoHwAbUserMountingSide0_IoHwAbUser_GetMountingSideRaw(&ucSideRaw); /*Added RTE status judgment*/ if ((retCodeSide == RTE_E_OK) && (retCodeSideRaw == RTE_E_OK)) { if (eIoHwAbUser_MountingSideRaw_Unknown != ucSideRaw) { if ((eIoHwAbUser_MountingSide_Right == ucSide) || (eIoHwAbUser_MountingSideRaw_Right == ucSideRaw)) //-- see FLM3.MDRS.IoHwAbUser.141 //SysMon_isRightEcu() { SysMon_eMountingSide = eRightMoutningSide; } else { SysMon_eMountingSide = eLeftMoutningSide; } } else { SysMon_eMountingSide = eUnknownMountingSide; } } else { SysMon_eMountingSide = eUnknownMountingSide; } } //-------------------------------------------------------------------------------------------------- /// \brief SysMon private helper to initialize Ccommunicatio counter /// \param none /// \return - //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_Init_DTC_Check(void) { SysMonRx_initCounterMonitor(&SysMon_VehicleInfoCommunication_Error, SYSMON_DTC_DEBOUNCE, SYSMON_DTC_DEBOUNCE); SysMonRx_initCounterMonitor(&SysMon_AFSCommandCommunication_Error, SYSMON_DTC_DEBOUNCE, SYSMON_DTC_DEBOUNCE); SysMonRx_initCounterMonitor(&SysMon_MatrixHBCommandCommunication_Error, SYSMON_DTC_DEBOUNCE, SYSMON_DTC_DEBOUNCE); SysMonRx_initCounterMonitor(&Ssymon_HSS_FAN_Error, SYSMON_DTC_DEBOUNCE, SYSMON_DTC_DEBOUNCE); SysMonRx_initCounterMonitor(&Ssymon_HSS_ISD_Error, SYSMON_DTC_DEBOUNCE, SYSMON_DTC_DEBOUNCE); SysMonRx_initCounterMonitor(&Ssymon_Stepper_Error, SYSMON_DTC_DEBOUNCE, SYSMON_DTC_DEBOUNCE); } //-------------------------------------------------------------------------------------------------- /// \brief SysMon private helper to de-initialize /// \param none /// \return - //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_DeInit(void) { //SysMon_Init(); SysMon_WaitCntUntilDtcAllowed = SYSMON_WAIT_CNT_UNTIL_DTC; SysMon_boInitialized = FALSE; } //-------------------------------------------------------------------------------------------------- /// \brief SysMon_SetB2CanBusOff /// \param none /// \note Called by the module which implements the callout BswmUserCallout_BusOffIndication. /// The callout BswmUserCallout_BusOffIndication is triggered by KPIT AUTOSAR stack /// when a Bus-Off error occurs. /// ppSysMonB2CanStatusFault0 ist der Server - Port, der von der BSW - Software verwendet werden soll, s.FLM3.SWRS.20917. /// ppSysMonB2CanStatusError0 ist der Sender - Port, der von SysMon beschrieben werden soll. //-------------------------------------------------------------------------------------------------- void SysMon_SetB2CanBusOff(void) { //-- TODO SWRS has been changed 2020-06-22 SysMon_boBusOff = TRUE; SysMon_boFltBusOff = TRUE; tisCanStatusError data = { (tieError)SysMon_boBusOff, (tieFault) SysMon_boFltBusOff }; SysMon_Rte_Write_SysMonCan1StatusError0_sVal(&data); //The symbol BODY2-CAN_CONTROL_MODULE_BUS_OFF shall be used to reference the following DTC:FLM_L: 0xD9C46C, FLM_R: 0xDA046C. //HONGQI_Comment-- (void)Rte_Call_DtcD9c46c_SetEventStatus(1); //HONGQI_Comment-- DEM_EVENT_STATUS_FAILED = 1U } //-------------------------------------------------------------------------------------------------- /// \brief SysMon_ResetB2CanBusOff /// \param none /// \note Called by someone when Bus-Off error is gone /// https://jind.magnetimarelli.com/aljira/browse/FLMT-1486 //-------------------------------------------------------------------------------------------------- void SysMon_ResetB2CanBusOff(void) { //-- TODO SWRS has been changed 2020-06-22 SysMon_boBusOff = FALSE; SysMon_boFltBusOff = FALSE; tisCanStatusError data = { (tieError)SysMon_boBusOff, (tieFault)SysMon_boFltBusOff }; SysMon_Rte_Write_SysMonCan1StatusError0_sVal(&data); //The symbol BODY2-CAN_CONTROL_MODULE_BUS_OFF shall be used to reference the following DTC:FLM_L: 0xD9C46C, FLM_R: 0xDA046C. //HONGQI_Comment-- (void)Rte_Call_DtcD9c46c_SetEventStatus(0); //HONGQI_Comment-- DEM_EVENT_STATUS_PASSED = 0 } //----------------------------------------------------------------------------- /// \brief Cyclic function called every 10ms /// /// \descr /// /// \param - /// /// \return STATIC_AL void /// \Comment QAC: 5324 HIS deviation number of distinct function calls /// Reason: high number of RTE interfaces located at TOP level of /// SysMon for module Architecture reason and readibility //----------------------------------------------------------------------------- STATIC_AL void SysMon_Cycle10ms(void) { //static uint32 counter = 0U; //-- counter scheduler counter += 1U; if (TRUE == SysMon_boInitialized) { SysMon_ReadRTE(); if (SysMon_isWakeupLineActive() == TRUE || SysMonIgnitionSts.eIgnitionSts == 2U) { if (CanDelayDebounceCheckCnt < CAN_DELAY_DEBOUNCE_MAX_TIMES) { CanDelayDebounceCheckCnt++; } } else { CanDelayDebounceCheckCnt = 0; } // SysMonTx_Handle_FctR_Status_StatesInfo(); //Read LED Status from Fctr //boCodingDataStatus = (SysMon_CodingDataStatus == 1U) ? TRUE : FALSE; SysMon_Data_SetCodingDataStatus(SysMon_CodingDataStatus); SysMon_GetBoostVoltage(); //SysMon_InternalCom_Monitoring() if (0U < SysMon_WaitCntUntilDtcAllowed) { if (1U == SysMon_WaitCntUntilDtcAllowed) { // SysMon_InitPhase2(); //-- reset all fail counter from startup phase } SysMon_WaitCntUntilDtcAllowed -= 1U; } //SysMon_Cycle10ms_PduHandlers(); SysMon_InternalCom_Cycle(); //Check Fusa Coding CRC if(FuSaErrCntr > 0u) { FuSaErrCntr --; if(FuSaErrCntr == 0u) { (void)SysMon_IsFuSaCodingValid(); FuSaErrCntr = SYSMON_FUSAERROR_COUNTER; } } SysMon_LedDiag_Cycle(); //SysMon_Blinker_Cycle10ms(); //SysMon_Cycle10ms_HandleTimeOutCtrs(); SysMon_DTC_MainCtrl(); /* Main function of DTC processing.*/ SysMon_HandleGw320Msg(); SysMon_CheckTurnIndErrSts(); SysMon_LightCtrlCmd_Debounce(); SysMon_WriteRTE(); } SysMonHardWareDiagnose(); //(void)Bsw_MemCpy(&FaultInformationForDTC, 0x0, sizeof(LedFunction_Type)); for (uint8 i = 0; i < 12u; i++) { SysMonFaultReportForDTC(&FaultInformationForDTC, i); } SysMon_DTC_Check(); } // PRQA S 5324// program architecture and readability /*-----------------------------------------------------------------------------*/ /*-- Initial function of DTC processing. */ /*-----------------------------------------------------------------------------*/ STATIC_AL void SysMon_DTC_InitCtrl(void) { /*Initial:Update from RTE*/ SysMon_DTC_OldState_Ctrl(); SysMon_Rte_Read_ppareSigPrepIgnitionSts_sIgnitionSts(&SysMonIgnitionSts); /*EC 2: Ignition Status */ SysMon_Rte_Call_ECUInternalError(&ucECUInternalErrorSts); /* B165096 Set cond 0x2�C0x5-0xA*/ SysMon_Rte_Call_CddEftCrcStatus0(&ucSysMon_EftCrcStatus); SysMon_Rte_Read_ppareCodMCodingDataStatus0_eFUSACodingDataStatus(&ucCodMCodingDataStatus); /* B165096 ECU internal 0x4 */ //SysMon_Rte_Call_IoHwAbUserMountingSide0_IoHwAbUser_GetMountingSideRaw(&ulMountSideRaw); /* B165096 ECU internal 0x1 */ ucErrorUartCan = 0x00U; ucErrorIndication = 0x00U; /*Initial:Set Value 0x00*/ Bsw_MemCpy(&FaultInformationForDTC, 0u, sizeof (LedFunction_Type)); //Nm_GetState(0x00,&ucSysMon_GetNMState,&ucSysMon_GetNMMode); /* EC 0: Network Configuration Status: In normal mode */ /* ucSysMon_GetNMMode used ways is Need check again */ ucSysMon_Enable_Cond_flag1 = SYSMON_FLAG_OFF; /* Precondition EC 0 */ ucSysMon_Enable_Cond_flag2 = SYSMON_FLAG_OFF; /* Precondition EC 1 */ ucSysMon_Enable_WakeUp = SYSMON_FLAG_OFF; /* fist wakeup falg */ ucSysMon_Enable_WakeUp_Counter = 0x00U; ucDTC_Sta_LB_SIGErr[0U] = 0x00U; /* B165296 LB&SIG */ ucDTC_Sta_LB_SIGErr[1U] = 0x00U; ucDTC_Sta_HBErr[0U] = 0x00U; /* B165396 HB */ ucDTC_Sta_HBErr[1U] = 0x00U; ucDTC_Sta_DRL_POSErr[0U] = 0x00U; /* B165496 DRL&POS */ ucDTC_Sta_DRL_POSErr[1U] = 0x00U; ucDTC_Sta_CLErr[0U] = 0x00; /* B165596 CL */ ucDTC_Sta_CLErr[1U] = 0x00; ucDTC_Sta_TIErr[0U] = 0x00U; /* B165696 TI */ ucDTC_Sta_TIErr[1U] = 0x00U; ucDTC_Sta_ECU_internalErr[0U] = 0x00U; /* B165096 ECU internal */ ucDTC_Sta_ECU_internalErr[1U] = 0x00U; ucDTC_Sta_ECU_boardErr[0U] = 0x00; /* B165196 ECU board errors */ ucDTC_Sta_ECU_boardErr[1U] = 0x00; ucDTC_Sta_CAN_MessageErr = 0x00U; /* U240688 CAN Message defect */ ucDTC_Sta_Uart_CANErr = 0x00U; /* U240788 Uart CAN error */ ucDTC_Sta_StepErr = 0x00U; /* B165796 Step error */ ucDTC_Sta_FANErr = 0x00U; /* B165896 FAN error */ ucDTC_newSta_LB_SIG = DTC_STATUS_PASSED; /* B165296 LB+SIG No Error */ ucDTC_newSta_HB = DTC_STATUS_PASSED; /* B165396 HB error */ ucDTC_newSta_DRL_POS = DTC_STATUS_PASSED; /* B165496 DRL&POS Error */ ucDTC_newSta_CL = DTC_STATUS_PASSED; /* B165596 CL Error */ ucDTC_newSta_TI = DTC_STATUS_PASSED; /* B165696 TI Error */ ucDTC_newSta_ECU_internal = DTC_STATUS_PASSED;/* B165096 ECU internal errors */ ucDTC_newSta_ECU_board = DTC_STATUS_PASSED; /* B165196 ECU board errors */ ucDTC_newSta_CAN_Message = DTC_STATUS_PASSED; /* U240688 CAN Message defect */ ucDTC_newSta_Uart_CAN = DTC_STATUS_PASSED; /* U240788 Uart CAN error */ ucDTC_newSta_Step = DTC_STATUS_PASSED; /* B165796 Step error */ ucDTC_newSta_FAN = DTC_STATUS_PASSED; /* B165896 FAN error */ } /*-----------------------------------------------------------------------------*/ /*-- Main function of DTC processing. */ /*-----------------------------------------------------------------------------*/ STATIC_AL void SysMon_DTC_MainCtrl(void) { SysMon_DTC_Precond_Judge();/* Precondition for DTC. */ SysMon_DTC_OldState_Ctrl();/* Get the DTC fault status of the provious cycle.*/ SysMon_DTC_NewState_Ctrl();/* Get the DTC fault status of the current cycle. */ SysMon_DTC_SetFailure(); /* DTC Fault storage setting. */ } /*-----------------------------------------------------------------------------*/ /*-- Precondition for DTC. */ /*-----------------------------------------------------------------------------*/ STATIC_AL void SysMon_DTC_Precond_Judge(void) { /* 1AECU Wakeup*/ /* 2AWithin 500ms after wakeup, initiate fault detection*/ /*EC 2: Ignition Status EC 4: System Voltage EC 6: Network Configuration Status EC 7: Bus Physical Status EC 9: De-bounce Timer*/ ucSysMon_Enable_Cond_flag1 = SYSMON_FLAG_OFF; ucSysMon_Enable_Cond_flag2 = SYSMON_FLAG_OFF; boolean SysMon_DTCkL15Sts; /* KL15=ON? */ SysMon_DTCkL15Sts = SysMon_isWakeupLineActive(); /* Precondition E0 */ /* EC 0: Network Configuration Status: In normal mode and KL15=ON */ //if ( (ucSysMon_GetNMState == NM_STATE_NORMAL_OPERATION) // || (TRUE == SysMon_DTCkL15Sts)) //{ // /* weather wakeup */ // if (ucSysMon_Enable_WakeUp == SYSMON_FLAG_OFF) // { // ucSysMon_Enable_WakeUp_Counter++; // if (ucSysMon_Enable_WakeUp_Counter >= 3000 / SYSMON_WAIT_CNT_UNTIL_DTC) // { // ucSysMon_Enable_WakeUp_Counter = 3000 / SYSMON_WAIT_CNT_UNTIL_DTC; // ucSysMon_Enable_Cond_flag1 = SYSMON_FLAG_ON; // } // if (ucSysMon_Enable_Cond_flag1 == SYSMON_FLAG_ON) // { // /* Precondition E1 */ // /* EC 1: 9V<=System Voltage<=16 */ // if ((SysMon_Voltage_Mean >= SYSMON_VOLTAGE_ENABLE_MIN) // && (SysMon_Voltage_Mean <= SYSMON_VOLTAGE_ENABLE_MAX)) // { // ucSysMon_Enable_Cond_flag2 = SYSMON_FLAG_ON; // } // else // { // } // } // } // else // { // } //} } /*-----------------------------------------------------------------------------*/ /*-- Get the DTC fault status of the provious cycle. */ /*-----------------------------------------------------------------------------*/ STATIC_AL void SysMon_DTC_OldState_Ctrl(void) { //SysMon_Rte_Call_ppaclGetDtcStatusB165296_GetEventStatus(&ucDTC_oldSta_LB_SIG);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165396_GetEventStatus(&ucDTC_oldSta_HB);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165496_GetEventStatus(&ucDTC_oldSta_DRL_POS);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165596_GetEventStatus(&ucDTC_oldSta_CL);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165696_GetEventStatus(&ucDTC_oldSta_TI);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165096_GetEventStatus(&ucDTC_oldSta_ECU_internal);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165196_GetEventStatus(&ucDTC_oldSta_ECU_board);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusU240688_GetEventStatus(&ucDTC_oldSta_CAN_Message);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusU240788_GetEventStatus(&ucDTC_oldSta_Uart_CAN);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165796_GetEventStatus(&ucDTC_oldSta_Step);/*Need check again*/ //SysMon_Rte_Call_ppaclGetDtcStatusB165896_GetEventStatus(&ucDTC_oldSta_FAN);/*Need check again*/ } /*-----------------------------------------------------------------------------*/ /*-- Get the DTC fault status of the current cycle. */ /*-----------------------------------------------------------------------------*/ STATIC_AL void SysMon_DTC_NewState_Ctrl(void) { boolean boVccX3ShortToGND_DTC = FALSE; boolean boVccX3ShortToVBAT_DTC = FALSE; /* Precondition E0 and E1 */ if ((ucSysMon_Enable_Cond_flag1 == SYSMON_FLAG_ON) && (ucSysMon_Enable_Cond_flag2 == SYSMON_FLAG_ON)) { ///* B165296 LB&SIG */ //ucDTC_Sta_LB_SIGErr[0U] = 0x00U; //ucDTC_Sta_LB_SIGErr[1U] = 0x00U; //byte 0 of bit0 if ((LB_OPENLOAD == FAULT_DTC_ERROR) || (SIG_OPENLOAD == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x01U; /* OpenLoad */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xFEU; /*NO OpenLoad */ } //byte 0 of bit1 if ((LB_SHORTTOGND == FAULT_DTC_ERROR) || (SIG_SHORTTOGND == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x02U; /* ShortCircuit GND */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xFDU; /*NO ShortCircuit GND */ } //byte 0 of bit2 if ((LB_SHORTTOUBAT == FAULT_DTC_ERROR) || (SIG_SHORTTOUBAT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x04U; /* ShortCircuit BAT */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xFBU; /* NO ShortCircuit BAT */ } //byte 0 of bit3 if ((LB_BOOSTERFAULT == FAULT_DTC_ERROR) || (SIG_BOOSTERFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x08U; /* LED driver error */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xF7U; /* NO LED driver error */ } //byte 0 of bit4 if ((LB_OVERCURRENT == FAULT_DTC_ERROR) || (SIG_OVERCURRENT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x10U; /* Over current */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xEFU; /* NO Over current */ } //byte 0 of bit5 if ((LB_THERSHUTDOWN == FAULT_DTC_ERROR) || (SIG_THERSHUTDOWN == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x20U; /* Thermal shutdown */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xDFU; /*NO Thermal shutdown */ } //byte 0 of bit6 if ((LB_VOLDEFAULT == FAULT_DTC_ERROR) || (SIG_VOLDEFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x40U; /* Voltage out of tolerance */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0xBFU; /*NO Voltage out of tolerance */ } //byte 0 of bit7 if ((LB_RCODFAULT == FAULT_DTC_ERROR) || (SIG_RCODFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[0U] |= 0x80U; /* Binning error */ } else { ucDTC_Sta_LB_SIGErr[0U] &= 0x7FU; /*NO Binning error */ } //byte 1 of bit 0 if ((LB_NTCFAULT == FAULT_DTC_ERROR) || (SIG_NTCFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[1U] |= 0x01U; /* NTC error */ } else { ucDTC_Sta_LB_SIGErr[1U] &= 0xFEU; /*NO NTC error */ } //byte 1 of bit 1 if ((LB_LMMFAULT == FAULT_DTC_ERROR) || (SIG_LMMFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[1U] |= 0x02U; /* MLC LED error */ } else { ucDTC_Sta_LB_SIGErr[1U] &= 0xFDU; /*NO MLC LED error */ } //byte 1 of bit 2 if ((LB_MLCFAULT == FAULT_DTC_ERROR) || (SIG_MLCFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_LB_SIGErr[1U] |= 0x04U; /* MLC Communication error */ } else { ucDTC_Sta_LB_SIGErr[1U] &= 0xFBU; /* NO MLC Communication error */ } /* B165296 LB&SIG */ if ((ucDTC_Sta_LB_SIGErr[0U] == FAULT_DTC_NOERROR) && (ucDTC_Sta_LB_SIGErr[1U] == FAULT_DTC_NOERROR)) { ucDTC_newSta_LB_SIG = DTC_STATUS_PASSED; /* B165296 LB+SIG No Error */ } else { ucDTC_newSta_LB_SIG = DTC_STATUS_FAILED; /* B165296 LB+SIG Error */ } /* B165396 HB */ //ucDTC_Sta_HBErr[0U] = 0x00U; //ucDTC_Sta_HBErr[1U] = 0x00U; //byte 0 of bit0 if (HB_OPENLOAD == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x01U; /* OpenLoad */ } else { ucDTC_Sta_HBErr[0U] &= 0xFEU; /* no OpenLoad */ } //byte 0 of bit1 if (HB_SHORTTOGND == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x02U; /* ShortCircuit GND */ } else { ucDTC_Sta_HBErr[0U] &= 0xFDU; /*NO ShortCircuit GND */ } //byte 0 of bit2 if (HB_SHORTTOUBAT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x04; /* ShortCircuit BAT */ } else { ucDTC_Sta_HBErr[0U] &= 0xFBU; /*NO ShortCircuit GND */ } //byte 0 of bit3 if (HB_BOOSTERFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x08U; /* LED driver error */ } else { ucDTC_Sta_HBErr[0U] &= 0xF7U; /*NO LED driver error */ } //byte 0 of bit4 if (HB_OVERCURRENT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x10U; /* Over current */ } else { ucDTC_Sta_HBErr[0U] &= 0xEFU; /*no Over current */ } //byte 0 of bit5 if (HB_THERSHUTDOWN == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x20U; /* Thermal shutdown */ } else { ucDTC_Sta_HBErr[0U] &= 0xDFU; /* no Thermal shutdown */ } //byte 0 of bit6 if (HB_VOLDEFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x40U; /* Voltage out of tolerance */ } else { ucDTC_Sta_HBErr[0U] &= 0xBFU; /* NO Voltage out of tolerance */ } //byte 0 of bit7 if (HB_RCODFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[0U] |= 0x80U; /* Binning error */ } else { ucDTC_Sta_HBErr[0U] &= 0x7FU; /* no Binning error */ } //byte 1 of bit0 if (HB_NTCFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[1U] |= 0x01U; /* NTC error */ } else { ucDTC_Sta_HBErr[1U] &= 0xFEU; /* no NTC error */ } //byte 1 of bit1 if (HB_LMMFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[1U] |= 0x02U; /* MLC LED error */ } else { ucDTC_Sta_HBErr[1U] &= 0xFDU; /* NO MLC LED error */ } //byte 1 of bit2 if (HB_MLCFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_HBErr[1U] |= 0x04U; /* MLC Communication error */ } else { ucDTC_Sta_HBErr[1U] &= 0xFBU; /*NO MLC Communication error */ } /* B165396 HB */ if ((ucDTC_Sta_HBErr[0U] == FAULT_DTC_NOERROR) && (ucDTC_Sta_HBErr[1U] == FAULT_DTC_NOERROR)) { ucDTC_newSta_HB = DTC_STATUS_PASSED; /* B165396 HB No Error */ } else { ucDTC_newSta_HB = DTC_STATUS_FAILED; /* B165396 HB Error */ } /* B165496 DRL&POS */ //ucDTC_Sta_DRL_POSErr[0U] = 0x00U; //ucDTC_Sta_DRL_POSErr[1U] = 0x00U; if ((DRL_OPENLOAD == FAULT_DTC_ERROR) || (POS_OPENLOAD == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x01U; /* OpenLoad */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xFEU; /*NO OpenLoad */ } if ((DRL_SHORTTOGND == FAULT_DTC_ERROR) || (POS_SHORTTOGND == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x02U; /* ShortCircuit GND */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xFDU; /* NO ShortCircuit GND */ } if ((DRL_SHORTTOUBAT == FAULT_DTC_ERROR) || (POS_SHORTTOUBAT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x04U; /* ShortCircuit BAT */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xFBU; /*NO ShortCircuit BAT */ } if ((DRL_BOOSTERFAULT == FAULT_DTC_ERROR) || (POS_BOOSTERFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x08U; /* LED driver error */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xF7U; /* NO LED driver error */ } if ((DRL_OVERCURRENT == FAULT_DTC_ERROR) || (POS_OVERCURRENT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x10U; /* Over current */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xEFU; /*NO Over current */ } if ((DRL_THERSHUTDOWN == FAULT_DTC_ERROR) || (POS_THERSHUTDOWN == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x20U; /* Thermal shutdown */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xDFU; /* NO Thermal shutdown */ } if ((DRL_VOLDEFAULT == FAULT_DTC_ERROR) || (POS_VOLDEFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x40U; /* Voltage out of tolerance */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0xBFU; /* NO Voltage out of tolerance */ } if ((DRL_RCODFAULT == FAULT_DTC_ERROR) || (POS_RCODFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[0U] |= 0x80U; /* Binning error */ } else { ucDTC_Sta_DRL_POSErr[0U] &= 0x7FU; /* NO Binning error */ } if ((DRL_NTCFAULT == FAULT_DTC_ERROR) || (POS_NTCFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[1U] |= 0x01U; /* NTC error */ } else { ucDTC_Sta_DRL_POSErr[1U] &= 0xFEU; /* NO NTC error */ } if ((DRL_LMMFAULT == FAULT_DTC_ERROR) || (POS_LMMFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[1U] |= 0x02U; /* MLC LED error */ } else { ucDTC_Sta_DRL_POSErr[1U] &= 0xFDU; /* MLC LED error */ } if ((DRL_MLCFAULT == FAULT_DTC_ERROR) || (POS_MLCFAULT == FAULT_DTC_ERROR)) { ucDTC_Sta_DRL_POSErr[1U] |= 0x04U; /* MLC Communication error */ } else { ucDTC_Sta_DRL_POSErr[1U] &= 0xFBU; /* MLC Communication error */ } /* B165496 DRL&POS */ if ((ucDTC_Sta_DRL_POSErr[0U] == FAULT_DTC_NOERROR) && (ucDTC_Sta_DRL_POSErr[1U] == FAULT_DTC_NOERROR)) { ucDTC_newSta_DRL_POS = DTC_STATUS_PASSED; /* B165496 DRL&POS No Error */ } else { ucDTC_newSta_DRL_POS = DTC_STATUS_FAILED; /* B165496 DRL&POS Error */ } /* B165596 CL */ //ucDTC_Sta_CLErr[0U] = 0x00; //ucDTC_Sta_CLErr[1U] = 0x00; if (CL_OPENLOAD == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x01U; /* OpenLoad */ } else { ucDTC_Sta_CLErr[0U] &= 0xFEU; /*NO OpenLoad */ } if (CL_SHORTTOGND == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x02U; /* ShortCircuit GND */ } else { ucDTC_Sta_CLErr[0U] &= 0xFDU; /* NO ShortCircuit GND */ } if (CL_SHORTTOUBAT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x04U; /* ShortCircuit BAT */ } else { ucDTC_Sta_CLErr[0U] &= 0xFBU; /* NO ShortCircuit BAT */ } if (CL_BOOSTERFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x08U; /* LED driver error */ } else { ucDTC_Sta_CLErr[0U] &= 0xF7U; /* NO LED driver error */ } if (CL_OVERCURRENT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x10U; /* Over current */ } else { ucDTC_Sta_CLErr[0U] &= 0xEFU; /* Over current */ } if (CL_THERSHUTDOWN == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x20U; /* Thermal shutdown */ } else { ucDTC_Sta_CLErr[0U] &= 0xDFU; /* Thermal shutdown */ } if (CL_VOLDEFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x40U; /* Voltage out of tolerance */ } else { ucDTC_Sta_CLErr[0U] &= 0xBFU; /* Voltage out of tolerance */ } if (CL_RCODFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[0U] |= 0x80U; /* Binning error */ } else { ucDTC_Sta_CLErr[0U] &= 0x7FU; /* Binning error */ } if (CL_NTCFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[1U] |= 0x01U; /* NTC error */ } else { ucDTC_Sta_CLErr[1U] &= 0xFEU; /* NTC error */ } if (CL_LMMFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[1U] |= 0x02U; /* MLC LED error */ } else { ucDTC_Sta_CLErr[1U] &= 0xFDU; /* MLC LED error */ } if (CL_MLCFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_CLErr[1U] |= 0x04U; /* MLC Communication error */ } else { ucDTC_Sta_CLErr[1U] &= 0xFBU; /* MLC Communication error */ } /* B165596 CL */ if ((ucDTC_Sta_CLErr[0U] == FAULT_DTC_NOERROR) && (ucDTC_Sta_CLErr[1U] == FAULT_DTC_NOERROR)) { ucDTC_newSta_CL = DTC_STATUS_PASSED; /* B165596 CL No Error */ } else { ucDTC_newSta_CL = DTC_STATUS_FAILED; /* B165596 CL Error */ } /* B165696 TI */ //ucDTC_Sta_TIErr[0U] = 0x00U; //ucDTC_Sta_TIErr[1U] = 0x00U; if (TI_OPENLOAD == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x01U; /* OpenLoad */ } else { ucDTC_Sta_TIErr[0U] &= 0xFEU; /*NO OpenLoad */ } if (TI_SHORTTOGND == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x02U; /* ShortCircuit GND */ } else { ucDTC_Sta_TIErr[0U] &= 0xFDU; /*NO ShortCircuit GND */ } if (TI_SHORTTOUBAT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x04U; /* ShortCircuit BAT */ } else { ucDTC_Sta_TIErr[0U] &= 0xFBU; /*NO ShortCircuit BAT */ } if (TI_BOOSTERFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x08U; /* LED driver error */ } else { ucDTC_Sta_TIErr[0U] &= 0xF7U; /*NO LED driver error */ } if (TI_OVERCURRENT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x10U; /* Over current */ } else { ucDTC_Sta_TIErr[0U] &= 0xEFU; /* NO Over current */ } if (TI_THERSHUTDOWN == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x20U; /* Thermal shutdown */ } else { ucDTC_Sta_TIErr[0U] &= 0xDFU; /*NO Thermal shutdown */ } if (TI_VOLDEFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x40U; /* Voltage out of tolerance */ } else { ucDTC_Sta_TIErr[0U] &= 0xBFU; /* NO Voltage out of tolerance */ } if (TI_RCODFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[0U] |= 0x80U; /* Binning error */ } else { ucDTC_Sta_TIErr[0U] &= 0x7FU; /* NO Binning error */ } if (TI_NTCFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[1U] |= 0x01U; /* NTC error */ } else { ucDTC_Sta_TIErr[1U] &= 0xFEU; /* NO NTC error */ } if (TI_LMMFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[1U] |= 0x02U; /* MLC LED error */ } else { ucDTC_Sta_TIErr[1U] &= 0xFDU; /*NO MLC LED error */ } if (TI_MLCFAULT == FAULT_DTC_ERROR) { ucDTC_Sta_TIErr[1U] |= 0x04U; /* MLC Communication error */ } else { ucDTC_Sta_TIErr[1U] &= 0xFBU; /* MLC Communication error */ } /* B165696 TI */ if ((ucDTC_Sta_TIErr[0U] == FAULT_DTC_NOERROR) && (ucDTC_Sta_TIErr[1U] == FAULT_DTC_NOERROR)) { ucDTC_newSta_TI = DTC_STATUS_PASSED; /* B165696 TI No Error */ } else { ucDTC_newSta_TI = DTC_STATUS_FAILED; /* B165696 TI Error */ } /* U240688 CAN Message defect*//*0x2-0x4 Need check again*/ //ucDTC_Sta_CAN_MessageErr = 0x00U; if (SysMon_boBusOff == TRUE) /* 0x1: No Bus off */ { ucDTC_Sta_CAN_MessageErr |= 0x01U; } else { ucDTC_Sta_CAN_MessageErr &= 0xFEU; } if ((ucDTC_Sta_CAN_MessageErr == FAULT_DTC_NOERROR) && ((SysMon_VehicleInfoCommunication_Error.isDebounced == FALSE) || (SysMon_AFSCommandCommunication_Error.isDebounced == FALSE) || (SysMon_MatrixHBCommandCommunication_Error.isDebounced == FALSE) || (SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc = FALSE) || (SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc = FALSE) || (SysMon_MsgTimeoutErr.bLightCtrlCmdTo = FALSE))) { ucDTC_newSta_CAN_Message = DTC_STATUS_PASSED; /* U240688 CAN Message No Errors */ } else { ucDTC_newSta_CAN_Message = DTC_STATUS_FAILED; /* U240688 CAN Message Errors */ } /* B165096 ECU internal*//*0x3-0xA Need check again*/ //ucDTC_Sta_ECU_internalErr[0U] = 0x00U; //ucDTC_Sta_ECU_internalErr[1U] = 0x00U; if ((SysMon_eMountingSide == eUnknownMountingSide) || (SysMon_PeerMountSameSide.uMountSideUnknow == TRUE)) /* 0x1: Mount side known */ { ucDTC_Sta_ECU_internalErr[0U] |= 0x01U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xFEU; } if ((SysMon_CodingDataStatus == FALSE) || (ucSysMon_EftCrcStatus == FALSE)) /* 0x2: ECU coded */ /*MES230407*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x02U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xFDU; } if (SysMon_CodingDataStatus == FALSE) /* 0x3: Coding data Valid */ /*The determined value*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x04U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xFBU; } if (ucCodMCodingDataStatus == FALSE) /* 0x4: No Fusa Coding error */ /*The determined value*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x08U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xF7U; } if (ucECUInternalErrorSts == 0x07U) /* 0x7: ECC error *//*RESET_ECC_ERROR*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x10U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xEFU; } #if 0 // not implemented  if (ucECUInternalErrorSts == 0x06U) /* 0x6: PLL unlock error *//*RESET_PLL_ERROR*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x20U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xDFU; } #endif if (ucECUInternalErrorSts == 0x05U) /* 0x5: Watchdog reset *//*RESET_WATCHDOG*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x40U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0xBFU; } if (ucECUInternalErrorSts == 0x01U) /* 0x1: RESET undefined *//*RESET_UNDEFINED*/ { ucDTC_Sta_ECU_internalErr[0U] |= 0x80U; } else { ucDTC_Sta_ECU_internalErr[0U] &= 0x7FU; } #if 0 // not implemented  if (ucECUInternalErrorSts == 0x08U) /* 0x8: RESET under voltage *//*RESET_UNDER_VOLTAGE 0*/ { ucDTC_Sta_ECU_internalErr[1U] |= 0x01U; } else { ucDTC_Sta_ECU_internalErr[1U] &= 0xFEU; } if (ucECUInternalErrorSts == 0x09U) /*0xA: No RESET MPU selftest error*//*RESET_MPU_SELFTEST_ERROR 0*/ { ucDTC_Sta_ECU_internalErr[1U] |= 0x02U; } else { ucDTC_Sta_ECU_internalErr[1U] &= 0xFDU; } #endif if ((ucDTC_Sta_ECU_internalErr[0U] == FAULT_DTC_NOERROR) && (ucDTC_Sta_ECU_internalErr[1U] == FAULT_DTC_NOERROR)) { ucDTC_newSta_ECU_internal = DTC_STATUS_PASSED; /* B165096 ECU internal No Errors*/ } else { ucDTC_newSta_ECU_internal = DTC_STATUS_FAILED; /* B165096 ECU internal Errors */ } /* B165196 ECU board errors*//*All Need check again*//* 0x1,0x2,cross file used*/ //ucDTC_Sta_ECU_boardErr[0U] = 0x00; //ucDTC_Sta_ECU_boardErr[1U] = 0x00; boVccX3ShortToGND_DTC = SysMon_IsVccX3ShortToGND(); boVccX3ShortToVBAT_DTC = SysMon_IsVccX3ShortToVBAT(); #ifdef BOOSTER_ERROR_DEFECT #else if(usIsVBoostUndervoltage != FAULT_DTC_NOERROR) /* 0x1: No LED Booster under voltage*/ { ucDTC_Sta_ECU_boardErr[0U] |= 0x01U; } if(usIsVBoostOvervoltage != FAULT_DTC_NOERROR) /* 0x2: No LED Booster over voltage */ { ucDTC_Sta_ECU_boardErr[0U] |= 0x02U; } #endif if ((SysMon_HssStatusError[1U].eErrShortToGnd == ERR_YES) && (Ssymon_HSS_ISD_Error.isDebounced == TRUE))/*HSS2 0x3: HSS Short to Gnd */ { ucDTC_Sta_ECU_boardErr[0U] |= 0x04U; } else { ucDTC_Sta_ECU_boardErr[0U] &= 0xFBU; } if ((SysMon_HssStatusError[1U].eErrShortToVBat == ERR_YES) && (Ssymon_HSS_ISD_Error.isDebounced == TRUE))/*HSS2 0x4: HSS Short to Battery */ { ucDTC_Sta_ECU_boardErr[0U] |= 0x08U; } else { ucDTC_Sta_ECU_boardErr[0U] &= 0xF7U; } if ((SysMon_HssStatusError[1U].eErrOpenLoad == ERR_YES) && (Ssymon_HSS_ISD_Error.isDebounced == TRUE))/*HSS2 0x5: HSS open load */ { ucDTC_Sta_ECU_boardErr[0U] |= 0x10U; } else { ucDTC_Sta_ECU_boardErr[0U] &= 0xEFU; } if (((SysMon_CddLedStatus_ASIL.asStatus[0].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[1].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[2].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[3].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[4].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[5].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[6].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[7].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[8].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[9].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[10].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[11].eErr == SysMon_LEDBUCK_SPIERROR)) && (Ssymon_Buck_SPI_Error.isDebounced==TRUE))/* 0x6:SPI error */ { ucDTC_Sta_ECU_boardErr[0U] |= 0x20U; } else { ucDTC_Sta_ECU_boardErr[0U] &= 0xDFU; } if (boVccX3ShortToGND_DTC == TRUE) /*0x7: VCC Short to Gnd */ { ucDTC_Sta_ECU_boardErr[0U] |= 0x40U; } else { ucDTC_Sta_ECU_boardErr[0U] &= 0xBFU; } if (boVccX3ShortToVBAT_DTC == TRUE) /*0x8: VCC Short to Battery*/ { ucDTC_Sta_ECU_boardErr[0U] |= 0x80U; } else { ucDTC_Sta_ECU_boardErr[0U] &= 0x7FU; } #if 0 if(VccX3Error == 0xFF) /*0x9: VCC open load no error */ { ucDTC_Sta_ECU_boardErr[1U] |= 0x01U; } #endif if ((ucDTC_Sta_ECU_boardErr[0U] != FAULT_DTC_NOERROR) && (ucDTC_Sta_ECU_boardErr[1U] != FAULT_DTC_NOERROR)) { ucDTC_newSta_ECU_board = DTC_STATUS_FAILED; /* B165196 ECU board Errors */ } else { ucDTC_newSta_ECU_board = DTC_STATUS_PASSED; /* B165196 ECU board No Errors */ } /* U240788 Uart CAN error*/ /*MES230407*/ //Cancel the Uartcan error, uarctcan error through the error storage DTC of the individual lights ucDTC_Sta_Uart_CANErr = 0x00U; ucDTC_newSta_Uart_CAN = DTC_STATUS_PASSED; /* U240688 CAN Message No Errors */ //if((ucErrorUartCan &0x01U) == 0x01U) /* 0x1: COMM_ERR */ //{ // ucDTC_Sta_Uart_CANErr |= 0x01U; //} //if(ucDTC_Sta_Uart_CANErr == FAULT_DTC_NOERROR) /* 0x1. No CAN_L Short to Battery It No interface*/ // /* 0x2. No CAN_L Short to Gnd It No interface*/ // /* 0x3: No CAN_H Short to CAN_L It No interface*/ // /* 0x4: No OpenLoad It No interface*/ //{ //ucDTC_newSta_Uart_CAN = DTC_STATUS_PASSED; /* U240688 CAN Message No Errors */ //} //else //{ // ucDTC_newSta_Uart_CAN = DTC_STATUS_FAILED; /* U240688 CAN Message Errors */ //} /* B165796 Step error */ //ucDTC_Sta_StepErr = 0x00U; if (((SysMon_StatusSpinningFront.bfLWRFaultStatus)&STEPPER_FAULT_OPEN_CIRCUIT) == STEPPER_FAULT_OPEN_CIRCUIT) /* 0x1: No Stp OpenLoad */ { ucDTC_Sta_StepErr |= 0x01U; } else { ucDTC_Sta_StepErr &= 0xFEU; } if (((SysMon_StatusSpinningFront.bfLWRFaultStatus)&STEPPER_FAULT_SHORT_CIRCUIT) == STEPPER_FAULT_SHORT_CIRCUIT) /* 0x2: No Stp ShortCircuit */ { ucDTC_Sta_StepErr |= 0x02U; } else { ucDTC_Sta_StepErr &= 0xFDU; } if (((SysMon_StatusSpinningFront.bfLWRFaultStatus)&STEPPER_FAULT_OVER_TEMPERATURE) == STEPPER_FAULT_OVER_TEMPERATURE) /* 0x3: No Stp ThermalShutdown */ { ucDTC_Sta_StepErr |= 0x04U; } else { ucDTC_Sta_StepErr &= 0xFBU; } if ((ucDTC_Sta_StepErr != FAULT_DTC_NOERROR) && (Ssymon_Stepper_Error.isDebounced == TRUE)) /* 0x1: Stp ERROR */ /* 0x2: No Stp ShortCircuit */ /* 0x3: No Stp ThermalShutdown */ { ucDTC_newSta_Step = DTC_STATUS_FAILED; /* B165796 Step error */ } else { ucDTC_newSta_Step = DTC_STATUS_PASSED; /* B165796 Step error */ } /* B165896 FAN error */ //ucDTC_Sta_FANErr = 0x00U; if (SysMon_HssStatusError[0U].eErrOpenLoad == ERR_YES) /*HSS1 0x01: OpenLoad */ { ucDTC_Sta_FANErr |= 0x01U; } else { ucDTC_Sta_FANErr &= 0xFEU; } if (SysMon_HssStatusError[0U].eErrShortToGnd == ERR_YES) /*HSS1 0x02: ShortCircuit GND */ { ucDTC_Sta_FANErr |= 0x02U; } else { ucDTC_Sta_FANErr &= 0xFDU; } if (SysMon_HssStatusError[0U].eErrShortToVBat == ERR_YES)/*HSS1 0x03: No ShortCircuit BAT */ { ucDTC_Sta_FANErr |= 0x04U; } else { ucDTC_Sta_FANErr &= 0xFBU; } if ((ucDTC_Sta_FANErr != FAULT_DTC_NOERROR) && (Ssymon_HSS_FAN_Error.isDebounced == TRUE)) { ucDTC_newSta_FAN = DTC_STATUS_FAILED; /* B165196 ECU board Errors */ } else { ucDTC_newSta_FAN = DTC_STATUS_PASSED; /* B165196 ECU board No Errors */ } } } /*-----------------------------------------------------------------------------*/ /*-- DTC Fault storage setting. */ /*-----------------------------------------------------------------------------*/ STATIC_AL void SysMon_DTC_SetFailure(void) { /* Precondition E0 and E1 */ if ((ucSysMon_Enable_Cond_flag1 == SYSMON_FLAG_ON) && (ucSysMon_Enable_Cond_flag2 == SYSMON_FLAG_ON)) { /* B165296 LB+SIG error */ if ((((ucDTC_oldSta_LB_SIG & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_LB_SIG == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_LB_SIG & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_LB_SIG == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165296_SetEventStatus(ucDTC_newSta_LB_SIG); } /* B165396 HB error */ if ((((ucDTC_oldSta_HB & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_HB == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_HB & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_HB == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165396_SetEventStatus(ucDTC_newSta_HB); } /* B165496 DRL&POS Error */ if ((((ucDTC_oldSta_DRL_POS & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_DRL_POS == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_DRL_POS & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_DRL_POS == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165496_SetEventStatus(ucDTC_newSta_DRL_POS); } /* B165596 CL Error */ if ((((ucDTC_oldSta_CL & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_CL == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_CL & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_CL == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165596_SetEventStatus(ucDTC_newSta_CL); } /* B165696 TI Error */ if ((((ucDTC_oldSta_TI & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_TI == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_TI & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_TI == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165696_SetEventStatus(ucDTC_newSta_TI); } /* U240688 CAN Message defect */ if ((((ucDTC_oldSta_CAN_Message&DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_CAN_Message == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_CAN_Message&DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_CAN_Message == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusU240688_SetEventStatus(ucDTC_newSta_CAN_Message); } /* B165096 ECU internal errors */ if ((((ucDTC_oldSta_ECU_internal&DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_ECU_internal == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_ECU_internal&DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_ECU_internal == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165096_SetEventStatus(ucDTC_newSta_ECU_internal); } /* B165196 ECU board errors */ if ((((ucDTC_oldSta_ECU_board&DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_ECU_board == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_ECU_board &DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_ECU_board == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165196_SetEventStatus(ucDTC_newSta_ECU_board); } /* U240788 Uart CAN error */ if ((((ucDTC_oldSta_Uart_CAN &DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_Uart_CAN == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_Uart_CAN &DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_Uart_CAN == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusU240788_SetEventStatus(ucDTC_newSta_Uart_CAN); } /* B165796 Step error */ if ((((ucDTC_oldSta_Step & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_Step == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_Step & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_Step == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165796_SetEventStatus(ucDTC_newSta_Step); } /* B165896 FAN error */ if ((((ucDTC_oldSta_FAN & DTC_STATUS_MASK) == DTC_STATUS_PASSED) && (ucDTC_newSta_FAN == DTC_STATUS_FAILED)) || (((ucDTC_oldSta_FAN & DTC_STATUS_MASK) == DTC_STATUS_FAILED) && (ucDTC_newSta_FAN == DTC_STATUS_PASSED))) { //SysMon_Rte_Call_ppaclSetDtcStatusB165896_SetEventStatus(ucDTC_newSta_FAN); } } } //#define ctaaSysMon_START_SEC_CODE comment by Amie //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC16BUartCANErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCUartCANErr)); Bsw_MemCpy(Data, &ucDTC_Sta_Uart_CANErr, sizeof(tiau8DTCUartCANErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCUartCANErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //comment by Amie //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC16DHBErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCHBErr)); Bsw_MemCpy(Data, &ucDTC_Sta_HBErr[0], sizeof(tiau8DTCHBErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCHBErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC16EDRLPOSErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCDRLPOSErr)); Bsw_MemCpy(Data, &ucDTC_Sta_DRL_POSErr[0], sizeof(tiau8DTCDRLPOSErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCDRLPOSErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC172FANErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCFANErr)); Bsw_MemCpy(Data, &ucDTC_Sta_FANErr, sizeof(tiau8DTCFANErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCFANErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC168ECUBoardErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCECUBoardErr)); Bsw_MemCpy(Data, &ucDTC_Sta_ECU_boardErr[0], sizeof(tiau8DTCECUBoardErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCECUBoardErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC169ECUInternalErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCECUInternalErr)); Bsw_MemCpy(Data, &ucDTC_Sta_ECU_internalErr[0], sizeof(tiau8DTCECUInternalErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCECUInternalErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC16FCLErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCCLErr)); Bsw_MemCpy(Data, &ucDTC_Sta_CLErr[0], sizeof(tiau8DTCCLErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCCLErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC171StepErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCStepErr)); Bsw_MemCpy(Data, &ucDTC_Sta_StepErr, sizeof(tiau8DTCStepErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCStepErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC16CLBSIGErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCLBSIGErr)); Bsw_MemCpy(Data, &ucDTC_Sta_LB_SIGErr[0], sizeof(tiau8DTCLBSIGErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCLBSIGErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC170TIErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCTIErr)); Bsw_MemCpy(Data, &ucDTC_Sta_TIErr[0], sizeof(tiau8DTCTIErr)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCTIErr); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(Std_ReturnType, ctaaSysMon_CODE) roReadDataC16ACANErr( P2VAR(uint8, AUTOMATIC, RTE_APPL_DATA) Data) { Bsw_MemCpy(Data, 0, sizeof(tiau8DTCCANDefect)); Bsw_MemCpy(Data, &ucDTC_Sta_CAN_MessageErr, sizeof(tiau8DTCCANDefect)); uint8 index, State = E_NOT_OK; for (index = ZERO; index < sizeof(tiau8DTCCANDefect); index++) { if (*(Data + index) >0) { State = E_OK; break; } } if (State == E_OK) return E_OK; else { return E_NOT_OK; } } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1Chi_L5C8 * SYMBOL: rrCan1Chi_L5C8 ************************************************************ * RTE Events * D_4c82ce49D2400D4befDa11eDbbe653410895 ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1Chi_L5C8_sChi_L5C8_Msg(&ptssrCan1Chi_L5C8_sChi_L5C8_Msg); Feedback_ptssrCan1Chi_L5C8_sChi_L5C8_Msg = Rte_Feedback_ppsseCan1Chi_L5C8_sChi_L5C8_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1Chi_L5C8 ( void ) { /* rrCan1Chi_L5C8_Start User Code start*/ /* rrCan1Chi_L5C8_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1Chli_L208 * SYMBOL: rrCan1Chli_L208 ************************************************************ * RTE Events * D_41c0447eD78aaD4142Db6caD65ad34dd1720 ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1Chli_L208_sChli_L208_Msg(&ptssrCan1Chli_L208_sChli_L208_Msg); Feedback_ptssrCan1Chli_L208_sChli_L208_Msg = Rte_Feedback_ppsseCan1Chli_L208_sChli_L208_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1Chli_L208 ( void ) { /* rrCan1Chli_L208_Start User Code start*/ /* rrCan1Chli_L208_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1CHLI_LDtc688 * SYMBOL: rrCan1CHLI_LDtc688 ************************************************************ * RTE Events * D_cd3771f2De706D44bcDad66D11b19d2d70a4 ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1CHLI_LDtc688_sCHLI_LDtc688_Msg(&ptssrCan1CHLI_LDtc688_sCHLI_LDtc688_Msg); Feedback_ptssrCan1CHLI_LDtc688_sCHLI_LDtc688_Msg = Rte_Feedback_ppsseCan1CHLI_LDtc688_sCHLI_LDtc688_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1CHLI_LDtc688 ( void ) { /* rrCan1CHLI_LDtc688_Start User Code start*/ /* rrCan1CHLI_LDtc688_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1CHLI_LHwVer598 * SYMBOL: rrCan1CHLI_LHwVer598 ************************************************************ * RTE Events * Event_rrCan1CHLI_LHwVer598_rdSysMonDeInit_SEND_ppsseCan1CHLI_LHwVer598_sCHLI_LHwVer598_Msg ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1CHLI_LHwVer598_sCHLI_LHwVer598_Msg(&ptssrCan1CHLI_LHwVer598_sCHLI_LHwVer598_Msg); Feedback_ptssrCan1CHLI_LHwVer598_sCHLI_LHwVer598_Msg = Rte_Feedback_ppsseCan1CHLI_LHwVer598_sCHLI_LHwVer598_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1CHLI_LHwVer598 ( void ) { /* rrCan1CHLI_LHwVer598_Start User Code start*/ /* rrCan1CHLI_LHwVer598_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1CHLI_LSwVer594 * SYMBOL: rrCan1CHLI_LSwVer594 ************************************************************ * RTE Events * D_7c78617dD3eb8D4b1dD9df1D20cdafd64774 ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1CHLI_LSwVer594_sCHLI_LSwVer594_Msg(&ptssrCan1CHLI_LSwVer594_sCHLI_LSwVer594_Msg); Feedback_ptssrCan1CHLI_LSwVer594_sCHLI_LSwVer594_Msg = Rte_Feedback_ppsseCan1CHLI_LSwVer594_sCHLI_LSwVer594_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1CHLI_LSwVer594 ( void ) { /* rrCan1CHLI_LSwVer594_Start User Code start*/ /* rrCan1CHLI_LSwVer594_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1Chli_R209 * SYMBOL: rrCan1Chli_R209 ************************************************************ * RTE Events * D_07cac861D1748D4bbdDaeb7D20fe5968225f ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1Chli_R209_sChli_R209_Msg(&ptssrCan1Chli_R209_sChli_R209_Msg); Feedback_ptssrCan1Chli_R209_sChli_R209_Msg = Rte_Feedback_ppsseCan1Chli_R209_sChli_R209_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1Chli_R209 ( void ) { /* rrCan1Chli_R209_Start User Code start*/ /* rrCan1Chli_R209_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1ChlI_R5C9 * SYMBOL: rrCan1ChlI_R5C9 ************************************************************ * RTE Events * D_143382efD50cbD4144Daf0aDc0555185dda9 ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1ChlI_R5C9_sChlI_R5C9_Msg(&ptssrCan1ChlI_R5C9_sChlI_R5C9_Msg); Feedback_ptssrCan1ChlI_R5C9_sChlI_R5C9_Msg = Rte_Feedback_ppsseCan1ChlI_R5C9_sChlI_R5C9_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1ChlI_R5C9 ( void ) { /* rrCan1ChlI_R5C9_Start User Code start*/ /* rrCan1ChlI_R5C9_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1CHLI_RDtc689 * SYMBOL: rrCan1CHLI_RDtc689 ************************************************************ * RTE Events * D_438ee68cD8b18D4739D83b6D16d18c600447 ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1CHLI_RDtc689_sCHLI_RDtc689_Msg(&ptssrCan1CHLI_RDtc689_sCHLI_RDtc689_Msg); Feedback_ptssrCan1CHLI_RDtc689_sCHLI_RDtc689_Msg = Rte_Feedback_ppsseCan1CHLI_RDtc689_sCHLI_RDtc689_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1CHLI_RDtc689 ( void ) { /* rrCan1CHLI_RDtc689_Start User Code start*/ /* rrCan1CHLI_RDtc689_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1CHLI_RHwVer599 * SYMBOL: rrCan1CHLI_RHwVer599 ************************************************************ * RTE Events * Event_rrCan1CHLI_RHwVer599_rdSysMonDeInit_SEND_ppsseCan1CHLI_RHwVer599_sCHLI_RHwVer599_Msg ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1CHLI_RHwVer599_sCHLI_RHwVer599_Msg(&ptssrCan1CHLI_RHwVer599_sCHLI_RHwVer599_Msg); Feedback_ptssrCan1CHLI_RHwVer599_sCHLI_RHwVer599_Msg = Rte_Feedback_ppsseCan1CHLI_RHwVer599_sCHLI_RHwVer599_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1CHLI_RHwVer599 ( void ) { /* rrCan1CHLI_RHwVer599_Start User Code start*/ /* rrCan1CHLI_RHwVer599_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" /************************************************************ * Start User Prototypes - Do not remove this comment */ /* Add your prototypes here */ /* End User Prototypes - Do not remove this comment ************************************************************/ /************************************************************ * RUNNABLE: rrCan1CHLI_RSwVer595 * SYMBOL: rrCan1CHLI_RSwVer595 ************************************************************ * RTE Events * Event_rrCan1CHLI_RSwVer595_rdSysMonDeInit_SEND_ppsseCan1CHLI_RSwVer595_sCHLI_RSwVer595_Msg ************************************************************ * Send API *********************************************** * Rte_Write_ppsseCan1CHLI_RSwVer595_sCHLI_RSwVer595_Msg(&ptssrCan1CHLI_RSwVer595_sCHLI_RSwVer595_Msg); Feedback_ptssrCan1CHLI_RSwVer595_sCHLI_RSwVer595_Msg = Rte_Feedback_ppsseCan1CHLI_RSwVer595_sCHLI_RSwVer595_Msg(); * ************************************************************/ //#define ctaaSysMon_START_SEC_CODE //#include "ctaaSysMon_MemMap.h" FUNC(void, ctaaSysMon_CODE) ctaaSysMon_rrCan1CHLI_RSwVer595 ( void ) { /* rrCan1CHLI_RSwVer595_Start User Code start*/ /* rrCan1CHLI_RSwVer595_Start User Code end*/ } //#define ctaaSysMon_STOP_SEC_CODE //#include "ctaaSysMon_MemMap.h" //-------------------------------------------------------------------------------------------------- /// \brief increase cycle time counters and set theinvalid states if 200ms timeouts are reached /// \param none /// \notes /// FLM3.SWRS.19882 If the CAN message CON_VEH is not received within 200 milliseconds, then the application shall set the state Vehicle_Invalid_State. /// FLM3.SWRS.19850 If the CAN message V_VEH is not received within 200 milliseconds, then the application shall set the state Speed_Invalid_State. /// FLM3.SWRS.19849 If the CAN message CTR_LP_EX_2 is not received within 200 milliseconds, then the application shall set the state LowBeam_Invalid_State. //-------------------------------------------------------------------------------------------------- #if 0 STATIC_AL void SysMon_Cycle10ms_HandleTimeOutCtrs(void) { if (SysMon_ucLightCtrlMsg2TimeOutCntr <= SYSMON_MSG_TIMEOUT_COUNTER) { SysMon_ucLightCtrlMsg2TimeOutCntr++; SysMon_Cycle10ms_HandleFailureCtrs_LightCtrlMsg2(); } else { SysMon_SetLowBeamState(SysMon_LowBeam_Invalid_State); } if (SysMon_ucLightCtrlMsg1TimeOutCntr <= SYSMON_MSG_TIMEOUT_COUNTER) { SysMon_ucLightCtrlMsg1TimeOutCntr++; SysMon_Cycle10ms_HandleFailureCtrs_LightCtrlMsg1(); } else { SysMon_SetTurnIndicatorState(SysMon_TurnIndicator_Invalid_State); } if (SysMon_ucVedCmdTimeOutCntr <= SYSMON_MSG_TIMEOUT_COUNTER) { SysMon_ucVedCmdTimeOutCntr++; } else { SysMon_SetSpeedState(SysMon_Speed_Invalid_State); } } #endif //-------------------------------------------------------------------------------------------------- /// \brief Encapsulate call of cyclic functions for Pdu handlers /// \param none /// \note called eyery 400 ms //-------------------------------------------------------------------------------------------------- #if 0 STATIC_AL void SysMon_Cycle10ms_PduHandlers(void) { //TODO Add more Rx message cyclic functions SysMonRx_LightCtrlMsg2_Cycle(); } #endif //-------------------------------------------------------------------------------------------------- /// \brief SysMon private helper to get ECU mounting side (set during initialization) /// \param none /// \return - //-------------------------------------------------------------------------------------------------- SysMon_EnumEcuMountingSide SysMon_EcuMountingSide(void) { return SysMon_eMountingSide; } //-------------------------------------------------------------------------------------------------- /// \brief SysMon private helper to get Bus-Off status /// \param none /// \return - //-------------------------------------------------------------------------------------------------- boolean SysMon_isActiveBusOff(void) { return SysMon_boBusOff; } //-------------------------------------------------------------------------------------------------- /// \brief SysMon private helper to get information whether DTC's are allowed /// \param none /// \note During the first 100 msec after system start DTC's are not allowed /// \return TRUE only ever when DTC's are allowed //-------------------------------------------------------------------------------------------------- boolean SysMon_isDtcAllowed(void) { boolean retVal = TRUE; if (SysMon_WaitCntUntilDtcAllowed > 0U) { retVal = FALSE; } return retVal; } //-------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------- #ifndef UNIT_TEST void SysMon_ASIL_Notlauf_TriggerCddLed_LowBeam(uint8 value) { tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; if (TRUE == SysMon_Data_IsCodingDataValid()) //-- safe { for (uint32 n = 0; n < SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS; n++) { if ( (SysMon_Data_eLB_1 == pLedChPram[n].eName) ) //TODO - clarify coding data DLR low bean instead of SysMon_Data_eLM_LB_FuSi beacuse of CAF values. Coding values doesnt set te FuSi channel//if (SysMon_Data_eLM_LB_FuSi == SysMon_Data_GetLMName(n)) { //-- todo save old values for re-activation when end of Notlauf if needed if (SYSMON_LOWBEAM_OFF == value) { SysMon_LsTarget_ASIL.asLsVal[n].unCurrent = 0U; SysMon_LsTarget_ASIL.asLsVal[n].unDutyCycle = 0U; SysMon_aLsTarget[n].unCurrent = 0U; SysMon_aLsTarget[n].unDutyCycle = 0U; } else { //-- do not touch other channels //-- todo check min PWM and min current when AUTOSAR RTE functions are available SysMon_CheckMinPWMandCurrent(n); } } //-- LB_FuSi } //-- for } //-- valid } #endif //-------------------------------------------------------------------------------------------------- /// \brief Check the Lowbean current and PWM values in context of Notlauftabelle by triggerering the higher values directly to CddLed /// \param n - channel index- the caller shall ensure the vector range (design by contract) //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_CheckMinPWMandCurrent(uint32 ChannelIdx) { tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; IsLightSourceErrorFree = SysMon_Leddiag_IsLightSourceErrorFree(ChannelIdx); // PRQA S 4404 if(IsLightSourceErrorFree == TRUE) //No electrical error occurred { if ( SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unCurrent < SYSMON_DATA_UINT16_MINIMAL_CURRENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_CURRENT_DRV[ChannelIdx])) { SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unCurrent = SYSMON_DATA_UINT16_MINIMAL_CURRENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_CURRENT_DRV[ChannelIdx]); SysMon_aLsTarget[ChannelIdx].unCurrent = SYSMON_DATA_UINT16_MINIMAL_CURRENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_CURRENT_DRV[ChannelIdx]); } if ( SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unDutyCycle < SYSMON_SCALE_PERCENT_TO_UINT16(SYSMON_DATA_UINT8_0_5PERCENT_TO_PERCENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_PWM_DRV[ChannelIdx]))) { SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unDutyCycle = SYSMON_SCALE_PERCENT_TO_UINT16(SYSMON_DATA_UINT8_0_5PERCENT_TO_PERCENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_PWM_DRV[ChannelIdx])); SysMon_aLsTarget[ChannelIdx].unDutyCycle = SYSMON_SCALE_PERCENT_TO_UINT16(SYSMON_DATA_UINT8_0_5PERCENT_TO_PERCENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_PWM_DRV[ChannelIdx])); } } else //An electrical error has occurred { SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unCurrent = 0U; SysMon_aLsTarget[ChannelIdx].unCurrent = 0U; SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unDutyCycle = 0U; SysMon_aLsTarget[ChannelIdx].unDutyCycle = 0U; } } //----------------------------------------------------------------------------- /// \brief Return last valid recieved Vbbost from RTE /// /// \descr /// /// \param - /// /// \return uint32: VBoost [mv] //----------------------------------------------------------------------------- uint32 SysMon_Get_VBoost(uint8 indx) { //return (uint32)12000; /* SysMon_BoostStatusFault.lStatVBoost;*/ return (SysMon_CddLedStatus_ASIL.asStatus[indx].eVinSts); } //----------------------------------------------------------------------------- /// \brief Return if the channel is a low bean FuSi channel /// /// \descr /// /// \param - /// /// \return boolean //----------------------------------------------------------------------------- boolean SysMon_IsLowBeamLs(uint32 ulLsIdx) { tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; boolean boLM_LB_FuSi = FALSE; if (ulLsIdx <= SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS) { if (SysMon_Data_eLB_1 == pLedChPram[ulLsIdx].eName) { boLM_LB_FuSi = TRUE; } } return boLM_LB_FuSi; } //----------------------------------------------------------------------------- /// \brief SysMon_IsLowBeamOrTurnIndicatorLs Return if the channel is a low bean FuSi or a turn indicator channel /// /// \descr /// /// \param - /// /// \return boolean //----------------------------------------------------------------------------- boolean SysMon_IsLowBeamOrTurnIndicatorLs(uint32 ulLsIdx) { tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; boolean boLM_LowBeamOrTurnIndicatorLs = FALSE; if (ulLsIdx <= SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS) { if ( (SysMon_Data_eLB_1 == pLedChPram[ulLsIdx].eName) || (SysMon_Data_eTI_1 == pLedChPram[ulLsIdx].eName)) { boLM_LowBeamOrTurnIndicatorLs = TRUE; } } return boLM_LowBeamOrTurnIndicatorLs; } //----------------------------------------------------------------------------- /// \brief SysMon_IsTurnIndicatorLs Return if the channel is FuSi turn indicator channel /// /// \descr /// /// \param - /// /// \return boolean //----------------------------------------------------------------------------- boolean SysMon_IsTurnIndicatorLs(uint32 ulLsIdx) { tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; boolean boLM_TurnIndicatorLs = FALSE; if (ulLsIdx <= SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS) { if (SysMon_Data_eTI_1 == pLedChPram[ulLsIdx].eName) { boLM_TurnIndicatorLs = TRUE; } } return boLM_TurnIndicatorLs; } //----------------------------------------------------------------------------- /// //----------------------------------------------------------------------------- uint8 SysMon_GetBuckStatusFault_ASIL_ErrInternalCom(void) { return 0;//SysMon_BuckStatusFault_ASIL.ucErrInternalCom; } //----------------------------------------------------------------------------- /// \brief /// /// \descr /// /// \param - /// /// \return uint8 //----------------------------------------------------------------------------- uint8 SysMon_GetSpiStatusFault_ASIL_ErrInternalCom(void) { //TODO return 0; /* SysMon_SpiStatusFault_ASIL.ucErrInternalCom;*/ } //----------------------------------------------------------------------------- /// \brief /// /// \descr /// /// \param - /// /// \return uint8 //----------------------------------------------------------------------------- uint8 SysMon_GetIoStatusFault0_ErrInternalCom(void) { return SysMon_IoStatusFault0_ucErrInternalCom; } //----------------------------------------------------------------------------- /// \brief /// /// \descr /// /// \param - /// /// \return void //----------------------------------------------------------------------------- void SysMon_SetLsStatusCRCErrorppCddLedBuckStatusFault0(boolean boIsErrorActive) { if (boIsErrorActive != FALSE) { SysMon_ucErrInternalCom |= SYSMON_INTERNAL_COM_CRC_ERR_ppCddLedBuckStatusFault0; } else { SysMon_ucErrInternalCom &= (uint8) ~(SYSMON_INTERNAL_COM_CRC_ERR_ppCddLedBuckStatusFault0); } } //----------------------------------------------------------------------------- /// \brief /// /// \descr /// /// \param boIsErrorActive /// /// \return void //----------------------------------------------------------------------------- void SysMon_SetLsStatusCRCErrorppCddSpiStatusFault0(boolean boIsErrorActive) { if (boIsErrorActive != FALSE) { SysMon_ucErrInternalCom |= SYSMON_INTERNAL_COM_CRC_ERR_ppCddSpiStatusFault0; } else { SysMon_ucErrInternalCom &= (uint8) ~(SYSMON_INTERNAL_COM_CRC_ERR_ppCddSpiStatusFault0); } } //----------------------------------------------------------------------------- /// \brief /// /// \descr /// /// \param boIsErrorActive /// /// \return void //----------------------------------------------------------------------------- void SysMon_SetLsStatusCRCErrorppIoHwAbUserIoStatusFault0(boolean boIsErrorActive) { if (boIsErrorActive != FALSE) { SysMon_ucErrInternalCom |= SYSMON_INTERNAL_COM_CRC_ERR_ppIoHwAbUserIoStatusFault0; } else { SysMon_ucErrInternalCom &= (uint8) ~(SYSMON_INTERNAL_COM_CRC_ERR_ppIoHwAbUserIoStatusFault0); } } //-------------------------------------------------------------------------------------------------- /// \brief Get message CtrFnIdc state /// \param none /// \note Called from SysMon_Blinker /// \return - //-------------------------------------------------------------------------------------------------- SysMon_EnumSignalState SysMon_GetCtrFnIdcState(void) { return SysMon_BlinkerState; } #if 0 //-------------------------------------------------------------------------------------------------- /// \brief SysMon_Blinker_TurnOffBlinkerLight /// \param none /// \note Called from SysMon_Blinker - set the blinker state to invalid, when a CRC, Alive Counter or Timeout occurs /// \return - //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_Blinker_TurnOffBlinkerLight(void) { SysMon_BlinkerState = eSysMonSigState_Invalid; } //-------------------------------------------------------------------------------------------------- /// \brief SysMon_Blinker_TurnOnBlinkerLight /// \param none /// \note Called from SysMon_Blinker - set the blinker state to valid /// \return - //-------------------------------------------------------------------------------------------------- STATIC_AL void SysMon_Blinker_TurnOnBlinkerLight(void) { SysMon_BlinkerState = eSysMonSigState_Valid; } #endif //----------------------------------------------------------------------------- /// \brief Return true if Error detection enabled from SysVolt /// /// \descr /// /// \param - /// /// \return bool //----------------------------------------------------------------------------- bool SysMon_IsErrorDiagEnabled(void) { return (SysMon_SysVoltStatus.boErrorDiagEnabled== FALSE) ? false : true; } #if 0 //-------------------------------------------------------------------------------------------------- /// \brief Notify SysMon that a LightCtrlMsg2 was received (be it valid or invalid) /// \descr Reset timeout counters. Note that SysMon is handling timeout monitoring for low beam itself instead of /// relying on COM feedback because functional safety reactions need to be faster than standard /// timeout times. //-------------------------------------------------------------------------------------------------- void SysMon_LightCtrlMsg2_Received(void) { SysMon_ucLightCtrlMsg2TimeOutCntr = 0U; } //-------------------------------------------------------------------------------------------------- /// \brief Notify SysMon that a LightCtrlMsg1 was received (be it valid or invalid) /// \descr Reset timeout counters. Note that SysMon is handling timeout monitoring for low beam itself instead of /// relying on COM feedback because functional safety reactions need to be faster than standard /// timeout times. //-------------------------------------------------------------------------------------------------- void SysMon_LightCtrlMsg1_Received(void) { SysMon_ucLightCtrlMsg1TimeOutCntr = 0U; } void SysMon_VedCmd_Received(void) { SysMon_ucVedCmdTimeOutCntr = 0; } //-------------------------------------------------------------------------------------------------- /// \brief Reset SysMon_TimeOut_V_VEH_CycleCtr /// \param none /// \note //FLM3.SWRS.19850 If the CAN message V_VEH is not received within 200 milliseconds, then the application shall set the state Speed_Invalid_State. //-------------------------------------------------------------------------------------------------- void SysMon_Reset_SysMon_TimeOut_VED_CMD_CycleCtr(void) { SysMon_ucVedCmdTimeOutCntr = 0U; } #endif /*void SysMon_Blinker_Cycle10ms(void) { }*/ /*void SysMon_LedDiag_Cycle(void) { }*/ STATIC_AL void SysMon_GetBoostVoltage(void) { //uint32 ulVBoostOffset = 0; tSysMon_Data_BoostParam* pBoostParam = SysMon_Data_Get_BoostParamPtr(); tSysMon_Data_LedChParam* pSysMon_Data_LedChParam= SysMon_Data_GetaLEDChParamPtr(); for (uint8 idx = 0u; idx < NO_OF_LED_DRV_CHANNEL; idx++) //Channel { aulLedVoltageCurr[idx] = pSysMon_Data_LedChParam[idx].ulLedOverVoltValue; if (aulLedVoltageCurr[idx] > aulLedVoltagePrev) { aumaxBoostVolt = aulLedVoltageCurr[idx] ; } aulLedVoltagePrev = aulLedVoltageCurr[idx]; } aumaxBoostVolt = aumaxBoostVolt + pBoostParam->ulBoostVoltageHeadroom; if(aumaxBoostVolt < pBoostParam->ulVBoostUndervoltageLimit) { aumaxBoostVolt = pBoostParam->ulVBoostUndervoltageLimit; } else if(aumaxBoostVolt > pBoostParam->ulVBoostOvervoltageLimit) { aumaxBoostVolt = pBoostParam->ulVBoostOvervoltageLimit; } else { //Do Nothing } //fix Boost output 35V //aumaxBoostVolt = 35000; } #if 0 STATIC_AL void SysMon_Cycle10ms_HandleFailureCtrs_LightCtrlMsg2(void) { tLowBeamLastReadState LowBeamLastReadState; LowBeamLastReadState = SysMonRx_LightCtrlMsg2_Get_SysMon_LowBeamLastReadState(); if (LowBeamLastReadState.SysMon_LowBeamLastReadState == SysMon_LowBeam_Valid_State) { SysMon_LowBeam_Invalid_State_ToutCounter = 0; if (SysMon_LowBeam_Valid_State_ToutCounter < SYSMON_MSG_TIMEOUT_ERROR_COUNTER) // sysmon 10ms based timer counter { SysMon_LowBeam_Valid_State_ToutCounter++; } else { if(LowBeamLastReadState.SysMon_LowBeamLastReadState_ValidCounter > SYSMON_LOWBEAM_VALID_STATE_MIN_COUNTER) //received error messages counter. If not reached, wait for timeout. { SysMon_SetLowBeamState(SysMon_LowBeam_Valid_State); } } } else { SysMon_LowBeam_Valid_State_ToutCounter = 0; if (SysMon_LowBeam_Invalid_State_ToutCounter < SYSMON_MSG_TIMEOUT_ERROR_COUNTER) { SysMon_LowBeam_Invalid_State_ToutCounter++; } else { if(LowBeamLastReadState.SysMon_LowBeamLastReadState_InvalidCounter > SYSMON_LOWBEAM_INVALID_STATE_MIN_COUNTER) { SysMon_SetLowBeamState(SysMon_LowBeam_Invalid_State); } } } } STATIC_AL void SysMon_Cycle10ms_HandleFailureCtrs_LightCtrlMsg1(void) { tTurnIndicatorLastReadState TurnIndicatorLastReadState; TurnIndicatorLastReadState = SysMonRx_LightCtrlMsg1_Get_SysMon_TurnIndicatorLastReadState(); if (TurnIndicatorLastReadState.SysMon_TurnIndicatorLastReadState== SysMon_TurnIndicator_Valid_State) { SysMon_TurnIndicator_Invalid_State_ToutCounter = 0; if (SysMon_TurnIndicator_Valid_State_ToutCounter < SYSMON_MSG_TIMEOUT_ERROR_COUNTER) // sysmon 10ms based timer counter { SysMon_TurnIndicator_Valid_State_ToutCounter++; } else { if(TurnIndicatorLastReadState.SysMon_TurnIndicatorLastReadState_ValidCounter > SYSMON_TURNINDICATOR_VALID_STATE_MIN_COUNTER) //received error messages counter. If not reached, wait for timeout. { SysMon_SetTurnIndicatorState(SysMon_TurnIndicator_Valid_State); } } } else { SysMon_TurnIndicator_Valid_State_ToutCounter = 0; if (SysMon_TurnIndicator_Invalid_State_ToutCounter < SYSMON_MSG_TIMEOUT_ERROR_COUNTER) { SysMon_TurnIndicator_Invalid_State_ToutCounter++; } else { if(TurnIndicatorLastReadState.SysMon_TurnIndicatorLastReadState_InvalidCounter > SYSMON_TURNINDICATOR_INVALID_STATE_MIN_COUNTER) { SysMon_SetTurnIndicatorState(SysMon_TurnIndicator_Invalid_State); } } } } #endif //-------------------------------------------------------------------------------------------------- /// \brief SysMon_Cycle10ms_HandLowBeam /// \param none /// \notes: STATIC_AL void SysMon_Cycle10ms_HandleLowBeam(void) { SysMon_EnumLowBeamState SysMon_LowBeamState; SysMon_EnumSpeedState SysMon_SysMon_SpeedState; boolean SysMon_bKL15Sts; //tSysMon_Data_LedChParam* pLedChPram = SysMon_Data_GetaLEDChParamPtr(); //-- static tSysMon_Data_LedChParam SysMon_Data_aLedChParam[SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS]; uint8 chIndx = 4U; SysMon_LowBeamState = SysMon_GetLowBeamState(); //SysMon_LowBeam_Valid_State check if the state is valid //SysMon_SysMon_SpeedState = SysMon_GetSpeedState(); SysMon_bKL15Sts = SysMon_isWakeupLineActive(); //Minimal brightness check for low beam if ( ( SysMon_LowBeam_Invalid_State == SysMon_LowBeamState ) && (SysMon_EcuNmModes == H5_WAKE_UP_MODE) && (TRUE == SysMon_bKL15Sts) && (1u == SysMon_SysVoltStatus.sLedVoltStatus.eVoltSts)/*&& ((SysMon_Speed_Drive_State == SysMon_SysMon_SpeedState) ||(SysMon_Speed_Invalid_State == SysMon_SysMon_SpeedState) || (SysMon_MsgCrcSqcErr.bVedCmdCrc == FALSE) ||( SysMon_MsgCrcSqcErr.bVedCmdSqc == FALSE) || (SysMon_MsgTimeoutErr.bVedCmdTo == TRUE) )*/) { //Update Low Beam Status if(/*(SysMon_MsgCrcSqcErr.bVedCmdCrc == FALSE) && ( SysMon_MsgCrcSqcErr.bVedCmdSqc == FALSE) && */(SysMon_MsgTimeoutErr.bVedCmdTo == FALSE) && (SysMon_Speed_0_State == SysMon_SysMon_SpeedState)&& (SysMonLowBeamFctReqPrev.eLowBeamReq == ACT_REQ_OFF)) { // SysMonLowBeamFctReq.eLowBeamReq = ACT_REQ_OFF; } else { // SysMonLowBeamFctReq.eLowBeamReq = ACT_REQ_ON; SysMon_CheckMinPWMandCurrent(chIndx); } // SysMonLowBeamFctReq.bfLowBeamQty = QTY_OK; //if((SysMonLowBeamFctReq.eLowBeamReq != SysMonLowBeamFctReqPrev.eLowBeamReq ) && (SysMonLowBeamFctReqPrev.eLowBeamReq == ACT_REQ_OFF)) //{ // SysMon_bLBDelayStart = TRUE; //} // SysMonLowBeamFctReqPrev.eLowBeamReq = SysMonLowBeamFctReq.eLowBeamReq; //if (TRUE == SysMon_Data_IsCodingDataValid()) //-- safe //{ // for (uint32 n = 0; n < SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS; n++) // { //IsLightSourceErrorFree = SysMon_Leddiag_IsLightSourceErrorFree(n); // if ( (SysMon_Data_eLM_LB_FuSi == pLedChPram[n].eName)) /*FuSi channel and no channel error!!*/ //{ //-- do not touch other channels //-- todo check min PWM and min current when AUTOSAR RTE functions are available //SysMon_CheckMinPWMandCurrent(chIndx); //} //-- LB_FuSi //} //-- for //} //-- valid } //State else { //ReqLowBeamFct.eLowBeamReq = ACT_REQ_OFF; //ReqLowBeamFct.bfLowBeamQty = QTY_OK; } } // PRQA S 5324 1 // SW architecture //Get Voltage Status #if 0 SysMon_EnumSysVoltageStatus SysMon_GetSysVoltageStatus(void) { return (SysMon_EnumSysVoltageStatus)(SysMon_SysVoltStatus.sSupplyVoltStatus.eVoltSts); } #endif //Get RHS Ecu Fault Information void GetRhsEcuFaultInfo(tRhsEcuFaultInfo *pRhsEcuFaultInfo) { tiu32Voltage_mV unVBatVal; uint8 bUnknownMountingSide; //Check System Voltage //IoHwAbUser_GetECUSupply(& unVBatVal);//open after integration //Check Mounting Side bUnknownMountingSide = (SysMon_eMountingSide ==eUnknownMountingSide) ?1u : 0u; #ifdef REVISE_VERSION_VC1 pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_LB_Base = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_LB_SIG = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_HB = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_DRL = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_POS = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_TI = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_CL = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pRhsEcuFaultInfo->ucRhsStatesInfoFault_HLM_R_FAN = SysMon_IsFanError(); pRhsEcuFaultInfo->ucRhsStatesInfoErrVer_HLM_R = SysMon_IsSystemUnderVoltage() | (1u ==SysMon_IsSystemUnderVoltage() ? 2u : 0u) ; pRhsEcuFaultInfo->ucRhsStatesInfoHLM_R_Comm_State = SysMon_MsgTimeoutErr.bLightCtrlCmdTo | SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc | SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc | SysMon_boIsTxError | ((SysMon_VehicleInfoCommunication_Error.isDebounced == TRUE) ? 1u : 0u) | ((SysMon_AFSCommandCommunication_Error.isDebounced == TRUE) ? 1u : 0u) | ((SysMon_MatrixHBCommandCommunication_Error.isDebounced == TRUE) ? 1u : 0u) | (SysMon_IsCanBusOff()); #else pRhsEcuFaultInfo->ucRhsStatesInfoFaultDrlsDrllghtdstrbtnRh1 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultDrlsDrllghtdstrbtnRh3 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultDrlsPolghtdstrbtnRh1 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultDrlsPolghtdstrbtnRh3 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultLdsCllghtdstrbtnRh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg1To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultLdsFoglghtdstrbtnRh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultLdsHblghtdstrbtnRh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultLdsLblghtdstrbtnRh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultRhsRghthdlMotor = SysMon_IsSystemUnderVoltage() | (1u ==SysMon_IsSystemUnderVoltage() ? 2u : 0u) ; pRhsEcuFaultInfo->ucRhsStatesInfoFaultTilsTilghtdstrbtnRh1 = ( (SysMon_MsgTimeoutErr.bLightCtrlMsg1To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) | SysMon_IsHSS2Error(); #ifndef E2E_Remove pRhsEcuFaultInfo->ucRhsStatesInfoRhsBoartFault = bUnknownMountingSide | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | SysMon_IsSystemUnderVoltage()|SysMon_IsSystemOverVoltage() | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) | SysMon_IsBoardFaultForKL15() | SysMon_E2EError | SysMon_LedDiag_IsVBoostErrActive() | SysMon_IsFanError() | SysMon_IsHSS2Error(); #else pRhsEcuFaultInfo->ucRhsStatesInfoRhsBoartFault = bUnknownMountingSide | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | SysMon_IsSystemUnderVoltage() | SysMon_IsSystemOverVoltage() | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) | SysMon_IsBoardFaultForKL15() | /*SysMon_E2EError |*/ SysMon_LedDiag_IsVBoostErrActive() | SysMon_IsFanError() | SysMon_IsHSS2Error(); #endif pRhsEcuFaultInfo->ucRhsStatesInfoRhsComFault = SysMon_MsgTimeoutErr.bLightCtrlMsg1To | SysMon_MsgTimeoutErr.bLightCtrlMsg2To | SysMon_MsgTimeoutErr.bVedCmdTo | SysMon_MsgCrcSqcErr.bLightCtrlMsg1Crc | SysMon_MsgCrcSqcErr.bLightCtrlMsg1Sqc | SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc | SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc | /*SysMon_MsgCrcSqcErr.bVedCmdCrc | SysMon_MsgCrcSqcErr.bVedCmdSqc |*/ SysMonStepperTgt.eLevellingReqQty | SysMon_boIsTxError; pRhsEcuFaultInfo->ucRhsStatesInfoRhsLamp2PowerFault =SysMon_IsSystemUnderVoltage() | (1u ==SysMon_IsSystemOverVoltage() ? 2u : 0u) | (TRUE == SysMon_IsBoardFaultForKL15()? 2u : 0u ); #endif }// PRQA S 5324 //Get LHS Ecu Fault Information void GetLhsEcuFaultInfo(tLhsEcuFaultInfo *pLhsEcuFaultInfo) { uint8 bUnknownMountingSide; //Check Mounting Side bUnknownMountingSide = (SysMon_eMountingSide ==eUnknownMountingSide) ?1u : 0u; #ifdef REVISE_VERSION_VC1 pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_LB_Base = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_LB_SIG = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_HB = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_DRL = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_POS = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_TI = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_CL = bUnknownMountingSide | ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) ? 1u : 0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == FALSE) ? 0u : 1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == FALSE) ? 0u : 1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u); pLhsEcuFaultInfo->ucLhsStatesInfoFault_HLM_L_FAN = SysMon_IsFanError(); pLhsEcuFaultInfo->ucLhsStatesInfoErrVer_HLM_L = SysMon_IsSystemUnderVoltage() | (1u == SysMon_IsSystemUnderVoltage() ? 2u : 0u); pLhsEcuFaultInfo->ucLhsStatesInfoHLM_L_Comm_State = SysMon_MsgTimeoutErr.bLightCtrlCmdTo | SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc | SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc | SysMon_boIsTxError | ((SysMon_VehicleInfoCommunication_Error.isDebounced == TRUE) ? 1u : 0u) | ((SysMon_AFSCommandCommunication_Error.isDebounced == TRUE) ? 1u : 0u) | ((SysMon_MatrixHBCommandCommunication_Error.isDebounced == TRUE) ? 1u : 0u) | (SysMon_IsCanBusOff()); #else pLhsEcuFaultInfo->ucLhsStatesInfoFaultDrlsDrllghtdstrbtnLh1 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultDrlsDrllghtdstrbtnLh3 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultDrlsPolghtdstrbtnLh1 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultDrlsPolghtdstrbtnLh3 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultLdsCllghtdstrbtnLh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg1To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultLdsFoglghtdstrbtnLh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultLdsHblghtdstrbtnLh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultLdsLblghtdstrbtnLh2 = bUnknownMountingSide | ( (SysMon_MsgTimeoutErr.bLightCtrlMsg2To == TRUE) ? 1u:0u)| ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultLhsRghthdlMotor = SysMon_IsSystemUnderVoltage() | (1u ==SysMon_IsSystemUnderVoltage() ? 2u : 0u) ; pLhsEcuFaultInfo->ucLhsStatesInfoFaultTilsTilghtdstrbtnLh1 = bUnknownMountingSide |( (SysMon_MsgTimeoutErr.bLightCtrlMsg1To == TRUE) ? 1u:0u)|((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Sqc == FALSE) ? 0u :1u) | ((SysMon_MsgCrcSqcErr.bLightCtrlMsg1Crc == FALSE) ? 0u :1u) | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) | SysMon_IsHSS2Error(); #ifndef E2E_Remove pLhsEcuFaultInfo->ucLhsStatesInfoLhsBoartFault = bUnknownMountingSide | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | SysMon_IsSystemUnderVoltage() | SysMon_IsSystemOverVoltage() | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) | SysMon_IsBoardFaultForKL15() | SysMon_E2EError | SysMon_LedDiag_IsVBoostErrActive() | SysMon_IsFanError() | SysMon_IsHSS2Error(); #else pLhsEcuFaultInfo->ucLhsStatesInfoLhsBoartFault = bUnknownMountingSide | ((SysMon_IsEcuNotCoded() == TRUE) ? 1u : 0u) | SysMon_IsSystemUnderVoltage() | SysMon_IsSystemOverVoltage() | ((SysMon_Data_IsCodingDataValid() == TRUE) ? 0u : 1u) | SysMon_IsBoardFaultForKL15() | /*SysMon_E2EError | */SysMon_LedDiag_IsVBoostErrActive() | SysMon_IsFanError() | SysMon_IsHSS2Error(); #endif pLhsEcuFaultInfo->ucLhsStatesInfoLhsComFault = SysMon_MsgTimeoutErr.bLightCtrlMsg1To | SysMon_MsgTimeoutErr.bLightCtrlMsg2To | SysMon_MsgTimeoutErr.bVedCmdTo | SysMon_MsgCrcSqcErr.bLightCtrlMsg1Crc | SysMon_MsgCrcSqcErr.bLightCtrlMsg1Sqc | SysMon_MsgCrcSqcErr.bLightCtrlMsg2Sqc | SysMon_MsgCrcSqcErr.bLightCtrlMsg2Crc | /*SysMon_MsgCrcSqcErr.bVedCmdCrc | SysMon_MsgCrcSqcErr.bVedCmdSqc | */SysMonStepperTgt.eLevellingReqQty | SysMon_boIsTxError; pLhsEcuFaultInfo->ucLhsStatesInfoLhsLamp2PowerFault = SysMon_IsSystemUnderVoltage() | (1u ==SysMon_IsSystemOverVoltage() ? 2u : 0u) | (TRUE == SysMon_IsBoardFaultForKL15()? 2u : 0u ); #endif }// PRQA S 5324 1 // SW architecture //----------------------------------------------------------------------------- /// \brief Return true if ECu not coded /// /// \descr: SysMon_IsEcuNotCoded /// /// \param - /// /// \return bool //----------------------------------------------------------------------------- STATIC_AL boolean SysMon_IsEcuNotCoded(void) { return(( (SysMon_ucVariant != SYSMON_COD_VARIANT_HIGH) && (SysMon_ucVariant != SYSMON_COD_VARIANT_MID) && (SysMon_ucVariant != SYSMON_COD_VARIANT_BASE_OPT1) && (SysMon_ucVariant != SYSMON_COD_VARIANT_BASE) ) ? TRUE : FALSE ); } //----------------------------------------------------------------------------- /// \brief Return true if if System is under-voltage /// /// \descr /// /// \param - /// /// \return bool //----------------------------------------------------------------------------- boolean SysMon_IsSystemUnderVoltage(void) { //Check System Voltage tiu32Voltage_mV unVBatVal; //IoHwAbUser_GetECUSupply(& unVBatVal);//open after integration return(((unVBatVal SYSMON_SCALE_100_VOLTAGE_UINT8_UINT32(applicationCodingData.System.SystemData.SYS_HighSupply_V)) && (SysMon_CodingDataStatus == TRUE)) ? 1u: 0u); } //----------------------------------------------------------------------------- /// \brief Return true if KL15 Voltage Status is more tha 4150 mV /// /// \descr SysMon_isWakeupLineActive /// /// \param - /// /// \return bool //----------------------------------------------------------------------------- boolean SysMon_isWakeupLineActive(void) { return (((SysMon_KL15VoltageSts > SYSMON_VBAT_MIN ) && (SysMon_CodingDataStatus == TRUE))? TRUE : FALSE);//&& EcuNm_VBatMean < 19000; } //----------------------------------------------------------------------------- /// \brief Return TRUE if for C sample /*KL15 < =4.15V,IG ON ' ECU feedback board fault =1 KL15 < =4.15V,IG OFF ' ECU feedback board fault =0 KL15 > 4.15V,IG ON ' ECU feedback board fault =0 KL15 > 4.15V,IG OFF ' ECU feedback board fault =1 KL15 >4.15V/<=4.15V, power mode =reserve ' ECU feedback board fault =1 */ /// /// \descr /// /// \param void /// /// \return boolean //----------------------------------------------------------------------------- boolean SysMon_IsBoardFaultForKL15(void) { boolean bIsKL15WkUpInActive = FALSE; #ifdef REVISE_VERSION_VC1 bIsKL15WkUpInActive = ((SysMon_CodingDataStatus == TRUE) && ((SysMon_KL15VoltageSts <= SYSMON_VBAT_MIN) || (SysMon_KL15VoltageSts >SYSMON_VBAT_MIN))) ? TRUE : FALSE; #else uint8 ucPowerMode; ucPowerMode = SysMon_GetPowerMode(); bIsKL15WkUpInActive = ((SysMon_CodingDataStatus == TRUE) && (((SysMon_KL15VoltageSts <= SYSMON_VBAT_MIN) && (ucPowerMode == 0x04u)) || ((SysMon_KL15VoltageSts >SYSMON_VBAT_MIN) && (ucPowerMode == 0x00u)) ||((ucPowerMode != 0x00u) && (ucPowerMode != 0x04u)))) ? TRUE : FALSE; #endif return bIsKL15WkUpInActive; } //----------------------------------------------------------------------------- /// \brief Function is for checking FuSa coding CRC check /// /// \descr /// /// \param SysMon_GetFuSaCodingStatus /// /// \return uint8 //----------------------------------------------------------------------------- boolean SysMon_IsFuSaCodingValid(void) { #if 0 uint32* pulCrcEFTExpectedFuSa = (uint32*)CODING_FUSA_CRC_ADDRESS; // PRQA S 306// program architecture and readability uint8* pucCrcEFTDataFuSa = (uint8*)CODING_FUSA_START_ADDRESS; // PRQA S 306// program architecture and readability uint32 ulCrcEFT32P4Fusa; boolean boCrcEFTTestResultIsOkFusa = FALSE; #ifndef UNIT_TEST if ((pulCrcEFTExpectedFuSa != NULL_PTR) && (pucCrcEFTDataFuSa != NULL_PTR)) { ulCrcEFT32P4Fusa = Crc_CalculateCRC32P4(pucCrcEFTDataFuSa, (uint32) (CODING_FUSA_END_ADDRESS - CODING_FUSA_START_ADDRESS + 1u), (uint32) 0xFFFFFFFFUL, (boolean) TRUE); if(ulCrcEFT32P4Fusa != *pulCrcEFTExpectedFuSa) { boCrcEFTTestResultIsOkFusa = FALSE; } else { boCrcEFTTestResultIsOkFusa = TRUE; } } #else boCrcEFTTestResultIsOkFusa = Crc_CalculateCRCTest(); #endif #endif boolean boCrcEFTTestResultIsOkFusa = TRUE; return boCrcEFTTestResultIsOkFusa; } //----------------------------------------------------------------------------- /// \brief Function is for checking if Can1 Can Bus is Off /// /// \descr /// /// \param SysMon_GetFuSaCodingStatus /// /// \return uint8 //----------------------------------------------------------------------------- boolean SysMon_IsCanBusOff(void) { return(SysMon_boBusOff); } //----------------------------------------------------------------------------- /// \brief Return Boost error status /// /// \descr: SysMon_Get_VBoostError /// /// \param - /// /// \return uint32: VBoost [mv] //----------------------------------------------------------------------------- uint8 SysMon_Get_VBoostError(void) { return (SysMon_CddBoostStatus.aStatus[0]); /* SysMon_BoostStatusFault.lStatVBoost;*/ } //----------------------------------------------------------------------------- /// \brief Return TRUE if the current is derated by AppM /// /// \descr /// /// \param ulLsIdx /// /// \return boolean //----------------------------------------------------------------------------- boolean SysMon_IsCurrentDerated(uint32 ulLsIdx) { boolean boIsCurrentDerated = FALSE; if (ulLsIdx < SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS) { boIsCurrentDerated = (SysMon_aStatTargetDerated[ulLsIdx].unDutyCycle >= SYSMON_CURRENT_NO_DERATING) ? TRUE : FALSE; } return boIsCurrentDerated; } #ifndef E2E_Remove //----------------------------------------------------------------------------- /// \brief for E2E read RTE /// /// \descr /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysMon_E2EWrapperReadRTE(void) { uint32 retval1, retval2, retval3, retval4; SysMon_EnumErrorIndicationType eErr1, eErr2, eErr3, eErr4; retval1 = SysMon_E2EPW_Read_CddLed_Status(&SysMon_CddLedStatus_ASIL);// LED Status retval2 = SysMon_E2EPW_Read_CddBoost_Status(&SysMon_CddBoostStatus); //Boost Status retval3 = SysMon_E2EPW_Read_CddSwi_Status(&SysMon_AllSwitchStatus); retval4 = SysMon_E2EPW_Read_AllMlcSwitchAndAllSensor_Status(&SysMon_AllMlcSwitchAndAllSensorStatus); eErr1 = SysMonRx_GetE2E_internalErrorIndication(retval1, &SysMon_MaxRepeatedCounter1); eErr2 = SysMonRx_GetE2E_internalErrorIndication(retval2, &SysMon_MaxRepeatedCounter2); eErr3 = SysMonRx_GetE2E_internalErrorIndication(retval3, &SysMon_MaxRepeatedCounter3); eErr4 = SysMonRx_GetE2E_internalErrorIndication(retval4, &SysMon_MaxRepeatedCounter4); (eErr1 !=eSysMonErrNone) ? SysMon_eErr1CntLed++ : ((SysMon_eErr1CntLed > 0u) ? SysMon_eErr1CntLed-- : 0u) ; (eErr2 !=eSysMonErrNone) ? SysMon_eErr2CntBoost++ : ((SysMon_eErr2CntBoost > 0u) ? SysMon_eErr2CntBoost-- : 0u ) ; (eErr3 !=eSysMonErrNone) ? SysMon_eErr3CntSwitch++ : ((SysMon_eErr3CntSwitch > 0u) ? SysMon_eErr3CntSwitch-- : 0u) ; (eErr4 !=eSysMonErrNone) ? SysMon_eErr4CntMlc++ : ((SysMon_eErr4CntMlc > 0u) ? SysMon_eErr4CntMlc-- : 0u) ; SysMon_E2EError = (SysMon_eErr1CntLed >= SYSMON_E2EERROR_DEBOUNCE_COUNTER ? 1u : 0u) | (SysMon_eErr2CntBoost >= SYSMON_E2EERROR_DEBOUNCE_COUNTER ? 1u : 0u) | (SysMon_eErr3CntSwitch >= SYSMON_E2EERROR_DEBOUNCE_COUNTER ? 1u : 0u) | (SysMon_eErr4CntMlc >= SYSMON_E2EERROR_DEBOUNCE_COUNTER ? 1u : 0u) | SysMon_CddLedStatus_ASIL.bfSysMonTargetQty | SysMon_CddBoostStatus.bfSysMonTargetQty | SysMon_AllSwitchStatus.bfSysMonTargetQty | SysMon_AllMlcSwitchAndAllSensorStatus.bfSysMonTargetQty; ; } //----------------------------------------------------------------------------- /// \brief for E2E write RTE /// /// \descr /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysMon_E2EWrapperWriteRTE(void) { // tisLsTarget GrillSetParam; (void)Bsw_MemCpy(&SysMon_AllMlcTargets.aunDutyCycle, &SysMon_TargetsMlcData, sizeof(tiu16Percent_1_328_2DArr)); SysMon_E2EPW_Write_LsTarget0_sSetting(&SysMon_LsTarget_ASIL); SysMon_E2EPW_Write_AllMlcTargets(&SysMon_AllMlcTargets); SysMon_E2EPW_Write_AllSwitchtarget((tisAllSwitchTarget *)&SysMon_AllSwitchTarget); SysMon_E2EPW_Write_ppaseLedBuckDriverSettings_sSettings(&SysMon_LedBuckDriverSettings); // (void)Rte_Memcpy(&GrillSetParam, &SysMon_LsTarget_ASIL.asLsVal[5], sizeof(tisLsTarget)); // GrillSetParam = SysMon_LsTarget_ASIL.asLsVal[5]; // Rte_Write_ppaseSysMonGrill_sLsTarget(&GrillSetParam); } #endif STATIC_AL void SysMon_LedBuckModeSettings(void) { uint32 SysMon_CurrentDerated = 0u; uint32 SysMon_BoostLedVin = 0u; uint8 indx = 0u; /*-----------------------------------------------------------------------------------------------------*/ //VC1 high used variant.According to whether buck error is selected, configure 1 to not use and 0 to use //Errors that are not detected include only open short circuits ,ShortToUbat is Not implemented //VC1 project channle : 1 2 3 4 5 6 7 8 9 10 11 12 //VC1 project funtion : TI2 (not used) HB TI1 LB SIG TI1 CL HB DRL1 DRL2 DRL1 //Light source: (BUCK) (not used) (LMM) (LMM) (BUCK) (BUCK) (LMM) (BUCK) (LMM) (LMM) (BUCK) (LMM) /* */ uint8 MlcConn[4][12] = {{0u,1u,1u,1u,0u,0u,1u,0u,1u,1u,0u,1u},//high {0u,0u,0u,0u,0u,1u,0u,0u,0u,0u,0u,0u}, {0u,0u,0u,0u,0u,1u,0u,0u,0u,0u,0u,0u}, {0u,0u,0u,0u,0u,1u,0u,0u,0u,0u,0u,0u}}; uint32 SysMon_MlcErr = 0u; for(indx = 0u ; indx < SYSMON_CFG_LED_MAX_NO_OF_LS_CHANNELS; indx++) { uint32 CurrentDeratedChk = 0u; uint32 BoostVoltChk = 0u; uint32 MlcErrChkChk = 0u; CurrentDeratedChk = (SysMon_IsCurrentDerated(indx) == TRUE) ?1u: 0u; SysMon_CurrentDerated |= CurrentDeratedChk< 3000) && (ulReadAdcMeanVCCX_3 < 6000))//Start Recover { Vccx3ShortToGNDDebonceTimer++; } else { Vccx3ShortToGNDDebonceTimer = 0U; } if (Vccx3ShortToGNDDebonceTimer == VCCX3_RECOVER_TIMEUP)//Time Up { VccX3ShortToGND = FALSE; Vccx3ShortToGNDDebonceTimer = 0U; } } return VccX3ShortToGND; } //----------------------------------------------------------------------------- /// \brief SysMon_IsVccX3ShortToVBAT /// /// \descr /// /// \param void /// /// \return bool: //----------------------------------------------------------------------------- boolean SysMon_IsVccX3ShortToVBAT(void) { if (VccX3ShortToVBAT == FALSE) { /*VCCx3 > 6.0V Short to VBAT*/ if (ulReadAdcMeanVCCX_3 > 6000)//Start Debonce { Vccx3ShortToVBATDebonceTimer++; } else { Vccx3ShortToVBATDebonceTimer = 0U; } if (Vccx3ShortToVBATDebonceTimer == VCCX3_ShortToVBAT_TIMEUP)//Time Up { VccX3ShortToVBAT = TRUE; Vccx3ShortToVBATDebonceTimer = 0U; } } else { /*0.25V < VCCx3 < 5.5V ShortToVBAT recover to Normal*/ if ((ulReadAdcMeanVCCX_3 > 250) && (ulReadAdcMeanVCCX_3 < 5500))//Start Recover { Vccx3ShortToVBATDebonceTimer++; } else { Vccx3ShortToVBATDebonceTimer = 0U; } if (Vccx3ShortToVBATDebonceTimer == VCCX3_RECOVER_TIMEUP)//Time Up { VccX3ShortToVBAT = FALSE; Vccx3ShortToVBATDebonceTimer = 0U; } } return VccX3ShortToVBAT; } //----------------------------------------------------------------------------- /// \brief SysMon_IsAINErrorFeedBack_L /// /// \descr Rcod and RSens error status Incorrect feedback judgment and wrong priority judgment /// /// \param void /// /// \return bool: //----------------------------------------------------------------------------- void SysMon_IsAINErrorFeedBack_L(tesHLM_L_STATES_Info *LStatusInfo) { uint8 Channel = 0; for (Channel; Channel < 12; Channel++) { if (Channel == 4) { if ((RSensBinning[4].eQty == 3u) && (LStatusInfo->ucFaultHLMLLBBase == 0u)) //LB Rcod Error { LStatusInfo->ucFaultHLMLLBBase = 8u; } } if (Channel == 7) { if ((RSensBinning[7].eQty == 3u) && (LStatusInfo->ucFaultHLMLCL == 0u)) //CL Rcod Error { LStatusInfo->ucFaultHLMLCL = 8u; } } if (Channel == 0) { if ((RSensBinning[0].eQty == 3u) && (LStatusInfo->ucFaultHLMLTI == 0u)) //TI2 Rcod Error { LStatusInfo->ucFaultHLMLTI = 8u; } } if (Channel == 10) { if ((RSensBinning[10].eQty == 3u) && (LStatusInfo->ucFaultHLMLDRL == 0u)) //DRL POS2 Rcod Error { LStatusInfo->ucFaultHLMLDRL = 8u; } if ((RSensBinning[10].eQty == 3u) && (LStatusInfo->ucFaultHLMLPOS == 0u)) //DRL POS2 Rcod Error { LStatusInfo->ucFaultHLMLPOS = 8u; } } /*should not detcetion RCOD error with LMM*/ //if (((RSensBinning[3].eQty == 3u) || (RSensBinning[6].eQty == 3u)) && (LStatusInfo->ucFaultHLMLTI == 0u)) //TI1.1/TI1.2 Rcod Error //{ // LStatusInfo->ucFaultHLMLTI = 8u; //} //if (((RSensBinning[9].eQty == 3u) || (RSensBinning[11].eQty == 3u)) && (LStatusInfo->ucFaultHLMLDRL == 0u)) //DRL/POS1.1/1.2 Rcod Error //{ // LStatusInfo->ucFaultHLMLDRL = 8u; //} //if (((RSensBinning[9].eQty == 3u) || (RSensBinning[11].eQty == 3u)) && (LStatusInfo->ucFaultHLMLPOS == 0u)) //DRL/POS1.1/1.2 Rcod Error //{ // LStatusInfo->ucFaultHLMLPOS = 8u; //} //if (((RSensBinning[2].eQty == 3u) || (RSensBinning[8].eQty == 3u)) && (LStatusInfo->ucFaultHLMLHB == 0u)) //HB Rcod Error //{ // LStatusInfo->ucFaultHLMLHB = 8u; //} /*end */ //RSens_NTC_ERROR if (Channel == 4) //LB { if (((SysMon_RSensErrorBitMaskNTC >> 10U) == 1) && (LStatusInfo->ucFaultHLMLLBBase == 0u)) //LB { LStatusInfo->ucFaultHLMLLBBase = 9u; } } if (Channel == 7) //CL { if (((SysMon_RSensErrorBitMaskNTC >> 8U) == 1) && (LStatusInfo->ucFaultHLMLCL == 0u)) //CL { LStatusInfo->ucFaultHLMLCL = 9u; } } if (Channel == 0) { if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) /*|| ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)*/) && (LStatusInfo->ucFaultHLMLTI == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 { LStatusInfo->ucFaultHLMLTI = 9u; } } if (Channel == 10) { if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) /*|| ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)*/) && (LStatusInfo->ucFaultHLMLDRL == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 { LStatusInfo->ucFaultHLMLDRL = 9u; } if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) /*|| ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)*/) && (LStatusInfo->ucFaultHLMLPOS == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 { LStatusInfo->ucFaultHLMLPOS = 9u; } } //if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) || ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) && (LStatusInfo->ucFaultHLMLTI == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 //{ // LStatusInfo->ucFaultHLMLTI = 9u; //} //if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) || ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) && (LStatusInfo->ucFaultHLMLDRL == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 //{ // LStatusInfo->ucFaultHLMLDRL = 9u; //} //if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) || ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) && (LStatusInfo->ucFaultHLMLPOS == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 //{ // LStatusInfo->ucFaultHLMLPOS = 9u; //} /*should not detcetion RCOD error with LMM*/ //if (((SysMon_RSensErrorBitMaskNTC >> 15U) == 1) && (LStatusInfo->ucFaultHLMLHB == 0u)) //HB //{ // LStatusInfo->ucFaultHLMLHB = 9u; //} } } //----------------------------------------------------------------------------- /// \brief SysMon_IsAINErrorFeedBack_R /// /// \descr Rcod and RSens error status Incorrect feedback judgment and wrong priority judgment /// /// \param void /// /// \return bool: //----------------------------------------------------------------------------- void SysMon_IsAINErrorFeedBack_R(tesHLM_R_STATES_Info *RStatusInfo) { uint8 Channel = 0; for (Channel; Channel < 12; Channel++) { if (Channel == 4) { if ((RSensBinning[4].eQty == 3u) && (RStatusInfo->ucFaultHLMRLBBase == 0u)) //LB Rcod Error { RStatusInfo->ucFaultHLMRLBBase = 8u; } } if (Channel == 7) { if ((RSensBinning[7].eQty == 3u) && (RStatusInfo->ucFaultHLMRCL == 0u)) //CL Rcod Error { RStatusInfo->ucFaultHLMRCL = 8u; } } if (Channel == 0) { if ((RSensBinning[0].eQty == 3u) && (RStatusInfo->ucFaultHLMRTI == 0u)) //TI2 Rcod Error { RStatusInfo->ucFaultHLMRTI = 8u; } } if (Channel == 10) { if ((RSensBinning[10].eQty == 3u) && (RStatusInfo->ucFaultHLMRDRL == 0u)) //DRL POS2 Rcod Error { RStatusInfo->ucFaultHLMRDRL = 8u; } if ((RSensBinning[10].eQty == 3u) && (RStatusInfo->ucFaultHLMRPOS == 0u)) //DRL POS2 Rcod Error { RStatusInfo->ucFaultHLMRPOS = 8u; } } /*should not detcetion RCOD error with LMM*/ //if (((RSensBinning[3].eQty == 3u) || (RSensBinning[6].eQty == 3u)) && (RStatusInfo->ucFaultHLMRTI == 0u)) //TI1.1/TI1.2 Rcod Error //{ // RStatusInfo->ucFaultHLMRTI = 8u; //} //if (((RSensBinning[9].eQty == 3u) || (RSensBinning[11].eQty == 3u)) && (RStatusInfo->ucFaultHLMRDRL == 0u)) //DRL/POS1.1/1.2 Rcod Error //{ // RStatusInfo->ucFaultHLMRDRL = 8u; //} //if (((RSensBinning[9].eQty == 3u) || (RSensBinning[11].eQty == 3u)) && (RStatusInfo->ucFaultHLMRPOS == 0u)) //DRL/POS1.1/1.2 Rcod Error //{ // RStatusInfo->ucFaultHLMRPOS = 8u; //} //if (((RSensBinning[2].eQty == 3u) || (RSensBinning[8].eQty == 3u)) && (RStatusInfo->ucFaultHLMRHB == 0u)) //HB Rcod Error //{ // RStatusInfo->ucFaultHLMRHB = 8u; //} /*end */ //RSens_NTC_ERROR if (Channel == 4) //LB { if (((SysMon_RSensErrorBitMaskNTC >> 10U) == 1) && (RStatusInfo->ucFaultHLMRLBBase == 0u)) //LB { RStatusInfo->ucFaultHLMRLBBase = 9u; } } if (Channel == 7) //LB { if (((SysMon_RSensErrorBitMaskNTC >> 8U) == 1) && (RStatusInfo->ucFaultHLMRCL == 0u)) //CL { RStatusInfo->ucFaultHLMRCL = 9u; } } if (Channel == 0) //LB { if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) /*|| ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)*/) && (RStatusInfo->ucFaultHLMRTI == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 { RStatusInfo->ucFaultHLMRTI = 9u; } } if (Channel == 10) { if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) /*|| ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)*/) && (RStatusInfo->ucFaultHLMRDRL == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 { RStatusInfo->ucFaultHLMRDRL = 9u; } if ((((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) /*|| ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)*/) && (RStatusInfo->ucFaultHLMRPOS == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 { RStatusInfo->ucFaultHLMRPOS = 9u; } } //if ((/*((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) || */ ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) && (RStatusInfo->ucFaultHLMRTI == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 //{ // RStatusInfo->ucFaultHLMRTI = 9u; //} //if ((/*((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) || */ ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) && (RStatusInfo->ucFaultHLMRDRL == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 //{ // RStatusInfo->ucFaultHLMRDRL = 9u; //} //if ((/*((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) ||*/ ((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) && (RStatusInfo->ucFaultHLMRPOS == 0u)) //DRL2/TI2//DRL/TI/POS 1.1/1.2 //{ // RStatusInfo->ucFaultHLMRPOS = 9u; //} /*should not detcetion RCOD error with LMM*/ //if (((SysMon_RSensErrorBitMaskNTC >> 15U) == 1) && (RStatusInfo->ucFaultHLMRHB == 0u)) //HB //{ // RStatusInfo->ucFaultHLMRHB = 9u; //} /*end */ } } //----------------------------------------------------------------------------- /// \brief SysMonFaultReportForDTC /// /// \descr /// /// \param void /// /// \return bool: //----------------------------------------------------------------------------- void SysMonFaultReportForDTC(LedFunction_Type *LightFunction, uint8 Channel) { /*-----------------------------------------------------------------------------------------------------*/ //NTC and binning error with LMM, platform not implemented //VC1 project channle : 1 2 3 4 5 6 7 8 9 10 11 12 //VC1 project funtion : TI2 (not used) HB TI1 LB SIG TI1 CL HB DRL1 DRL2 DRL1 //Light source: (BUCK) (not used) (LMM) (LMM) (BUCK) (BUCK) (LMM) (BUCK) (LMM) (LMM) (BUCK) (LMM) /* */ if (Channel == 4) //LB { RcodandRSensFaultRecording(&LightFunction->LowBeam, Channel); BuckFaultRecording(&LightFunction->LowBeam, Channel); #ifdef BOOSTER_ERROR_DEFECT #else BoosterFaultRecording(&LightFunction->LowBeam); #endif } else if (Channel == 5) //Sig { BuckFaultRecording(&LightFunction->SignalLight, Channel); #ifdef BOOSTER_ERROR_DEFECT #else BoosterFaultRecording(&LightFunction->SignalLight); #endif } else if (Channel == 7) //CL { RcodandRSensFaultRecording(&LightFunction->CorneringLight, Channel); BuckFaultRecording(&LightFunction->CorneringLight, Channel); #ifdef BOOSTER_ERROR_DEFECT #else BoosterFaultRecording(&LightFunction->CorneringLight); #endif } else if ((Channel == 9) || (Channel == 10) || (Channel == 11)) //DRL/POS { if (Channel == 10) { BuckFaultRecording(&LightFunction->DaytimeRunningLight, Channel); RcodandRSensFaultRecording(&LightFunction->DaytimeRunningLight, Channel); } else { LMMFaultRecording(&LightFunction->DaytimeRunningLight, Channel); } #ifdef BOOSTER_ERROR_DEFECT #else BoosterFaultRecording(&LightFunction->DaytimeRunningLight); #endif } else if ((Channel == 0) || (Channel == 3) || (Channel == 6)) //TI { if (Channel == 0) { BuckFaultRecording(&LightFunction->TurnIndicator, Channel); RcodandRSensFaultRecording(&LightFunction->TurnIndicator, Channel); } else { LMMFaultRecording(&LightFunction->TurnIndicator, Channel); } #ifdef BOOSTER_ERROR_DEFECT #else BoosterFaultRecording(&LightFunction->TurnIndicator); #endif } else if ((Channel == 2) || (Channel == 8)) //HB { LMMFaultRecording(&LightFunction->HighBeam, Channel); //BuckFaultRecording(&LightFunction->HighBeam, Channel); #ifdef BOOSTER_ERROR_DEFECT #else BoosterFaultRecording(&LightFunction->HighBeam); #endif RcodandRSensFaultRecording(&LightFunction->HighBeam, Channel); } else { //do nothing } LastChannelStatus[Channel] = SysMon_CddLedStatus_ASIL.asStatus[Channel].eChnSts; (void)Bsw_MemCpy(&LightFunction->PositionLight, &LightFunction->DaytimeRunningLight, sizeof(Fault_Type)); } //----------------------------------------------------------------------------- /// \brief BuckFaultRecording /// /// \descr Log the Buck error type /// /// \param void /// /// \return bool: //----------------------------------------------------------------------------- void BuckFaultRecording(Fault_Type *LightFunction, uint8 Channel) { /*-----------------------------------------------------------------------------------------------------*/ //VC1 high used variant.According to whether buck error is selected, configure 1 to not use and 0 to use //Errors that are not detected include only open short circuits ,ShortToUbat is Not implemented //VC1 project channle : 1 2 3 4 5 6 7 8 9 10 11 12 //VC1 project funtion : TI2 (not used) HB TI1 LB SIG TI1 CL HB DRL1 DRL2 DRL1 //Light source: (BUCK) (not used) (LMM) (LMM) (BUCK) (BUCK) (LMM) (BUCK) (LMM) (LMM) (BUCK) (LMM) /* */ //LB &SIG ERROR if ((Channel == 4) || (Channel == 6)) { if ((SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp3 == 1U) || (SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp1 == 1U)){ LightFunction->OpenLoad = TRUE; } else{ LightFunction->OpenLoad = FALSE; } if ((SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp3 == 2U) || (SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp1 == 2U)){ LightFunction->ShortToGnd = TRUE; } else{ LightFunction->ShortToGnd = FALSE; } if ((SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp3 == 3U) || (SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp1 == 3U)){ LightFunction->ShortToUbat = TRUE; } else{ LightFunction->ShortToUbat = FALSE; } if ((SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp3 == 5U) || (SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp1 == 5U)){ LightFunction->Overcurrent = TRUE; } else{ LightFunction->Overcurrent = FALSE; } if ((SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp3 == 6U) || (SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp1 == 6U)){ LightFunction->OverThermalShutDown = TRUE; } else{ LightFunction->OverThermalShutDown = FALSE; } if ((SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp3 == 7U) || (SysMon_DTC_LowBeamFctSts.eLowBeamStsLamp1 == 7U)){ LightFunction->VoltageDebounceFault = TRUE; } else{ LightFunction->VoltageDebounceFault = FALSE; } } //CL ERROR if (Channel == 7) { if (SysMon_DTC_CornerLightFctSts.eCornerLightStsLamp3 == 1U){ LightFunction->OpenLoad = TRUE; } else{ LightFunction->OpenLoad = FALSE; } if (SysMon_DTC_CornerLightFctSts.eCornerLightStsLamp3 == 2U){ LightFunction->ShortToGnd = TRUE; } else{ LightFunction->ShortToGnd = FALSE; } if (SysMon_DTC_CornerLightFctSts.eCornerLightStsLamp3 == 3U){ LightFunction->ShortToUbat = TRUE; } else{ LightFunction->ShortToUbat = FALSE; } if (SysMon_DTC_CornerLightFctSts.eCornerLightStsLamp3 == 5U){ LightFunction->Overcurrent = TRUE; } else{ LightFunction->Overcurrent = FALSE; } if (SysMon_DTC_CornerLightFctSts.eCornerLightStsLamp3 == 6U){ LightFunction->OverThermalShutDown = TRUE; } else{ LightFunction->OverThermalShutDown = FALSE; } if (SysMon_DTC_CornerLightFctSts.eCornerLightStsLamp3 == 7U){ LightFunction->VoltageDebounceFault = TRUE; } else{ LightFunction->VoltageDebounceFault = FALSE; } } //TI2 ERROR if (Channel == 0) { if (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp3 == 1U){ LightFunction->OpenLoad = TRUE; } else{ LightFunction->OpenLoad = FALSE; } if (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp3 == 2U){ LightFunction->ShortToGnd = TRUE; } else{ LightFunction->ShortToGnd = FALSE; } if (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp3 == 3U){ LightFunction->ShortToUbat = TRUE; } else{ LightFunction->ShortToUbat = FALSE; } if (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp3 == 5U){ LightFunction->Overcurrent = TRUE; } else{ LightFunction->Overcurrent = FALSE; } if (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp3 == 6U){ LightFunction->OverThermalShutDown = TRUE; } else{ LightFunction->OverThermalShutDown = FALSE; } if (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp3 == 7U){ LightFunction->VoltageDebounceFault = TRUE; } else{ LightFunction->VoltageDebounceFault = FALSE; } } //DRL2/POS2 ERROR if (Channel == 10) /*(Channel == 0)*/ { if ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp3 == 1U) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp3 == 1U)){ LightFunction->OpenLoad = TRUE; } else{ LightFunction->OpenLoad = FALSE; } if ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp3 == 2U) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp3 == 2U)){ LightFunction->ShortToGnd = TRUE; } else{ LightFunction->ShortToGnd = FALSE; } if ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp3 == 3U) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp3 == 3U)){ LightFunction->ShortToUbat = TRUE; } else{ LightFunction->ShortToUbat = FALSE; } if ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp3 == 5U) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp3 == 5U)){ LightFunction->Overcurrent = TRUE; } else{ LightFunction->Overcurrent = FALSE; } if ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp3 == 6U) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp3 == 6U)){ LightFunction->OverThermalShutDown = TRUE; } else{ LightFunction->OverThermalShutDown = FALSE; } if ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp3 == 7U) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp3 == 7U)){ LightFunction->VoltageDebounceFault = TRUE; } else{ LightFunction->VoltageDebounceFault = FALSE; } } } //----------------------------------------------------------------------------- /// \brief BoosterFaultRecording /// /// \descr Log the Booster error /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void BoosterFaultRecording(Fault_Type *LightFunction) { if ((IsVBoostLowErrActive == TRUE) || (IsVBoostHighErrActive == TRUE)) //Booster Fault { LightFunction->BoosterFault = TRUE; } else { LightFunction->BoosterFault = FALSE; } } //----------------------------------------------------------------------------- /// \brief LMMFaultRecording /// /// \descr Log the LMM error /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void LMMFaultRecording(Fault_Type *LightFunction, uint8 Channel) { /*-----------------------------------------------------------------------------------------------------*/ //VC1 high used variant.According to whether buck error is selected, configure 1 to not use and 0 to use //Errors that are not detected include only open short circuits ,ShortToUbat is Not implemented //VC1 project channle : 1 2 3 4 5 6 7 8 9 10 11 12 //VC1 project funtion : TI2 (not used) HB TI1 LB SIG TI1 CL HB DRL1 DRL2 DRL1 //Light source: (BUCK) (not used) (LMM) (LMM) (BUCK) (BUCK) (LMM) (BUCK) (LMM) (LMM) (BUCK) (LMM) /* */ //HB LMM error if ((Channel == 1) || (Channel == 7)) { if ((SysMon_DTC_HighBeamFctSts.eHighBeamStsLamp1 == 10) || (SysMon_DTC_HighBeamFctSts.eHighBeamStsLamp2 == 10)){ LightFunction->LmmFault = TRUE; } else{ LightFunction->LmmFault = FALSE; } if ((SysMon_DTC_HighBeamFctSts.eHighBeamStsLamp1 == 11) || (SysMon_DTC_HighBeamFctSts.eHighBeamStsLamp2 == 11)){ LightFunction->LmmCommunication = TRUE; } else { LightFunction->LmmCommunication = FALSE; } } //TI LMM error if ((Channel == 3) || (Channel == 6)) { if ((SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp1 == 10) || (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp2 == 10)){ LightFunction->LmmFault = TRUE; } else{ LightFunction->LmmFault = FALSE; } if ((SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp1 == 11) || (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp2 == 11)) { LightFunction->LmmCommunication = TRUE; } else{ LightFunction->LmmCommunication = FALSE; } } //DRL&pos LMM error if ((Channel == 9) || (Channel == 11)) { if (((SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp1 == 10) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp2 == 10)) || ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp1 == 10) || (SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp2 == 10))){ LightFunction->LmmFault = TRUE; } else{ LightFunction->LmmFault = FALSE; } if (((SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp1 == 11) || (SysMon_DTC_PositionLightFctSts.eFrontPosLightStsLamp2 == 11)) || ((SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp1 == 11) || (SysMon_DTC_DayTimeRunningLightFctSts.eDrlStsLamp2 == 11))){ LightFunction->LmmCommunication = TRUE; } else{ LightFunction->LmmCommunication = FALSE; } } } //----------------------------------------------------------------------------- /// \brief RcodandRSensFaultRecording /// /// \descr Log the Rcod and RSens error /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void RcodandRSensFaultRecording(Fault_Type *LightFunction, uint8 Channel) { if (Channel == 4) //LB { if (RSensBinning[4].eQty == 3u) //LB Rcod Error { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else if (Channel == 7) //CL { if (RSensBinning[7].eQty == 3u) //CL Rcod Error { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else if (Channel == 0) //TI2 Rcod Error { if (RSensBinning[0].eQty == 3u) { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else if ((Channel == 3) || (Channel == 6)) //TI1.1/1.2 { if (((RSensBinning[3].eQty == 3u) || (RSensBinning[6].eQty == 3u))) //TI1.1/2 Rcod Error { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else if (Channel == 10) //DRL/POS2 { if (RSensBinning[10].eQty == 3u) //DRL/POS2 Rcod Error { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else if ((Channel == 9) || (Channel == 11)) //DRL/POS1.1/2 Rcod Error { if (((RSensBinning[9].eQty == 3u) || (RSensBinning[11].eQty == 3u))) { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else if ((Channel == 2) || (Channel == 8)) //HB { if (((RSensBinning[2].eQty == 3u) || (RSensBinning[8].eQty == 3u))) //HB Rcod Error { LightFunction->RCodFault = TRUE; } else { LightFunction->RCodFault = FALSE; } } else { // } //NTC if (Channel == 4) //LB { if ((SysMon_RSensErrorBitMaskNTC >> 10U) == 1)//LB { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else if (Channel == 7) //CL { if ((SysMon_RSensErrorBitMaskNTC >> 8U) == 1) //CL { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else if (Channel == 0) //TI2 { if ((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) //TI2 { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else if ((Channel == 3) || (Channel == 6)) //TI1.1/1.2 { if (((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) //TI1.1/1.2 { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else if (Channel == 10) //DRL2 { if ((SysMon_RSensErrorBitMaskNTC >> 7U) == 1) //DRL2 { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else if ((Channel == 9) || (Channel == 11)) //DRL1.1/1.2 { if (((SysMon_RSensErrorBitMaskNTC >> 11U) == 1)) //DRL1.1/1.2 { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else if ((Channel == 2) || (Channel == 8)) //HB { if (((SysMon_RSensErrorBitMaskNTC >> 15U) == 1)) //HB { LightFunction->NtcFault = TRUE; } else { LightFunction->NtcFault = FALSE; } } else { // } } //----------------------------------------------------------------------------- /// \brief SysMon_CheckInternalState /// /// \descr Check for ECU internal errors /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- uint8 SysMon_CheckInternalState(void) { uint8 ReturnValue = SysMon_Internalstate_Normal; //Unknowmountingside error :1、Mounting side PIN voltage out of range 2、 Both ECUs are configured as same side if ((SysMon_EcuMountingSide() == eUnknownMountingSide) || SysMon_PeerMountSameSide.uMountSideUnknow == TRUE) { ReturnValue = SysMon_Internalstate_Mountsideunknown; } //ECU not coded else if (SysEcuNotCoded() == TRUE) { ReturnValue = SysMon_Internalstate_EcuNotCoded; } //ECU coding data invalid else if (SysMon_Data_IsCodingDataValid() == FALSE) { ReturnValue = SysMon_Internalstate_CodingDataInvalid; } //ECU FUSA coding data invalid else if (SysMon_IsFuSaCodingValid() == FALSE) { ReturnValue = SysMon_Internalstate_FusaCodingError; } //ECU RESET ECC ERROR else if (ucECUInternalErrorSts == 7U) { ReturnValue = SysMon_Internalstate_EccError; } //ECU RESET PLL ERROR else if (ucECUInternalErrorSts == 6U) { ReturnValue = SysMon_Internalstate_PllUnlockError; } //Unexpected Reset:ECU RESET UNDEFINED OR RESET WATCHDOG OR RESET UNDER VOLTAGE else if ((ucECUInternalErrorSts == 1U) || (ucECUInternalErrorSts == 5U) || (ucECUInternalErrorSts == 8U)) { ReturnValue = SysMon_Internalstate_UnexpectedReset; } //E2E error between moduls or Signal value out of range coding maybe cause E2E error else if (((SysMon_E2EError != FALSE) || (FusaSignalValidStatus.LBStatus.Status==FALSE ) || (FusaSignalValidStatus.HBStatus.Status==FALSE ) || (FusaSignalValidStatus.TIStatus.Status==FALSE ) || (FusaSignalValidStatus.POSStatus.Status==FALSE )) && (SysEcuNotCoded() == FALSE) && (SysMon_Data_IsCodingDataValid() == TRUE) && (SysMon_IsFuSaCodingValid() == TRUE)) { ReturnValue = SysMon_Internalstate_OtherError; } //others else { ReturnValue = SysMon_Internalstate_Normal; } return ReturnValue; } //----------------------------------------------------------------------------- /// \brief SysMon_CheckBoardState /// /// \descr Check for ECU board errors /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- uint8 SysMon_CheckBoardState(void) { uint8 ReturnValue = 0U; boolean boVccX3ShortToGND = FALSE; boolean boVccX3ShortToVBAT = FALSE; boVccX3ShortToGND = SysMon_IsVccX3ShortToGND(); boVccX3ShortToVBAT = SysMon_IsVccX3ShortToVBAT(); #ifdef BOOSTER_ERROR_DEFECT #else //Led Booster Under Voltage coding maybe cause booster error if ((IsVBoostLowErrActive != FALSE) && (SysEcuNotCoded() == FALSE) && (SysMon_Data_IsCodingDataValid() == TRUE) && (SysMon_IsFuSaCodingValid() == TRUE)) { ReturnValue = SysMon_Boardstate_LedBoosterUnderVoltage; } //Led Booster Over Voltage coding maybe cause booster error else if ((IsVBoostHighErrActive != FALSE) && (SysEcuNotCoded() == FALSE) && (SysMon_Data_IsCodingDataValid() == TRUE) && (SysMon_IsFuSaCodingValid() == TRUE)) { ReturnValue = SysMon_Boardstate_LedBoosterOverVoltage; } #endif // HSS error of ISD and FAN if ((SysMon_IsHSS2Error() == TRUE) || (SysMon_IsFanError() == TRUE)) { ReturnValue = SysMon_Boardstate_HssError; } //LED BUCK SPI ERROR else if ((SysMon_CddLedStatus_ASIL.asStatus[0].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[1].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[2].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[3].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[4].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[5].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[6].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[7].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[8].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[9].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[10].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[11].eErr == SysMon_LEDBUCK_SPIERROR)) { ReturnValue = SysMon_Boardstate_SpiError; } //VCCX3 ERROR of LMM else if ((boVccX3ShortToGND == TRUE) || (boVccX3ShortToVBAT == TRUE)) { ReturnValue = SysMon_Boardstate_VccError; } //normal else { ReturnValue = SysMon_Boardstate_Normal; } return ReturnValue; } //----------------------------------------------------------------------------- /// \brief SysMonHardWareDiagnose /// /// \descr Hardwired diagnostic logic /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void SysMonHardWareDiagnose(void) { boolean SignalValidFlag = TRUE; if ((SysMon_MsgTimeoutErr.bLightCtrlCmdTo == TRUE) || (SysMon_MsgCrcSqcErr.bLightCtrlCmdSqc == TRUE) || (SysMon_MsgCrcSqcErr.bLightCtrlCmdCrc == TRUE) || (SysMon_VehicleInfoCommunication_Error.isDebounced == TRUE)) { CANCCommunicationStatus = 1U; } else { CANCCommunicationStatus = 0U; } if ((FusaSignalValidStatus.LBStatus.Status == FALSE)|| (FusaSignalValidStatus.TIStatus.Status == FALSE) || (FusaSignalValidStatus.POSStatus.Status == FALSE)) { SignalValidFlag = FALSE; } if ((CANCCommunicationStatus == 0U) && (SysMon_IsCanBusOff() == 0U) && SignalValidFlag && (SysMon_E2EError == 0U)) { IGStatusCheck(); if ((DetectIGStateLastVaue == 1U) && (DetectIGState == 2U)) { LBSafetyCheckFlag = TRUE; TISafetyCheckFlag = TRUE; PosSafetyCheckFlag = TRUE; LBSafetyCheckCnt = 0U; TISafetyCheckCnt = 0U; PosSafetyCheckCnt = 0U; } else { //Do Nothing } DetectIGStateLastVaue = DetectIGState; if ((SysMon_IsSystemOverVoltage() == FALSE ) && (SysMon_IsSystemUnderVoltage() == FALSE )) { if (SysMon_eMountingSide == eLeftMoutningSide) { if (LBSafetyCheckFlag == TRUE) { // HW_CANConsistencyjudgment(&(LightFunctionCmdInfo.sig_LowBeamCmd_Left), HWStatusLB, &LBSafetyCheckCnt, &LBSafetyCheckFlag); } if (TISafetyCheckFlag == TRUE) { // HW_CANConsistencyjudgment(&(LightFunctionCmdInfo.sig_TurningLightCmd_Left), HWStatusTI, &TISafetyCheckCnt, &TISafetyCheckFlag); } if (PosSafetyCheckFlag == TRUE) { // HW_CANConsistencyjudgment(&(LightFunctionCmdInfo.sig_FrontPositionLightCmd_Left), HWStatusPos, &PosSafetyCheckCnt, &PosSafetyCheckFlag); } } else if (SysMon_eMountingSide == eRightMoutningSide) { if (LBSafetyCheckFlag == TRUE) { // HW_CANConsistencyjudgment(&(LightFunctionCmdInfo.sig_LowBeamCmd_Right), HWStatusLB, &LBSafetyCheckCnt, &LBSafetyCheckFlag); } if (TISafetyCheckFlag == TRUE) { // HW_CANConsistencyjudgment(&(LightFunctionCmdInfo.sig_TurningLightCmd_Right), HWStatusTI, &TISafetyCheckCnt, &TISafetyCheckFlag); } if (PosSafetyCheckFlag == TRUE) { // HW_CANConsistencyjudgment(&(LightFunctionCmdInfo.sig_FrontPositionLightCmd_Right), HWStatusPos, &PosSafetyCheckCnt, &PosSafetyCheckFlag); } } else { LBSafetyCheckFlag = FALSE; TISafetyCheckFlag = FALSE; PosSafetyCheckFlag = FALSE; } } else { if (LBSafetyCheckFlag == FALSE) { LBSafetyCheckCnt = 0U; } if (TISafetyCheckFlag == FALSE) { TISafetyCheckCnt = 0U; } if (PosSafetyCheckFlag == FALSE) { PosSafetyCheckCnt = 0U; } } } else if (SignalValidFlag == FALSE) { if (FusaSignalValidStatus.LBStatus.Status == FALSE) { SysMon_CanFailCtrlLB(); } if (FusaSignalValidStatus.POSStatus.Status == FALSE) { SysMon_CanFailCtrlPOS(); } if (FusaSignalValidStatus.TIStatus.Status == FALSE) { SysMon_CanFailCtrlTI(); } } else //When the CAN communication fails, follow the hard-wired signal to do the corresponding lighting or lamp-out action. { if (CanDelayDebounceCheckCnt < CAN_DELAY_DEBOUNCE_MAX_TIMES) { // do nothing, keep OFF actual } else { SysMon_CanFailCtrlLight(); } } } //----------------------------------------------------------------------------- /// \brief IGStatusCheck /// /// \descr IG status check /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void IGStatusCheck(void) { if ((SysMon_isWakeupLineActive() == TRUE) && (SysMonIgnitionSts.eIgnitionSts == 2U)) { DetectIGState = 2U; //ON } else { if ((SysMon_isWakeupLineActive() == FALSE) && (SysMonIgnitionSts.eIgnitionSts == 1U)) { DetectIGState = 1U; //OFF } else { //Do nothing } } } //----------------------------------------------------------------------------- /// \brief HW_CANConsistencyjudgment /// /// \descr Detection of the consistency of hard-wire signals and CAN signals /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void HW_CANConsistencyjudgment(tSysMonSignal_U8 *LightFunction, HWStatusDebounce HWStatus, uint8 *SafetyCheckCnt, boolean *SafetyCheckFlag) { if (LightFunction->valueLastRx == SIG_VAL_ONE) { if(HWStatus.Status == 1U) { (*SafetyCheckCnt) = 0U; } else { if ((*SafetyCheckCnt) < 7U) { (*SafetyCheckCnt)++; } } } else { if (HWStatus.Status == 2U) { (*SafetyCheckCnt) = 0U; } else { if ((*SafetyCheckCnt) < 7U) { (*SafetyCheckCnt)++; } } } if ((*SafetyCheckCnt) > 6U) { (*SafetyCheckFlag) = FALSE; } else { (*SafetyCheckFlag) = TRUE; } } //----------------------------------------------------------------------------- /// \brief HWInputDebounce /// /// \descr Hard - wired input anti - shake processing logic /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void HWInputDebounce(uint32 HWinput, HWStatusDebounce *HardWareStatus) { HWinput = (uint32)((HWinput * 24643U) / 4096U); if (HWinput >= LedOnthreshold) { HardWareStatus->StatusOnCnt++; HardWareStatus->StatusOffCnt = 0U; HardWareStatus->StatusSnaCnt = 0U; if (HardWareStatus->StatusOnCnt >= 3U)//Debounce 30ms { HardWareStatus->StatusOnCnt = 3U; HardWareStatus->Status = 1U; //ON } else { // } } else if (HWinput <= LedOffthreshold) { HardWareStatus->StatusOffCnt++; HardWareStatus->StatusOnCnt = 0U; HardWareStatus->StatusSnaCnt = 0U; if (HardWareStatus->StatusOffCnt >= 3U) { HardWareStatus->StatusOffCnt = 3U; HardWareStatus->Status = 2U; //OFF } else { // } } else { HardWareStatus->StatusSnaCnt++; HardWareStatus->StatusOnCnt = 0U; HardWareStatus->StatusOffCnt = 0U; if (HardWareStatus->StatusSnaCnt >= 3U) { HardWareStatus->StatusSnaCnt = 3U; HardWareStatus->Status = 0U; //SNA } else { // } } } //----------------------------------------------------------------------------- /// \brief HWStatusInit /// /// \descr Initialization of hard-line state variables /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void HWStatusInit(void) { //memset(&HWStatusLB, 0U, sizeof(HWStatusDebounce)); //memset(&HWStatusTI, 0U, sizeof(HWStatusDebounce)); //memset(&HWStatusPos, 0U, sizeof(HWStatusDebounce)); //HWStatusLB.Status = 2U; //HWStatusTI.Status = 2U; //HWStatusPos.Status = 2U; } //----------------------------------------------------------------------------- /// \brief SysMon_CheckSafetyParameters /// /// \descr Check the minimum current and minimum duty cycle of the buck output /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void SysMon_CheckSafetyParameters(uint32 ChannelIdx) { if (SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unCurrent < SYSMON_DATA_UINT16_MINIMAL_CURRENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_CURRENT_DRV[ChannelIdx])) { SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unCurrent = SYSMON_DATA_UINT16_MINIMAL_CURRENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_CURRENT_DRV[ChannelIdx]); SysMon_aLsTarget[ChannelIdx].unCurrent = SYSMON_DATA_UINT16_MINIMAL_CURRENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_CURRENT_DRV[ChannelIdx]); } if (SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unDutyCycle < SYSMON_SCALE_PERCENT_TO_UINT16(SYSMON_DATA_UINT8_0_5PERCENT_TO_PERCENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_PWM_DRV[ChannelIdx]))) { SysMon_LsTarget_ASIL.asLsVal[ChannelIdx].unDutyCycle = SYSMON_SCALE_PERCENT_TO_UINT16(SYSMON_DATA_UINT8_0_5PERCENT_TO_PERCENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_PWM_DRV[ChannelIdx])); SysMon_aLsTarget[ChannelIdx].unDutyCycle = SYSMON_SCALE_PERCENT_TO_UINT16(SYSMON_DATA_UINT8_0_5PERCENT_TO_PERCENT(applicationCodingData.Led1.FUSAConfig.FUSA_MIN_PWM_DRV[ChannelIdx])); } } //----------------------------------------------------------------------------- /// \brief //CheckSafetyParameters /// /// \descr //When a light is requested, it is necessary to check the parameters related to functional safety /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- void CheckSafetyParameters(void) { uint8 BuckChanne[4] = { 4, 0,3,6 }; uint8 BuckIndx = 0U; //When a light is requested, it is necessary to check the parameters related to functional safety for (uint8 i = 0U; i < 4U; i++) { BuckIndx = BuckChanne[i]; if (SysMon_LsTarget_ASIL.asLsVal[BuckIndx].unDutyCycle != 0U) { SysMon_CheckSafetyParameters(BuckIndx); } else { //do nothing } } } //----------------------------------------------------------------------------- /// \brief //SysMon_DTC_Check /// /// \descr //When a light is requested, it is necessary to check the parameters related to functional safety /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- STATIC_AL void SysMon_DTC_Check(void) { //VehicleInfo massage timeout? if (SysMonVehicleSts.VehicleInfoState != FALSE) { //VehicleInfo massage timeout debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&SysMon_VehicleInfoCommunication_Error); } else { //VehicleInfo massage timeout debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&SysMon_VehicleInfoCommunication_Error); } //AFSCommand massage timeout? if (SysMonAfsSts.AFSCommandState != FALSE) { //AFSCommand massage timeout debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&SysMon_AFSCommandCommunication_Error); } else { //AFSCommand massage timeout debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&SysMon_AFSCommandCommunication_Error); } //MatrixHBCommand massage timeout? if (SysMonHBmatrixSts.MatrixHBCommandState != FALSE) { //MatrixHBCommand massage timeout debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&SysMon_MatrixHBCommandCommunication_Error); } else { //MatrixHBCommand massage timeout debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&SysMon_MatrixHBCommandCommunication_Error); } //FAN ERROR if (SysMon_HssStatusError[0].eErrOpenLoad == ERR_YES || SysMon_HssStatusError[0].eErrShortToGnd == ERR_YES || SysMon_HssStatusError[0].eErrShortToVBat == ERR_YES) { //HSS error debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&Ssymon_HSS_FAN_Error); } else { //HSS error debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&Ssymon_HSS_FAN_Error); } //ISD ERROR if (SysMon_HssStatusError[1].eErrOpenLoad == ERR_YES || SysMon_HssStatusError[1].eErrShortToGnd == ERR_YES || SysMon_HssStatusError[1].eErrShortToVBat == ERR_YES) { //HSS error debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&Ssymon_HSS_ISD_Error); } else { //HSS error debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&Ssymon_HSS_ISD_Error); } //stepper error if ((((SysMon_StatusSpinningFront.bfLWRFaultStatus)&STEPPER_FAULT_OPEN_CIRCUIT) == STEPPER_FAULT_OPEN_CIRCUIT) || (((SysMon_StatusSpinningFront.bfLWRFaultStatus)&STEPPER_FAULT_SHORT_CIRCUIT) == STEPPER_FAULT_SHORT_CIRCUIT) || (((SysMon_StatusSpinningFront.bfLWRFaultStatus)&STEPPER_FAULT_OVER_TEMPERATURE) == STEPPER_FAULT_OVER_TEMPERATURE)) { //stepper error debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&Ssymon_Stepper_Error); } else { //stepper error debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&Ssymon_Stepper_Error); } //SPI error if ((SysMon_CddLedStatus_ASIL.asStatus[0].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[1].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[2].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[3].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[4].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[5].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[6].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[7].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[8].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[9].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[10].eErr == SysMon_LEDBUCK_SPIERROR) || (SysMon_CddLedStatus_ASIL.asStatus[11].eErr == SysMon_LEDBUCK_SPIERROR)) { //SPI error debounce active SysMonRx_HandlePduQualityCounterMonitorFail(&Ssymon_Buck_SPI_Error); } else { //SPI error debounce deactive SysMonRx_HandlePduQualityCounterMonitorSuccess(&Ssymon_Buck_SPI_Error); } } //----------------------------------------------------------------------------- /// \brief //SysMon_CheckTurnIndErrSts /// /// \descr // /// /// /// \param /// /// /// \return //----------------------------------------------------------------------------- STATIC_AL void SysMon_CheckTurnIndErrSts(void) { if ((SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp1 == 1) || (SysMon_DTC_TurnIndFctSts.eTurnIndStsLamp1 == 2)) { ucErrorCount++; if (ucErrorCount > 3) { SysMon_u8TurnIndErrerSts = TI_ERROR_STATUS; TICurrentStatus = TI_ERROR_STATUS; } } else { ucErrorCount = 0; TICurrentStatus = TI_NORMAL_STATUS; if(TIStatus == TI_NORMAL_STATUS) { SysMon_u8TurnIndErrerSts = TI_NORMAL_STATUS; } } } uint8 GetVariant(void) { return SysMon_ucVariant; } STATIC_AL void DoTiErrorStatus(void) { if (/*(SysMon_u8TurnIndErrerSts == TI_ERROR_STATUS) && */(TICurrentStatus == TI_ERROR_STATUS)) { TIStatus = TI_ERROR_STATUS; } else if ((TICurrentStatus == TI_NORMAL_STATUS) && (TIStatus == TI_ERROR_STATUS)) { if (TRUE == CheckTiCmdReq()) { TIStatus = TI_NORMAL_STATUS; } } else { ; } } uint16 GetAnimationCurrentStatus(void) { return SysMon_LsTarget_ASIL_NT.asLsVal[4].unDutyCycle; } tiu32Voltage_mV GetSysVolt(void) { return SysMon_Voltage_Mean; } tisAllMlcSwitchAndAllSensorStatus GetMlcSwitchStatus(void) { return SysMon_AllMlcSwitchAndAllSensorStatus; } #define ctaaSysMon_STOP_SEC_CODE #include "ctaaSysMon_MemMap.h" //============================================================================= // End declaration or definitions of functions //=============================================================================