//***************************************************************************** // (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 CddBoost_Adapter.c /// /// \brief RTE adapter for CddBoost /// /// \author OTT, Peter ALDE-RT/EES6 //----------------------------------------------------------------------------- /*VC1 Release1 temporarily deleted when integration */ #define E2E_Remove // standard includes #include #include #include #include <../Adapter/CddBoost_Adapter.h> #ifndef E2E_Remove #include #endif //----------------------------------------------------------------------------- // Defines //----------------------------------------------------------------------------- #ifndef E2E_Remove #define E2E_FaultThresh_LsTarget 20u // 20 * 10ms data rate = 200ms #endif //----------------------------------------------------------------------------- // Start definitions of initialized boolean variables //----------------------------------------------------------------------------- #define ctadCddBoost_START_SEC_VAR_INIT_BOOLEAN #include <../Cfg/CddBoost_MemMap.h> STATIC_AL boolean CddBoost_boLsTargetError = FALSE; #define ctadCddBoost_STOP_SEC_VAR_INIT_BOOLEAN #include <../Cfg/CddBoost_MemMap.h> //----------------------------------------------------------------------------- // End definitions of initialized boolean variables //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Start definitions of initialized 8 bit variables //----------------------------------------------------------------------------- #define ctadCddBoost_START_SEC_VAR_INIT_8 #include <../Cfg/CddBoost_MemMap.h> STATIC_AL uint8 CddBoost_ucLsTargetDebounceCnt = 0u; // E2E debounce counters #define ctadCddBoost_STOP_SEC_VAR_INIT_8 #include <../Cfg/CddBoost_MemMap.h> //----------------------------------------------------------------------------- // End definitions of initialized 8 bit variables //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Start definitions of initialized structures and unions or arrays variables //----------------------------------------------------------------------------- #define ctadCddBoost_START_SEC_VAR_INIT_UNSPECIFIED #include <../Cfg/CddBoost_MemMap.h> // PRQA S 3408 1 // Explicit debug code tCddBoostTarget CddBoost_SimTarget = { { 48000u }, 0u }; #define ctadCddBoost_STOP_SEC_VAR_INIT_UNSPECIFIED #include <../Cfg/CddBoost_MemMap.h> //----------------------------------------------------------------------------- // End definitions of initialized structures and unions or arrays variables //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Start definitions of non initialized structures and unions or arrays variables //----------------------------------------------------------------------------- #define ctadCddBoost_START_SEC_VAR_NO_INIT_UNSPECIFIED #include <../Cfg/CddBoost_MemMap.h> STATIC_AL tCddBoostStatus CddBoost_sStatus; STATIC_AL tieDataStatus CddBoost_CodMCodingDataStatus; #define ctadCddBoost_STOP_SEC_VAR_NO_INIT_UNSPECIFIED #include <../Cfg/CddBoost_MemMap.h> //----------------------------------------------------------------------------- // End definitions of initialized structures and unions or arrays variables //----------------------------------------------------------------------------- // Start declaration or definitions of functions //----------------------------------------------------------------------------- #define ctadCddBoost_START_SEC_CODE #include <../Cfg/CddBoost_MemMap.h> //----------------------------------------------------------------------------- // Prototypes //----------------------------------------------------------------------------- STATIC_AL void CddBoost_PrepareStatus(tisCddBoostStatus* pStatusToRte); #ifndef E2E_Remove STATIC_AL boolean CddBoost_E2E_ReadCheck(boolean* pboErrValid, uint8* pucErrCnt, uint32 ul_RetVal, uint8 ucFaultThresh); #endif //----------------------------------------------------------------------------- // Implementation //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- /// \brief Get status from driver /// /// \descr Read status from driver and prepare RTE port contents /// /// \param tisCddBoostStatus* pStatusToRte pointer to RTE message /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void CddBoost_PrepareStatus(tisCddBoostStatus* pStatusToRte) { CddBoost_GetStatus(&CddBoost_sStatus); for (uint32 ul = 0u; ul < CDDBOOST_Cfg_NbOfChannels; ul++) { if (CddBoost_CodMCodingDataStatus == tieDataStatus_Valid) { pStatusToRte->aStatus[ul] = (uint8)CddBoost_sStatus.aStatus[ul]; } else { pStatusToRte->aStatus[ul] = eCddBoost_Reset; // no booster startup without coding data } } pStatusToRte->bfSysMonTargetQty = (CddBoost_boLsTargetError != FALSE) ? INVALID_VALUE_ERROR : 0u; } FUNC(void, ctadCddBoost_CODE) rdCddBoostDeInit(void) { return; } //----------------------------------------------------------------------------- /// \brief Init runnable /// /// \descr Init runnable to be called at MCU startup /// /// \param - /// /// \return void //----------------------------------------------------------------------------- FUNC(void, ctadCddBoost_CODE) ctadCddBoost_riCddBoostInit(void) { /* riCddBoostInit_Start User Code start*/ /* riCddBoostInit_Start User Code end*/ } void riCddBoostInit(void) { tisCddBoostStatus StatusToRte; #ifndef E2E_Remove (void)E2EPW_WriteInit_ppaseCddBoostStatus_sBoostSts(); // do this once for initialization (void)E2EPW_ReadInit_ppareSysMonLsTarget0_sSetting(); #endif //(void)Rte_Read_ppareCodMCodingDataStatus0_eFUSACodingDataStatus(&CddBoost_CodMCodingDataStatus); // check for valid coding data CddBoost_Init(); CddBoost_PrepareStatus(&StatusToRte); #ifndef E2E_Remove (void)E2EPW_Write_ppaseCddBoostStatus_sBoostSts(&StatusToRte); #else //(void)Rte_Write_ppaseCddBoostStatus_sBoostSts(&StatusToRte); /*Note_Annotation: */ #endif } //----------------------------------------------------------------------------- /// \brief CddBoost_E2E_ReadCheck /// /// \descr This function checks the result of E2E macro /// /// \param - /// /// \return void //----------------------------------------------------------------------------- #ifndef E2E_Remove STATIC_AL boolean CddBoost_E2E_ReadCheck(boolean* pboErrValid, uint8* pucErrCnt, uint32 ul_RetVal, uint8 ucFaultThresh) { boolean boDecrement = FALSE; boolean boIncrement = FALSE; boolean boSigValid = FALSE; uint32 ulRetVal_Byte0_2 = ul_RetVal & 0xFFFFFFu; uint32 ulRetVal_Byte_3 = (ul_RetVal >> 24u) & 0xFFu; if (ul_RetVal == E2E_E_OK) // completely ok { boDecrement = TRUE; boSigValid = TRUE; } else if ((ulRetVal_Byte0_2 == 0u) && (*pucErrCnt < ucFaultThresh)) // E2E problem but RTE reception ok { if (ulRetVal_Byte_3 == (uint32)E2E_P04STATUS_OKSOMELOST) // fully acceptable { boDecrement = TRUE; boSigValid = TRUE; } else if (ulRetVal_Byte_3 == (uint32)E2E_P04STATUS_REPEATED) // not ok but may be used { boIncrement = TRUE; boSigValid = TRUE; } else { boIncrement = TRUE; // failure } } else { boIncrement = TRUE; // failure } *pucErrCnt = ((boIncrement != FALSE) && (*pucErrCnt < ucFaultThresh)) ? *pucErrCnt + 1u : *pucErrCnt; *pucErrCnt = ((boDecrement != FALSE) && (*pucErrCnt > 0u )) ? *pucErrCnt - 1u : *pucErrCnt; *pboErrValid = (*pucErrCnt >= ucFaultThresh) ? TRUE : *pboErrValid; *pboErrValid = (*pucErrCnt == 0u ) ? FALSE : *pboErrValid; return boSigValid; // TRUE if usage of target value is allowed unless no failsafe reaction requested } #endif //----------------------------------------------------------------------------- /// \brief rrCddBoostSysMonLsTarget0 /// /// \descr Function to be called on new target values /// This shall be done event triggered by writing RTE target value /// /// \param - /// /// \return void //----------------------------------------------------------------------------- FUNC(void, ctadCddBoost_CODE) ctadCddBoost_rrCddBoostSysMonLsTarget0(void) { tisLsTarget_ASIL TargetFromRte; // input from RTE tCddBoostTarget Target; // CddBoost API #ifndef E2E_Remove uint32 ulRetVal = E2EPW_Read_ppareSysMonLsTarget0_sSetting(&TargetFromRte); boolean boSigValid = CddBoost_E2E_ReadCheck(&CddBoost_boLsTargetError, &CddBoost_ucLsTargetDebounceCnt, ulRetVal, E2E_FaultThresh_LsTarget); #else (void)Rte_Read_ppareSysMonLsTarget0_sSetting(&TargetFromRte); #endif for (uint32 ul = 0u; ul < CDDBOOST_Cfg_NbOfChannels; ul++) { Target.aunBoostVolt_mV[ul] = (uint16)TargetFromRte.lVBoost[ul]; } #ifndef E2E_Remove if ( (CddBoost_boLsTargetError == FALSE ) && (boSigValid != FALSE ) && (CddBoost_CodMCodingDataStatus == tieDataStatus_Valid) ) #else /*Note_Annotation:debuge test */ CddBoost_CodMCodingDataStatus = 1U; if(CddBoost_CodMCodingDataStatus == tieDataStatus_Valid) #endif { CddBoost_SetTarget(&Target); } } //----------------------------------------------------------------------------- /// \brief rpCddBoostCycle20ms /// /// \descr Cyclic runnable adapter for CddBoost_Cycle20ms. /// /// \param - /// /// \return void //----------------------------------------------------------------------------- FUNC(void, ctadCddBoost_CODE) ctadCddBoost_rpCddBoostCycle20ms(void) { tisCddBoostStatus StatusToRte; CddBoost_Cycle20ms(); CddBoost_PrepareStatus(&StatusToRte); #ifndef E2E_Remove (void)E2EPW_Write_ppaseCddBoostStatus_sBoostSts(&StatusToRte); #else (void)Rte_Write_ppaseCddBoostStatus_sBoostSts(&StatusToRte); #endif } //----------------------------------------------------------------------------- /// \brief roCddBoost_SetPara /// /// \descr Placeholder for parameter function /// /// \param pPara - pointer to booster parameter /// /// \return void //----------------------------------------------------------------------------- FUNC(void, ctadCddBoost_CODE) ctadCddBoost_roCddBoost_SetPara(CONST(tisCddBoostParaPtr, AUTOMATIC) pPara) { (void)pPara; } //----------------------------------------------------------------------------- /// \brief CddBoost_Adapter_Shutdown /// /// \descr Wrapper for booster shutdown /// /// \param none /// /// \return void //----------------------------------------------------------------------------- void CddBoost_Adapter_Shutdown(void) { CddBoost_Shutdown(); } FUNC(void, ctadCddBoost_CODE) ctadCddBoost_rdCddBoostDeInit(void) { /* rdCddLedDeInit_Start User Code start*/ /* rdCddLedDeInit_Start User Code end*/ } #define ctadCddBoost_STOP_SEC_CODE #include <../Cfg/CddBoost_MemMap.h> //----------------------------------------------------------------------------- // End declaration or definitions of functions //-----------------------------------------------------------------------------