Index: firmware/App/Monitors/Pressures.c =================================================================== diff -u -re69d7ce1c9d88695e25e8ea94529dffdd8592434 -re130387b9e8ed54237a6e4c3020222060c2be5a9 --- firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision e69d7ce1c9d88695e25e8ea94529dffdd8592434) +++ firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision e130387b9e8ed54237a6e4c3020222060c2be5a9) @@ -18,6 +18,7 @@ #include "AirPump.h" #include "AlarmMgmtTD.h" //#include "BloodFlow.h" +#include "DDInterface.h" #include "FpgaTD.h" #include "Messaging.h" //#include "ModeTreatment.h" @@ -87,7 +88,7 @@ #define HIGH_VEN_PRES_ALARM_PERSISTENCE 500 ///< Alarm persistence period for high venous pressure alarm #define PRES_OCCL_ALARM_PERSISTENCE ( 3 * MS_PER_SECOND ) ///< Alarm persistence period for occlusion alarms #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 +#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 ) @@ -134,10 +135,11 @@ static S32 currentVenousMinLimit; ///< Minimum venous pressure limit (in mmHg). static BOOL pressureLimitsActive; ///< Flag indicates whether arterial and venous pressure alarm limits are active. static U32 stabilizationStartTimeMs; ///< Timestamp taken when pressure limit stabilization began (ms). -static F32 longFilteredArterialPressure; ///< Measured arterial pressure after long (10 s) filter. -static OVERRIDE_F32_T shortFilteredArterialPressure; ///< Measured arterial pressure after short (1 s) filter. -static F32 longFilteredVenousPressure; ///< Measured venous pressure after long (10 s) filter. -static OVERRIDE_F32_T shortFilteredVenousPressure; ///< Measured venous pressure after short (1 s) filter. +static F32 longFilteredArterialPressure; ///< Measured arterial pressure after long (10 s) filter (in mmHg). +static OVERRIDE_F32_T shortFilteredArterialPressure; ///< Measured arterial pressure after short (1 s) filter (in mmHg). +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 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. static BOOL lowVenousPressureExemptCheck; ///< low venous pressure exempt check flag based on the air trap valve status @@ -224,6 +226,10 @@ shortFilteredVenousPressure.ovData = 0.0F; shortFilteredVenousPressure.ovInitData = 0.0F; shortFilteredVenousPressure.override = OVERRIDE_RESET; + tmpPressure.data = 0.0F; + tmpPressure.ovData = 0.0F; + tmpPressure.ovInitData = 0.0F; + tmpPressure.override = OVERRIDE_RESET; pressureDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; pressureState = PRESSURE_WAIT_FOR_POST_STATE; @@ -526,15 +532,20 @@ // Filter inline pressure readings filterInlinePressureReadings( fpgaArtPres, fpgaVenPres ); + // Get latest dialysate pressure so we can calculate TMP + tmpPressure.data = getLongFilteredVenousPressure() - getDialysatePressure(); + // Handle pressure limits state machine execPressureLimits(); // Set arterial/venous pressure limits according to current pressure limits state determineArtVenPressureLimits(); // Check in-line pressures are in range +#ifndef TEST_NO_PRESSURE_CHECKS checkArterialPressureInRange(); checkVenousPressureInRange(); +#endif return result; } @@ -581,7 +592,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( TREATMENT_DIALYSIS_STATE == currTxState ) || ( TREATMENT_STOP_STATE == currTxState ) ) + else if ( ( TREATMENT_DIALYSIS_STATE == currTxState ) || ( TREATMENT_PAUSED_STATE == currTxState ) ) { stabilizationStartTimeMs = getMSTimerCount(); pressureStabilizeTime = USE_NORMAL_STABILIZATION_PERIOD; @@ -609,7 +620,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_STOP_STATE ) ) + else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } @@ -639,7 +650,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_STOP_STATE ) ) + else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } @@ -659,7 +670,7 @@ { currPresLimitsState = PRESSURE_LIMITS_STATE_IDLE; } - else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_STOP_STATE ) ) + else if ( ( currTxState != TREATMENT_DIALYSIS_STATE ) && ( currTxState != TREATMENT_PAUSED_STATE ) ) { currPresLimitsState = PRESSURE_LIMITS_STATE_WIDE; } @@ -747,10 +758,10 @@ static void checkVenousPressureInRange( void ) { F32 venPres = getFilteredVenousPressure(); - OPN_CLS_STATE_T airTrapValveState = STATE_CLOSED; //getValveAirTrapStatus(); + VALVE_3WAY_STATE_T airTrapValveState = VALVE_3WAY_COMMON_TO_CLOSED_STATE; //getValveAirTrapStatus(); // track time since last air trap fill - if ( ( STATE_OPEN == airTrapValveState ) && ( TRUE == resetFillExemptPeriod ) ) + if ( ( VALVE_3WAY_COMMON_TO_OPEN_STATE == airTrapValveState ) && ( TRUE == resetFillExemptPeriod ) ) { venLowPresExemptAfterAirTrapFillTimerCtr = 0; resetFillExemptPeriod = FALSE; @@ -797,11 +808,13 @@ { if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_TD_VENOUS_PRESSURE_LOW, venPresLow ) ) { +#ifndef TEST_UI_ONLY SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_VENOUS_PRESSURE_LOW, venPres, (F32)currentVenousMinLimit ); +#endif } } // during reset period, if airTrapValve open, still alarm needs to be raised , hence persistence clearance should happen before or after reset period. - if ( ( airTrapValveState == STATE_OPEN ) && + if ( ( airTrapValveState == VALVE_3WAY_COMMON_TO_OPEN_STATE ) && ( ( venLowPresExemptAfterAirTrapFillTimerCtr < exemptPeriod ) || ( venLowPresExemptAfterAirTrapFillTimerCtr > minimumMonitoringWindow ) ) ) { @@ -889,6 +902,18 @@ /*********************************************************************//** * @brief + * The getTMPPressure function gets the calculated trans-membrane pressure. + * @details \b Inputs: tmpPressure + * @details \b Outputs: none + * @return the current calculated TMP (in mmHg). + *************************************************************************/ +F32 getTMPPressure( void ) +{ + return getF32OverrideValue( &tmpPressure ); +} + +/*********************************************************************//** + * @brief * The filterInlinePressureReadings function adds a new arterial and venous * pressure sample to the filters. * @details \b Inputs: none @@ -967,14 +992,17 @@ PRESSURE_DATA_T data; data.h2Pressure = getFilteredArterialPressure(); - data.h14Pressure = getFilteredVenousPressure(); - data.presLimitState = currPresLimitsState; - data.h2MinLimit = currentArterialMinLimit; - data.h2MaxLimit = currentArterialMaxLimit; - data.h14MinLimit = currentVenousMinLimit; - data.h14MaxLimit = currentVenousMaxLimit; + data.h14Pressure = getFilteredVenousPressure(); + data.presLimitState = currPresLimitsState; + data.h2MinLimit = currentArterialMinLimit; + data.h2MaxLimit = currentArterialMaxLimit; + data.h14MinLimit = currentVenousMinLimit; + data.h14MaxLimit = currentVenousMaxLimit; data.h2LongFilterPres = longFilteredArterialPressure; - data.h14LongFilterPres = longFilteredVenousPressure; + data.h14LongFilterPres = longFilteredVenousPressure; + data.tmpPressure = getTMPPressure(); + data.tmpMinLimit = -400.0F; // TODO - use windowed min/max values based on user set params when implemented + data.tmpMaxLimit = 100.0F; broadcastData( MSG_ID_TD_PRESSURE_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( PRESSURE_DATA_T ) ); pressureDataPublicationTimerCounter = 0; @@ -1072,4 +1100,21 @@ return result; } +/*********************************************************************//** + * @brief + * The testTMPOverride function overrides the TMP pressure reported by this + * unit. + * @details \b Inputs: none + * @details \b Outputs: tmpPressure + * @param message Override message from Dialin which includes the value to + * override the TMP pressure to. + * @return TRUE if override request is successful, FALSE if not + *************************************************************************/ +BOOL testTMPOverride( MESSAGE_T *message ) +{ + BOOL result = f32Override( message, &tmpPressure ); + + return result; +} + /**@}*/