Index: firmware/App/Services/StateServices/DrySelfTests.c =================================================================== diff -u -r3f325a9fe7cbfb660a3ddf274d471d635266c586 -r3f0d1433b3481160bf554aaf7371708380211a36 --- firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 3f325a9fe7cbfb660a3ddf274d471d635266c586) +++ firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 3f0d1433b3481160bf554aaf7371708380211a36) @@ -49,14 +49,15 @@ // 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 ( 4 * MS_PER_SECOND ) ///< Time to monitor venous pressure decay (leak check). -#define ARTERIAL_PRESSURE_LEAK_CHECK_TIME ( 4 * 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 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). @@ -69,9 +70,12 @@ #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 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 + /// Payload record structure for dry self-test authentication response typedef struct { @@ -155,6 +159,7 @@ authenticationStartTime = 0; doorStateAfterTubingSetInstall = TRUE; selfTestsResumeRequested = FALSE; + tubingSetLeakChecksStarted = FALSE; barcodeScanResponseReceived = FALSE; authResponseReceived = FALSE; authResponseValidTubingSet = FALSE; @@ -178,31 +183,45 @@ *************************************************************************/ 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 ); - } - + selfTestStartTime = getMSTimerCount(); + selfTestPreviousPublishDataTime = getMSTimerCount(); resetSelfTestsFlags(); + doorClosedRequired( TRUE ); + // to stop automatic air trap control because Dry Self-Test + // directly controls H13 and H20. + endAirTrapControl(); + setCurrentSubState( (U32)currentDrySelfTestsState ); + // To configure actuators for the current 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. @@ -282,7 +301,7 @@ } // Self-tests flags should be handled by now, reset if flags not handled with current state - resetSelfTestsFlags(); + //resetSelfTestsFlags(); if ( priorSubState != currentDrySelfTestsState ) { @@ -398,7 +417,7 @@ if ( STATE_CLOSED == door ) { doorClosedRequired( TRUE ); - state = DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE; + state = DRY_SELF_TESTS_USED_TUBING_SET_CHECK_STATE; } return state; @@ -507,7 +526,6 @@ } else { - pressureSelfTestPreNormalStartTime = getMSTimerCount(); state = DRY_SELF_TESTS_PRESSURE_SENSOR_NORMAL_SETUP_STATE; } } @@ -628,7 +646,7 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE; - if ( TRUE == didTimeout( venousPressureLeakCheckStartTime, VENOUS_PRESSURE_LEAK_CHECK_TIME ) ) + if ( TRUE == didTimeout( venousPressureLeakCheckStartTime, VENOUS_PRESSURE_LEAK_CHECK_TIME_MS ) ) { venousPressureP2 = getFilteredVenousPressure(); F32 diff = fabs( venousPressureP1 - venousPressureP2 ); @@ -660,7 +678,7 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE; - if ( TRUE == didTimeout( venousPressureReliefStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) + if ( TRUE == didTimeout( venousPressureReliefStartTime, PRESSURE_RELIEF_CHECK_TIME_MS ) ) { F32 ven = getFilteredVenousPressure(); @@ -758,7 +776,7 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE; - if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, ARTERIAL_PRESSURE_LEAK_CHECK_TIME ) ) + if ( TRUE == didTimeout( arterialPressureLeakCheckStartTime, ARTERIAL_PRESSURE_LEAK_CHECK_TIME_MS ) ) { arterialPressureP2 = getFilteredArterialPressure(); F32 diff = fabs( arterialPressureP1 - arterialPressureP2 ); @@ -790,7 +808,7 @@ { DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE; - if ( TRUE == didTimeout( arterialPressureReliefStartTime, STABILITY_PRESSURE_CHECK_TIME_MS ) ) + if ( TRUE == didTimeout( arterialPressureReliefStartTime, PRESSURE_RELIEF_CHECK_TIME_MS ) ) { F32 art = getFilteredArterialPressure(); @@ -975,6 +993,8 @@ cmdBypassDialyzer( TRUE ); cmdChangeQd( targetDialysateFlowMLPM ); cmdChangeQuf( 0.0F ); + pressureSelfTestPreNormalStartTime = getMSTimerCount(); + tubingSetLeakChecksStarted = TRUE; } break;