Index: firmware/App/Services/StateServices/DrySelfTests.c =================================================================== diff -u -ra43e8d7086cdfa6f6208306e5b23de13ffb8a014 -r8254d0eaea0d25b62e41dc4189ec7cabbcf4c226 --- firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision a43e8d7086cdfa6f6208306e5b23de13ffb8a014) +++ firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 8254d0eaea0d25b62e41dc4189ec7cabbcf4c226) @@ -49,15 +49,17 @@ // Pressure self-test timing #define PRE_NORMAL_PRESSURE_DELAY_MS ( 5 * MS_PER_SECOND ) ///< Delay before capturing baseline arterial and venous pressures. #define STABILITY_PRESSURE_CHECK_TIME_MS ( 4 * MS_PER_SECOND ) ///< Time allowed for pressure stabilization. -#define VENOUS_PRESSURE_LEAK_CHECK_TIME_MS ( 5 * MS_PER_SECOND ) ///< Time to monitor venous pressure decay (leak check). -#define ARTERIAL_PRESSURE_LEAK_CHECK_TIME_MS ( 5 * MS_PER_SECOND ) ///< Time to monitor arterial pressure decay (leak check). +#define VENOUS_PRESSURE_LEAK_CHECK_TIME_MS ( 5 * MS_PER_SECOND ) ///< Time to monitor venous pressure decay (leak check). +#define ARTERIAL_PRESSURE_LEAK_CHECK_TIME_MS ( 5 * MS_PER_SECOND ) ///< Time to monitor arterial pressure decay (leak check). #define TUBING_SET_INSERT_PRESSURE_SETTLE_TIME_MS ( 10 * MS_PER_SECOND ) ///< Time required for pressure settling after tubing set insertion. #define VENOUS_PRESSURE_TIMEOUT_MS ( 60 * MS_PER_SECOND ) ///< Max time allowed to reach venous pressure target. #define ARTERIAL_PRESSURE_TIMEOUT_MS ( 30 * MS_PER_SECOND ) ///< Max time allowed to reach arterial pressure target. +#define PRESSURE_RELIEF_CHECK_TIME_MS ( 30 * MS_PER_SECOND ) +#define ARTERIAL_PRESSURE_SETTLE_TIME_MS ( 1 * MS_PER_SECOND ) + #define MAX_DRY_SELF_TEST_TIME ( 12 * SEC_PER_MIN ) ///< Maximum total dry self-test duration. #define SELF_TEST_TIME_DATA_PUB_INTERVAL ( 1 * MS_PER_SECOND ) ///< Interval for publishing self-test progress data. #define TUBING_SET_AUTH_TIMEOUT_MS ( 5 * MS_PER_SECOND ) ///< Tubing set authentication timeout -#define PRESSURE_RELIEF_CHECK_TIME_MS ( 5 * MS_PER_SECOND ) //Pressure self-test pump flow #define BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW 100 ///< Blood pump flow rate during arterial pressure self-test (mL/min). @@ -70,10 +72,8 @@ #define ARTERIAL_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed arterial pressure variation during stabilization. #define VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure difference during leak check. #define ARTERIAL_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed arterial pressure difference during leak check. -//#define VENOUS_PRESSURE_RELIEF_THRESHOLD_MMHG 20.0F ///< Venous pressure must return within this threshold after relief. -//#define ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG 20.0F ///< Arterial pressure must return within this threshold after relief. -#define VENOUS_PRESSURE_RELIEF_THRESHOLD_MMHG 5.0F -#define ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG 5.0F +#define VENOUS_PRESSURE_RELIEF_THRESHOLD_MMHG 5.0F ///< Venous pressure must return within this threshold after relief. +#define ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG 5.0F ///< Arterial pressure must return within this threshold after relief. /// Payload record structure for dry self-test authentication response @@ -87,23 +87,29 @@ static DRY_SELF_TESTS_STATE_T currentDrySelfTestsState; ///< Current state of Dry Self-Test state machine static U32 selfTestPreviousPublishDataTime; ///< Last progress data publish time -static BOOL doorStateAfterTubingSetInstall; ///< Tracks door transition after tubing set install 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 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 @@ -113,6 +119,10 @@ 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. +static U32 arterialPressureSettleStartTime; +static BOOL arterialPressureBaselineCaptured; + // ********** private function prototypes ********** static void publishDrySelfTestProgress( void ); @@ -145,40 +155,53 @@ void initDrySelfTests( void ) { currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; + selfTestStartTime = 0; selfTestPreviousPublishDataTime = 0; + pressureSelfTestPreNormalStartTime = 0; + venousSetupStartTime = 0; venousPressureStabilizationStartTime = 0; venousPressureLeakCheckStartTime = 0; venousPressureReliefStartTime = 0; + pressureSelfTestArterialStartTime = 0; arterialPressureStabilizationStartTime = 0; arterialPressureLeakCheckStartTime = 0; arterialPressureReliefStartTime = 0; + + arterialPressureSettleStartTime = 0; + authenticationStartTime = 0; + doorStateAfterTubingSetInstall = TRUE; selfTestsResumeRequested = FALSE; tubingSetLeakChecksStarted = FALSE; + barcodeScanResponseReceived = FALSE; authResponseReceived = FALSE; authResponseValidTubingSet = FALSE; authResponseModalityAccepted = FALSE; + peakVenousPressure = 0.0F; venousPressureP1 = 0.0F; venousPressureP2 = 0.0F; + peakArterialPressure = 0.0F; arterialPressureP1 = 0.0F; arterialPressureP2 = 0.0F; + + arterialPressureBaselineCaptured = FALSE; } /*********************************************************************//** * @brief * The transitionToDrySelfTests function resets anything required before * the start of dry self-tests. - * @details \b Inputs: front door state - * @details \b Outputs: Dry self-tests re-initialized, changed depending - * on front door state + * @details \b Inputs: currentDrySelfTestsState + * @details \b Outputs: selfTestStartTime, selfTestPreviousPublishDataTime, + * selfTestsResumeRequested * @return none *************************************************************************/ void transitionToDrySelfTests( void ) @@ -187,50 +210,18 @@ selfTestPreviousPublishDataTime = getMSTimerCount(); resetSelfTestsFlags(); - doorClosedRequired( TRUE ); - - // Dry Self-Test directly controls H13 and H20. endAirTrapControl(); - setCurrentSubState( (U32)currentDrySelfTestsState ); - - // Configure actuators for the initial Dry Self-Test state. + // To configure actuators for the initial Dry Self-Test state. transitionToDrySelfTestsState( currentDrySelfTestsState ); } -//void transitionToDrySelfTests( void ) -//{ -// selfTestStartTime = getMSTimerCount(); -// selfTestPreviousPublishDataTime = getMSTimerCount(); -// doorClosedRequired( TRUE ); -// setCurrentSubState( (U32)currentDrySelfTestsState ); -// transitionToDrySelfTestsState( currentDrySelfTestsState ); -// -// signalBloodPumpHardStop(); -// -// endAirTrapControl(); -// set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); -// set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); -// setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); -// -// if ( STATE_CLOSED == getSwitchState( H9_SWCH ) ) -// { -// setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); -// } -// else -// { -// setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); -// } -// -// resetSelfTestsFlags(); -//} - /*********************************************************************//** * @brief * The execDrySelfTests function executes the dry self-tests state machine. * @details \b Inputs: currentDrySelfTestsState - * @details \b Outputs: currentDrySelfTestsState, pressureSelfTestPreNormalStartTime + * @details \b Outputs: currentDrySelfTestsState * @return none *************************************************************************/ void execDrySelfTests( void ) @@ -299,14 +290,10 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, - SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE, currentDrySelfTestsState ); + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_TD_INVALID_DRY_SELF_TEST_STATE, currentDrySelfTestsState ); break; } - // Self-tests flags should be handled by now, reset if flags not handled with current state - //resetSelfTestsFlags(); - if ( priorSubState != currentDrySelfTestsState ) { transitionToDrySelfTestsState( currentDrySelfTestsState ); @@ -320,8 +307,10 @@ /*********************************************************************//** * @brief * The publishDrySelfTestProgress function publishes dry self-test progress. -* @details \b Inputs: selfTestPreviousPublishDataTime -* @details \b Outputs: progress data broadcast +* @details \b Message \b Sent: MSG_ID_TD_DRY_SELF_TEST_PROGRESS_DATA +* @details \b Inputs: selfTestPreviousPublishDataTime, selfTestStartTime, +* currentDrySelfTestsState +* @details \b Outputs: selfTestPreviousPublishDataTime * @return none *************************************************************************/ static void publishDrySelfTestProgress( void ) @@ -336,9 +325,7 @@ data.substate = currentDrySelfTestsState; data.timeout = MAX_DRY_SELF_TEST_TIME; data.countdown = ( elapsedSelfTestTimeInSecs <= MAX_DRY_SELF_TEST_TIME ? ( MAX_DRY_SELF_TEST_TIME - elapsedSelfTestTimeInSecs ) : 0 ); - broadcastData( MSG_ID_TD_DRY_SELF_TEST_PROGRESS_DATA, - COMM_BUFFER_OUT_CAN_TD_BROADCAST, - (U08*)&data, sizeof( SELF_TEST_DRY_PAYLOAD_T ) ); + broadcastData( MSG_ID_TD_DRY_SELF_TEST_PROGRESS_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( SELF_TEST_DRY_PAYLOAD_T ) ); } } @@ -347,7 +334,7 @@ * The signalResumeDrySelfTests function signals the self-tests to resume * previous operation. * @details \b Inputs: none - * @details \b Outputs: primeResumeRequested + * @details \b Outputs: selfTestsResumeRequested * @return none *************************************************************************/ void signalResumeDrySelfTests( void ) @@ -359,7 +346,7 @@ * @brief * The resetSelfTestsFlags function resets all self-tests signal flags. * @details \b Inputs: none - * @details \b Outputs: signal flags set to FALSE + * @details \b Outputs: selfTestsResumeRequested * @return none *************************************************************************/ static void resetSelfTestsFlags( void ) @@ -369,10 +356,10 @@ /*********************************************************************//** * @brief -* The setAlarmResumePerDoor function enables resume only when -* required conditions are satisfied. -* @details \b Inputs: Front door switch state -* @details \b Outputs: resume alarm enabled/disabled +* The setAlarmResumePerDoor function sets the Resume alarm action +* based on the front door state. +* @details \b Inputs: doorClosed +* @details \b Outputs: none * @return none *************************************************************************/ static void setAlarmResumePerDoor( void ) @@ -406,8 +393,8 @@ * @brief * The handleDrySelfTestWaitForDoorCloseState function makes sure door is * closed before starting self-tests. - * @details \b Inputs: none - * @details \b Outputs: none + * @details \b Inputs: door + * @details \b Outputs: doorStateAfterTubingSetInstall * @return the next state of dry self-tests state machine *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestWaitForDoorCloseState( void ) @@ -416,11 +403,11 @@ OPN_CLS_STATE_T door = getSwitchState( H9_SWCH ); // Want to pinch off saline once door closed after tubing set install - //handleDoorCloseAfterTubingSetInsertion(); + handleDoorCloseAfterTubingSetInsertion(); if ( STATE_CLOSED == door ) { - doorClosedRequired( TRUE ); + // TODO Later - Current temporary sequential test flow bypasses tubing-set barcode/authentication states state = DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE; } @@ -474,8 +461,10 @@ * @brief * The handleDrySelfTestTubingSetLoadedCheckState function handles barcode * scan result and transitions to authentication state if scan succeeded. -* @details \b Inputs: barcodeScanResponseReceived, barcodeScanSuccessful -* @details \b Outputs: authenticationStartTime +* @details \b Message \b Sent: MSG_ID_TD_TUBE_SET_AUTHENTICATION_REQUEST +* if barcode scan response is received +* @details \b Inputs: barcodeScanResponseReceived +* @details \b Outputs: barcodeScanResponseReceived, authenticationStartTime * @return the next state of dry self-tests state machine *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubingSetLoadedCheckState( void ) @@ -508,8 +497,8 @@ * The handleDrySelfTestTubingSetAuthenticationState function handles tubing set * authentication and processes the authentication response. * @details \b Inputs: authResponseReceived, authResponseValidTubingSet, -* authResponseModalityAccepted -* @details \b Outputs: pressureSelfTestPreNormalStartTime +* authResponseModalityAccepted, authenticationStartTime +* @details \b Outputs: authResponseReceived * @return the next state of dry self-tests state machine *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestTubingSetAuthenticationState( void ) @@ -546,8 +535,8 @@ * @brief * The handleDrySelfTestPressureSensorNormalSetupState function handles the setup * for pressure sensors dry self-test. - * @details \b Inputs: pressureSelfTestPreNormalStartTime - * @details \b Outputs: previousNormalArterialPressure, previousNormalVenousPressure + * @details \b Inputs: pressureSelfTestPreNormalStartTime, art, ven + * @details \b Outputs: none * @return the next state of dry self-tests state machine *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorNormalSetupState( void ) @@ -562,7 +551,7 @@ if ( ( fabs(art) < ZERO_PRESSURE_THRESHOLD_MMHG ) && ( fabs(ven) < ZERO_PRESSURE_THRESHOLD_MMHG ) ) { setArtVenPressureOffsets(); - venousSetupStartTime = getMSTimerCount(); + //venousSetupStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE; } else @@ -579,8 +568,8 @@ * @brief * The handleDrySelfTestVenousPressureSetupState function handles the setup * for the venous pressure sensor dry self-test. -* @details \b Inputs: none -* @details \b Outputs: venousPressureStabilizationStartTime +* @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 ) @@ -609,30 +598,19 @@ * @brief * The handleDrySelfTestVenousPressureStabilizationState function handles * venous pressure stabilization check. - * @details \b Inputs: venousPressureStabilizationStartTime, peakVenousPressure - * @details \b Outputs: venousPressureP1 + * @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 ) ) + if ( TRUE == didTimeout( venousPressureStabilizationStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) { - F32 currentVenousPressure = getFilteredVenousPressure(); - F32 diff = fabs( peakVenousPressure - currentVenousPressure ); - - if ( diff <= VENOUS_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG ) - { - venousPressureP1 = currentVenousPressure; - venousPressureLeakCheckStartTime = getMSTimerCount(); - state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; - } - else - { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_DECAY, diff ); - state = DRY_SELF_TESTS_STOPPED_STATE; - } + venousPressureP1 = getFilteredVenousPressure(); + venousPressureLeakCheckStartTime = getMSTimerCount(); + state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; } return state; @@ -643,7 +621,7 @@ * The handleDrySelfTestVenousPressureLeakCheckState function handles * venous pressure leak check. * @details \b Inputs: venousPressureLeakCheckStartTime, venousPressureP1 - * @details \b Outputs: venousPressureP2 + * @details \b Outputs: venousPressureP2, venousPressureReliefStartTime * @return the next state of dry self-tests state machine *************************************************************************/ static DRY_SELF_TESTS_STATE_T handleDrySelfTestVenousPressureLeakCheckState( void ) @@ -652,8 +630,10 @@ if ( TRUE == didTimeout( venousPressureLeakCheckStartTime, VENOUS_PRESSURE_LEAK_CHECK_TIME_MS ) ) { + F32 diff; + venousPressureP2 = getFilteredVenousPressure(); - F32 diff = fabs( venousPressureP1 - venousPressureP2 ); + diff = fabs( venousPressureP1 - venousPressureP2 ); if ( diff <= VENOUS_PRESSURE_LEAK_DIFF_TOLERANCE_MMHG ) { @@ -669,7 +649,6 @@ return state; } - /*********************************************************************//** * @brief * The handleDrySelfTestVenousPressureReliefState function handles @@ -705,24 +684,19 @@ * @brief * The handleDrySelfTestPressureArterialSetupState function handles the setup * for the arterial pressure sensor dry self-test. - * @details \b Inputs: none - * @details \b Outputs: pressureSelfTestArterialStartTime + * @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(); - // Check the target for arterial pressure <= -200 mmHg and then transition to arterial pressure stabilization state if ( art <= ARTERIAL_PRESSURE_TARGET_MMHG ) { - peakArterialPressure = art; - arterialPressureStabilizationStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE; - } - // Time out alarm if it does not reach within 30 sec tolerance else if ( TRUE == didTimeout( pressureSelfTestArterialStartTime, ARTERIAL_PRESSURE_TIMEOUT_MS ) ) { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURIZATION_TIMEOUT, art ); @@ -737,20 +711,30 @@ * The handleDrySelfTestArterialPressureStabilizationState function monitors * arterial pressure, verifies target pressure is reached, and records P1 * after stabilization. - * @details \b Inputs: pressureSelfTestArterialStartTime, - * arterialPressureStabilizationStartTime + * @details \b Inputs: pressureSelfTestArterialStartTime, peakArterialPressure, + * arterialPressureStabilizationStartTime, arterialPressureBaselineCaptured, * @details \b Outputs: peakArterialPressure, arterialPressureP1, - * arterialPressureLeakCheckStartTime + * 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 ( TRUE == didTimeout( arterialPressureStabilizationStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) + 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 ); + F32 diff = fabs( peakArterialPressure - currentArterialPressure ); if ( diff <= ARTERIAL_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG ) { @@ -811,21 +795,17 @@ 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 ( TRUE == didTimeout( arterialPressureReliefStartTime, PRESSURE_RELIEF_CHECK_TIME_MS ) ) + if ( fabs( art ) <= ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG ) { - F32 art = getFilteredArterialPressure(); - - if ( fabs( art ) <= ARTERIAL_PRESSURE_RELIEF_THRESHOLD_MMHG ) - { - state = DRY_SELF_TESTS_COMPLETE_STATE; - } - else - { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_TD_ARTERIAL_PRESSURE_RELIEF, art ); - state = DRY_SELF_TESTS_STOPPED_STATE; - } + 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; } @@ -905,7 +885,7 @@ * @brief * The transitionToDrySelfTestsState function handles the transition to * dry self-test states by setting actuators. -* @details \b Inputs: none +* @details \b Inputs: newState * @details \b Outputs: none * @param newState the targeted dry self-test state * @return none @@ -989,7 +969,7 @@ U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); - setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); 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 ); @@ -1004,7 +984,7 @@ case DRY_SELF_TESTS_PRESSURE_VENOUS_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 ); @@ -1022,6 +1002,7 @@ case DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE: { + U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); @@ -1088,7 +1069,7 @@ case DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE: { - U32 targetDialysateFlowMLPM = (F32)getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); + U32 targetDialysateFlowMLPM = getTreatmentParameterU32( TREATMENT_PARAM_DIALYSATE_FLOW ); signalBloodPumpHardStop(); setValvePosition( H1_VALV, VALVE_POSITION_B_OPEN ); @@ -1099,6 +1080,8 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + arterialPressureSettleStartTime = getMSTimerCount(); + arterialPressureBaselineCaptured = FALSE; } break;