Index: firmware/App/Modes/StatePreTxHeparinSetup.c =================================================================== diff -u -r6bb89ac52fecee7db9dc69a3eb727cad0a66370e -r069dee3a2428d3c6bb281db1844a372ae6e2063a --- firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision 6bb89ac52fecee7db9dc69a3eb727cad0a66370e) +++ firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision 069dee3a2428d3c6bb281db1844a372ae6e2063a) @@ -438,8 +438,10 @@ /*********************************************************************//** * @brief * The handlePreTxHeparinPausedState function handles the paused state. - * @details \b Inputs: none - * @details \b Outputs: Next pre-treatment heparin setup state. + * @details \b Inputs: heparinSetupResumeRequested, + * interruptedPreTxHeparinSetupState + * @details \b Outputs: Next pre-treatment heparin setup state and + * syringe pump operation. * @return Current or next pre-treatment heparin setup state. *************************************************************************/ static PRE_TX_HEPARIN_SETUP_STATE_T handlePreTxHeparinPausedState( void ) @@ -448,33 +450,32 @@ if ( TRUE == heparinSetupResumeRequested ) { - // 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 ) ) + switch ( interruptedPreTxHeparinSetupState ) { - retractSyringePump(); - state = PRE_TX_HEPARIN_SETUP_PRELOAD_STATE; - } - else - { - // Resume from the interrupted state after the alarm is cleared. - 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; - 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; + // 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; - 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; - } + // 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; } }