Index: firmware/App/Monitors/Pressures.c =================================================================== diff -u -r21368c3576cfd798ad548566899e7e10754ef37e -r23099feb617d2c1cdbd16211b86e093e49b570ab --- firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision 21368c3576cfd798ad548566899e7e10754ef37e) +++ firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision 23099feb617d2c1cdbd16211b86e093e49b570ab) @@ -52,6 +52,9 @@ #define PSI_TO_MMHG ( 51.715F ) ////< Conversion constant for PSI to mmHg +#define PSI_15_MAX_MMHG ( 775.0F ) ////< Conversion constant for PSI to mmHg for Beta 1.9 +#define PSI_30_MAX_MMHG ( 1550.0F ) ////< Conversion constant for PSI to mmHg for Beta 1.0 + #define VENOUS_PRESSURE_MIN_PSI ( -30.0F ) ///< Minimum of scale for venous pressure sensor reading (in PSI). #define VENOUS_PRESSURE_MAX_PSI ( 30.0F ) ///< Maximum of scale for venous pressure sensor reading (in PSI). #define MIN_VENOUS_PRESSURE_FOR_RAMP_MMHG ( 0.0F ) ///< Minimum venous pressure during blood pump ramp up (in mmHg). @@ -64,13 +67,15 @@ #define ARTERIAL_PRESSURE_SELF_TEST_MAX ( 100.0F ) ///< Maximum self-test value for arterial pressure sensor reading (in mmHg). #define ARTERIAL_PRESSURE_MAX_MMHG ( 2000.0F ) ///< Maximum arterial pressure reading (in mmHg) for range check. #define ARTERIAL_PRESSURE_MIN_MMHG ( -1500.0F ) ///< Minimum arterial pressure reading (in mmHg) for range check. +#define ARTERIAL_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG ( 200.0F ) ///< Default Arterial pressure limit window (mmHg). Used as Window/2 for min/max limits #define ARTERIAL_PRESSURE_LIMIT_MAX_MMHG ( 100.0F ) ///< Maximum arterial pressure limit (in mmHg). #define ARTERIAL_PRESSURE_LIMIT_MIN_MMHG ( -300.0F ) ///< Minimum arterial pressure limit (in mmHg). #define VENOUS_PRESSURE_SELF_TEST_MIN ( -100.0F ) ///< Minimum self-test value for venous pressure sensor reading (in mmHg). #define VENOUS_PRESSURE_SELF_TEST_MAX ( 100.0F ) ///< Maximum self-test value for venous pressure sensor reading (in mmHg). #define VENOUS_PRESSURE_MAX_MMHG ( 2000.0F ) ///< Maximum venous pressure reading (in mmHg) for range check. #define VENOUS_PRESSURE_MIN_MMHG ( -1500.0F ) ///< Minimum venous pressure reading (in mmHg) for range check. +#define VENOUS_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG ( 200.0F ) ///< Default Venous pressure limit window (mmHg). Used as Window/2 for min/max limits. #define VENOUS_PRESSURE_LIMIT_MAX_MMHG ( 400.0F ) ///< Maximum venous pressure limit (in mmHg). #define VENOUS_PRESSURE_LIMIT_MIN_MMHG ( 20.0F ) ///< Minimum venous pressure limit (in mmHg). #define VENOUS_PRESSURE_EXEMPTION_PERIOD ( ( 2 * MS_PER_SECOND ) / \ @@ -79,7 +84,7 @@ #define TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG ( 200.0F ) ///< Default TMP pressure limit window (mmHg). Used as Window/2 for min/max limits. #define TMP_PRESSURE_LIMIT_MAX_MMHG ( 500.0F ) ///< Maximum transmembrane pressure limit (in mmHg) #define TMP_PRESSURE_LIMIT_MIN_MMHG ( -500.0F ) ///< Minimum transmembrane pressure limit (in mmHg) -#define TMP_PRESSURE_HIGH_ABSOLUTE_MMHG ( 500.0F ) +#define TMP_PRESSURE_HIGH_ABSOLUTE_MMHG ( 500.0F ) ///< Transmembrance pressure high absolute (in mmHg) #define TMP_ALARM_PERSISTENCE ( ( 1 * MS_PER_SECOND ) / TASK_GENERAL_INTERVAL ) ///< Alarm persistence period for transmembrane pressure alarms #define MIN_TIME_BETWEEN_AIR_TRAP_FILL_EXEMPTIONS_MS ( 1200 ) ///< To monitor low Venous pressure in the defined interval in a case where continuous air fill event happens followed by exemption period to stabilize the pressure @@ -161,6 +166,8 @@ static F32 longFilteredVenousPressure; ///< Measured venous pressure after long (10 s) filter (in mmHg). static OVERRIDE_F32_T shortFilteredVenousPressure; ///< Measured venous pressure after short (1 s) filter (in mmHg). static OVERRIDE_F32_T tmpPressure; ///< Calculated trans-membrane pressure (in mmHg). +static OVERRIDE_F32_T artPressureLimitWindow; ///< Arterial pressure limit window (in mmHg) +static OVERRIDE_F32_T venPressureLimitWindow; ///< Venous pressure limit window (in mmHg) static OVERRIDE_F32_T tmpPressureLimitWindow; ///< TMP pressure limit window (in mmHg). static STABILIZATION_PERIODS_T pressureStabilizeTime; ///< Pressure stabilization time based on system events such as airpump, treatment param changes etc., static BOOL resetFillExemptPeriod; ///< Flag to reset the exempt period after defined time expire. @@ -259,11 +266,21 @@ tmpPressure.ovInitData = 0.0F; tmpPressure.override = OVERRIDE_RESET; - tmpPressureLimitWindow.data = TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; - tmpPressureLimitWindow.ovData = TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; - tmpPressureLimitWindow.ovInitData = TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; - tmpPressureLimitWindow.override = OVERRIDE_RESET; + artPressureLimitWindow.data = ARTERIAL_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + artPressureLimitWindow.ovData = ARTERIAL_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + artPressureLimitWindow.ovInitData = ARTERIAL_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + artPressureLimitWindow.override = OVERRIDE_RESET; + venPressureLimitWindow.data = VENOUS_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + venPressureLimitWindow.ovData = VENOUS_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + venPressureLimitWindow.ovInitData = VENOUS_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + venPressureLimitWindow.override = OVERRIDE_RESET; + + tmpPressureLimitWindow.data = TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + tmpPressureLimitWindow.ovData = TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + tmpPressureLimitWindow.ovInitData = TMP_PRESSURE_LIMIT_WINDOW_DEFAULT_MMHG; + tmpPressureLimitWindow.override = OVERRIDE_RESET; + pressureDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; pressureState = PRESSURE_WAIT_FOR_POST_STATE; pressurePostState = PRESSURE_SELF_TEST_STATE_START; @@ -503,13 +520,12 @@ currentVenousMinLimit = MAX( currentVenousMinLimit, VENOUS_PRESSURE_LIMIT_MIN_MMHG ); currentVenousMaxLimit = stableVenousPressure + venMaxOffset; currentVenousMaxLimit = MIN( currentVenousMaxLimit, VENOUS_PRESSURE_LIMIT_MAX_MMHG ); + currentTmpMinLimit = MAX( currentTmpMinLimit, TMP_PRESSURE_LIMIT_MIN_MMHG ); + currentTmpMaxLimit = MIN( currentTmpMaxLimit, TMP_PRESSURE_LIMIT_MAX_MMHG ); } else { // apply outer limits when not stable setPressureLimitsToOuterBounds(); - // TMP uses separate outer bounds - currentTmpMinLimit = (S32)TMP_PRESSURE_LIMIT_MIN_MMHG; - currentTmpMaxLimit = (S32)TMP_PRESSURE_LIMIT_MAX_MMHG; } // set flag indicating whether pressure limits are active based on current current limits state @@ -685,36 +701,12 @@ { updatePressureLimitWindows(); stabilizationStartTimeMs = getMSTimerCount(); - pressureStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; - } - break; - - // zero stabilize time for 15 mins once pressure limits adjust scenario - if ( STABILIZATION_PERIOD_OFF == pressureStabilizeTime ) - { - stabilizeTime = PRES_LIMIT_STABILIZATION_OFF; - } - - // second stage stabilization helps to re determine the pressure due to UF control change etc., - if ( bpRunning != TRUE ) - { - currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; - } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) - { - currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; - } - else if ( TRUE == didTimeout( stabilizationStartTimeMs, stabilizeTime ) ) - { - updatePressureLimitWindows(); - stabilizationStartTimeMs = getMSTimerCount(); currPresLimitsState = PRESSURE_LIMITS_STATE_STABLE; - // Reset to normal period as default. pressureStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; } break; - case PRESSURE_LIMITS_STATE_STABLE: + case PRESSURE_LIMITS_STATE_STABLE: // Pressure is re determined after every 15 minutes once and be remain in limited pressure windows. if ( bpRunning != TRUE ) { @@ -728,6 +720,7 @@ { stabilizationStartTimeMs = getMSTimerCount(); pressureStabilizeTime = STABILIZATION_PERIOD_OFF; + currPresLimitsState = PRESSURE_LIMITS_STATE_STABILIZATION; } break; @@ -1051,7 +1044,7 @@ artPressureReadingsShort[ artPressureReadingsShortIdx ] = artPres; artPressureReadingsShortTotal += artPres; artPressureReadingsShortIdx = INC_WRAP( artPressureReadingsShortIdx, 0, SIZE_OF_SHORT_ART_ROLLING_AVG - 1 ); - artPressureReadingsLongCount = INC_CAP( artPressureReadingsShortCount, SIZE_OF_SHORT_ART_ROLLING_AVG ); + artPressureReadingsShortCount = INC_CAP( artPressureReadingsShortCount, SIZE_OF_SHORT_ART_ROLLING_AVG ); shortFilteredArterialPressure.data = artPressureReadingsShortTotal / (F32)artPressureReadingsShortCount; // Long filter for venous pressure.