Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r499e5de29e706d09f79ba22511068990c4044e84 -rf43eb1e9e0803776ec7420b16e1db8760b020bd9 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 499e5de29e706d09f79ba22511068990c4044e84) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision f43eb1e9e0803776ec7420b16e1db8760b020bd9) @@ -1,4 +1,4 @@ -/************************************************************************** +/**********************************************************************//** * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * @@ -14,46 +14,52 @@ * **************************************************************************/ +#include "gio.h" + +#include "OperationModes.h" #include "ModeDisinfect.h" #include "ModeDrain.h" #include "ModeFill.h" #include "ModeFlush.h" -#include "gio.h" - -#include "OperationModes.h" - #include "ModeFault.h" #include "ModeFill.h" #include "ModeInitPOST.h" #include "ModePostTreat.h" #include "ModeService.h" +#include "ModeSolo.h" #include "ModeStandby.h" +/** + * @addtogroup OperationModes + * @{ + */ + // ********** private data ********** -static volatile BOOL modeRequest[NUM_OF_MODES - 1]; -static OP_MODE currentMode = MODE_INIT; +static volatile BOOL modeRequest[NUM_OF_MODES - 1]; ///< Array of mode request flags. +static OP_MODE currentMode = MODE_INIT; ///< The currently active mode. -// this matrix determines legal transitions from one mode to another +/// This matrix determines legal transitions from one mode to another. static const OP_MODE MODE_TRANSITION_TABLE[NUM_OF_MODES - 1][NUM_OF_MODES - 1] = { -// from to-> FAULT SERVICE INIT STANBY FILL DRAI FLUS DISI - /* FAUL */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* 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_FILL, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* FILL */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_FILL, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* DRAI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_DRAI, MODE_NLEG, MODE_NLEG }, - /* FLUS */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_FLUS, MODE_NLEG }, - /* DISI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_DISI } +// from to-> FAULT SERVICE INIT STANBY STBY-SOLO FILL DRAIN FLUSH DISINFECT + /* FAUL */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* SERV */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* INIT */{ MODE_FAUL, MODE_NLEG, MODE_INIT, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* STAN */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_FILL, MODE_DRAI, MODE_NLEG, MODE_NLEG }, + /* SOLO */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_FLUS, MODE_DISI }, + /* FILL */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_FILL, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* DRAI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_DRAI, MODE_NLEG, MODE_NLEG }, + /* FLUS */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_FLUS, MODE_NLEG }, + /* DISI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_DISI } }; // ********** private function prototypes ********** static OP_MODE arbitrateModeRequest( void ); static void transitionToNewOperationMode( OP_MODE newMode ); -/************************************************************************* +/*********************************************************************//** * @brief execOperationModes * The execOperationModes function initializes the Operation Modes module. * @details @@ -81,13 +87,14 @@ initServiceMode(); initInitAndPOSTMode(); initStandbyMode(); + initSoloMode(); initFillMode(); initDrainMode(); initFlushMode(); initDisinfectMode(); } -/************************************************************************* +/*********************************************************************//** * @brief execOperationModes * The execOperationModes function executes the Operation Modes state machine. * @details @@ -138,6 +145,10 @@ execStandbyMode(); break; + case MODE_SOLO: + execSoloMode(); + break; + case MODE_FILL: execFillMode(); break; @@ -161,7 +172,7 @@ } // end switch } -/************************************************************************* +/*********************************************************************//**** * @brief requestNewOperationMode * The requestNewOperationMode function initializes the Operation Modes module. * @details @@ -184,7 +195,7 @@ } } -/************************************************************************* +/*********************************************************************//** * @brief getCurrentOperationMode * The getCurrentOperationMode function initializes the Operation Modes module. * @details @@ -198,7 +209,7 @@ return currentMode; } -/************************************************************************* +/*********************************************************************//** * @brief arbitrateModeRequest * The arbitrateModeRequest function initializes the Operation Modes module. * @details @@ -213,7 +224,7 @@ U32 i; // block additional requests until after mode arbitration - // TODO - disable priority task + _disable_IRQ(); // select highest priority mode request -or- current mode if no requests pending for ( i = 0; i < MODE_NLEG; i++ ) @@ -232,12 +243,12 @@ } // un-block requests - // TODO - enable priority task + _enable_IRQ(); return reqMode; } -/************************************************************************* +/*********************************************************************//** * @brief transitionToNewOperationMode * The transitionToNewOperationMode function initializes the Operation Modes module. * @details @@ -263,6 +274,9 @@ case MODE_STAN: transitionToStandbyMode(); break; + case MODE_SOLO: + transitionToSoloMode(); + break; case MODE_FILL: transitionToFillMode(); break; @@ -276,8 +290,9 @@ transitionToDisinfectMode(); break; default: - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, 0, (U32)newMode ) // TODO - add s/w fault enum to 1st data param break; } } +/**@}*/