Index: firmware/App/Modes/StatePreTxHeparinSetup.c =================================================================== diff -u -rc55d2e00f6e4d0a0a5f5968dc02e6d719f643a3a -r9b005194e074d3f8df704ab57ac70bb32ade1d90 --- firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision c55d2e00f6e4d0a0a5f5968dc02e6d719f643a3a) +++ firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision 9b005194e074d3f8df704ab57ac70bb32ade1d90) @@ -536,10 +536,8 @@ { switch ( interruptedPreTxHeparinSetupState ) { - // If interrupted before Seek is complete, retract the syringe - // and restart the heparin setup sequence from Preload. + // If interrupted during Preload or Seek, restart 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: syringeRetractStarted = FALSE; syringePreloadStarted = FALSE; @@ -549,19 +547,24 @@ state = PRE_TX_HEPARIN_SETUP_PRELOAD_STATE; break; - // If interrupted after Seek is complete, resume from the - // heparin setup state that was active before the alarm. + // Return to waiting for syringe load confirmation. + case PRE_TX_HEPARIN_SETUP_AWAIT_SYRINGE_LOAD_CONFIRMATION_STATE: + state = PRE_TX_HEPARIN_SETUP_AWAIT_SYRINGE_LOAD_CONFIRMATION_STATE; + break; + + // If interrupted after Seek is complete, resume the prior state. 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; - // 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 ); + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE, + interruptedPreTxHeparinSetupState ); + state = PRE_TX_HEPARIN_SETUP_PAUSED_STATE; break; }