//***************************************************************************** // (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 SysVolt.c /// /// \brief Submodule SysVolt: system operating voltage monitoring /// /// \author Chen Yu /// yu.chen@external.marelli.com //----------------------------------------------------------------------------- // Project-specific header file includes //----------------------------------------------------------------------------- #include //----------------------------------------------------------------------------- // Standard / system header f #include #include #include "Rte_ctasSysVolt.h" /* PRQA S 0857 */ /* MD_MSR_1.1_857 */ //#include //----------------------------------------------------------------------------- // "define" and "typedef" statements at the module level //----------------------------------------------------------------------------- #define TempDelaytimer 5U //----------------------------------------------------------------------------- // Global variable declaration //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // Types declaration //----------------------------------------------------------------------------- //============================================================================= // Start definitions of uninitialized 8 bit variables //============================================================================= #define ctasSysVolt_START_SEC_VAR_NO_INIT_8 #include "ctasSysVolt_MemMap.h" STATIC_AL tieDataStatus ucCodingDataStatus; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_NO_INIT_8 #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of uninitialized 8 bit variables //============================================================================= //============================================================================= // Start definitions of uninitialized 16 bit variables //============================================================================= #define ctasSysVolt_START_SEC_VAR_NO_INIT_16 #include "ctasSysVolt_MemMap.h" // -------------- Start variable definitions. STATIC_AL uint16 SysVolt_SYS_Supply_Off_Min_mV; STATIC_AL uint16 SysVolt_SYS_Supply_On_Min_mV; STATIC_AL uint16 SysVolt_SYS_Supply_Normal_Min_mV; STATIC_AL uint16 SysVolt_SYS_Supply_Normal_Max_mV; STATIC_AL uint16 SysVolt_SYS_Supply_On_Max_mV; STATIC_AL uint16 SysVolt_SYS_Supply_Off_Max_mV; STATIC_AL uint16 SysVolt_SYS_HighSupply_to_Norm_mV; STATIC_AL sint16 SysVolt_swStatemachine_VBat_Timeout_ms; STATIC_AL sint16 SysVolt_Cod_Debounce_ms; STATIC_AL sint16 SysVolt_Cod_V_Min_Debounce_ms; STATIC_AL sint16 SysVolt_Cod_V_Max_Debounce_ms; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_NO_INIT_16 #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of uninitialized 16 bit variables //============================================================================= //============================================================================= // Start definitions of uninitialized 32 bit variables //============================================================================= #define ctasSysVolt_START_SEC_VAR_NO_INIT_32 #include "ctasSysVolt_MemMap.h" // -------------- Start variable definitions. STATIC_AL tiu32Voltage_mV SysVolt_VBat; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_NO_INIT_32 #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of uninitialized 32 bit variables //============================================================================= //============================================================================= // Start definitions of uninitialized boolean variables //============================================================================= #define ctasSysVolt_START_SEC_VAR_NO_INIT_BOOLEAN #include "ctasSysVolt_MemMap.h" // -------------- Start variable definitions. STATIC_AL boolean VBatDiagEnable; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_NO_INIT_BOOLEAN #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of uninitialized boolean variables //============================================================================= //============================================================================= // Start definitions of initialized boolean variables //============================================================================= #define ctasSysVolt_START_SEC_VAR_INIT_BOOLEAN #include "ctasSysVolt_MemMap.h" // -------------- Start variable definitions. STATIC_AL boolean SysVolt_IsCodingDataLoaded; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_INIT_BOOLEAN #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of initialized boolean variables //============================================================================= //============================================================================= // Start definitions of static or uninitialized variables of type of type structures, unions, or arrays //============================================================================= #define ctasSysVolt_START_SEC_VAR_NO_INIT_UNSPECIFIED #include "ctasSysVolt_MemMap.h" // -------------- Start variable definitions. STATIC_AL tisSysVoltStatus SysVolt_VoltStatus; STATIC_AL tSysVolt_ResultSet SysVolt_Results; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_NO_INIT_UNSPECIFIED #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of static or uninitialized 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 ctasSysVolt_START_SEC_VAR_INIT_UNSPECIFIED #include "ctasSysVolt_MemMap.h" #include "Api/SysVolt.h" // -------------- Start variable definitions. STATIC_AL teSysVolt_VBat SysVolt_StateMachine_VBat_CurrentState = SysVolt_VBat_eUnknown; STATIC_AL tSysVolt_VoltageRangeSet SysVoltLevelVbat[] = { // VoltRangeName, unVoltRangeUpperLimit_mV { SYS_Supply_OFF_V_MIN, 0 /*[mV]*/ }, { SYS_Supply_ON_V_MIN, 0 /*[mV]*/ }, { SYS_Supply_Normal_V_MIN, 0 /*[mV]*/ }, { SYS_Supply_Normal_V_MAX, 0 /*[mV]*/ }, { SYS_Supply_ON_V_MAX, 0 /*[mV]*/ }, { SYS_Supply_OFF_V_MAX, 0 /*[mV]*/ }, { SYS_Supply_Unknown, 0xFFFF /*[mV]*/ } }; // -------------- Stop variable definitions. #define ctasSysVolt_STOP_SEC_VAR_INIT_UNSPECIFIED #include "ctasSysVolt_MemMap.h" //============================================================================= // End definitions of static or initialized variables of type of type structures, unions, or arrays //============================================================================= //STATIC_UT_NOINIT(uint8 , COD_SYS_HighSupply_V ); //STATIC_UT_NOINIT(uint8 , COD_SYS_HighSupply_T ); //STATIC_UT_NOINIT(uint8 , COD_SYS_LowSupply_V ); //STATIC_UT_NOINIT(uint8 , COD_SYS_LowSupply_T ); /* STATIC_UT_NOINIT(uint8 , COD_LED_HAUPT_UBAT_MIN_OFF_V ); STATIC_UT_NOINIT(uint8 , COD_LED_HAUPT_UBAT_MIN_OFF_T ); STATIC_UT_NOINIT(uint8 , COD_LED_HAUPT_UBAT_MIN_ON_V ); STATIC_UT_NOINIT(uint8 , COD_LED_HAUPT_UBAT_MIN_ON_T ); STATIC_UT_NOINIT(uint8 , COD_Fan_Turn_Off_Undervoltage_Level ); STATIC_UT_NOINIT(uint8 , COD_Fan_Turn_Off_Overvoltage_Level ); STATIC_UT_NOINIT(uint8 , COD_Fan_Turn_On_Off_Delay ); STATIC_UT_NOINIT(uint8 , COD_Fan_Turn_On_Hyst ); STATIC_UT_NOINIT(uint16, SysVolt_SYS_HighSupply_mV ); STATIC_UT_NOINIT(sint16, SysVolt_SYS_HighSupply_ms ); STATIC_UT_NOINIT(uint16, SysVolt_SYS_LowSupply_mV ); STATIC_UT_NOINIT(sint16, SysVolt_SYS_LowSupply_ms ); STATIC_UT_NOINIT(uint16, SysVolt_SYS_HighSupply_to_Norm_mV ); //own variable STATIC_UT_NOINIT(sint16, SysVolt_SYS_HighSupply_to_Norm_ms ); //own variable STATIC_UT_NOINIT(uint16, SysVolt_SYS_LowSupply_to_Norm_mV ); //own variable STATIC_UT_NOINIT(sint16, SysVolt_SYS_LowSupply_to_Norm_ms ); //own variable STATIC_UT_NOINIT(uint16, SysVolt_LED_HAUPT_UBAT_MIN_OFF_mV ); STATIC_UT_NOINIT(sint16, SysVolt_LED_HAUPT_UBAT_MIN_OFF_ms ); STATIC_UT_NOINIT(uint16, SysVolt_LED_HAUPT_UBAT_MIN_ON_mV ); STATIC_UT_NOINIT(sint16, SysVolt_LED_HAUPT_UBAT_MIN_ON_ms ); //STATIC_UT_NOINIT(uint16, SysVolt_Fan_Turn_Off_Undervoltage_Level); //STATIC_UT_NOINIT(uint16, SysVolt_Fan_Turn_Off_Overvoltage_Level ); //STATIC_UT_NOINIT(uint16, SysVolt_Fan_Turn_On_Off_Delay ); //STATIC_UT_NOINIT(uint16, SysVolt_Fan_Turn_On_Hyst );*/ //============================================================================= // Start declaration or definitions of functions //============================================================================= #define ctasSysVolt_START_SEC_CODE #include "ctasSysVolt_MemMap.h" // -------------- Start function declarations or definitions. //----------------------------------------------------------------------------- // Function prototypes //----------------------------------------------------------------------------- STATIC_AL void SysVolt_Init(void); STATIC_AL void SysVolt_DeInit(void); STATIC_AL void SysVolt_Cycle10ms(void); STATIC_AL void SysVolt_ReadRte(void); STATIC_AL void SysVolt_WriteRte(void); STATIC_AL void SysVolt_UpdateCoding(void); STATIC_AL void SysVolt_StateMachine_VBat(void); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eHigh(tiu32Voltage_mV ulVBatvoltage_mV); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eHigh_to_eNormal(tiu32Voltage_mV ulVBatvoltage_mV); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal_to_eHigh(tiu32Voltage_mV ulVBatvoltage_mV); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal(tiu32Voltage_mV ulVBatvoltage_mV); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal_to_eLow(tiu32Voltage_mV ulVBatvoltage_mV); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eLow_to_eNormal(tiu32Voltage_mV ulVBatvoltage_mV); STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eLow(tiu32Voltage_mV ulVBatvoltage_mV); //----------------------------------------------------------------------------- // Function //----------------------------------------------------------------------------- FUNC(void, ctasSysVolt_CODE) ctasSysVolt_rdSysVoltDeInit(void) { SysVolt_DeInit(); } //----------------------------------------------------------------------------- /// \brief API initialization runnable /// /// \descr Initialization runnable for SysVolt /// Calling once at start up. /// /// \param void /// /// \return void //----------------------------------------------------------------------------- FUNC(void, ctaaSysVolt_CODE) ctasSysVolt_riSysVoltInit(void) { SysVolt_Init(); } //----------------------------------------------------------------------------- /// \brief API cyclic runnable /// /// \descr cyclic runnable for SysVolt /// Calling cyclically every 10 ms. /// /// \param void /// /// \return void //----------------------------------------------------------------------------- FUNC(void, ctaaSysVolt_CODE) ctasSysVolt_rpSysVolt10ms(void) { SysVolt_Cycle10ms(); } //----------------------------------------------------------------------------- /// \brief Initialization function for SysVolt /// /// \descr This function is called to determine the voltage range. /// Calling once at start up. /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_Init(void) { #if (SysVoltReadCodingDataOn == STD_ON) SysVolt_IsCodingDataLoaded = FALSE; #else SysVolt_UpdateCoding(); // this updates the hard coded coding values #endif // Check coding status SysVolt_Rte_Read_CodingDataStatus_sVal(&ucCodingDataStatus); if (TRUE != ucCodingDataStatus) { SysVolt_IsCodingDataLoaded = FALSE; } else { SysVolt_IsCodingDataLoaded = TRUE; SysVolt_UpdateCoding(); } SysVolt_Results.ePreviousVoltageRange = SysVolt_VBat_eUnknown; SysVolt_Results.eVoltageRangeResult = SysVolt_VBat_eUnknown; SysVolt_Results.ucDebounceCnt = ZERO; } //----------------------------------------------------------------------------- /// \brief De-initialization function for SysVolt /// /// \descr SysVolt_DeInit() /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_DeInit(void) { //Do nothing } //----------------------------------------------------------------------------- /// \brief Read RTE function for SysVolt /// /// \descr The function of this function is to retrieve data from the RTE. /// /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_ReadRte(void) { SysVolt_Rte_Read_IoHwAbUserEcuSupply0_ulActualMean(&SysVolt_VBat); } //----------------------------------------------------------------------------- /// \brief Write RTE function for SysVolt /// /// \descr The function of this function is to send data from the RTE. /// /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_WriteRte(void) { SysVolt_VoltStatus.sSupplyVoltStatus.ulActualVolt = SysVolt_VBat; SysVolt_Rte_Write_SysVoltStatus((const tisSysVoltStatus*)&SysVolt_VoltStatus); } //----------------------------------------------------------------------------- /// \brief Cyclic function for SysVolt /// /// \descr This function is the main function of SysVolt, which receives the /// Vbat value every 10 mseconds and sets flags for each state of the /// voltage value and sends them to the RTE. /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_Cycle10ms(void) { if (FALSE != SysVolt_IsCodingDataLoaded) { SysVolt_ReadRte(); // essential cyclic function of SysVolt SysVolt_StateMachine_VBat(); SysVolt_WriteRte(); } else { //do nothing } } //----------------------------------------------------------------------------- /// \brief update coding parameter for SysVolt /// /// \descr copy and convert the coding parameters to SysVolt variables /// /// SYS_HighSupply_V Unit: 0,1 V Values: 0.. 255 (0.. 22,5V) Ueberspannungsfehler: Spannungswert Origin: SG Hersteller /// SYS_HighSupply_T Unit: 0,01 s Values: 0.. 255 (0.. 2,5s) Ueberspannungsfehler: Entprellung Origin: SG Hersteller /// SYS_LowSupply_V Unit: 0,1 V Values: 0.. 255 (0.. 22,5V) Unterspannungsfehler: Spannungswert Origin: SG Hersteller /// SYS_LowSupply_T Unit: 0,01 s Values: 0.. 255 (0.. 2,5s) Unterspannungsfehler: Entprellung Origin: SG Hersteller /// /// LED_HAUPT_UBAT_MIN_OFF_V Unit: 0,1 V Values: 0.. 255 (0.. 25,5 V) Untere Ausschaltschwelle fuer Hauptlichtfunktionen Origin: SG Hersteller /// LED_HAUPT_UBAT_MIN_OFF_T Unit: 1 ms Values: 0.. 255 (0.. 0,25 s) Verzoegerung fuer die untere Ausschaltschwelle (Hauptlichtfunktionen) Origin: SG Hersteller /// LED_HAUPT_UBAT_MIN_ON_V Unit: 0,1 V Values: 0.. 255 (0.. 25,5 V) Untere Einschaltschwelle fuer Hauptlichtfunktionen Origin: SG Hersteller /// LED_HAUPT_UBAT_MIN_ON_T Unit: 1 ms Values: 0.. 255 (0.. 0,25 s) Verzoegerung fuer die untere Einschaltschwelle (Hauptlichtfunktionen) Origin: SG Hersteller /// /// Fan_Turn_Off_Undervoltage_Level Unit: 0,1V Values: 0..255 (0.. 25,5 V) Luefter schaltet ab, wenn Klemme 30 unterhalb dieses Schwellwertes liegt, fuer die Entprellzeit: Fan_Turn_On_Off_Delay. Origin: BMW /// Fan_Turn_Off_Overvoltage_Level Unit: 0,1V Values: 0..255 (0.. 25,5 V) Origin: BMW /// Fan_Turn_On_Off_Delay Unit: 20ms Values: 0..15 (0.. 300 ms) Origin: BMW /// Fan_Turn_On_Hyst Unit: 200mV Values: 0..15 (0.. 3 V) Origin: BMW /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_UpdateCoding(void) { #if (SysVoltReadCodingDataOn == STD_ON) #ifdef UNIT_TEST COD_Fan_Turn_Off_Undervoltage_Level = applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_V_MIN; COD_Fan_Turn_Off_Overvoltage_Level = applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_V_MAX; COD_Fan_Turn_On_Undervoltage_Level = applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_ON_V_MIN; COD_Fan_Turn_On_Overvoltage_Level = applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_ON_V_MAX; COD_Fan_Turn_On_Off_Delay = applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_T_MAX; #endif SysVolt_SYS_Supply_Off_Min_mV = SUPPLY_OFF_V_MIN; SysVolt_SYS_Supply_On_Min_mV = SUPPLY_ON_V_MIN; SysVolt_SYS_Supply_Normal_Min_mV = SUPPLY_NORMAL_V_MIN; SysVolt_SYS_Supply_Normal_Max_mV = SUPPLY_NORMAL_V_MAX; SysVolt_SYS_Supply_On_Max_mV = SUPPLY_ON_V_MAX; SysVolt_SYS_Supply_Off_Max_mV = SUPPLY_OFF_V_MAX; SysVolt_Cod_Debounce_ms = SYS_Supply_ON_T_MIN; SysVolt_Cod_V_Min_Debounce_ms = SYS_Supply_OFF_T_MIN; SysVolt_Cod_V_Max_Debounce_ms = SYS_Supply_OFF_T_MAX; #ifdef UNIT_TEST // correct the implausible values read from coding if(COD_Fan_Turn_Off_Undervoltage_Level == 0U) { COD_Fan_Turn_Off_Undervoltage_Level = 70U; } if(COD_Fan_Turn_Off_Overvoltage_Level == 0U) { COD_Fan_Turn_Off_Overvoltage_Level = 180U; } if(COD_Fan_Turn_On_Off_Delay == 0U) { COD_Fan_Turn_On_Off_Delay = TempDelaytimer; // = 5 * 10ms } #endif #ifndef UNIT_TEST //SysVolt_Configs[0].pRangeCfg[0].ucVoltRangeUpperLimit_mV = (uint16)((uint16)(applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_V_MIN) * (uint16)100U); //COD_SYS_Supply_OFF_V_MIN_Level //SysVolt_Configs[0].pRangeCfg[1].ucVoltRangeUpperLimit_mV = (uint16)((applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_ON_V_MIN) * (uint16)100U); //COD_SYS_Supply_ON_V_MIN_Level //SysVolt_Configs[0].pRangeCfg[2].ucVoltRangeUpperLimit_mV = (uint16)((applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_ON_V_MAX)* (uint16)100U); //COD_SYS_Supply_Normal_V_MIN_Level //SysVolt_Configs[0].pRangeCfg[3].ucVoltRangeUpperLimit_mV = (uint16)((uint16)(applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_V_MAX) * (uint16)100U); //COD_SYS_Supply_Normal_V_MAX_Level //SysVolt_Configs[0].pRangeCfg[4].ucVoltRangeUpperLimit_mV = (uint16)((uint16)(applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_V_MIN) * (uint16)100U); //COD_SYS_Supply_ON_V_MAX_Level //SysVolt_Configs[0].pRangeCfg[5].ucVoltRangeUpperLimit_mV = (uint16)((applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_ON_V_MIN) * (uint16)100U); //COD_SYS_Supply_OFF_V_MAX_Level //SysVolt_Configs[0].ucDebounceCnt = (uint8)((applicationCodingData.Fan1.FAN_SUPPLY[0].ucFAN_SUPPLY_OFF_T_MAX) / 10u); //(COD_Fan_Turn_On_Off_Delay) #else SysVolt_Configs[0].pRangeCfg[0].ucVoltRangeUpperLimit_mV = (uint16)( (uint16)COD_Fan_Turn_Off_Undervoltage_Level * (uint16)100U); SysVolt_Configs[0].pRangeCfg[1].ucVoltRangeUpperLimit_mV = (uint16)( COD_Fan_Turn_On_Undervoltage_Level * (uint16)100U); SysVolt_Configs[0].pRangeCfg[2].ucVoltRangeUpperLimit_mV = (uint16)(COD_Fan_Turn_On_Overvoltage_Level* (uint16)100U); SysVolt_Configs[0].pRangeCfg[3].ucVoltRangeUpperLimit_mV = (uint16)( (uint16)COD_Fan_Turn_Off_Overvoltage_Level * (uint16)100U); SysVolt_Configs[0].ucDebounceCnt = ( uint8)((COD_Fan_Turn_On_Off_Delay)/10u); #endif #else //without the final implementation of coding, we use hard-coded values SysVolt_Configs[0].pRangeCfg[0].ucVoltRangeUpperLimit_mV = 6000U; SysVolt_Configs[0].pRangeCfg[1].ucVoltRangeUpperLimit_mV = 7000U; SysVolt_Configs[0].pRangeCfg[2].ucVoltRangeUpperLimit_mV = 19000U; SysVolt_Configs[0].pRangeCfg[3].ucVoltRangeUpperLimit_mV = 19500U; SysVolt_Configs[0].ucDebounceCnt = TempDelaytimer; #endif // PRQA S 5324 1 // STCAL suppression: This function cannot be feasibly simplified } //----------------------------------------------------------------------------- /// \brief Statemachine for System voltage /// /// \descr This cyclic function is called to determine overvoltage and undervoltage /// /// \param void /// /// \return void //----------------------------------------------------------------------------- STATIC_AL void SysVolt_StateMachine_VBat(void) { tiu32Voltage_mV ulVBatvoltage_mV; teSysVolt_VBat newState = SysVolt_StateMachine_VBat_CurrentState; ulVBatvoltage_mV = SysVolt_VBat; switch (SysVolt_StateMachine_VBat_CurrentState) { case SysVolt_VBat_eHigh: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eHigh(ulVBatvoltage_mV); break; case SysVolt_VBat_eHigh_to_eNormal: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eHigh_to_eNormal(ulVBatvoltage_mV); break; case SysVolt_VBat_eNormal_to_eHigh: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal_to_eHigh(ulVBatvoltage_mV); break; case SysVolt_VBat_eNormal: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal(ulVBatvoltage_mV); break; case SysVolt_VBat_eNormal_to_eLow: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal_to_eLow(ulVBatvoltage_mV); break; case SysVolt_VBat_eLow_to_eNormal: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eLow_to_eNormal(ulVBatvoltage_mV); break; case SysVolt_VBat_eLow: newState = SysVolt_ProcessState_SysVolt_StateMachine_VBat_eLow(ulVBatvoltage_mV); break; case SysVolt_VBat_eUnknown: //fallthru default: SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; newState = SysVolt_VBat_eNormal; break; } SysVolt_StateMachine_VBat_CurrentState = newState; // PRQA S 5324 1 // STCAL suppression: This function cannot be feasibly simplified } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt HIGH state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eHigh(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eHigh; if(ulVBatvoltage_mV <= (uint32)SysVolt_SYS_Supply_On_Max_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eHigh_to_eNormal; } else { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eHigh; } } return retVal; } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt HIGH to NORMAL transition state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eHigh_to_eNormal(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eHigh_to_eNormal; if (ulVBatvoltage_mV > (uint32)SysVolt_SYS_Supply_Off_Max_mV) { retVal = SysVolt_VBat_eHigh; } else if (ulVBatvoltage_mV <= ((uint32)SysVolt_SYS_Supply_On_Max_mV) && ulVBatvoltage_mV > ((uint32)SysVolt_SYS_Supply_Normal_Max_mV)) { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eHigh_to_eNormal; } } else if(ulVBatvoltage_mV <= (uint32)SysVolt_SYS_Supply_Normal_Max_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eNormal; } else { //do nothing } return retVal; } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt NORMAL to HIGH transition state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal_to_eHigh(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eNormal_to_eHigh; if(ulVBatvoltage_mV <= (uint32)SysVolt_SYS_Supply_Normal_Max_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eNormal; } else if (ulVBatvoltage_mV <= (uint32)SysVolt_SYS_Supply_Off_Max_mV) { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eNormal_to_eHigh; } } else { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_V_Max_Debounce_ms; retVal = SysVolt_VBat_eHigh; } return retVal; } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt NORMAL state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eNormal; if(ulVBatvoltage_mV <= (uint32)SysVolt_SYS_Supply_Normal_Min_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eNormal_to_eLow; } else if(ulVBatvoltage_mV >= (uint32)SysVolt_SYS_Supply_Normal_Max_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eNormal_to_eHigh; } else { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eNormal; } } return retVal; } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt NORMAL to LOW transition state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eNormal_to_eLow(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eNormal_to_eLow; if(ulVBatvoltage_mV >= (uint32)SysVolt_SYS_Supply_Normal_Min_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eNormal; } else if (ulVBatvoltage_mV >= (uint32)SysVolt_SYS_Supply_Off_Min_mV) { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eNormal_to_eLow; } } else { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_V_Min_Debounce_ms; retVal = SysVolt_VBat_eLow; } return retVal; } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt LOW to NORMAL transition state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eLow_to_eNormal(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eLow_to_eNormal; if(ulVBatvoltage_mV < ((uint32)SysVolt_SYS_Supply_Off_Min_mV)) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eLow; } else if (ulVBatvoltage_mV >= ((uint32)SysVolt_SYS_Supply_On_Min_mV) && ulVBatvoltage_mV < ((uint32)SysVolt_SYS_Supply_Normal_Min_mV)) { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eLow_to_eNormal; } } else if(ulVBatvoltage_mV >= (uint32)SysVolt_SYS_Supply_Normal_Min_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eNormal; } else { //do nothing } return retVal; } //----------------------------------------------------------------------------- /// \brief Statemachine worker function /// /// \descr SysVolt LOW state /// /// \param Voltage mV /// /// \return void //----------------------------------------------------------------------------- STATIC_AL teSysVolt_VBat SysVolt_ProcessState_SysVolt_StateMachine_VBat_eLow(tiu32Voltage_mV ulVBatvoltage_mV) { teSysVolt_VBat retVal = SysVolt_VBat_eLow; if(ulVBatvoltage_mV >= (uint32)SysVolt_SYS_Supply_On_Min_mV) { SysVolt_swStatemachine_VBat_Timeout_ms = SysVolt_Cod_Debounce_ms; retVal = SysVolt_VBat_eLow_to_eNormal; } else { if (SysVolt_swStatemachine_VBat_Timeout_ms > ZERO) { SysVolt_swStatemachine_VBat_Timeout_ms--; } else { SysVolt_VoltStatus.sSupplyVoltStatus.eVoltSts = SysVolt_VBat_eLow; } } return retVal; } // -------------- Stop function declarations or definitions. #define ctasSysVolt_STOP_SEC_CODE #include "ctasSysVolt_MemMap.h" //============================================================================= // End declaration or definitions of functions //=============================================================================