Index: App/Modes/OperationModes.c =================================================================== diff -u -r765d2c35118e202444e737c66c77faf9678cc87e -r894b734327eb6e7cfa6bf651623576bc10214195 --- App/Modes/OperationModes.c (.../OperationModes.c) (revision 765d2c35118e202444e737c66c77faf9678cc87e) +++ App/Modes/OperationModes.c (.../OperationModes.c) (revision 894b734327eb6e7cfa6bf651623576bc10214195) @@ -1,18 +1,18 @@ /************************************************************************* -* -* Copyright Diality, Inc. 2019-2020. All Rights Reserved. -* 181 Technology, Ste. 150 -* Irvine, CA 92618 -* -* Project Denali -* -* @file OperationModes.c -* -* @brief Top-level state machine for the HD operation modes. -* -* @date 19-Sep-2019 -* -*************************************************************************/ + * + * Copyright Diality, Inc. 2019-2020. All Rights Reserved. + * 181 Technology, Ste. 150 + * Irvine, CA 92618 + * + * Project Denali + * + * @file OperationModes.c + * + * @brief Top-level state machine for the HD operation modes. + * + * @date 19-Sep-2019 + * + *************************************************************************/ #include "gio.h" @@ -31,23 +31,30 @@ // ********** private data ********** -static volatile BOOL modeRequest[ NUM_OF_MODES - 1 ]; +static volatile BOOL modeRequest[NUM_OF_MODES - 1]; static OP_MODE currentMode = MODE_INIT; // 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 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, }, }; // ********** private function prototypes ********** @@ -62,31 +69,31 @@ * Outputs : Operation Modes module initialized. * @param none * @return none -*************************************************************************/ + *************************************************************************/ void initOperationModes( void ) { - U32 i; + U32 i; - // initialize mode requests to none pending - for ( i = 0; i < (NUM_OF_MODES - 1); i++ ) - { - modeRequest[i] = FALSE; - } + // initialize mode requests to none pending + for ( i = 0; i < ( NUM_OF_MODES - 1 ); i++ ) + { + modeRequest[i] = FALSE; + } - // start in init mode - currentMode = MODE_INIT; - transitionToNewOperationMode( MODE_INIT ); + // start in init mode + currentMode = MODE_INIT; + transitionToNewOperationMode( MODE_INIT ); - // call initializers for the individual modes - initFaultMode(); - initServiceMode(); - initInitAndPOSTMode(); - initStandbyMode(); - initPrescriptionMode(); - initOpParamsMode(); - initPreTreatmentMode(); - initTreatmentMode(); - initPostTreatmentMode(); + // call initializers for the individual modes + initFaultMode(); + initServiceMode(); + initInitAndPOSTMode(); + initStandbyMode(); + initPrescriptionMode(); + initOpParamsMode(); + initPreTreatmentMode(); + initTreatmentMode(); + initPostTreatmentMode(); } /************************************************************************* @@ -97,73 +104,73 @@ * Outputs : currentMode is set by state machine. * @param none * @return none -*************************************************************************/ + *************************************************************************/ void execOperationModes( void ) { - OP_MODE newMode; + OP_MODE newMode; - // any new mode requests? - newMode = arbitrateModeRequest(); // will return current mode if no pending requests - newMode = MODE_TRANSITION_TABLE[currentMode][newMode]; + // any new mode requests? + newMode = arbitrateModeRequest(); // will return current mode if no pending requests + newMode = MODE_TRANSITION_TABLE[currentMode][newMode]; - // is requested new mode valid and legal at this time? - if ( newMode >= MODE_NLEG ) - { - // TODO - s/w fault - newMode = currentMode; - } + // is requested new mode valid and legal at this time? + if ( newMode >= MODE_NLEG ) + { + // TODO - s/w fault + newMode = currentMode; + } - // has mode changed? - if ( currentMode != newMode ) - { - // handle transition to new mode - transitionToNewOperationMode( newMode ); - currentMode = newMode; - } + // has mode changed? + if ( currentMode != newMode ) + { + // handle transition to new mode + transitionToNewOperationMode( newMode ); + currentMode = newMode; + } - // mode specific processing to be done continuously - switch ( currentMode ) - { - case MODE_FAUL: - execFaultMode(); - break; + // mode specific processing to be done continuously + switch ( currentMode ) + { + case MODE_FAUL: + execFaultMode(); + break; - case MODE_SERV: - execServiceMode(); - break; + case MODE_SERV: + execServiceMode(); + break; - case MODE_INIT: - execInitAndPOSTMode(); - break; + case MODE_INIT: + execInitAndPOSTMode(); + break; - case MODE_STAN: - execStandbyMode(); - break; + case MODE_STAN: + execStandbyMode(); + break; - case MODE_PRES: - execPrescriptionMode(); - break; + case MODE_PRES: + execPrescriptionMode(); + break; - case MODE_OPAR: - execOpParamsMode(); - break; + case MODE_OPAR: + execOpParamsMode(); + break; - case MODE_PRET: - execPreTreatmentMode(); - break; + case MODE_PRET: + execPreTreatmentMode(); + break; - case MODE_TREA: - execTreatmentMode(); - break; + case MODE_TREA: + execTreatmentMode(); + break; - case MODE_POST: - execPostTreatmentMode(); - break; + case MODE_POST: + execPostTreatmentMode(); + break; - default: - // TODO - trigger s/w fault - break; - } // end switch + default: + // TODO - trigger s/w fault + break; + } // end switch } /************************************************************************* @@ -174,19 +181,19 @@ * Outputs : Initializes the Operation Modes module. * @param none * @return none -*************************************************************************/ + *************************************************************************/ void requestNewOperationMode( OP_MODE newMode ) { - // validate requested mode - if ( newMode < MODE_NLEG ) - { - // make request - modeRequest[newMode] = TRUE; - } - else - { // invalid mode requested - // TODO - trigger s/w fault - } + // validate requested mode + if ( newMode < MODE_NLEG ) + { + // make request + modeRequest[newMode] = TRUE; + } + else + { // invalid mode requested + // TODO - trigger s/w fault + } } /************************************************************************* @@ -197,10 +204,10 @@ * Outputs : Initializes the Operation Modes module. * @param none * @return none -*************************************************************************/ + *************************************************************************/ OP_MODE getCurrentOperationMode( void ) { - return currentMode; + return currentMode; } /************************************************************************* @@ -211,35 +218,35 @@ * Outputs : Initializes the Operation Modes module. * @param none * @return none -*************************************************************************/ + *************************************************************************/ static OP_MODE arbitrateModeRequest( void ) { - OP_MODE reqMode = currentMode; - U32 i; + OP_MODE reqMode = currentMode; + U32 i; - // block additional requests until after mode arbitration - // TODO - disable priority task + // block additional requests until after mode arbitration + // TODO - disable priority task - // select highest priority mode request -or- current mode if no requests pending - for ( i = 0; i < MODE_NLEG; i++ ) - { - if ( modeRequest[i] != FALSE ) - { - reqMode = (OP_MODE)i; - break; - } - } + // select highest priority mode request -or- current mode if no requests pending + for ( i = 0; i < MODE_NLEG; i++ ) + { + if ( modeRequest[i] != FALSE ) + { + reqMode = (OP_MODE)i; + break; + } + } - // clear all requests now that an arbitration winner is selected - for ( i = 0; i < MODE_NLEG; i++ ) - { - modeRequest[i] = FALSE; - } + // clear all requests now that an arbitration winner is selected + for ( i = 0; i < MODE_NLEG; i++ ) + { + modeRequest[i] = FALSE; + } - // un-block requests - // TODO - enable priority task + // un-block requests + // TODO - enable priority task - return reqMode; + return reqMode; } /************************************************************************* @@ -250,43 +257,42 @@ * Outputs : Initializes the Operation Modes module. * @param none * @return none -*************************************************************************/ + *************************************************************************/ static void transitionToNewOperationMode( OP_MODE newMode ) { - // setup for new operating mode - switch (newMode) - { - case MODE_FAUL: - transitionToFaultMode(); - break; - case MODE_SERV: - transitionToServiceMode(); - break; - case MODE_INIT: - transitionToInitAndPOSTMode(); - break; - case MODE_STAN: - transitionToStandbyMode(); - break; - case MODE_PRES: - transitionToPrescriptionMode(); - break; - case MODE_OPAR: - transitionToOpParamsMode(); - break; - case MODE_PRET: - transitionToPreTreatmentMode(); - break; - case MODE_TREA: - transitionToTreatmentMode(); - break; - case MODE_POST: - transitionToPostTreatmentMode(); - break; - default: - // TODO - s/w fault - break; - } + // setup for new operating mode + switch ( newMode ) + { + case MODE_FAUL: + transitionToFaultMode(); + break; + case MODE_SERV: + transitionToServiceMode(); + break; + case MODE_INIT: + transitionToInitAndPOSTMode(); + break; + case MODE_STAN: + transitionToStandbyMode(); + break; + case MODE_PRES: + transitionToPrescriptionMode(); + break; + case MODE_OPAR: + transitionToOpParamsMode(); + break; + case MODE_PRET: + transitionToPreTreatmentMode(); + break; + case MODE_TREA: + transitionToTreatmentMode(); + break; + case MODE_POST: + transitionToPostTreatmentMode(); + break; + default: + // TODO - s/w fault + break; + } } -