Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r499e5de29e706d09f79ba22511068990c4044e84 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 499e5de29e706d09f79ba22511068990c4044e84) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -14,19 +14,19 @@ * **************************************************************************/ +#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" // ********** private data ********** @@ -37,15 +37,16 @@ // 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 ********** @@ -81,6 +82,7 @@ initServiceMode(); initInitAndPOSTMode(); initStandbyMode(); + initSoloMode(); initFillMode(); initDrainMode(); initFlushMode(); @@ -138,6 +140,10 @@ execStandbyMode(); break; + case MODE_SOLO: + execSoloMode(); + break; + case MODE_FILL: execFillMode(); break; @@ -213,7 +219,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,7 +238,7 @@ } // un-block requests - // TODO - enable priority task + _enable_IRQ(); return reqMode; } @@ -263,6 +269,9 @@ case MODE_STAN: transitionToStandbyMode(); break; + case MODE_SOLO: + transitionToSoloMode(); + break; case MODE_FILL: transitionToFillMode(); break;