/************************************************************************** * * Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file FPModeStandby.c * * @author (last) Michael Garthwaite * @date (last) 28-Feb-2025 * * @author (original) Michael Garthwaite * @date (original) 28-Feb-2025 * ***************************************************************************/ #include "BoostPump.h" #include "FPModeStandby.h" #include "FPOperationModes.h" #include "ModePreGenPermeateDefeatured.h" #include "ModePreGenPermeate.h" #include "PermeateTank.h" #include "PersistentAlarm.h" #include "ROPump.h" #include "SystemCommFP.h" #include "TaskGeneral.h" #include "Valves.h" /** * @addtogroup FPStandbyMode * @{ */ // ********** private definitions ********** // ********** private data ********** static FP_STANDBY_MODE_STATE_T standbyState; ///< Currently active standby state. // ********** private function prototypes ********** static FP_STANDBY_MODE_STATE_T handleStandbyIdleState( void ); /*********************************************************************//** * @brief * The initStandbyMode function initializes the standby mode unit. * @details \b Inputs: none * @details \b Outputs:unit variables initialized. * @return none *************************************************************************/ void initStandbyMode( void ) { standbyState = FP_STANDBY_MODE_STATE_IDLE; } /*********************************************************************//** * @brief * The transitionToStandbyMode function prepares for transition to standby mode. * while transition, deenergize all actuators. * @details \b Inputs: none * @details \b Outputs: Re-initialized standby mode * @return initial state *************************************************************************/ U32 transitionToStandbyMode( void ) { initStandbyMode(); resetPermeateTank(); setValveState( M4_VALV,VALVE_STATE_CLOSED ); setValveState( M7_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 ); setValveState( P20_VALV, VALVE_STATE_CLOSED ); setValveState( P43_VALV, VALVE_STATE_CLOSED ); signalROPumpHardStop(); if ( TRUE == isBoostPumpInstalled() ) { signalBoostPumpHardStop(); } return standbyState; } /*********************************************************************//** * @brief * The execStandbyMode function executes the standby mode state machine. * @details \b Inputs: none * @details \b Outputs: Standby mode state machine executed * @details \b Alarm: ALARM_ID_FP_SOFTWARE_FAULT if standbyState is invalid. * @return current state *************************************************************************/ U32 execStandbyMode( void ) { // execute current Standby state switch ( standbyState ) { case FP_STANDBY_MODE_STATE_IDLE: standbyState = handleStandbyIdleState(); break; default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, SW_FAULT_ID_MODE_STANDBY_INVALID_STATE, standbyState ) standbyState = FP_STANDBY_MODE_STATE_IDLE; break; } return standbyState; } /*********************************************************************//** * @brief * The handleStandbyIdleState function executes the idle state of the * standby mode state machine. * @details \b Inputs: * @details \b Outputs: * @details \b Message \Sent: * @return the next state *************************************************************************/ static FP_STANDBY_MODE_STATE_T handleStandbyIdleState( void ) { FP_STANDBY_MODE_STATE_T state = FP_STANDBY_MODE_STATE_IDLE; return state; } /*********************************************************************//** * @brief * The getCurrentStandbyState function returns the current state of standby mode. * @details \b Inputs: standbyState * @details \b Outputs: none * @return the current state of standby mode. *************************************************************************/ FP_STANDBY_MODE_STATE_T getCurrentStandbyState( void ) { return standbyState; } /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ /**@}*/