Index: firmware/App/Modes/StatePreTxHeparinSetup.c =================================================================== diff -u -re4eceb1ac6e8091d10e0fab49d2d5a9c5e5f1c67 -rc27a2530b0cab5dc46459037c7ff7816b1a21dad --- firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision e4eceb1ac6e8091d10e0fab49d2d5a9c5e5f1c67) +++ firmware/App/Modes/StatePreTxHeparinSetup.c (.../StatePreTxHeparinSetup.c) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) @@ -178,6 +178,20 @@ /*********************************************************************//** * @brief + * The isPreTxHeparinAwaitingSyringeLoadConfirmation function reports + * whether the Heparin Setup state machine is awaiting syringe load + * confirmation. + * @details \b Inputs: currentPreTxHeparinSetupState. + * @details \b Outputs: none. + * @return TRUE if awaiting syringe load confirmation, FALSE otherwise. + *************************************************************************/ +BOOL isPreTxHeparinAwaitingSyringeLoadConfirmation( void ) +{ + return ( PRE_TX_HEPARIN_SETUP_AWAIT_SYRINGE_LOAD_CONFIRMATION_STATE == currentPreTxHeparinSetupState ) ? TRUE : FALSE; +} + +/*********************************************************************//** + * @brief * The signalPreTxHeparinSyringeLoadConfirmed function signals that the * user confirmed syringe load. * @details Inputs: none @@ -438,8 +452,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 +464,31 @@ 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; } }