Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -rd27dcf1fbbc9651636f211028917a1c0702bb56a -r7611b3a8e323b688441c88f56aa114d292efd4e1 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision d27dcf1fbbc9651636f211028917a1c0702bb56a) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 7611b3a8e323b688441c88f56aa114d292efd4e1) @@ -113,10 +113,11 @@ static U32 emptySalineBagCtr = 0; ///< Timer counter for empty bag detection. -static U08 lastVenousPressureReadCtr; ///< Previous venous pressure read count. -static U08 lastBPOcclReadCtr; ///< Previous BP occlusion read count. -static U08 lastDPiOcclReadCtr; ///< Previous DPi occlusion read count. -static U08 lastDPoOcclReadCtr; ///< Previous DPo occlusion read count. +static U08 lastArterialPressureReadCtr; ///< Previous arterial pressure sensor read count. +static U08 lastVenousPressureReadCtr; ///< Previous venous pressure sensor read count. +static U08 lastBPOcclReadCtr; ///< Previous BP occlusion sensor read count. +static U08 lastDPiOcclReadCtr; ///< Previous DPi occlusion sensor read count. +static U08 lastDPoOcclReadCtr; ///< Previous DPo occlusion sensor read count. static U08 lastBPErrorCtr; ///< Previous BP error count. static U08 lastDPIErrorCtr; ///< Previous DPi error count. static U08 lastDPOErrorCtr; ///< Previous DPo error count. @@ -146,6 +147,7 @@ initPersistentAlarm( ALARM_ID_ARTERIAL_PRESSURE_HIGH, PRES_ALARM_PERSISTENCE, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_VENOUS_PRESSURE_LOW, PRES_ALARM_PERSISTENCE, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_VENOUS_PRESSURE_HIGH, PRES_ALARM_PERSISTENCE, PRES_ALARM_PERSISTENCE ); + initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); @@ -160,6 +162,7 @@ initPersistentAlarm( ALARM_ID_HD_DPI_OCCLUSION_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_DPO_OCCLUSION_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); + lastArterialPressureReadCtr = 0; lastVenousPressureReadCtr = 0; lastBPOcclReadCtr = 0; lastDPiOcclReadCtr = 0; @@ -341,7 +344,20 @@ // Convert arterial pressure to mmHg if no fault if ( 0 == artPresAlarm ) { - arterialPressure.data = ARTERIAL_PRESSURE_V_PER_BIT * ( (F32)(artPres) / ( ARTERIAL_PRESSURE_SENSITIVITY * ARTERIAL_PRESSURE_V_BIAS ) ); + U08 artReadCtr = getFPGAArterialPressureReadCounter(); + U08 artErrorCtr = getFPGAArterialPressureErrorCounter(); + + // Check for stale arterial pressure reading + if ( FALSE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR, ( lastArterialPressureReadCtr == artReadCtr || artErrorCtr > 0 ) ) ) + { + arterialPressure.data = ARTERIAL_PRESSURE_V_PER_BIT * ( (F32)(artPres) / ( ARTERIAL_PRESSURE_SENSITIVITY * ARTERIAL_PRESSURE_V_BIAS ) ); + } + else + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_ARTERIAL_PRESSURE_READ_TIMEOUT_ERROR, (U32)artErrorCtr ); + } + // Record arterial pressure sensor read counter for next time around + lastArterialPressureReadCtr = artReadCtr; } else { @@ -355,7 +371,7 @@ { activateAlarmNoData( ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR ); } - // Record venous read counter for next time around + // Record venous pressure sensor read counter for next time around lastVenousPressureReadCtr = venReadCtr; // Convert venous pressure to PSI and then mmHg venPresPSI = ( (F32)(venPres - VENOUS_PRESSURE_OFFSET) * (VENOUS_PRESSURE_MAX_PSI - VENOUS_PRESSURE_MIN_PSI) / (F32)VENOUS_PRESSURE_SCALE ) + VENOUS_PRESSURE_MIN_PSI; @@ -454,8 +470,8 @@ #ifndef DISABLE_PRESSURE_CHECKS // Check arterial pressure is in range - if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, artPres > ARTERIAL_PRESSURE_MAX_MMHG ) || - TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, artPres < ARTERIAL_PRESSURE_MIN_MMHG ) ) + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, + ( artPres > ARTERIAL_PRESSURE_MAX_MMHG || artPres < ARTERIAL_PRESSURE_MIN_MMHG ) ) ) { SET_ALARM_WITH_1_F32_DATA( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, artPres ); }