Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r30f049651877229042e3f8700c8596e5b9a1e0f4 -re5d1d67106a93a6cd1b5692b586625d715732e2f --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 30f049651877229042e3f8700c8596e5b9a1e0f4) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision e5d1d67106a93a6cd1b5692b586625d715732e2f) @@ -37,7 +37,8 @@ // ********** private data ********** -#define BROADCAST_HD_OP_MODE_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< HD operation mode broadcast interval (in task interval/sec). +/// HD operation mode broadcast interval (in task interval/sec). +static const U32 BROADCAST_HD_OP_MODE_INTERVAL = ( 250 / TASK_GENERAL_INTERVAL ); // ********** private data ********** @@ -55,7 +56,7 @@ /* INIT */{ MODE_FAUL, MODE_NLEG, MODE_INIT, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* STAN */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_STAN, MODE_TPAR, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* TPAR */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_TPAR, MODE_PRET, MODE_NLEG, MODE_NLEG, }, -/* PRET */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_PRET, MODE_TREA, MODE_NLEG, }, +/* PRET */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_PRET, MODE_TREA, MODE_POST, }, /* TREA */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_TREA, MODE_POST, }, /* POST */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_POST, }, }; @@ -165,9 +166,9 @@ break; default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) currentMode = MODE_FAUL; currentSubMode = 0; - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) break; } // End switch @@ -212,6 +213,18 @@ /*********************************************************************//** * @brief + * The getPreviousOperationMode function gets the previous operation mode. + * @details Inputs: lastMode + * @details Outputs: none + * @return the previous operation mode + *************************************************************************/ +HD_OP_MODE_T getPreviousOperationMode( void ) +{ + return lastMode; +} + +/*********************************************************************//** + * @brief * The initiateAlarmAction function initiate an alarm or alarm recovery * action according to the current operation mode. * @details Inputs: currentMode @@ -352,4 +365,38 @@ } } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetOperationMode function will transition to a given operation + * mode if the transition is legal. + * @details Inputs: none + * @details Outputs: modeRequest[] + * @param newMode ID of requested mode to transition to + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetOperationMode( HD_OP_MODE_T newMode ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + HD_OP_MODE_T check = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; + + // Is mode transition legal? + if ( check == newMode ) + { + requestNewOperationMode( newMode ); + result = TRUE; + } + } + + return result; +} + /**@}*/