Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r75e1ae332d1446dddf9b8d4ce6e8317449c57d67 -r4e9b962e7cb3c0b477462756a32214118b10fc16 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 75e1ae332d1446dddf9b8d4ce6e8317449c57d67) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 4e9b962e7cb3c0b477462756a32214118b10fc16) @@ -7,8 +7,8 @@ * * @file ModePostTreat.c * -* @author (last) Michael Garthwaite -* @date (last) 19-Jan-2023 +* @author (last) Sean Nash +* @date (last) 01-Jun-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -139,7 +139,7 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, FALSE ); - doorClosedRequired( FALSE, FALSE ); + doorClosedRequired( TRUE, TRUE ); cmdStopDGTrimmerHeater(); @@ -153,11 +153,13 @@ signalBloodPumpHardStop(); signalDialOutPumpHardStop(); signalDialInPumpHardStop(); - + setCurrentSubState( currentPostTreatmentState ); collectTreatmentLogData(); exitBloodLeakNormalState(); + setVenousBubbleDetectionEnabled( FALSE ); + return currentPostTreatmentState; } @@ -208,7 +210,7 @@ data.currentPostTreatmentState = (U32)currentPostTreatmentState; data.currentPostTxDrainState = (U32)currentDrainReservoirState; - broadcastData( MSG_ID_HD_POST_TREATMENT_STATE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( POST_TREATMENT_STATE_DATA_T ) ); + broadcastData( MSG_ID_HD_POST_TREATMENT_STATE_DATA, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( POST_TREATMENT_STATE_DATA_T ) ); postTreatmentPublishTimerCounter = 0; } @@ -367,7 +369,8 @@ { // Done with draining the reservoirs state = HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; - doorClosedRequired( TRUE, TRUE ); + doorClosedRequired( FALSE, FALSE ); + setCurrentSubState( NO_SUB_STATE ); } return state; @@ -383,10 +386,6 @@ *************************************************************************/ static HD_POST_TREATMENT_STATE_T handlePostTreatmentPatientDisconnectionState( void ) { - VALVE_T valve; - - F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); - F32 hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); HD_POST_TREATMENT_STATE_T state = HD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; OPN_CLS_STATE_T frontDoor = getSwitchStatus( FRONT_DOOR ); OPN_CLS_STATE_T pumpTrack = getSwitchStatus( PUMP_TRACK_SWITCH ); @@ -404,22 +403,6 @@ { patientDisconnectionConfirmed = FALSE; state = HD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE; - - for ( valve = VDI; valve < NUM_OF_VALVES; valve++ ) - { - setValvePosition( valve, VALVE_POSITION_A_INSERT_EJECT ); - } - - homeBloodPump(); - homeDialInPump(); - homeDialOutPump(); - - doorClosedRequired( FALSE, FALSE ); - - if ( ( bolusVol > 0.0 ) || ( hepRate > 0.0 ) ) - { - retractSyringePump(); - } } } @@ -475,11 +458,11 @@ if ( FALSE == isCartridgeRemoved ) { - activateAlarmNoData( ALARM_ID_CARTRIDGE_REMOVAL_FAILURE ); + activateAlarmNoData( ALARM_ID_HD_CARTRIDGE_REMOVAL_FAILURE ); } else { - clearAlarmCondition( ALARM_ID_CARTRIDGE_REMOVAL_FAILURE ); + clearAlarmCondition( ALARM_ID_HD_CARTRIDGE_REMOVAL_FAILURE ); } if ( TRUE == isSyringeDetected() ) @@ -537,6 +520,7 @@ break; case DRAIN_RESERVOIR_COMPLETE_STATE: + // Nothing to be done in this state (terminal state). break; default: @@ -547,23 +531,25 @@ if ( priorSubState != currentDrainReservoirState ) { + setCurrentSubState( (U32)currentDrainReservoirState ); SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_SUB_STATE_CHANGE, priorSubState, currentDrainReservoirState ); } } /*********************************************************************//** * @brief - * The handleDrainDePrimeDGDialysateLinesState function waits for DG to complete - * reservoir switch. - * @details Inputs: - * @details Outputs: + * The handleDrainDePrimeDGDialysateLinesState function de-primes the return + * dialysate line so that it will not leak when user disconnects the line + * from the DG. + * @details Inputs: drainDGDePrimeActive + * @details Outputs: drainDGDePrimeActive * @return next state *************************************************************************/ static DRAIN_STATE_T handleDrainDePrimeDGDialysateLinesState( void ) { DRAIN_STATE_T state = DRAIN_DG_DEPRIME_STATE; - if ( ( DG_MODE_GENE == getDGOpMode() ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) + if ( ( ( DG_MODE_GENE == getDGOpMode() ) && ( DG_GEN_IDLE_MODE_STATE_FLUSH_WATER == getDGSubMode() ) ) || ( DG_MODE_FAUL == getDGOpMode() ) ) { if ( FALSE == drainDGDePrimeActive ) { @@ -578,9 +564,31 @@ // Thereafter, check for time elapsed if ( TRUE == didTimeout( drainDGDePrimeStarttime, DIP_DRAIN_DG_RUNTIME_MS ) ) { + VALVE_T valve; + drainDGDePrimeActive = FALSE; signalDialInPumpHardStop( ); - state = DRAIN_RESERVOIR_SWITCH_STATE; + if ( getDGOpMode() != DG_MODE_FAUL ) + { + state = DRAIN_RESERVOIR_SWITCH_STATE; + } + else + { + state = DRAIN_RESERVOIR_COMPLETE_STATE; + } + // home valves and pumps while front door is still closed. + homeBloodPump(); + homeDialInPump(); + homeDialOutPump(); + 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_DISPENSE_RATE ) > 0.0 ) ) + { + retractSyringePump(); + } } }