Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r9cc543b1c2508280767573e20eddd94e68be1fb5 -r0cc67ce4bbaac3aeae8a3324e50e1b31e5ab49c3 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 9cc543b1c2508280767573e20eddd94e68be1fb5) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 0cc67ce4bbaac3aeae8a3324e50e1b31e5ab49c3) @@ -20,7 +20,9 @@ #include "ModePostTreat.h" #include "OperationModes.h" #include "Switches.h" +#include "SyringePump.h" #include "TubeSetAutoEject.h" +#include "TxParams.h" /** * @addtogroup TDPostTreatmentMode @@ -29,6 +31,9 @@ // ********** private definitions ********** +static BOOL patientDisconnectionConfirmed; ///< Flag indicates user confirms patient disconnection. +static bool patientDisconnectHandled; ///< Flag indicates patient disconnect actions have been handled +static BOOL disposableRemovalConfirmed; ///< Flag indicates user confirms disposable removal. static TD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current Post-Treatment sub-state // ********** private function prototypes ********** @@ -48,6 +53,9 @@ **************************************************************************/ void initPostTreatmentMode( void ) { + patientDisconnectionConfirmed = FALSE; + patientDisconnectHandled = FALSE; + disposableRemovalConfirmed = FALSE; currentPostTreatmentState = TD_POST_TREATMENT_AUTO_EJECT_STATE; } @@ -122,21 +130,25 @@ switch ( currentPostTreatmentState ) { case TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE: - //currentPostTreatmentState = handlePatientDisconnectionState(); + currentPostTreatmentState = handlePatientDisconnectionState(); break; case TD_POST_TREATMENT_AUTO_EJECT_STATE: currentPostTreatmentState = handleAutoEjectState(); break; case TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE: - //currentPostTreatmentState = handleDisposableRemovalState(); + currentPostTreatmentState = handleDisposableRemovalState(); break; case TD_POST_TREATMENT_VERIFY_STATE: - //currentPostTreatmentState = handleVerifyState(); + currentPostTreatmentState = handleVerifyState(); break; + case TD_POST_TREATMENT_DISINFECTION_STATE: + //currentPostTreatmentState = handleDisinfectionState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, currentPostTreatmentState ); break; @@ -152,19 +164,58 @@ /*********************************************************************//** * @brief + * The checkPostTreatmentPatientDisconnect function checks UI patient + * disconnect and handles valve release, pump homing, door requirement. + * @details \b Inputs: patientDisconnectionConfirmed, patientDisconnectHandled + * @details \b Outputs: patientDisconnectHandled, home pumps, open valves, + * retract syringe, door closed requirement. + * @return none + *************************************************************************/ +static void checkPostTreatmentPatientDisconnect( void ) +{ +// VALVE_T valve; + + if ( ( TRUE == patientDisconnectionConfirmed ) && ( FALSE == patientDisconnectHandled ) ) + { + // home valves and pumps while front door is still closed. + homeBloodPump(); +// for ( valve = VDI; valve < NUM_OF_VALVES; valve++ ) + { +// setValvePosition( valve, VALVE_POSITION_A_INSERT_EJECT ); + } + if ( ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) > 0.0 ) || + ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ) > 0.0 ) ) + { + retractSyringePump(); + } + doorClosedRequired( FALSE ); + // NOTE: patientDisconnectionConfirmed is NOT reset because + // Patient Disconnect State needs it to move to next state + patientDisconnectHandled = TRUE; + } +} + +/*********************************************************************//** + * @brief * The handlePatientDisconnectionState function executes the Post-Treatment * mode Patient Disconnection state machine. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any + * @details \b Inputs: none + * @details \b Outputs: processed patient disconnection confirmation * @return next post-treatment mode state *************************************************************************/ static TD_POST_TREATMENT_STATE_T handlePatientDisconnectionState( void ) { TD_POST_TREATMENT_STATE_T state = TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; - // TODO: Transition to Auto Eject state on completion when implemented - // state = TD_POST_TREATMENT_AUTO_EJECT_STATE; + checkPostTreatmentPatientDisconnect(); + if ( TRUE == patientDisconnectionConfirmed ) + { + patientDisconnectionConfirmed = FALSE; + patientDisconnectHandled = FALSE; + state = TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE; + } + return state; } @@ -196,16 +247,19 @@ * @brief * The handleDisposableRemovalState function executes the Post-Treatment * mode Disposable Removal state machine. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any + * @details \b Inputs: disposableRemovalConfirmed + * @details \b Outputs: processed disposable removal confirmation * @return next post-treatment mode state *************************************************************************/ static TD_POST_TREATMENT_STATE_T handleDisposableRemovalState( void ) { TD_POST_TREATMENT_STATE_T state = TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE; - // TODO: Transition to Verify state on completion when implemented - // state = TD_POST_TREATMENT_VERIFY_STATE; + if ( TRUE == disposableRemovalConfirmed ) + { + disposableRemovalConfirmed = FALSE; + state = TD_POST_TREATMENT_VERIFY_STATE; + } return state; } @@ -227,4 +281,30 @@ return state; } +/*********************************************************************//** + * @brief + * The signalUserConfirmPatientDisconnection signals post-treatment mode + * user has confirmed patient disconnection. + * @details \b Inputs: none + * @details \b Outputs: patientDisconnectedConfirm + * @return none + *************************************************************************/ +void signalUserConfirmPatientDisconnection( void ) +{ + patientDisconnectionConfirmed = TRUE; +} + +/*********************************************************************//** + * @brief + * The signalUserConfirmDisposableRemoval signals post-treatment mode + * user has confirmed disposable removal. + * @details \b Inputs: none + * @details \b Outputs: disposableRemovalConfirmed + * @return none + *************************************************************************/ +void signalUserConfirmDisposableRemoval( void ) +{ + disposableRemovalConfirmed = TRUE; +} + /**@}*/