Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r0bf1c0824844ed4c227eef0323238daedf505dc7 -r80028d3b1eef322950c1a5b74c282df2ba989ff5 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 0bf1c0824844ed4c227eef0323238daedf505dc7) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 80028d3b1eef322950c1a5b74c282df2ba989ff5) @@ -69,6 +69,7 @@ // ********** private function prototypes ********** static DG_OP_MODE_T arbitrateModeRequest( void ); +static void exitCurrentOperationMode( DG_OP_MODE_T oldMode ); static void transitionToNewOperationMode( DG_OP_MODE_T newMode ); static void broadcastOperationMode( void ); @@ -134,6 +135,7 @@ if ( currentMode != newMode ) { // handle transition to new mode + exitCurrentOperationMode( currentMode ); transitionToNewOperationMode( newMode ); currentMode = newMode; } @@ -270,6 +272,28 @@ /*********************************************************************//** * @brief + * The exitCurrentOperationMode function undergo the process of exit the + * current operation mode. + * @details Inputs: none + * @details Outputs: clean up when exit current mode + * @param oldMode old op mode to clean up + * @return none + *************************************************************************/ +static void exitCurrentOperationMode( DG_OP_MODE_T oldMode ) +{ + switch ( oldMode ) + { + case DG_MODE_FILL: + exitFillMode(); + break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, 0, (U32)oldMode ) // TODO - add s/w fault enum to 1st data param + break; + } +} + +/*********************************************************************//** + * @brief * The transitionToNewOperationMode function undergo the process of transition * to new operation mode. * @details Inputs: none