Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r0cc67ce4bbaac3aeae8a3324e50e1b31e5ab49c3 -red21c935443549b87ab6665e76ce1d32d9867082 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 0cc67ce4bbaac3aeae8a3324e50e1b31e5ab49c3) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision ed21c935443549b87ab6665e76ce1d32d9867082) @@ -15,14 +15,20 @@ * ***************************************************************************/ +#include "AirPump.h" +#include "AirTrap.h" #include "BloodFlow.h" #include "Buttons.h" +#include "EjectorMotor.h" #include "ModePostTreat.h" #include "OperationModes.h" +#include "RotaryValve.h" #include "Switches.h" #include "SyringePump.h" #include "TubeSetAutoEject.h" #include "TxParams.h" +#include "Valve3Way.h" +#include "Valves.h" /** * @addtogroup TDPostTreatmentMode @@ -32,8 +38,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 patientDisconnectHandled; ///< Flag indicates patient disconnect actions have been handled static BOOL disposableRemovalConfirmed; ///< Flag indicates user confirms disposable removal. +static BOOL disinfectionConfirmed; ///< Flag indicates user confirms disinfection selection. static TD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current Post-Treatment sub-state // ********** private function prototypes ********** @@ -42,7 +49,7 @@ static TD_POST_TREATMENT_STATE_T handlePatientDisconnectionState( void ); static TD_POST_TREATMENT_STATE_T handleAutoEjectState( void ); static TD_POST_TREATMENT_STATE_T handleDisposableRemovalState(void ); -static TD_POST_TREATMENT_STATE_T handleVerifyState( void ); +static TD_POST_TREATMENT_STATE_T handleDisinfectionState( void ); /*********************************************************************//** * @brief @@ -56,7 +63,8 @@ patientDisconnectionConfirmed = FALSE; patientDisconnectHandled = FALSE; disposableRemovalConfirmed = FALSE; - currentPostTreatmentState = TD_POST_TREATMENT_AUTO_EJECT_STATE; + disinfectionConfirmed = FALSE; + currentPostTreatmentState = TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; } /*********************************************************************//** @@ -89,10 +97,31 @@ **************************************************************************/ static void setPostTreatStateTransition( void ) { + resetAirTrap(); + resetBloodPumpRotorCount(); + resetPreLoadStatus(); + disableEjectorMotor(); + // Set valves to default positions + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + if ( VALVE_STATE_IDLE == getValveState( H1_VALV ) ) + { + setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); + } + if ( VALVE_STATE_IDLE == getValveState( H19_VALV ) ) + { + setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); + } + // Stop H12 air pump + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + + signalBloodPumpHardStop(); + + // TODO: H10 syringe/heparin pump OFF switch( currentPostTreatmentState ) { case TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE: - //TODO: actuator configuration; + signalBloodPumpHardStop(); break; case TD_POST_TREATMENT_AUTO_EJECT_STATE: @@ -103,12 +132,14 @@ //TODO: actuator configuration; break; - case TD_POST_TREATMENT_VERIFY_STATE: + case TD_POST_TREATMENT_DISINFECTION_STATE: //TODO: actuator configuration; break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1, currentPostTreatmentState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1, + currentPostTreatmentState ); break; } } @@ -124,6 +155,12 @@ U32 execPostTreatmentMode( void ) { BOOL stop = isStopButtonPressed(); + + if ( TRUE == stop ) + { + // Ignore stop button in this mode. + } + TD_POST_TREATMENT_STATE_T prevPostTreatmentState = currentPostTreatmentState; // Execute mode state machine @@ -141,16 +178,14 @@ currentPostTreatmentState = handleDisposableRemovalState(); break; - case TD_POST_TREATMENT_VERIFY_STATE: - currentPostTreatmentState = handleVerifyState(); - break; - case TD_POST_TREATMENT_DISINFECTION_STATE: - //currentPostTreatmentState = handleDisinfectionState(); + currentPostTreatmentState = handleDisinfectionState(); break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, currentPostTreatmentState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, + currentPostTreatmentState ); break; } @@ -173,15 +208,15 @@ *************************************************************************/ static void checkPostTreatmentPatientDisconnect( void ) { -// VALVE_T valve; + 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++ ) + for ( valve = H1_VALV; valve < NUM_OF_VALVES; valve++ ) { -// setValvePosition( valve, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( valve, VALVE_POSITION_A_INSERT_EJECT ); } if ( ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ) > 0.0 ) || ( getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DELIVERY_RATE ) > 0.0 ) ) @@ -213,7 +248,7 @@ { patientDisconnectionConfirmed = FALSE; patientDisconnectHandled = FALSE; - state = TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE; + state = TD_POST_TREATMENT_AUTO_EJECT_STATE; } return state; @@ -258,26 +293,36 @@ if ( TRUE == disposableRemovalConfirmed ) { disposableRemovalConfirmed = FALSE; - state = TD_POST_TREATMENT_VERIFY_STATE; + state = TD_POST_TREATMENT_DISINFECTION_STATE; } return state; } /*********************************************************************//** * @brief - * The handleVerifyState function executes the Post-Treatment - * mode Verify state machine. - * @details \b Inputs: TODO fill up if any - * @details \b Outputs: TODO fill up if any - * @return next post-treatment mode state + * The handleDisinfectionState function executes the Post-Treatment + * Disinfection state. + * @details \b Inputs: User disinfection selection from UI. + * @details \b Outputs: Initiates the selected disinfection operation or + * transitions the system to Standby. + * @return Current Post-Treatment state. *************************************************************************/ -static TD_POST_TREATMENT_STATE_T handleVerifyState( void ) +static TD_POST_TREATMENT_STATE_T handleDisinfectionState( void ) { - TD_POST_TREATMENT_STATE_T state = TD_POST_TREATMENT_VERIFY_STATE; + TD_POST_TREATMENT_STATE_T state = TD_POST_TREATMENT_DISINFECTION_STATE; - // TODO + if ( TRUE == disinfectionConfirmed ) + { + disinfectionConfirmed = FALSE; + /* + * TODO: + * Process the selected disinfection option and request the + * appropriate transition to Standby. + */ + } + return state; } @@ -307,4 +352,18 @@ disposableRemovalConfirmed = TRUE; } +/*********************************************************************//** + * @brief + * The signalUserConfirmDisinfection signals Post-Treatment mode that + * the user has confirmed the disinfection selection. + * @details \b Inputs: none + * @details \b Outputs: disinfectionConfirmed + * @return none + *************************************************************************/ +void signalUserConfirmDisinfection( void ) +{ + disinfectionConfirmed = TRUE; +} + + /**@}*/