Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r487d3524cbf3b50dad1308fc1f68b733cc00c4cd -r727f30438c094ec62abe1fad1f5a8962cd304a4d --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 487d3524cbf3b50dad1308fc1f68b733cc00c4cd) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 727f30438c094ec62abe1fad1f5a8962cd304a4d) @@ -152,6 +152,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). @@ -242,6 +244,7 @@ stableArterialPressure = 0; stableVenousPressure = 0; venLowPresExemptAfterAirTrapFillTimerCtr = 0; + resetArtVenPressureOffsets(); longFilteredArterialPressure = 0.0F; shortFilteredArterialPressure = 0.0F; longFilteredVenousPressure = 0.0F; @@ -254,6 +257,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 @@ -634,18 +665,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