Index: firmware/App/Services/StateServices/DrySelfTests.c =================================================================== diff -u -r5e02ef6e9aae20b01463445de09ef11cfea08555 -rdfe866f3cafcc1bfd1ecf9191ed823488c2e55e1 --- firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 5e02ef6e9aae20b01463445de09ef11cfea08555) +++ firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision dfe866f3cafcc1bfd1ecf9191ed823488c2e55e1) @@ -105,31 +105,31 @@ // ********** private data ********** -static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of Dry Self-Test state machine -static U32 selfTestPreviousPublishDataTime; ///< Last progress data publish time -static U32 selfTestStartTime; ///< Start time of dry self-tests -static BOOL doorStateAfterTubingSetInstall; ///< Tracks door transition after tubing set install -static BOOL selfTestsResumeRequested; ///< Resume requested from STOPPED state -static BOOL tubingSetLeakChecksStarted; ///< Indicates tubing set leak check started -static BOOL barcodeScanResponseReceived; ///< Barcode response received flag -static U32 authenticationStartTime; ///< Authentication start timer -static BOOL authResponseReceived; ///< Indicates UI auth response received -static BOOL authResponseValidTubingSet; ///< Indicates tubing set is valid -static BOOL authResponseModalityAccepted; ///< Indicates tubing set modality is accepted - -// Pressure normal -static U32 pressureSelfTestPreNormalStartTime; ///< Start time for pre-normal pressure setup delay - -// Venous pressure +//static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of Dry Self-Test state machine +//static U32 selfTestPreviousPublishDataTime; ///< Last progress data publish time +//static U32 selfTestStartTime; ///< Start time of dry self-tests +//static BOOL doorStateAfterTubingSetInstall; ///< Tracks door transition after tubing set install +//static BOOL selfTestsResumeRequested; ///< Resume requested from STOPPED state +//static BOOL tubingSetLeakChecksStarted; ///< Indicates tubing set leak check started +//static BOOL barcodeScanResponseReceived; ///< Barcode response received flag +//static U32 authenticationStartTime; ///< Authentication start timer +//static BOOL authResponseReceived; ///< Indicates UI auth response received +//static BOOL authResponseValidTubingSet; ///< Indicates tubing set is valid +//static BOOL authResponseModalityAccepted; ///< Indicates tubing set modality is accepted +// +//// Pressure normal +//static U32 pressureSelfTestPreNormalStartTime; ///< Start time for pre-normal pressure setup delay +// +//// Venous pressure //static U32 venousSetupStartTime; ///< Venous setup start time //static F32 peakVenousPressure; ///< Peak venous pressure during stabilization //static U32 venousPressureStabilizationStartTime; ///< Start time for venous stabilization //static F32 venousPressureP1; ///< First stable venous pressure sample //static F32 venousPressureP2; ///< Second venous pressure sample for leak check //static U32 venousPressureLeakCheckStartTime; ///< Start time for venous leak check //static U32 venousPressureReliefStartTime; ///< Start time for venous pressure relief - -// Arterial pressure +// +//// Arterial pressure //static U32 arterialSetupStartTime; ///< Arterial pressure setup state entry //static U32 pressureSelfTestArterialStartTime; ///< Start time for arterial pressure build-up //static F32 peakArterialPressure; ///< Peak arterial pressure during stabilization @@ -138,29 +138,49 @@ //static F32 arterialPressureP2; ///< Second arterial pressure sample for leak check //static U32 arterialPressureLeakCheckStartTime; ///< Start time for arterial leak check //static U32 arterialPressureReliefStartTime; ///< Start time for arterial pressure relief - -// Used to avoid comparing pump running pressure against immediate post hard stop pressure. +// +//// Used to avoid comparing pump running pressure against immediate post hard stop pressure. //static U32 arterialPressureSettleStartTime; ///< Arterial pressure settle start time //static BOOL arterialPressureBaselineCaptured; ///< Arterial Pressure base captured -// Negative arterial / positive venous pressure test -static U32 negArtPosVenSetupStartTime; -static U32 negArtPosVenStabilizationStartTime; -static U32 negArtPosVenDecayStartTime; -static F32 negArtPressureP1; -static F32 negArtPressureP2; -static F32 posVenPressureP1; -static F32 posVenPressureP2; +static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current Dry Self-Test state. -// Positive arterial pressure test -static U32 posArtSetupStartTime; -static U32 posArtStabilizationStartTime; -static U32 posArtDecayStartTime; -static F32 posArtPressureP1; -static F32 posArtPressureP2; +static U32 selfTestPreviousPublishDataTime; ///< Previous progress publish time. +static U32 selfTestStartTime; ///< Dry Self-Test start time. +static BOOL doorStateAfterTubingSetInstall; ///< Door transition after tubing set installation. +static BOOL selfTestsResumeRequested; ///< Resume request from STOPPED state. +static BOOL tubingSetLeakChecksStarted; ///< Pressure/leak testing started. + +static BOOL barcodeScanResponseReceived; ///< Barcode scan response received. +static U32 authenticationStartTime; ///< Tubing authentication start time. +static BOOL authResponseReceived; ///< Authentication response received. +static BOOL authResponseValidTubingSet; ///< Tubing set valid. +static BOOL authResponseModalityAccepted; ///< Tubing modality accepted. + +// Pressure normal +static U32 pressureSelfTestPreNormalStartTime; ///< Pressure normal setup start time. + +// Negative arterial / positive venous +static U32 negArtPosVenSetupStartTime; ///< Combined pressure build start time. +static U32 negArtPosVenStabilizationStartTime; ///< Combined stabilization start time. +static U32 negArtPosVenDecayStartTime; ///< Combined decay check start time. + +static F32 negArtPressureP1; ///< Negative arterial first pressure sample. +static F32 negArtPressureP2; ///< Negative arterial second pressure sample. +static F32 posVenPressureP1; ///< Positive venous first pressure sample. +static F32 posVenPressureP2; ///< Positive venous second pressure sample. + +// Positive arterial +static U32 posArtSetupStartTime; ///< Positive arterial build start time. +static U32 posArtStabilizationStartTime; ///< Positive arterial stabilization start time. +static U32 posArtDecayStartTime; ///< Positive arterial decay start time. + +static F32 posArtPressureP1; ///< Positive arterial first pressure sample. +static F32 posArtPressureP2; ///< Positive arterial second pressure sample. + // Pressure relief -static U32 pressureReliefStartTime; +static U32 pressureReliefStartTime; ///< Pressure relief start time. // ********** private function prototypes ********** @@ -169,28 +189,23 @@ static void setAlarmResumePerDoor( void ); static void transitionToDrySelfTestsState( DRY_SELF_TESTS_STATE_T newState ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedTubingSetCheckState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubingSetLoadedCheckState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubingSetAuthenticationState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorNormalSetupState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureSetupState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureStabilizationState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureLeakCheckState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureReliefState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureSetupState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureStabilizationState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureLeakCheckState( void ); -//static DRY_SELF_TESTS_STATE_T handleDrySelfTestArterialPressureReliefState( void ); -static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestUsedTubingSetCheckState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubingSetLoadedCheckState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubingSetAuthenticationState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorNormalSetupState( void ); + static DRY_SELF_TESTS_STATE_T handleDrySelfTestNegArtPosVenPressureSetupState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestNegArtPosVenStabilizationState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestNegArtPosVenDecayCheckState( void ); + static DRY_SELF_TESTS_STATE_T handleDrySelfTestPosArtPressureSetupState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPosArtStabilizationState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPosArtDecayCheckState( void ); + static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureReliefState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); /*********************************************************************//** * @brief @@ -221,15 +236,19 @@ negArtPosVenSetupStartTime = 0; negArtPosVenStabilizationStartTime = 0; negArtPosVenDecayStartTime = 0; + negArtPressureP1 = 0.0F; negArtPressureP2 = 0.0F; posVenPressureP1 = 0.0F; posVenPressureP2 = 0.0F; + posArtSetupStartTime = 0; posArtStabilizationStartTime = 0; posArtDecayStartTime = 0; + posArtPressureP1 = 0.0F; posArtPressureP2 = 0.0F; + pressureReliefStartTime = 0; } @@ -289,31 +308,31 @@ break; case DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE: - currentDrySelfTestsState = handleDrySelfTestVenousPressureSetupState(); + currentDrySelfTestsState = handleDrySelfTestNegArtPosVenPressureSetupState(); break; case DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE: - currentDrySelfTestsState = handleDrySelfTestVenousPressureStabilizationState(); + currentDrySelfTestsState = handleDrySelfTestNegArtPosVenStabilizationState(); break; case DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE: - currentDrySelfTestsState = handleDrySelfTestVenousPressureLeakCheckState(); + currentDrySelfTestsState = handleDrySelfTestNegArtPosVenDecayCheckState(); break; case DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE: - currentDrySelfTestsState = handleDrySelfTestVenousPressureReliefState(); + currentDrySelfTestsState = handleDrySelfTestPosArtPressureSetupState(); break; case DRY_SELF_TESTS_POS_ART_STABILIZATION_STATE: - currentDrySelfTestsState = handleDrySelfTestArterialPressureSetupState(); + currentDrySelfTestsState = handleDrySelfTestPosArtStabilizationState(); break; case DRY_SELF_TESTS_POS_ART_DECAY_CHECK_STATE: - currentDrySelfTestsState = handleDrySelfTestArterialPressureStabilizationState(); + currentDrySelfTestsState = handleDrySelfTestPosArtDecayCheckState(); break; case DRY_SELF_TESTS_PRESSURE_RELIEF_STATE: - currentDrySelfTestsState = handleDrySelfTestArterialPressureLeakCheckState(); + currentDrySelfTestsState = handleDrySelfTestPressureReliefState(); break; case DRY_SELF_TESTS_STOPPED_STATE: @@ -567,11 +586,11 @@ /*********************************************************************//** * @brief - * The handleDrySelfTestPressureSensorNormalSetupState function handles the setup - * for pressure sensors dry self-test. - * @details \b Inputs: pressureSelfTestPreNormalStartTime, art, ven + * The handleDrySelfTestPressureSensorNormalSetupState function verifies + * arterial and venous pressures before pressure sensor zeroing. + * @details \b Inputs: pressureSelfTestPreNormalStartTime * @details \b Outputs: none - * @return the next state of dry self-tests state machine + * @return next Dry Self-Test state *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorNormalSetupState( void ) { @@ -582,11 +601,11 @@ F32 art = getFilteredArterialPressure(); F32 ven = getFilteredVenousPressure(); - if ( ( fabs(art) < ZERO_PRESSURE_THRESHOLD_MMHG ) && ( fabs(ven) < ZERO_PRESSURE_THRESHOLD_MMHG ) ) + if ( ( fabs( art ) < ZERO_PRESSURE_THRESHOLD_MMHG ) && + ( fabs( ven ) < ZERO_PRESSURE_THRESHOLD_MMHG ) ) { setArtVenPressureOffsets(); - //venousSetupStartTime = getMSTimerCount(); - state = DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE; + state = DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE; } else { @@ -598,6 +617,264 @@ return state; } +/*********************************************************************//** + * @brief + * The handleDrySelfTestNegArtPosVenPressureSetupState function monitors + * negative arterial and positive venous pressure generation. + * @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 ) ) + { + 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 ) + { + 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; + } + + return state; +} + + +/*********************************************************************//** + * @brief + * The handleDrySelfTestNegArtPosVenStabilizationState function verifies + * negative arterial and positive venous pressure after stabilization. + * @details \b Inputs: negArtPosVenStabilizationStartTime, + * @details \b Outputs: negArtPressureP1, posVenPressureP1 + * @return next Dry Self-Test state + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestNegArtPosVenStabilizationState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE; + + if ( TRUE == didTimeout( negArtPosVenStabilizationStartTime, PRESSURE_STABILIZATION_TIME_MS ) ) + { + F32 art = getFilteredArterialPressure(); + F32 ven = getFilteredVenousPressure(); + + if ( ( art <= NEG_ART_STABILIZED_PRESSURE_MMHG ) && ( ven >= POS_VEN_STABILIZED_PRESSURE_MMHG ) ) + { + negArtPressureP1 = art; + 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 ); + } + else + { + 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 Inputs: negArtPosVenDecayStartTime, negArtPressureP1, + * posVenPressureP1 + * @details \b Outputs: negArtPressureP2, posVenPressureP2 + * @return next Dry Self-Test state + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestNegArtPosVenDecayCheckState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE; + + if ( TRUE == didTimeout( negArtPosVenDecayStartTime, PRESSURE_DECAY_CHECK_TIME_MS ) ) + { + F32 artDiff; + F32 venDiff; + + negArtPressureP2 = getFilteredArterialPressure(); + posVenPressureP2 = getFilteredVenousPressure(); + + artDiff = fabs( negArtPressureP1 - negArtPressureP2 ); + venDiff = fabs( posVenPressureP1 - posVenPressureP2 ); + + if ( ( artDiff <= PRESSURE_DECAY_TOLERANCE_MMHG ) && ( venDiff <= PRESSURE_DECAY_TOLERANCE_MMHG ) ) + { + state = DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE; + } + else + { + if ( artDiff > PRESSURE_DECAY_TOLERANCE_MMHG ) + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_LEAK, artDiff ); + } + else + { + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_LEAK, posVenPressureP1, posVenPressureP2 ); + } + + state = DRY_SELF_TESTS_STOPPED_STATE; + } + } + + return state; +} + + +/*********************************************************************//** + * @brief + * The handleDrySelfTestPosArtPressureSetupState function monitors + * positive arterial pressure generation. + * @details \b Inputs: posArtSetupStartTime + * @details \b Outputs: none + * @return next Dry Self-Test state + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPosArtPressureSetupState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE; + + F32 art = getFilteredArterialPressure(); + + if ( art >= POS_ART_PRESSURE_TARGET_MMHG ) + { + state = DRY_SELF_TESTS_POS_ART_STABILIZATION_STATE; + } + else if ( TRUE == didTimeout( posArtSetupStartTime, PRESSURE_BUILD_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 handleDrySelfTestPosArtStabilizationState function verifies + * positive arterial pressure after stabilization. + * @details \b Inputs: posArtStabilizationStartTime + * @details \b Outputs: posArtPressureP1 + * @return next Dry Self-Test state + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPosArtStabilizationState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_POS_ART_STABILIZATION_STATE; + + if ( TRUE == didTimeout( posArtStabilizationStartTime, PRESSURE_STABILIZATION_TIME_MS ) ) + { + F32 art = getFilteredArterialPressure(); + + if ( art >= POS_ART_STABILIZED_PRESSURE_MMHG ) + { + posArtPressureP1 = art; + state = DRY_SELF_TESTS_POS_ART_DECAY_CHECK_STATE; + } + else + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_DECAY, art ); + state = DRY_SELF_TESTS_STOPPED_STATE; + } + } + + return state; +} + + +/*********************************************************************//** + * @brief + * The handleDrySelfTestPosArtDecayCheckState function verifies positive + * arterial pressure decay. + * @details \b Inputs: posArtDecayStartTime, posArtPressureP1 + * @details \b Outputs: posArtPressureP2 + * @return next Dry Self-Test state + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPosArtDecayCheckState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_POS_ART_DECAY_CHECK_STATE; + + if ( TRUE == didTimeout( posArtDecayStartTime, PRESSURE_DECAY_CHECK_TIME_MS ) ) + { + F32 diff; + + posArtPressureP2 = getFilteredArterialPressure(); + + diff = fabs( posArtPressureP1 - posArtPressureP2 ); + + if ( diff <= PRESSURE_DECAY_TOLERANCE_MMHG ) + { + state = DRY_SELF_TESTS_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 handleDrySelfTestPressureReliefState function verifies arterial + * and venous pressure relief. + * @details \b Inputs: pressureReliefStartTime + * @details \b Outputs: none + * @return next Dry Self-Test state + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureReliefState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_PRESSURE_RELIEF_STATE; + + if ( TRUE == didTimeout( pressureReliefStartTime, PRESSURE_RELIEF_CHECK_TIME_MS ) ) + { + F32 art = getFilteredArterialPressure(); + F32 ven = getFilteredVenousPressure(); + + if ( ( fabs( art ) <= PRESSURE_RELIEF_THRESHOLD_MMHG ) && ( fabs( ven ) <= PRESSURE_RELIEF_THRESHOLD_MMHG ) ) + { + state = DRY_SELF_TESTS_COMPLETE_STATE; + } + else + { + if ( fabs( art ) > PRESSURE_RELIEF_THRESHOLD_MMHG ) + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_RELIEF, art ); + } + else + { + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_RELIEF, ven ); + } + + state = DRY_SELF_TESTS_STOPPED_STATE; + } + } + + return state; +} + ///*********************************************************************//** //* @brief //* The handleDrySelfTestVenousPressureSetupState function handles the setup @@ -844,6 +1121,7 @@ // return state; //} + /*********************************************************************//** * @brief * The handleDrySelfTestStoppedState function handles the stopped dry self-tests @@ -1011,130 +1289,128 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + resetArtVenPressureOffsets(); pressureSelfTestPreNormalStartTime = getMSTimerCount(); tubingSetLeakChecksStarted = TRUE; } break; - case DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE: + + case DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE: { - U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); - signalBloodPumpHardStop(); + setH4Direction( MOTOR_DIR_FORWARD ); + setH4SetSpeed( PRESSURE_SELF_TEST_H4_SPEED_RPM ); + setH4Enabled( TRUE ); 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_PRESSURE_VENOUS_SETUP_STATE, 0 ); - venousSetupStartTime = getMSTimerCount(); + 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_VENOUS_PRESSURE_STABILIZATION_STATE: + case DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); 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(); + } break; - case DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE: + case DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdBypassDialyzer( TRUE ); - cmdChangeQd( targetDialysateFlowMLPM ); + cmdChangeQd(targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + negArtPosVenDecayStartTime = getMSTimerCount(); } break; - case DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE: + case DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); - signalBloodPumpHardStop(); + setH4Direction( MOTOR_DIR_REVERSE ); + setH4SetSpeed( PRESSURE_SELF_TEST_H4_SPEED_RPM ); + setH4Enabled( TRUE ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); - setValvePosition( H19_VALV, VALVE_POSITION_B_OPEN ); - 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 ); - } - break; - - case DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE: - { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); - - setBloodPumpTargetFlowRate( BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); 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 ); - SEND_EVENT_WITH_2_U32_DATA( TD_EVENT_DRY_SELF_TEST_PRESSURE_RESULT, (U32)DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE, 0 ); - pressureSelfTestArterialStartTime = getMSTimerCount(); + 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_ARTERIAL_PRESSURE_STABILIZATION_STATE: + case DRY_SELF_TESTS_POS_ART_STABILIZATION_STATE: { - U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); 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 ); - arterialPressureSettleStartTime = getMSTimerCount(); - arterialPressureBaselineCaptured = FALSE; + posArtStabilizationStartTime = getMSTimerCount(); + } break; - case DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE: + case DRY_SELF_TESTS_POS_ART_DECAY_CHECK_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); + setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); setValvePosition( H19_VALV, VALVE_POSITION_C_CLOSE ); - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); 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 ); + posArtDecayStartTime = getMSTimerCount(); + } break; - case DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE: + case DRY_SELF_TESTS_PRESSURE_RELIEF_STATE: { U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); @@ -1147,19 +1423,22 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + pressureReliefStartTime = getMSTimerCount(); + } break; case DRY_SELF_TESTS_COMPLETE_STATE: signalBloodPumpHardStop(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); cmdChangeQuf( 0.0F ); break; case DRY_SELF_TESTS_STOPPED_STATE: signalBloodPumpHardStop(); setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); - // Set valves to stop set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT );