Index: firmware/App/Services/StateServices/DrySelfTests.c =================================================================== diff -u -ref261eec9da3f584ac2d017524097556dcccdd59 -r5e02ef6e9aae20b01463445de09ef11cfea08555 --- firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision ef261eec9da3f584ac2d017524097556dcccdd59) +++ firmware/App/Services/StateServices/DrySelfTests.c (.../DrySelfTests.c) (revision 5e02ef6e9aae20b01463445de09ef11cfea08555) @@ -23,6 +23,7 @@ #include "Common.h" #include "DDInterface.h" #include "DrySelfTests.h" +#include "FpgaTD.h" #include "LevelSensors.h" #include "Messaging.h" #include "ModePreTreat.h" @@ -47,35 +48,54 @@ // ********** private definitions ********** // 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 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 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 ) ///< Pressure Relief check time in ms. -#define ARTERIAL_PRESSURE_SETTLE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Arterial pressure settle time in ms +//#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 ) ///< Pressure Relief check time in ms. +//#define ARTERIAL_PRESSURE_SETTLE_TIME_MS ( 1 * MS_PER_SECOND ) ///< Arterial pressure settle time in ms #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 //Pressure self-test pump flow -#define BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW 100 ///< Blood pump flow rate during arterial pressure self-test (mL/min). +//#define BLOOD_PUMP_PRESSURE_SELF_TEST_FLOW 100 ///< Blood pump flow rate during arterial pressure self-test (mL/min). // Pressure thresholds -#define ZERO_PRESSURE_THRESHOLD_MMHG 15.0F ///< Zeroing the pressure -#define VENOUS_PRESSURE_TARGET_MMHG 250.0F ///< Target venous pressure threshold during pressure build. -#define ARTERIAL_PRESSURE_TARGET_MMHG -200.0F ///< Target arterial pressure threshold during pressure build. -#define VENOUS_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure variation during stabilization. -#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 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. +//#define ZERO_PRESSURE_THRESHOLD_MMHG 15.0F ///< Zeroing the pressure +//#define VENOUS_PRESSURE_TARGET_MMHG 250.0F ///< Target venous pressure threshold during pressure build. +//#define ARTERIAL_PRESSURE_TARGET_MMHG -200.0F ///< Target arterial pressure threshold during pressure build. +//#define VENOUS_PRESSURE_STABILITY_DIFF_TOLERANCE_MMHG 5.0F ///< Max allowed venous pressure variation during stabilization. +//#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 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. +// New +// Pressure self-test timing +#define PRE_NORMAL_PRESSURE_DELAY_MS ( 5 * MS_PER_SECOND ) ///< Delay before zeroing pressure sensors. +#define PRESSURE_BUILD_TIMEOUT_MS ( 40 * MS_PER_SECOND ) ///< Maximum pressure build time. +#define PRESSURE_STABILIZATION_TIME_MS ( 1 * MS_PER_SECOND ) ///< Pressure stabilization time. +#define PRESSURE_DECAY_CHECK_TIME_MS ( 2 * MS_PER_SECOND ) ///< Pressure decay monitoring time. +#define PRESSURE_RELIEF_CHECK_TIME_MS ( 2 * MS_PER_SECOND ) ///< Pressure relief verification time. +// Pressure thresholds +#define PRESSURE_SELF_TEST_H4_SPEED_RPM 1500 ///< H4 blood pump speed during pressure self-test +#define ZERO_PRESSURE_THRESHOLD_MMHG 15.0F ///< Zeroing the pressure +#define NEG_ART_PRESSURE_TARGET_MMHG -250.0F ///< Negative arterial pressure generation targets +#define POS_VEN_PRESSURE_TARGET_MMHG 375.0F ///< Positive venous pressure generation targets +#define NEG_ART_STABILIZED_PRESSURE_MMHG -200.0F ///< Minimum arterial pressure that must remain after stabilization +#define POS_VEN_STABILIZED_PRESSURE_MMHG 250.0F ///< Minimum venous pressure that must remain after stabilization +#define POS_ART_PRESSURE_TARGET_MMHG 200.0F ///< Positive arterial pressure generation target +#define POS_ART_STABILIZED_PRESSURE_MMHG 180.0F ///< Minimum positive arterial pressure after stabilization +#define PRESSURE_DECAY_TOLERANCE_MMHG 2.5F ///< Maximum pressure change allowed during decay checks +#define PRESSURE_RELIEF_THRESHOLD_MMHG 5.0F ///< Pressure must return within +/-5 mmHg during relief + /// Payload record structure for dry self-test authentication response typedef struct { @@ -101,50 +121,77 @@ 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 +//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 -static U32 arterialPressureStabilizationStartTime; ///< Start time for arterial stabilization -static F32 arterialPressureP1; ///< First stable arterial pressure sample -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 +//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 +//static U32 arterialPressureStabilizationStartTime; ///< Start time for arterial stabilization +//static F32 arterialPressureP1; ///< First stable arterial pressure sample +//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. -static U32 arterialPressureSettleStartTime; ///< Arterial pressure settle start time -static BOOL arterialPressureBaselineCaptured; ///< Arterial Pressure base captured +//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; + +// Positive arterial pressure test +static U32 posArtSetupStartTime; +static U32 posArtStabilizationStartTime; +static U32 posArtDecayStartTime; +static F32 posArtPressureP1; +static F32 posArtPressureP2; + +// Pressure relief +static U32 pressureReliefStartTime; + // ********** private function prototypes ********** static void publishDrySelfTestProgress( void ); static void resetSelfTestsFlags( void ); 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 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 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 ); + /*********************************************************************//** * @brief * The initDrySelfTests function initializes the DrySelfTests unit. @@ -161,20 +208,7 @@ 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; @@ -184,15 +218,19 @@ authResponseValidTubingSet = FALSE; authResponseModalityAccepted = FALSE; - peakVenousPressure = 0.0F; - venousPressureP1 = 0.0F; - venousPressureP2 = 0.0F; - - peakArterialPressure = 0.0F; - arterialPressureP1 = 0.0F; - arterialPressureP2 = 0.0F; - - arterialPressureBaselineCaptured = FALSE; + 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; } /*********************************************************************//** @@ -250,38 +288,34 @@ currentDrySelfTestsState = handleDrySelfTestPressureSensorNormalSetupState(); break; - case DRY_SELF_TESTS_PRESSURE_VENOUS_SETUP_STATE: + case DRY_SELF_TESTS_NEG_ART_POS_VEN_PRESSURE_SETUP_STATE: currentDrySelfTestsState = handleDrySelfTestVenousPressureSetupState(); break; - case DRY_SELF_TESTS_VENOUS_PRESSURE_STABILIZATION_STATE: + case DRY_SELF_TESTS_NEG_ART_POS_VEN_STABILIZATION_STATE: currentDrySelfTestsState = handleDrySelfTestVenousPressureStabilizationState(); break; - case DRY_SELF_TESTS_VENOUS_PRESSURE_LEAK_CHECK_STATE: + case DRY_SELF_TESTS_NEG_ART_POS_VEN_DECAY_CHECK_STATE: currentDrySelfTestsState = handleDrySelfTestVenousPressureLeakCheckState(); break; - case DRY_SELF_TESTS_VENOUS_PRESSURE_RELIEF_STATE: + case DRY_SELF_TESTS_POS_ART_PRESSURE_SETUP_STATE: currentDrySelfTestsState = handleDrySelfTestVenousPressureReliefState(); break; - case DRY_SELF_TESTS_PRESSURE_ARTERIAL_SETUP_STATE: + case DRY_SELF_TESTS_POS_ART_STABILIZATION_STATE: currentDrySelfTestsState = handleDrySelfTestArterialPressureSetupState(); break; - case DRY_SELF_TESTS_ARTERIAL_PRESSURE_STABILIZATION_STATE: + case DRY_SELF_TESTS_POS_ART_DECAY_CHECK_STATE: currentDrySelfTestsState = handleDrySelfTestArterialPressureStabilizationState(); break; - case DRY_SELF_TESTS_ARTERIAL_PRESSURE_LEAK_CHECK_STATE: + case DRY_SELF_TESTS_PRESSURE_RELIEF_STATE: currentDrySelfTestsState = handleDrySelfTestArterialPressureLeakCheckState(); break; - case DRY_SELF_TESTS_ARTERIAL_PRESSURE_RELIEF_STATE: - currentDrySelfTestsState = handleDrySelfTestArterialPressureReliefState(); - break; - case DRY_SELF_TESTS_STOPPED_STATE: currentDrySelfTestsState = handleDrySelfTestStoppedState(); break; @@ -564,254 +598,254 @@ 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(); +///*********************************************************************//** +//* @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; +//} - // 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 * operation. * @details \b Inputs: selfTestsResumeRequested, tubingSetLeakChecksStarted