Index: firmware/App/Monitors/Pressures.c =================================================================== diff -u -r285b5d82539c96524c93703d52a66fff76fb64fc -rf6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493 --- firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision 285b5d82539c96524c93703d52a66fff76fb64fc) +++ firmware/App/Monitors/Pressures.c (.../Pressures.c) (revision f6aa1ffddb85a233371e3e7e4d7c0c0eb3e61493) @@ -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" @@ -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,6 +532,9 @@ // 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(); @@ -889,6 +898,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 +988,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 +1096,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; +} + /**@}*/