Index: firmware/App/Modes/ModeDrain.c =================================================================== diff -u -r499e5de29e706d09f79ba22511068990c4044e84 -rc48a99d2d1c852adcc986253b6c420a90dab7bfe --- firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision 499e5de29e706d09f79ba22511068990c4044e84) +++ firmware/App/Modes/ModeDrain.c (.../ModeDrain.c) (revision c48a99d2d1c852adcc986253b6c420a90dab7bfe) @@ -14,51 +14,109 @@ * **************************************************************************/ +#include "DrainPump.h" #include "ModeDrain.h" #include "OperationModes.h" +/** + * @addtogroup DrainMode + * @{ + */ + +// ********** private definitions ********** + +#define TARGET_DRAIN_PUMP_RPM 2000 ///< Target drain pump speed. + +/// Enumeration of drain mode states. +typedef enum Drain_States +{ + DRAIN_STATE_START = 0, ///< Start drain mode state. + DRAIN_STATE_DRAIN, ///< Drain drain mode state. + NUM_OF_DRAIN_STATES ///< Number of drain mode states. +} DRAIN_STATE_T; + // ********** private data ********** +static DRAIN_STATE_T drainState = DRAIN_STATE_START; ///< Currently active drain state. + // ********** private function prototypes ********** -/************************************************************************* - * @brief initDrainMode +static DRAIN_STATE_T handleDrainState( void ); + +/*********************************************************************//** + * @brief * The initOpParamsMode function initializes the Drain Mode module. * @details * Inputs : none * Outputs : Operating Parameters Mode module initialized. - * @param none * @return none *************************************************************************/ void initDrainMode( void ) { + drainState = DRAIN_STATE_START; } -/************************************************************************* - * @brief transitionToDrainMode +/*********************************************************************//** + * @brief * The transitionToDrainMode function prepares for transition to drain \n * mode. * @details * Inputs : none * Outputs : - * @param none * @return none *************************************************************************/ void transitionToDrainMode( void ) { + // re-initialize each time we transition to drain mode + initDrainMode(); + + // TODO - set initial actuator states + // VDr to drain } -/************************************************************************* - * @brief execDrainMode +/*********************************************************************//** + * @brief * The execDrainMode function executes the Drain Mode state machine. * @details * Inputs : none * Outputs : - * @param none * @return none *************************************************************************/ void execDrainMode( void ) { + // execute current drain state + switch ( drainState ) + { + case DRAIN_STATE_START: + setDrainPumpTargetSpeed( TARGET_DRAIN_PUMP_RPM ); + drainState = DRAIN_STATE_DRAIN; + break; + case DRAIN_STATE_DRAIN: + drainState = handleDrainState(); + break; + + default: + drainState = DRAIN_STATE_START; + // TODO - s/w fault + break; + } } +/*********************************************************************//** + * @brief + * The handleDrainState function handles the drain state of the Drain Mode \n + * state machine. + * @details + * Inputs : none + * Outputs : + * @return the next state + *************************************************************************/ +static DRAIN_STATE_T handleDrainState( void ) +{ + DRAIN_STATE_T result = DRAIN_STATE_DRAIN; + + return result; +} + +/**@}*/