Index: firmware/App/Services/StateServices/DrySelfTests.c =================================================================== diff -u -r47f8c812c838c155393af356f7a30777e2e0b1c6 -r83bd5c5f149aa16f295a302b12029b48488b3a18 --- firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 47f8c812c838c155393af356f7a30777e2e0b1c6) +++ firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 83bd5c5f149aa16f295a302b12029b48488b3a18) @@ -182,6 +182,8 @@ // Pressure relief static U32 pressureReliefStartTime; ///< Pressure relief start time. static BOOL negArtPosVenPumpStopped; +static BOOL negArtPressureTargetReached; +static BOOL negArtPosVenAirPumpStopped; // ********** private function prototypes ********** @@ -251,7 +253,10 @@ posArtPressureP2 = 0.0F; pressureReliefStartTime = 0; - negArtPosVenPumpStopped = FALSE; + negArtPosVenPumpStopped = FALSE; + negArtPressureTargetReached = FALSE; + negArtPosVenAirPumpStopped = FALSE; + negArtPosVenPumpStopped = FALSE; } /*********************************************************************//** @@ -637,22 +642,28 @@ F32 art = getFilteredArterialPressure(); F32 ven = getFilteredVenousPressure(); - if ( ( art <= NEG_ART_PRESSURE_TARGET_MMHG ) && - ( ven >= POS_VEN_PRESSURE_TARGET_MMHG ) ) + // This is used to stop H4 once arterial pressure reaches its target and ontinue using the air pump to build venous pressure. + if ( ( FALSE == negArtPressureTargetReached ) && ( art <= NEG_ART_PRESSURE_TARGET_MMHG ) ) { + negArtPressureTargetReached = TRUE; + signalBloodPumpHardStop(); + } + + // Once arterial target has already been achieved it will wait for venous pressure to reach its target. + if ( ( TRUE == negArtPressureTargetReached ) && ( ven >= POS_VEN_PRESSURE_TARGET_MMHG ) ) + { state = DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE; } else if ( TRUE == didTimeout( negArtPosVenSetupStartTime, PRESSURE_BUILD_TIMEOUT_MS ) ) { - if ( art > NEG_ART_PRESSURE_TARGET_MMHG ) + if ( FALSE == negArtPressureTargetReached ) { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT, art ); } else { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURIZATION_TIMEOUT, ven ); } - state = DRY_SELF_TESTS_STOPPED_STATE; } @@ -673,7 +684,11 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE; - // Started stabilization timing after H4 has actually stopped. + if ( FALSE == negArtPosVenAirPumpStopped ) + { + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + negArtPosVenAirPumpStopped = TRUE; + } if ( FALSE == negArtPosVenPumpStopped ) { if ( fabs( getMeasuredBloodPumpSpeed() ) < 1.0F ) @@ -691,6 +706,7 @@ { negArtPressureP1 = art; posVenPressureP1 = ven; + state = DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE; } else if ( art > NEG_ART_STABILIZED_PRESSURE_MMHG ) @@ -1085,13 +1101,14 @@ signalBloodPumpHardStop(); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); - negArtPosVenPumpStopped = FALSE; + negArtPosVenPumpStopped = FALSE; + negArtPosVenAirPumpStopped = FALSE; + } break;