Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -rdea90cb6d941a0d70c1666a11a0199e147dea764 -rf5b02f03b6695c0c76fd8a4d902a13114e1a8aca --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision dea90cb6d941a0d70c1666a11a0199e147dea764) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision f5b02f03b6695c0c76fd8a4d902a13114e1a8aca) @@ -42,12 +42,13 @@ // ********** private data ********** -static volatile BOOL modeRequest[NUM_OF_MODES - 1]; ///< Array of mode request flags. -static OP_MODE currentMode = MODE_INIT; ///< The currently active mode. +static volatile BOOL modeRequest[NUM_OF_DG_MODES - 1]; ///< Array of mode request flags. +static DG_OP_MODE currentMode = MODE_INIT; ///< The currently active mode. +static U32 currentSubMode = 0; ///< The currently active state of the active mode. static U32 broadcastModeIntervalCtr = 11; ///< Interval counter used to determine when to broadcase operation mode. Initialize to 11 to stagger broadcast. /// 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] = +static const DG_OP_MODE MODE_TRANSITION_TABLE[NUM_OF_DG_MODES - 1][NUM_OF_DG_MODES - 1] = { // from to-> FAULT SERVICE INIT STANBY STBY-SOLO RE-CIRC FILL DRAIN FLUSH HEAT DIS CHEM DIS /* FAUL */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, @@ -67,8 +68,8 @@ // ********** private function prototypes ********** -static OP_MODE arbitrateModeRequest( void ); -static void transitionToNewOperationMode( OP_MODE newMode ); +static DG_OP_MODE arbitrateModeRequest( void ); +static void transitionToNewOperationMode( DG_OP_MODE newMode ); static void broadcastOperationMode( void ); /*********************************************************************//** @@ -84,7 +85,7 @@ U32 i; // initialize mode requests to none pending - for ( i = 0; i < ( NUM_OF_MODES - 1 ); i++ ) + for ( i = 0; i < ( NUM_OF_DG_MODES - 1 ); i++ ) { modeRequest[i] = FALSE; } @@ -124,7 +125,7 @@ *************************************************************************/ void execOperationModes( void ) { - OP_MODE newMode; + DG_OP_MODE newMode; // any new mode requests? newMode = arbitrateModeRequest(); // will return current mode if no pending requests @@ -149,52 +150,53 @@ switch ( currentMode ) { case MODE_FAUL: - execFaultMode(); + currentSubMode = execFaultMode(); break; case MODE_SERV: - execServiceMode(); + currentSubMode = execServiceMode(); break; case MODE_INIT: - execInitAndPOSTMode(); + currentSubMode = execInitAndPOSTMode(); break; case MODE_STAN: - execStandbyMode(); + currentSubMode = execStandbyMode(); break; case MODE_SOLO: - execSoloMode(); + currentSubMode = execSoloMode(); break; case MODE_CIRC: - execRecirculateMode(); + currentSubMode = execRecirculateMode(); break; case MODE_FILL: - execFillMode(); + currentSubMode = execFillMode(); break; case MODE_DRAI: - execDrainMode(); + currentSubMode = execDrainMode(); break; case MODE_FLUS: - execFlushMode(); + currentSubMode = execFlushMode(); break; case MODE_HEAT: - execHeatDisinfectMode(); + currentSubMode = execHeatDisinfectMode(); break; case MODE_CHEM: - execChemicalDisinfectMode(); + currentSubMode = execChemicalDisinfectMode(); break; default: - currentMode = MODE_FAUL; // TODO - trigger s/w fault + currentMode = MODE_FAUL; + currentSubMode = 0; break; } // end switch @@ -213,7 +215,7 @@ * @param newMode : requested mode * @return none *************************************************************************/ -void requestNewOperationMode( OP_MODE newMode ) +void requestNewOperationMode( DG_OP_MODE newMode ) { // validate requested mode if ( newMode < MODE_NLEG ) @@ -235,7 +237,7 @@ * Outputs : Initializes the Operation Modes module. * @return none *************************************************************************/ -OP_MODE getCurrentOperationMode( void ) +DG_OP_MODE getCurrentOperationMode( void ) { return currentMode; } @@ -248,9 +250,9 @@ * Outputs : Initializes the Operation Modes module. * @return none *************************************************************************/ -static OP_MODE arbitrateModeRequest( void ) +static DG_OP_MODE arbitrateModeRequest( void ) { - OP_MODE reqMode = currentMode; + DG_OP_MODE reqMode = currentMode; U32 i; // block additional requests until after mode arbitration @@ -261,7 +263,7 @@ { if ( modeRequest[i] != FALSE ) { - reqMode = (OP_MODE)i; + reqMode = (DG_OP_MODE)i; break; } } @@ -287,7 +289,7 @@ * @param newMode : new op mode to transition to * @return none *************************************************************************/ -static void transitionToNewOperationMode( OP_MODE newMode ) +static void transitionToNewOperationMode( DG_OP_MODE newMode ) { // setup for new operating mode switch ( newMode ) @@ -345,7 +347,7 @@ if ( ++broadcastModeIntervalCtr >= BROADCAST_DG_OP_MODE_INTERVAL ) { broadcastModeIntervalCtr = 0; - broadcastDGOperationMode( currentMode ); + broadcastDGOperationMode( (U32)currentMode, currentSubMode ); } }