Index: firmware/App/Services/StateServices/DrySelfTests.c =================================================================== diff -u -rdfe866f3cafcc1bfd1ecf9191ed823488c2e55e1 -r47f8c812c838c155393af356f7a30777e2e0b1c6 --- firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision dfe866f3cafcc1bfd1ecf9191ed823488c2e55e1) +++ firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 47f8c812c838c155393af356f7a30777e2e0b1c6) @@ -181,6 +181,7 @@ // Pressure relief static U32 pressureReliefStartTime; ///< Pressure relief start time. +static BOOL negArtPosVenPumpStopped; // ********** private function prototypes ********** @@ -250,6 +251,7 @@ posArtPressureP2 = 0.0F; pressureReliefStartTime = 0; + negArtPosVenPumpStopped = FALSE; } /*********************************************************************//** @@ -604,6 +606,7 @@ if ( ( fabs( art ) < ZERO_PRESSURE_THRESHOLD_MMHG ) && ( fabs( ven ) < ZERO_PRESSURE_THRESHOLD_MMHG ) ) { + resetArtVenPressureOffsets(); setArtVenPressureOffsets(); state = DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE; } @@ -621,17 +624,21 @@ * @brief * The handleDrySelfTestNegArtPosVenPressureSetupState function monitors * negative arterial and positive venous pressure generation. - * @details \b Inputs: negArtPosVenSetupStartTime, + * @details \b Alarm: ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT, + * ALARM_ID_TD_VENOUS_PRESSURIZATION_TIMEOUT if state is invalid + * @details \b Inputs: negArtPosVenSetupStartTime * @details \b Outputs: none * @return next Dry Self-Test state *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestNegArtPosVenPressureSetupState( void ) { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE; + F32 art = getFilteredArterialPressure(); F32 ven = getFilteredVenousPressure(); - if ( ( art <= NEG_ART_PRESSURE_TARGET_MMHG ) && ( ven >= POS_VEN_PRESSURE_TARGET_MMHG ) ) + if ( ( art <= NEG_ART_PRESSURE_TARGET_MMHG ) && + ( ven >= POS_VEN_PRESSURE_TARGET_MMHG ) ) { state = DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE; } @@ -652,11 +659,12 @@ return state; } - /*********************************************************************//** * @brief * The handleDrySelfTestNegArtPosVenStabilizationState function verifies * negative arterial and positive venous pressure after stabilization. + * @details \b Alarm: ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY, + * ALARM_ID_TD_VENOUS_PRESSURE_DECAY if state is invalid * @details \b Inputs: negArtPosVenStabilizationStartTime, * @details \b Outputs: negArtPressureP1, posVenPressureP1 * @return next Dry Self-Test state @@ -665,8 +673,17 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE; - if ( TRUE == didTimeout( negArtPosVenStabilizationStartTime, PRESSURE_STABILIZATION_TIME_MS ) ) + // Started stabilization timing after H4 has actually stopped. + if ( FALSE == negArtPosVenPumpStopped ) { + if ( fabs( getMeasuredBloodPumpSpeed() ) < 1.0F ) + { + negArtPosVenPumpStopped = TRUE; + negArtPosVenStabilizationStartTime = getMSTimerCount(); + } + } + else if ( TRUE == didTimeout( negArtPosVenStabilizationStartTime, PRESSURE_STABILIZATION_TIME_MS ) ) + { F32 art = getFilteredArterialPressure(); F32 ven = getFilteredVenousPressure(); @@ -676,28 +693,27 @@ posVenPressureP1 = ven; state = DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE; } + else if ( art > NEG_ART_STABILIZED_PRESSURE_MMHG ) + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY, art ); + state = DRY_SELF_TESTS_STOPPED_STATE; + } else { - if ( art > NEG_ART_STABILIZED_PRESSURE_MMHG ) - { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY, art ); - } - else - { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_DECAY, ven ); - } + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_DECAY, ven ); state = DRY_SELF_TESTS_STOPPED_STATE; } } return state; } - /*********************************************************************//** * @brief * The handleDrySelfTestNegArtPosVenDecayCheckState function verifies * arterial and venous pressure decay. + * @details \b Alarm: ALARM_ID_TD_ARTERIAL_PRESSURE_LEAK, + * ALARM_ID_TD_VENOUS_PRESSURE_LEAK if state is invalid * @details \b Inputs: negArtPosVenDecayStartTime, negArtPressureP1, * posVenPressureP1 * @details \b Outputs: negArtPressureP2, posVenPressureP2 @@ -745,6 +761,8 @@ * @brief * The handleDrySelfTestPosArtPressureSetupState function monitors * positive arterial pressure generation. + * @details \b Alarm: ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT + * if state is invalid * @details \b Inputs: posArtSetupStartTime * @details \b Outputs: none * @return next Dry Self-Test state @@ -768,7 +786,6 @@ return state; } - /*********************************************************************//** * @brief * The handleDrySelfTestPosArtStabilizationState function verifies @@ -800,7 +817,6 @@ return state; } - /*********************************************************************//** * @brief * The handleDrySelfTestPosArtDecayCheckState function verifies positive @@ -835,7 +851,6 @@ return state; } - /*********************************************************************//** * @brief * The handleDrySelfTestPressureReliefState function verifies arterial @@ -875,253 +890,6 @@ return state; } -///*********************************************************************//** -//* @brief -//* The handleDrySelfTestVenousPressureSetupState function handles the setup -//* for the venous pressure sensor dry self-test. -//* @details \b Inputs: venousSetupStartTime -//* @details \b Outputs: peakVenousPressure, venousPressureStabilizationStartTime -//* @return the next state of dry self-tests state machine -//*************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureSetupState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE; -// F32 ven = getFilteredVenousPressure(); -// -// // If it reaches to traget venous pressure >= 250 mmHg then the transition to venous pressure stablization state -// if ( ven >= VENOUS_PRESSURE_TARGET_MMHG ) -// { -// peakVenousPressure = ven; -// venousPressureStabilizationStartTime = getMSTimerCount(); -// state = DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE; -// } -// // Time out alarm if it does not reach within 60 sec tolerance -// else if ( TRUE == didTimeout( venousSetupStartTime, VENOUS_PRESSURE_TIMEOUT_MS ) ) -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURIZATION_TIMEOUT, ven ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// -// return state; -//} -// -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestVenousPressureStabilizationState function handles -// * venous pressure stabilization check. -// * @details \b Inputs: venousPressureStabilizationStartTime -// * @details \b Outputs: venousPressureP1, venousPressureLeakCheckStartTime -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureStabilizationState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE; -// -// if ( TRUE == didTimeout( venousPressureStabilizationStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) -// { -// venousPressureP1 = getFilteredVenousPressure(); -// venousPressureLeakCheckStartTime = getMSTimerCount(); -// state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; -// } -// -// return state; -//} -// -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestVenousPressureLeakCheckState function handles -// * venous pressure leak check. -// * @details \b Inputs: venousPressureLeakCheckStartTime, venousPressureP1 -// * @details \b Outputs: venousPressureP2, venousPressureReliefStartTime -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureLeakCheckState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; -// -// if ( TRUE == didTimeout( venousPressureLeakCheckStartTime, VENOUS_PRESSURE_LEAK_CHECK_TIME_MS ) ) -// { -// F32 diff; -// -// venousPressureP2 = getFilteredVenousPressure(); -// diff = fabs( venousPressureP1 - venousPressureP2 ); -// -// if ( diff <= VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) -// { -// venousPressureReliefStartTime = getMSTimerCount(); -// state = DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE; -// } -// else -// { -// SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_LEAK, venousPressureP1, venousPressureP2 ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// } -// -// return state; -//} -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestVenousPressureReliefState function handles -// * venous pressure relief state. -// * @details \b Inputs: venousPressureReliefStartTime -// * @details \b Outputs: none -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureReliefState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE; -// -// if ( TRUE == didTimeout( venousPressureReliefStartTime, PRESSURE_RELIEF_CHECK_TIME_MS ) ) -// { -// F32 ven = getFilteredVenousPressure(); -// -// if ( fabs( ven ) <= VENOUS_PRESSURE_RELIEF_THRESHOLD_MMHG ) -// { -// arterialSetupStartTime = getMSTimerCount(); -// state = DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE; -// } -// else -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_RELIEF, ven ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// } -// -// return state; -//} -// -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestPressureArterialSetupState function handles the setup -// * for the arterial pressure sensor dry self-test. -// * @details \b Inputs: pressureSelfTestArterialStartTime -// * @details \b Outputs: none -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureSetupState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE; -// F32 art = getFilteredArterialPressure(); -// -// if ( art <= ARTERIAL_PRESSURE_TARGET_MMHG ) -// { -// state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE; -// } -// else if ( TRUE == didTimeout( pressureSelfTestArterialStartTime, ARTERIAL_PRESSURE_TIMEOUT_MS ) ) -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT, art ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// -// return state; -//} -// -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestArterialPressureStabilizationState function monitors -// * arterial pressure, verifies target pressure is reached, and records P1 -// * after stabilization. -// * @details \b Inputs: pressureSelfTestArterialStartTime, peakArterialPressure, -// * arterialPressureStabilizationStartTime, arterialPressureBaselineCaptured, -// * @details \b Outputs: peakArterialPressure, arterialPressureP1, -// * arterialPressureLeakCheckStartTime, arterialPressureBaselineCaptured, -// * arterialPressureStabilizationStartTime -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureStabilizationState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE; -// -// if ( FALSE == arterialPressureBaselineCaptured ) -// { -// if ( TRUE == didTimeout( arterialPressureSettleStartTime, ARTERIAL_PRESSURE_SETTLE_TIME_MS ) ) -// { -// peakArterialPressure = getFilteredArterialPressure(); -// arterialPressureStabilizationStartTime = getMSTimerCount(); -// arterialPressureBaselineCaptured = TRUE; -// } -// } -// else if ( TRUE == didTimeout( arterialPressureStabilizationStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) -// { -// F32 currentArterialPressure = getFilteredArterialPressure(); -// F32 diff = fabs( peakArterialPressure - currentArterialPressure ); -// -// if ( diff <= ARTERIAL_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG ) -// { -// arterialPressureP1 = currentArterialPressure; -// arterialPressureLeakCheckStartTime = getMSTimerCount(); -// state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; -// } -// else -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY, diff ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// } -// -// return state; -//} -// -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestArterialPressureLeakCheckState function verifies -// * arterial pressure leak by comparing P1 and P2. -// * @details \b Inputs: arterialPressureLeakCheckStartTime, arterialPressureP1 -// * @details \b Outputs: arterialPressureP2 -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureLeakCheckState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; -// -// if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, ARTERIAL_PRESSURE_LEAK_CHECK_TIME_MS ) ) -// { -// arterialPressureP2 = getFilteredArterialPressure(); -// F32 diff = fabs( arterialPressureP1 - arterialPressureP2 ); -// -// if ( diff <= ARTERIAL_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) -// { -// arterialPressureReliefStartTime = getMSTimerCount(); -// state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE; -// } -// else -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_LEAK, diff ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// } -// -// return state; -//} -// -///*********************************************************************//** -// * @brief -// * The handleDrySelfTestArterialPressureReliefState function relieves -// * arterial pressure and verifies return to baseline. -// * @details \b Inputs: arterialPressureReliefStartTime -// * @details \b Outputs: none -// * @return the next state of dry self-tests state machine -// *************************************************************************/ -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureReliefState( void ) -//{ -// DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE; -// F32 art = getFilteredArterialPressure(); -// -// if ( fabs( art ) <= ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG ) -// { -// state = DRY_SELF_TESTS_COMPLETE_STATE; -// } -// else if ( TRUE == didTimeout( arterialPressureReliefStartTime, PRESSURE_RELIEF_CHECK_TIME_MS ) ) -// { -// SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_RELIEF, art ); -// state = DRY_SELF_TESTS_STOPPED_STATE; -// } -// -// return state; -//} - - /*********************************************************************//** * @brief * The handleDrySelfTestStoppedState function handles the stopped dry self-tests @@ -1137,17 +905,14 @@ setAlarmResumePerDoor(); doorClosedRequired( FALSE ); - // if resume request, resume dry self-tests if ( TRUE == selfTestsResumeRequested ) { - // Restart self-test start time - selfTestsResumeRequested = FALSE; - selfTestStartTime = getMSTimerCount(); + selfTestsResumeRequested = FALSE; + selfTestStartTime = getMSTimerCount(); doorClosedRequired( TRUE ); - setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); + if ( TRUE == tubingSetLeakChecksStarted ) { - pressureSelfTestPreNormalStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE; } else @@ -1176,6 +941,7 @@ if ( sizeof( UI_TUBING_SET_AUTH_RESPONSE_PAYLOAD_T ) == message->hdr.payloadLen ) { UI_TUBING_SET_AUTH_RESPONSE_PAYLOAD_T payload; + memcpy( &payload, message->payload, sizeof( payload ) ); authResponseValidTubingSet = (BOOL)payload.validTubingSet; if ( payload.modalityTube == getTreatmentParameterU32( TREATMENT_PARAM_TREATMENT_MODALITY ) ) @@ -1210,7 +976,7 @@ { case DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); @@ -1226,7 +992,7 @@ case DRY_SELF_TESTS_USED_TUBING_SET_CHECK_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); @@ -1242,7 +1008,7 @@ case DRY_SELF_TESTS_TUBING_SET_LOADED_CHECK_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); @@ -1258,7 +1024,7 @@ case DRY_SELF_TESTS_TUBING_SET_AUTHENTICATION_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); @@ -1278,18 +1044,17 @@ case DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); - setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); + setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); - resetArtVenPressureOffsets(); pressureSelfTestPreNormalStartTime = getMSTimerCount(); tubingSetLeakChecksStarted = TRUE; } @@ -1298,47 +1063,41 @@ case DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); - setH4Direction( MOTOR_DIR_FORWARD ); - setH4SetSpeed( PRESSURE_SELF_TEST_H4_SPEED_RPM ); - setH4Enabled( TRUE ); + setBloodPumpTargetRPM( PRESSURE_SELF_TEST_H4_SPEED_RPM, MOTOR_DIR_FORWARD ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - // H12 + H13 create positive venous pressure. setAirPumpState( AIR_PUMP_STATE_ON, AIR_PUMP_DUTY_CYCLE_MAX ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_OPEN_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE, 0 ); negArtPosVenSetupStartTime = getMSTimerCount(); - } break; case DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); 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 ); - set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); - negArtPosVenStabilizationStartTime = getMSTimerCount(); - + negArtPosVenPumpStopped = FALSE; } break; case DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); @@ -1355,11 +1114,9 @@ case DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); - setH4Direction( MOTOR_DIR_REVERSE ); - setH4SetSpeed( PRESSURE_SELF_TEST_H4_SPEED_RPM ); - setH4Enabled( TRUE ); + setBloodPumpTargetRPM( PRESSURE_SELF_TEST_H4_SPEED_RPM, MOTOR_DIR_REVERSE ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); @@ -1368,15 +1125,13 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE, 0 ); posArtSetupStartTime = getMSTimerCount(); - } break; case DRY_SELF_TESTS_POS_ART_STABILIZATION_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); @@ -1388,13 +1143,12 @@ cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); posArtStabilizationStartTime = getMSTimerCount(); - } break; case DRY_SELF_TESTS_POS_ART_DECAY_CHECK_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); @@ -1406,13 +1160,12 @@ cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); posArtDecayStartTime = getMSTimerCount(); - } break; case DRY_SELF_TESTS_PRESSURE_RELIEF_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); @@ -1424,7 +1177,6 @@ cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); pressureReliefStartTime = getMSTimerCount(); - } break;