Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -red21c935443549b87ab6665e76ce1d32d9867082 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision ed21c935443549b87ab6665e76ce1d32d9867082) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -25,6 +25,7 @@ #include "RotaryValve.h" #include "Switches.h" #include "SyringePump.h" +#include "Timers.h" #include "TubeSetAutoEject.h" #include "TxParams.h" #include "Valve3Way.h" @@ -40,7 +41,9 @@ 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 BOOL disinfectionConfirmed; ///< Flag indicates user confirms disinfection selection. +static DD_COMMAND_T selectedDisinfectionCommand; ///< Flag indicates user confirms disinfection selection. +static volatile U32 postTreatmentStateBroadcastTimer; ///< Timer counter for pending power off request. + static TD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current Post-Treatment sub-state // ********** private function prototypes ********** @@ -63,7 +66,7 @@ patientDisconnectionConfirmed = FALSE; patientDisconnectHandled = FALSE; disposableRemovalConfirmed = FALSE; - disinfectionConfirmed = FALSE; + selectedDisinfectionCommand = DD_CMD_NONE; currentPostTreatmentState = TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; } @@ -97,50 +100,60 @@ **************************************************************************/ static void setPostTreatStateTransition( void ) { + // Disable air trap level control. 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 ); + // H12 Air Pump - Off. + setAirPumpState( AIR_PUMP_STATE_OFF, + AIR_PUMP_MOTOR_OFF ); + // H13 Air Trap Valve In - Closed. + set3WayValveState( H13_VALV, + VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + // H20 Air Trap Valve Out - Closed. + set3WayValveState( H20_VALV, + VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + //H10 Heparin/Syringe Pump - Off. + stopSyringePump(); - signalBloodPumpHardStop(); - - // TODO: H10 syringe/heparin pump OFF - switch( currentPostTreatmentState ) + switch ( currentPostTreatmentState ) { case TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE: signalBloodPumpHardStop(); + disableEjectorMotor(); + //TODO check on valve positions + setValvePosition( H1_VALV, + VALVE_POSITION_C_CLOSE ); + setValvePosition( H19_VALV, + VALVE_POSITION_C_CLOSE ); break; case TD_POST_TREATMENT_AUTO_EJECT_STATE: signalBloodPumpHardStop(); break; case TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE: - //TODO: actuator configuration; + signalBloodPumpHardStop(); + disableEjectorMotor(); + setValvePosition( H1_VALV, + VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H19_VALV, + VALVE_POSITION_A_INSERT_EJECT ); break; case TD_POST_TREATMENT_DISINFECTION_STATE: - //TODO: actuator configuration; + signalBloodPumpHardStop(); + disableEjectorMotor(); + setValvePosition( H1_VALV, + VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H19_VALV, + VALVE_POSITION_A_INSERT_EJECT ); break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, - SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1, - currentPostTreatmentState ); - break; + default: + SET_ALARM_WITH_2_U32_DATA( + ALARM_ID_TD_SOFTWARE_FAULT, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1, + currentPostTreatmentState ); + break; } } @@ -188,6 +201,11 @@ currentPostTreatmentState ); break; } + if ( TRUE == didTimeout( postTreatmentStateBroadcastTimer, POST_TREATMENT_STATE_BROADCAST_INTERVAL_MS ) ) + { + postTreatmentStateBroadcastTimer = getMSTimerCount(); + //TODO: broadcast current state to UI + } if ( prevPostTreatmentState != currentPostTreatmentState) { @@ -312,15 +330,26 @@ { TD_POST_TREATMENT_STATE_T state = TD_POST_TREATMENT_DISINFECTION_STATE; - if ( TRUE == disinfectionConfirmed ) + switch ( selectedDisinfectionCommand ) { - disinfectionConfirmed = FALSE; - - /* - * TODO: - * Process the selected disinfection option and request the - * appropriate transition to Standby. - */ + case DD_CMD_NONE: + //TODO: transitionToStandbyMode + break; + case DD_CMD_START_FLUSH: + //TODO: Need to send info to DD + break; + case DD_CMD_START_DISINFECT_HEAT: + //TODO: Need to send info to DD + break; + case DD_CMD_START_DISINFECT_CITRIC_DD: + break; + case DD_CMD_START_DISINFECT_CITRIC_DD_IOFP: + break; + case DD_CMD_START_DISINFECT_SUBSTITUTION_PORT: + break; + default: + //TODO: do i need to set any alarm here + break; } return state; @@ -357,12 +386,12 @@ * The signalUserConfirmDisinfection signals Post-Treatment mode that * the user has confirmed the disinfection selection. * @details \b Inputs: none - * @details \b Outputs: disinfectionConfirmed + * @details \b Outputs: selectedDisinfectionCommand * @return none *************************************************************************/ -void signalUserConfirmDisinfection( void ) +void signalUserConfirmDisinfection( DD_COMMAND_T state ) { - disinfectionConfirmed = TRUE; + selectedDisinfectionCommand = state; }