Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -rc0d1d149e3b669b0bf424206c725b5c1bfaff797 -r2df21d2472a8d79d78af7e359518acf3614accc5 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision c0d1d149e3b669b0bf424206c725b5c1bfaff797) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 2df21d2472a8d79d78af7e359518acf3614accc5) @@ -25,39 +25,43 @@ #include "ModeService.h" #include "ModeFault.h" #include "ModeStandby.h" -#include "ModePrescription.h" -#include "ModeOpParams.h" +#include "ModeTreatmentParams.h" #include "ModePreTreat.h" #include "ModeTreatment.h" #include "ModePostTreat.h" +/** + * @addtogroup HDOperationModes + * @{ + */ + // ********** private data ********** #define BROADCAST_HD_OP_MODE_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< HD operation mode broadcast interval (in task interval/sec). // ********** private data ********** -static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; ///< Pending operation mode change requests. -static OP_MODE currentMode = MODE_INIT; ///< Current operation mode. -static U32 broadcastModeIntervalCtr = 11; ///< Interval counter used to determine when to broadcase operation mode. Initialize to 11 to stagger broadcast. +static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; ///< Pending operation mode change requests. +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. /// 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 PRESCRIP. OP.PARAMS PRE-TREAT TREATMENT POST_TREA -/* 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_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, -/* STAN */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_STAN, MODE_PRES, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, -/* PRES */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_PRES, MODE_OPAR, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, -/* OPAR */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_PRES, MODE_OPAR, MODE_PRET, MODE_NLEG, MODE_NLEG, }, -/* PRET */{ MODE_FAUL, MODE_NLEG, 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_NLEG, MODE_TREA, MODE_POST, }, -/* POST */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_POST, }, }; +static const HD_OP_MODE_T MODE_TRANSITION_TABLE[ NUM_OF_MODES - 1 ][ NUM_OF_MODES - 1 ] = { +// from to-> FAULT SERVICE INIT STANBY TRT.PARAMS PRE-TREAT TREATMENT POST_TREA +/* 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_TPAR, MODE_NLEG, MODE_NLEG, MODE_NLEG, }, +/* TPAR */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_NLEG, 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, }, }; // ********** private function prototypes ********** -static OP_MODE arbitrateModeRequest( void ); -static void transitionToNewOperationMode( OP_MODE newMode ); +static HD_OP_MODE_T arbitrateModeRequest( void ); +static void transitionToNewOperationMode( HD_OP_MODE_T newMode ); static void broadcastOperationMode( void ); /************************************************************************* @@ -81,15 +85,15 @@ // start in init mode currentMode = MODE_INIT; + currentSubMode = 0; transitionToNewOperationMode( MODE_INIT ); // call initializers for the individual modes initFaultMode(); initServiceMode(); initInitAndPOSTMode(); initStandbyMode(); - initPrescriptionMode(); - initOpParamsMode(); + initTreatParamsMode(); initPreTreatmentMode(); initTreatmentMode(); initPostTreatmentMode(); @@ -106,7 +110,7 @@ *************************************************************************/ void execOperationModes( void ) { - OP_MODE newMode; + HD_OP_MODE_T newMode; // any new mode requests? newMode = arbitrateModeRequest(); // will return current mode if no pending requests @@ -131,43 +135,40 @@ 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_PRES: - execPrescriptionMode(); + case MODE_TPAR: + currentSubMode = execTreatParamsMode(); break; - case MODE_OPAR: - execOpParamsMode(); - break; - case MODE_PRET: - execPreTreatmentMode(); + currentSubMode = execPreTreatmentMode(); break; case MODE_TREA: - execTreatmentMode(); + currentSubMode = execTreatmentMode(); break; case MODE_POST: - execPostTreatmentMode(); + currentSubMode = execPostTreatmentMode(); break; 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 ) break; } // end switch @@ -185,7 +186,7 @@ * @param none * @return none *************************************************************************/ -void requestNewOperationMode( OP_MODE newMode ) +void requestNewOperationMode( HD_OP_MODE_T newMode ) { // validate requested mode if ( newMode < MODE_NLEG ) @@ -208,7 +209,7 @@ * @param none * @return none *************************************************************************/ -OP_MODE getCurrentOperationMode( void ) +HD_OP_MODE_T getCurrentOperationMode( void ) { return currentMode; } @@ -222,9 +223,9 @@ * @param none * @return none *************************************************************************/ -static OP_MODE arbitrateModeRequest( void ) +static HD_OP_MODE_T arbitrateModeRequest( void ) { - OP_MODE reqMode = currentMode; + HD_OP_MODE_T reqMode = currentMode; U32 i; // block additional requests until after mode arbitration @@ -235,7 +236,7 @@ { if ( modeRequest[ i ] != FALSE ) { - reqMode = (OP_MODE)i; + reqMode = (HD_OP_MODE_T)i; break; } } @@ -261,7 +262,7 @@ * @param none * @return none *************************************************************************/ -static void transitionToNewOperationMode( OP_MODE newMode ) +static void transitionToNewOperationMode( HD_OP_MODE_T newMode ) { // setup for new operating mode switch ( newMode ) @@ -278,12 +279,9 @@ case MODE_STAN: transitionToStandbyMode(); break; - case MODE_PRES: - transitionToPrescriptionMode(); + case MODE_TPAR: + transitionToTreatParamsMode(); break; - case MODE_OPAR: - transitionToOpParamsMode(); - break; case MODE_PRET: transitionToPreTreatmentMode(); break; @@ -313,6 +311,8 @@ if ( ++broadcastModeIntervalCtr >= BROADCAST_HD_OP_MODE_INTERVAL ) { broadcastModeIntervalCtr = 0; - broadcastHDOperationMode( currentMode ); + broadcastHDOperationMode( (U32)currentMode, currentSubMode ); } } + +/**@}*/