Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -re4eceb1ac6e8091d10e0fab49d2d5a9c5e5f1c67 -rc27a2530b0cab5dc46459037c7ff7816b1a21dad --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision e4eceb1ac6e8091d10e0fab49d2d5a9c5e5f1c67) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) @@ -352,7 +352,7 @@ BOOL paramsValid = getValidTreatParamsReceived(); BOOL paramsConfirmed = getTreatParamsConfirmed(); BOOL heparinIsPrescribed = ( ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) > 0.0F ) || - ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ) > 0.0F ) ); + ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ) > 0.0F ) ) ? TRUE : FALSE; BOOL isDialysateGoodToDeliver = TRUE; // TODO replace TRUE with getDialysateGoodToDeliverStatus() when we are ready F32 bicarbConvFactor = BICARBONATE_CONVERSION_FACTOR; F32 presUFVolumeL = 0.0F; @@ -453,17 +453,17 @@ * @brief * The signalAlarmActionToPreTreatmentMode function executes the given alarm action * as appropriate while in Pre-Treatment Mode. - * @details \b Inputs: currentPreTreatmentState - * @details \b Outputs: given alarm action executed - * @param action ID of alarm action to execute + * @details \b Inputs: currentPreTreatmentState and current Heparin Setup sub-state. + * @details \b Outputs: Alarm action handled for the active Pre-Treatment state. + * @param action ID of alarm action to execute. * @return none *************************************************************************/ void signalAlarmActionToPreTreatmentMode( ALARM_ACTION_T action ) { switch ( action ) { case ALARM_ACTION_STOP: - // TODO add logic once we have pre-treatment mode developed + // TODO add logic once we have pre-treatment mode developed. break; case ALARM_ACTION_RESUME: @@ -473,12 +473,26 @@ } else if ( TD_PRE_TREATMENT_HEPARIN_SETUP_STATE == currentPreTreatmentState ) { - signalResumePreTxHeparinSetup(); + // Treat the Load Syringe alarm acknowledgment as syringe load + // confirmation only while awaiting user confirmation. Otherwise, + // resume the interrupted Heparin Setup state. + if ( TRUE == isPreTxHeparinAwaitingSyringeLoadConfirmation() ) + { + signalPreTxHeparinSyringeLoadConfirmed(); + } + else + { + signalResumePreTxHeparinSetup(); + } } + else + { + // No action required. + } break; default: - // do not handle other actions in pre-treatment mode + // Do not handle other actions in Pre-Treatment mode. break; } } 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; } } Index: firmware/App/Modes/StatePreTxHeparinSetup.h =================================================================== diff -u -r6bb89ac52fecee7db9dc69a3eb727cad0a66370e -rc27a2530b0cab5dc46459037c7ff7816b1a21dad --- firmware/App/Modes/StatePreTxHeparinSetup.h (.../StatePreTxHeparinSetup.h) (revision 6bb89ac52fecee7db9dc69a3eb727cad0a66370e) +++ firmware/App/Modes/StatePreTxHeparinSetup.h (.../StatePreTxHeparinSetup.h) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) @@ -42,8 +42,9 @@ U32 getPreTxHeparinSetupState( void ); // Gets current pre-treatment heparin setup state -void signalResumePreTxHeparinSetup( void ); // Signal resume request for pre-treatment heparin setup -void signalPreTxHeparinSyringeLoadConfirmed( void ); // Signal syringe load confirmation for pre-treatment heparin setup +void signalResumePreTxHeparinSetup( void ); // Signal resume request for pre-treatment heparin setup +BOOL isPreTxHeparinAwaitingSyringeLoadConfirmation( void ); // Returns TRUE when awaiting syringe load confirmation +void signalPreTxHeparinSyringeLoadConfirmed( void ); // Signal syringe load confirmation for pre-treatment heparin setup /**@}*/ Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -rc18657b8e7e44c500da1a3400f4099d824ed4589 -rc27a2530b0cab5dc46459037c7ff7816b1a21dad --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision c18657b8e7e44c500da1a3400f4099d824ed4589) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision c27a2530b0cab5dc46459037c7ff7816b1a21dad) @@ -199,7 +199,7 @@ SW_FAULT_ID_PRE_TX_RECIRC_INVALID_STATE = 168, SW_FAULT_ID_TD_VALVES_INVALID_VALVE2 = 169, SW_FAULT_ID_INVALID_TUBE_SET_TYPE = 170, - SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE =169, + SW_FAULT_ID_TD_INVALID_PRE_TX_HEPARIN_SETUP_STATE =171, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T;