Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r9d8170a50fb293c76c5c1f1875ab3792c2b8fb50 -rced4d5be0d18c9b1001143206d10e09fd15f8efb --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 9d8170a50fb293c76c5c1f1875ab3792c2b8fb50) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision ced4d5be0d18c9b1001143206d10e09fd15f8efb) @@ -153,6 +153,8 @@ static OVERRIDE_F32_T venousPressure = {0.0, 0.0, 0.0, 0 }; ///< Measured venous pressure. static OVERRIDE_U32_T bloodPumpOcclusion = {0, 0, 0, 0 }; ///< Measured blood pump occlusion pressure. static PRESSURE_LIMITS_STATES_T currPresLimitsState; ///< Current pressure limits state. +static F32 arterialPressureOffset; ///< Arterial pressure sensor offset (in mmHg). +static F32 venousPressureOffset; ///< Venous pressure sensor offset (in mmHg). static S32 stableArterialPressure; ///< Arterial pressure that limit window is based on (in mmHg). static S32 stableVenousPressure; ///< Venous pressure that limit window is based on (in mmHg). static S32 currentArterialMaxLimit; ///< Maximum arterial pressure limit (in mmHg). @@ -243,6 +245,7 @@ stableArterialPressure = 0; stableVenousPressure = 0; venLowPresExemptAfterAirTrapFillTimerCtr = 0; + resetArtVenPressureOffsets(); longFilteredArterialPressure = 0.0F; shortFilteredArterialPressure = 0.0F; longFilteredVenousPressure = 0.0F; @@ -255,6 +258,34 @@ /*********************************************************************//** * @brief + * The resetArtVenPressureOffsets function resets the arterial and venous + * offsets to zero. + * @details Inputs: none + * @details Outputs: arterialPressureOffset, venousPressureOffset + * @return none + *************************************************************************/ +void resetArtVenPressureOffsets( void ) +{ + arterialPressureOffset = 0.0F; + venousPressureOffset = 0.0F; +} + +/*********************************************************************//** + * @brief + * The setArtVenPressureOffsets function sets the arterial and venous + * offsets to current readings. + * @details Inputs: none + * @details Outputs: arterialPressureOffset, venousPressureOffset + * @return none + *************************************************************************/ +void setArtVenPressureOffsets( void ) +{ + arterialPressureOffset = getMeasuredArterialPressure(); + venousPressureOffset = getMeasuredVenousPressure(); +} + +/*********************************************************************//** + * @brief * The isCartridgeLoaded function determines whether a cartridge has been * properly loaded by looking at the BP occlusion pressure sensor. * @details Inputs: BP occlusion pressure @@ -635,18 +666,23 @@ if ( ARTERIAL_PRESSURE_NORMAL_OP == artPresStatus ) { + F32 artPresPSI; + // If the arterial pressure status is normal, convert the counts to pressure in mmHg - arterialPressure.data = ( (F32)( artPres - ARTERIAL_PRESSURE_OFFSET ) * + artPresPSI = ( (F32)( artPres - ARTERIAL_PRESSURE_OFFSET ) * ( ARTERIAL_PRESSURE_MAX_PSI - ARTERIAL_PRESSURE_MIN_PSI ) / (F32)ARTERIAL_PRESSURE_SCALE ) + ARTERIAL_PRESSURE_MIN_PSI; - arterialPressure.data = arterialPressure.data * PSI_TO_MMHG; + artPresPSI = artPresPSI * PSI_TO_MMHG; + arterialPressure.data = artPresPSI - arterialPressureOffset; } if ( VENOUS_PRESSURE_NORMAL_OP == venPresStatus ) { + F32 venPresPSI; + // Convert venous pressure to PSI and then mmHg - F32 venPresPSI = ( (F32)( venPres - VENOUS_PRESSURE_OFFSET ) * ( VENOUS_PRESSURE_MAX_PSI - VENOUS_PRESSURE_MIN_PSI ) / (F32)VENOUS_PRESSURE_SCALE ) + - VENOUS_PRESSURE_MIN_PSI; - venousPressure.data = venPresPSI * PSI_TO_MMHG; + venPresPSI = ( (F32)( venPres - VENOUS_PRESSURE_OFFSET ) * ( VENOUS_PRESSURE_MAX_PSI - VENOUS_PRESSURE_MIN_PSI ) / (F32)VENOUS_PRESSURE_SCALE ) + VENOUS_PRESSURE_MIN_PSI; + venPresPSI = venPresPSI * PSI_TO_MMHG; + venousPressure.data = venPresPSI - venousPressureOffset; } // Filter inline pressure readings