Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r2df21d2472a8d79d78af7e359518acf3614accc5 -r8e7158d8231435496fcf1d5649e51babf859ccc7 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 2df21d2472a8d79d78af7e359518acf3614accc5) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 8e7158d8231435496fcf1d5649e51babf859ccc7) @@ -1,26 +1,23 @@ /************************************************************************** - * - * Copyright (c) 2019-2020 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 OperationModes.c - * - * @date 19-Sep-2019 - * @author S. Nash - * - * @brief Top-level state machine for the HD operation modes. - * - **************************************************************************/ +* +* Copyright (c) 2019-2021 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 OperationModes.c +* +* @author (last) Sean Nash +* @date (last) 01-Dec-2020 +* +* @author (original) Dara Navaei +* @date (original) 05-Nov-2019 +* +***************************************************************************/ -#include #include "gio.h" -#include "TaskGeneral.h" -#include "SystemCommMessages.h" -#include "OperationModes.h" - +#include "HDCommon.h" #include "ModeInitPOST.h" #include "ModeService.h" #include "ModeFault.h" @@ -29,6 +26,9 @@ #include "ModePreTreat.h" #include "ModeTreatment.h" #include "ModePostTreat.h" +#include "OperationModes.h" +#include "SystemCommMessages.h" +#include "TaskGeneral.h" /** * @addtogroup HDOperationModes @@ -42,6 +42,7 @@ // ********** private data ********** static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; ///< Pending operation mode change requests. +static HD_OP_MODE_T lastMode = MODE_INIT; ///< Last operation mode prior to current mode. static HD_OP_MODE_T currentMode = MODE_INIT; ///< Current operation mode. static U32 currentSubMode = 0; ///< The currently active state of the active mode. static U32 broadcastModeIntervalCtr = 11; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. @@ -53,7 +54,7 @@ /* SERV */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, /* 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_NLEG, MODE_TPAR, MODE_PRET, 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, }, /* 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, }, }; @@ -64,13 +65,11 @@ static void transitionToNewOperationMode( HD_OP_MODE_T newMode ); static void broadcastOperationMode( void ); -/************************************************************************* - * @brief execOperationModes - * The execOperationModes function initializes the Operation Modes module. - * @details - * Inputs : none - * Outputs : Operation Modes module initialized. - * @param none +/*********************************************************************//** + * @brief + * The initOperationModes function initializes the Operation Modes module. + * @details Inputs: none + * @details Outputs: Operation Modes module initialized. * @return none *************************************************************************/ void initOperationModes( void ) @@ -99,13 +98,11 @@ initPostTreatmentMode(); } -/************************************************************************* - * @brief execOperationModes +/*********************************************************************//** + * @brief * The execOperationModes function executes the Operation Modes state machine. - * @details - * Inputs : none - * Outputs : currentMode is set by state machine. - * @param none + * @details Inputs: none + * @details Outputs: currentMode is set by state machine. * @return none *************************************************************************/ void execOperationModes( void ) @@ -119,14 +116,15 @@ // is requested new mode valid and legal at this time? if ( newMode >= MODE_NLEG ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) newMode = currentMode; } // has mode changed? if ( currentMode != newMode ) { // handle transition to new mode + lastMode = currentMode; transitionToNewOperationMode( newMode ); currentMode = newMode; } @@ -169,21 +167,21 @@ default: currentMode = MODE_FAUL; currentSubMode = 0; - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) break; } // end switch // broadcast current operation mode on interval broadcastOperationMode(); } -/************************************************************************* - * @brief requestNewOperationMode - * The requestNewOperationMode function initializes the Operation Modes module. - * @details - * Inputs : none - * Outputs : Initializes the Operation Modes module. - * @param none +/*********************************************************************//** + * @brief + * The requestNewOperationMode function requests transition to a new + * operation mode. The request will be arbitrated when the state machine + * is next executed. + * @details Inputs: none + * @details Outputs: modeRequest[] * @return none *************************************************************************/ void requestNewOperationMode( HD_OP_MODE_T newMode ) @@ -196,32 +194,29 @@ } else { // invalid mode requested - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, newMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, newMode ) } } -/************************************************************************* - * @brief getCurrentOperationMode - * The getCurrentOperationMode function initializes the Operation Modes module. - * @details - * Inputs : none - * Outputs : Initializes the Operation Modes module. - * @param none - * @return none +/*********************************************************************//** + * @brief + * The getCurrentOperationMode function gets the current operation mode. + * @details Inputs: currentMode + * @details Outputs: none + * @return the current operation mode *************************************************************************/ HD_OP_MODE_T getCurrentOperationMode( void ) { return currentMode; } -/************************************************************************* - * @brief arbitrateModeRequest - * The arbitrateModeRequest function initializes the Operation Modes module. - * @details - * Inputs : none - * Outputs : Initializes the Operation Modes module. - * @param none - * @return none +/*********************************************************************//** + * @brief + * The arbitrateModeRequest function arbitrates any pending mode transition + * requests. + * @details Inputs: modeRequest[] + * @details Outputs: modeRequest[] is reset + * @return the next operation mode (current mode if no requests pending) *************************************************************************/ static HD_OP_MODE_T arbitrateModeRequest( void ) { @@ -253,13 +248,12 @@ return reqMode; } -/************************************************************************* - * @brief transitionToNewOperationMode - * The transitionToNewOperationMode function initializes the Operation Modes module. - * @details - * Inputs : none - * Outputs : Initializes the Operation Modes module. - * @param none +/*********************************************************************//** + * @brief + * The transitionToNewOperationMode function calls the transition to function + * for a new operation mode that we are transitioning to. + * @details Inputs: none + * @details Outputs: transition function called for new mode * @return none *************************************************************************/ static void transitionToNewOperationMode( HD_OP_MODE_T newMode ) @@ -292,18 +286,17 @@ transitionToPostTreatmentMode(); break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, newMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, newMode ) break; } } -/************************************************************************* +/*********************************************************************//** * @brief - * The broadcastOperationMode function sends the current operation mode at \n + * The broadcastOperationMode function sends the current operation mode at * the prescribed interval. - * @details - * Inputs : broadcastModeIntervalCtr - * Outputs : HD operation mode broadcast message sent. + * @details Inputs: broadcastModeIntervalCtr + * @details Outputs: HD operation mode broadcast message sent. * @return none *************************************************************************/ static void broadcastOperationMode( void )