Index: firmware/App/Modes/StatePreTxHeparinSetup.c =================================================================== diff -u -r069dee3a2428d3c6bb281db1844a372ae6e2063a -re4eceb1ac6e8091d10e0fab49d2d5a9c5e5f1c67 --- firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision 069dee3a2428d3c6bb281db1844a372ae6e2063a) +++ firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision e4eceb1ac6e8091d10e0fab49d2d5a9c5e5f1c67) @@ -438,10 +438,8 @@ /*********************************************************************//** * @brief * The handlePreTxHeparinPausedState function handles the paused state. - * @details \b Inputs: heparinSetupResumeRequested, - * interruptedPreTxHeparinSetupState - * @details \b Outputs: Next pre-treatment heparin setup state and - * syringe pump operation. + * @details \b Inputs: none + * @details \b Outputs: Next pre-treatment heparin setup state. * @return Current or next pre-treatment heparin setup state. *************************************************************************/ static PRE_TX_HEPARIN_SETUP_STATE_T handlePreTxHeparinPausedState( void ) @@ -450,32 +448,33 @@ if ( TRUE == heparinSetupResumeRequested ) { - switch ( interruptedPreTxHeparinSetupState ) + // Resume from Preload, Await Syringe Load Confirmation, or Seek by + // retracting the syringe and restarting the preload sequence. + if ( ( PRE_TX_HEPARIN_SETUP_PRELOAD_STATE == interruptedPreTxHeparinSetupState ) || + ( PRE_TX_HEPARIN_SETUP_AWAIT_SYRINGE_LOAD_CONFIRMATION_STATE == interruptedPreTxHeparinSetupState ) || + ( PRE_TX_HEPARIN_SETUP_SEEK_STATE == interruptedPreTxHeparinSetupState ) ) { - // If interrupted before Seek is complete, retract the syringe - // and restart the heparin setup sequence from Preload. - case PRE_TX_HEPARIN_SETUP_PRELOAD_STATE: - case PRE_TX_HEPARIN_SETUP_AWAIT_SYRINGE_LOAD_CONFIRMATION_STATE: - case PRE_TX_HEPARIN_SETUP_SEEK_STATE: - retractSyringePump(); - state = PRE_TX_HEPARIN_SETUP_PRELOAD_STATE; - break; + retractSyringePump(); + state = PRE_TX_HEPARIN_SETUP_PRELOAD_STATE; + } + else + { + // Resume from the interrupted state after the alarm is cleared. + state = interruptedPreTxHeparinSetupState; - // If interrupted after Seek is complete, resume from the - // heparin setup state that was active before the alarm. - case PRE_TX_HEPARIN_SETUP_PRIME_STATE: - case PRE_TX_HEPARIN_SETUP_OCCLUSION_CHECK_STATE: - case PRE_TX_HEPARIN_SETUP_BOLUS_STATE: - state = interruptedPreTxHeparinSetupState; - setupPreTxHeparinState( state ); - break; + switch ( state ) + { + case PRE_TX_HEPARIN_SETUP_PRIME_STATE: + case PRE_TX_HEPARIN_SETUP_OCCLUSION_CHECK_STATE: + case PRE_TX_HEPARIN_SETUP_BOLUS_STATE: + setupPreTxHeparinState( state ); + break; - // An unexpected interrupted state indicates a software fault. - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE, interruptedPreTxHeparinSetupState ); - - state = PRE_TX_HEPARIN_SETUP_PAUSED_STATE; - break; + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE, interruptedPreTxHeparinSetupState ); + state = PRE_TX_HEPARIN_SETUP_PAUSED_STATE; + break; + } } }