Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r714e5bc990074b9b73a46af011bf7204f0d5d5e1 -rf237976ac5eb469200dfd547252720e6ea7211c4 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 714e5bc990074b9b73a46af011bf7204f0d5d5e1) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision f237976ac5eb469200dfd547252720e6ea7211c4) @@ -15,7 +15,8 @@ * ***************************************************************************/ -#include "PresOccl.h" +#include "PresOccl.h" +#include "AirPump.h" #include "AlarmMgmt.h" #include "FPGA.h" #include "ModeTreatmentParams.h" @@ -50,6 +51,7 @@ #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). +#define VENOUS_OFFSET_WITH_AIRPUMP_MMHG ( 150.0F ) ///< Value to increase venous pressure high limit alarm when air pump is operating. #define ARTERIAL_PRESSURE_OFFSET ( 1638 ) ///< Offset for 14-bit arterial pressure sensor reading. #define ARTERIAL_PRESSURE_SCALE ( 14745 - VENOUS_PRESSURE_OFFSET ) ///< Scale for arterial pressure sensor. @@ -95,7 +97,8 @@ static const U32 EMPTY_SALINE_BAG_PERSISTENCE = ( 250 / TASK_GENERAL_INTERVAL ); ///< Time that saline bag looks empty before saying it is empty. #define PRES_ALARM_PERSISTENCE ( 1 * MS_PER_SECOND ) ///< Alarm persistence period for pressure alarms. -#define VEN_OCCL_ALARM_PERSISTENCE 100 ///< Alarm persistence period for venous occlusion alarm. +#define VEN_OCCL_ALARM_PERSISTENCE 100 ///< Alarm persistence period for venous occlusion alarm. +#define AIR_PUMP_TOLERANCE_TIMEOUT_MS (1 * MS_PER_SECOND ) ///< Time to allow increased maximum venous high limit /// Measured arterial pressure is filtered w/ 10 second moving average for pressure compensation of flow. #define SIZE_OF_LONG_ART_ROLLING_AVG ( ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) * 10 ) @@ -143,6 +146,8 @@ static F32 shortFilteredArterialPressure; ///< Measured arterial pressure after short (1 s) filter. static F32 shortFilteredVenousPressure; ///< Measured venous pressure after short (1 s) filter. +static U32 airPumpOpenToleranceTimer; ///< Timer for increased maximum venous high limit. + static U32 bloodPumpOcclusionAfterCartridgeInstall; ///< Measured blood pump occlusion reading taken after cartridge install. static U32 emptySalineBagCtr = 0; ///< Timer counter for empty bag detection. @@ -221,6 +226,7 @@ presOcclDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; presOcclState = PRESSURE_WAIT_FOR_POST_STATE; presOcclPostState = PRESSURE_SELF_TEST_STATE_START; + airPumpOpenToleranceTimer = 0; #ifndef _RELEASE_ if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_PRESSURE_CHECKS ) != SW_CONFIG_ENABLE_VALUE ) @@ -564,6 +570,34 @@ venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); } +#ifndef _RELEASE_ + if ( SW_CONFIG_DISABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_AIR_PUMP ) ) +#endif + { + + if ( AIR_PUMP_STATE_ON == getAirPumpState() ) + { + venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ) + VENOUS_OFFSET_WITH_AIRPUMP_MMHG; + airPumpOpenToleranceTimer = getMSTimerCount(); + } + + else // air pump is off. + { + + if ( airPumpOpenToleranceTimer > 0 ) + { + venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ) + VENOUS_OFFSET_WITH_AIRPUMP_MMHG; + + if ( TRUE == didTimeout( airPumpOpenToleranceTimer, AIR_PUMP_TOLERANCE_TIMEOUT_MS ) ) + { + venHighLimit = (F32)getS32TreatmentParamUpperRangeLimit( TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT ); + airPumpOpenToleranceTimer = 0; + } + } + + } + } + // Cannot monitor for low venous pressure while venting air trap if ( getValveAirTrapStatus() != STATE_OPEN ) {