Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -rbb80dbac26147ab08413efa91007f7ffed43c38f -r8b791e3252b79d693cb6d959648f85df2e44b709 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision bb80dbac26147ab08413efa91007f7ffed43c38f) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 8b791e3252b79d693cb6d959648f85df2e44b709) @@ -224,12 +224,13 @@ *************************************************************************/ static void startHeparinPump( void ) { + HEPARIN_STATE_T currentHeparinState = getHeparinState(); U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ); F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); F32 hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); // Do not run syringe pump if no Heparin included in prescription or if Heparin should be stopped at this stage of treatment - if ( ( ( bolusVol > 0.0 ) || ( hepRate > 0.0 ) ) && ( getTreatmentTimeRemainingSecs() > preStop ) ) + if ( ( currentHeparinState > HEPARIN_STATE_OFF ) && ( currentHeparinState < HEPARIN_STATE_COMPLETED ) && ( getTreatmentTimeRemainingSecs() > preStop ) ) { // If not done with bolus, start/resume bolus if ( ( bolusVol > 0.0 ) && ( getSyringePumpVolumeDelivered() < bolusVol ) ) @@ -600,7 +601,16 @@ static DIALYSIS_STATE_T handleDialysisUltrafiltrationState( void ) { DIALYSIS_STATE_T result = DIALYSIS_UF_STATE; + U32 preStop = getTreatmentParameterU32( TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME ); + // Stop Heparin delivery if we have reached Heparin pre-stop point + if ( getTreatmentTimeRemainingSecs() < preStop ) + { + stopSyringePump(); + setHeparinCompleted(); + } + + // Handle current ultrafiltration state switch ( currentUFState ) { case UF_START_STATE: @@ -800,15 +810,10 @@ { salineBolusStartRequested = FALSE; // Cmd all pumps to stop -#ifndef RUN_PUMPS_OPEN_LOOP setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); -#else - setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); -#endif + stopSyringePump(); // Begin saline bolus result = SALINE_BOLUS_STATE_WAIT_FOR_PUMPS_STOP; }