#include "ModeStandby.h" #include "ModeUpdate.h" #include "OperationModes.h" /** * @addtogroup BLOperationModes * @{ */ // ********** private definitions ********** // ********** private data ********** static BL_OP_MODE_T currentMode; ///< The currently active state of the active mode. static BL_OP_MODE_T previousMode; ///< Previous state of the operations mode. static BL_OP_MODE_T requestedMode; ///< Request a new mode. // ********** private function prototypes ********** static void transitionToNewOperationMode( BL_OP_MODE_T newMode ); /*********************************************************************//** * @brief * The initOperationModes function initializes the Operation Modes unit. * @details \b Inputs: none * @details \b Outputs: Operation Modes unit initialized. * @return none *************************************************************************/ void initOperationModes( void ) { currentMode = MODE_STAND; previousMode = MODE_STAND; requestedMode = MODE_STAND; initStandbyMode(); initUpdateMode(); } /*********************************************************************//** * @brief * The execOperationModes function executes the Operation Modes state machine. * @details \b Inputs: previousMode, currentMode, requestedMode * @details \b Outputs: previousMode, currentMode, requestedMode * @return none *************************************************************************/ void execOperationModes( void ) { if ( requestedMode != currentMode ) { previousMode = currentMode; currentMode = requestedMode; transitionToNewOperationMode( currentMode ); } switch ( currentMode ) { case MODE_STAND: execStandbyMode(); break; case MODE_UPDATE: execUpdateMode(); break; default: // Do nothing break; } } /*********************************************************************//** * @brief * The requestNewOperationMode function requests transition to a new * operation mode. The request will be arbitrated when the state machine * is next executed. * @details \b Inputs: none * @details \b Outputs: requestedMode * @param new mode request * @return none *************************************************************************/ void requestNewOperationMode( BL_OP_MODE_T newMode ) { if ( newMode < NUM_OF_MODES ) { requestedMode = newMode; } } /*********************************************************************//** * @brief * The transitionToNewOperationMode function calls the transition to function * for a new operation mode that we are transitioning to. * @details \b Inputs: none * @details \b Outputs: transition function called for new mode * @param new mode that is transitioning to. * @return none *************************************************************************/ static void transitionToNewOperationMode( BL_OP_MODE_T newMode ) { switch ( newMode ) { case MODE_STAND: transitionToStandbyMode(); break; case MODE_UPDATE: transitionToUpdateMode(); break; default: // Do nothing for now break; } } /**@}*/