Index: firmware/App/Modes/FPModeFault.c =================================================================== diff -u -r8e72441bc5cd51272b1dc6b14d6c95b4888d6301 -rf79d3737907fd08293d56f60f9f439ac68c81855 --- firmware/App/Modes/FPModeFault.c (.../FPModeFault.c) (revision 8e72441bc5cd51272b1dc6b14d6c95b4888d6301) +++ firmware/App/Modes/FPModeFault.c (.../FPModeFault.c) (revision f79d3737907fd08293d56f60f9f439ac68c81855) @@ -15,14 +15,13 @@ * ***************************************************************************/ +#include "BoostPump.h" #include "FPModeFault.h" #include "FPModeStandby.h" #include "FPOperationModes.h" -#include "BoostPump.h" -#include "ModePreGenPermeateDefeatured.h" -#include "ModePreGenPermeate.h" #include "PersistentAlarm.h" #include "ROPump.h" +#include "SafetyShutdown.h" #include "SystemCommFP.h" #include "TaskGeneral.h" #include "Valves.h" @@ -32,8 +31,23 @@ * @{ */ +// ********** private definitions ********** + // ********** private data ********** +static FP_FAULT_STATE_T faultState; ///< Currently active fault state. +static FP_FAULT_NVDATA_STATE_T faultNVDataState; ///< Currently active NVdata fault state +static SELF_TEST_STATUS_T faultPOSTSelfTestResult; ///< Fault POST self test result. + +// ********** private function prototypes ********** +static FP_FAULT_STATE_T handleFaultStartState( void ); +static FP_FAULT_STATE_T handleFaultDeenergizedState( void ); +static FP_FAULT_STATE_T handleFaultEnergizedState( void ); + +static FP_FAULT_NVDATA_STATE_T handleFaultNVDataMgmtStartState( void ); +static FP_FAULT_NVDATA_STATE_T handleFaultRunNVPOSTsState( void ); + + /*********************************************************************//** * @brief * The initFaultMode function initializes the fault mode unit. @@ -43,7 +57,9 @@ *************************************************************************/ void initFaultMode( void ) { - + faultState = FP_FAULT_STATE_START; + faultNVDataState = FP_FAULT_NVDATA_STATE_START; + faultPOSTSelfTestResult = SELF_TEST_STATUS_IN_PROGRESS; } /*********************************************************************//** @@ -56,21 +72,22 @@ *************************************************************************/ U32 transitionToFaultMode( void ) { - setValveState( M4_VALV,VALVE_STATE_CLOSED ); - setValveState( P6_VALV,VALVE_STATE_CLOSED ); - setValveState( P11_VALV,VALVE_STATE_CLOSED ); - setValveState( P33_VALV, VALVE_STATE_CLOSED ); - setValveState( P34_VALV,VALVE_STATE_CLOSED ); - setValveState( P37_VALV, VALVE_STATE_CLOSED ); - setValveState( P39_VALV,VALVE_STATE_CLOSED ); + initFaultMode(); + setCurrentSubState( NO_SUB_STATE ); - if (TRUE == isBoostPumpInstalled()) - { - signalBoostPumpHardStop(); - } + return faultState; +} - signalROPumpHardStop(); - return 0; +/*********************************************************************//** + * @brief + * The getCurrentFaultState function returns the current state of the fault mode. + * @details \b Inputs: faultState + * @details \b Outputs: none + * @return current state of fault mode + *************************************************************************/ +FP_FAULT_STATE_T getCurrentFaultState( void ) +{ + return faultState; } /*********************************************************************//** @@ -82,8 +99,217 @@ *************************************************************************/ U32 execFaultMode( void ) { - return 0; + // execute current fault state + switch ( faultState ) + { + case FP_FAULT_STATE_START: + faultState = handleFaultStartState(); + break; + + case FP_FAULT_DEENERGIZED_STATE: + faultState = handleFaultDeenergizedState(); + break; + + case FP_FAULT_ENERGIZED_STATE: + faultState = handleFaultEnergizedState(); + break; + + default: + faultState = FP_FAULT_STATE_START; + break; + } + + return faultState; } + +/*********************************************************************//** + * @brief + * The execFaultNVdataMgmt function executes the fault mode NVData + * management state machine. + * @details \b Inputs: faultNVDataState + * @details \b Outputs: Fault mode NVdata state machine executed + * @return current state of fault NVDATA management mode + *************************************************************************/ +U32 execFaultNVdataMgmt( void ) +{ + // execute current fault NVData state manangement state + switch ( faultNVDataState ) + { + case FP_FAULT_NVDATA_STATE_START: + faultNVDataState = handleFaultNVDataMgmtStartState(); + break; + + case FP_FAULT_NVDATA_STATE_RUN_NV_POSTS: + faultNVDataState = handleFaultRunNVPOSTsState(); + break; + + case FP_FAULT_NVDATA_STATE_COMPLETE: + //Do Nothing + break; + + default: + faultNVDataState = FP_FAULT_NVDATA_STATE_COMPLETE; + break; + } + + return faultNVDataState; +} + +/*********************************************************************//** + * @brief + * The handleFaultStartState function handles the start state of + * the fault mode. + * @details \b Inputs: safetyShutdownActivated + * @details \b Outputs: none + * @return next fault state + *************************************************************************/ +static FP_FAULT_STATE_T handleFaultStartState( void ) +{ + FP_FAULT_STATE_T state = FP_FAULT_STATE_START; + + // Check saftey shutdown line already pulled + if ( TRUE == isSafetyShutdownActivated() ) + { + state = FP_FAULT_DEENERGIZED_STATE; + } + else + { + state = FP_FAULT_ENERGIZED_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleFaultDeenergizedState function handles the deenergized + * state of the fault mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @return fault state + *************************************************************************/ +static FP_FAULT_STATE_T handleFaultDeenergizedState( void ) +{ + FP_FAULT_STATE_T state = FP_FAULT_DEENERGIZED_STATE; + + deEnergizeActuators( FALSE ); + + //Make sure the stored config datas read completely. TODO - Determine if NV mgmt is needed for FP + execFaultNVdataMgmt(); + + return state; +} + +/*********************************************************************//** + * @brief + * The handleFaultEnergizedState function handles the energized + * state of the fault mode (by enabling few valves). + * @details \b Inputs: none + * @details \b Outputs: none + * @return fault state + *************************************************************************/ +static FP_FAULT_STATE_T handleFaultEnergizedState( void ) +{ + FP_FAULT_STATE_T state = FP_FAULT_ENERGIZED_STATE; + + deEnergizeActuators( TRUE ); + + //Make sure the stored config datas read completely. TODO - Determine if NV mgmt is needed for FP + execFaultNVdataMgmt(); + + //if saftey shutdown line pulled meanwhile, trainsition to deenergized state + if ( TRUE == isSafetyShutdownActivated() ) + { + state = FP_FAULT_DEENERGIZED_STATE; + } + + return state; +} + +/*********************************************************************//** + * @brief + * The handleFaultNVDataMgmtStartState function handles the start state of + * the fault NVdata management. + * @details \b Inputs: none + * @details \b Outputs: none + * @return next fault NVdata management state + *************************************************************************/ +static FP_FAULT_NVDATA_STATE_T handleFaultNVDataMgmtStartState( void ) +{ + //TODO : Revisit once NV data management been implemented + FP_FAULT_NVDATA_STATE_T state = FP_FAULT_NVDATA_STATE_START; + + return state; +} + +/*********************************************************************//** + * @brief + * The handleFaultRunNVPOSTsState function handles running non-volatile POSTs. + * @details \b Inputs: none + * @details \b Outputs: none + * @return next fault NVdata management state + *************************************************************************/ +static FP_FAULT_NVDATA_STATE_T handleFaultRunNVPOSTsState( void ) +{ + //TODO : Revisit once NV data management been implemented + FP_FAULT_NVDATA_STATE_T state = FP_FAULT_NVDATA_STATE_RUN_NV_POSTS; + + return state; +} + +/*********************************************************************//** + * @brief + * The deEnergizeActuators function sets most of the actuators + * to reset and de-energized state + * @details \b Inputs: none + * @details \b Outputs: none + * @param isDrainEnabled TRUE if the FP is set to drain, FALSE if not + * @return none + *************************************************************************/ +void deEnergizeActuators( BOOL isDrainEnabled ) +{ + U32 i; + + if ( TRUE == isFPDefeatured() ) + { + + if ( TRUE == isDrainEnabled ) + { + setValveState( M4_VALV, VALVE_STATE_CLOSED ); + setValveState( M7_VALV, VALVE_STATE_CLOSED ); + setValveState( P6_VALV, VALVE_STATE_OPEN ); + setValveState( P11_VALV, VALVE_STATE_OPEN ); + setValveState( P33_VALV, VALVE_STATE_CLOSED ); + setValveState( P34_VALV, VALVE_STATE_CLOSED ); + setValveState( P37_VALV, VALVE_STATE_OPEN ); + setValveState( P39_VALV, VALVE_STATE_OPEN ); + setValveState( P20_VALV, VALVE_STATE_CLOSED ); + setValveState( P43_VALV, VALVE_STATE_CLOSED ); + } + + else + { + for ( i = FIRST_VALVE; i <= NUM_OF_VALVES; i++ ) + { + setValveState( (VALVES_T)i, VALVE_STATE_CLOSED); + } + + if (TRUE == isBoostPumpInstalled()) + { + signalBoostPumpHardStop(); + } + + signalROPumpHardStop(); + } + } + // Defeatured System. Only have m4 to control + else + { + setValveState( M4_VALV, VALVE_STATE_CLOSED); + } +} + /**@}*/ +