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 ); } Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r40b37059da0ecd27dc9beb48614f6f3869d18732 -r7611b3a8e323b688441c88f56aa114d292efd4e1 --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 40b37059da0ecd27dc9beb48614f6f3869d18732) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision 7611b3a8e323b688441c88f56aa114d292efd4e1) @@ -1611,6 +1611,32 @@ /*********************************************************************//** * @brief + * The getFPGAArterialPressureReadCounter function gets the latest arterial + * pressure sensor read counter. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return last arterial pressure sensor read counter + *************************************************************************/ +U08 getFPGAArterialPressureReadCounter( void ) +{ + return fpgaSensorReadings.adc1SequenceCount; +} + +/*********************************************************************//** + * @brief + * The getFPGAArterialPressureErrorCounter function gets the latest arterial + * pressure sensor error counter. + * @details Inputs: fpgaSensorReadings + * @details Outputs: none + * @return last arterial pressure sensor error counter + *************************************************************************/ +U08 getFPGAArterialPressureErrorCounter( void ) +{ + return fpgaSensorReadings.adc1ErrorCount; +} + +/*********************************************************************//** + * @brief * The getFPGAVenousPressure function gets the latest venous pressure reading. * The high 2 bits are status bits: 00=ok, 01=cmd mode, 10=stale data, 11=diag * The low 14 bits are data. Zero is at 1638. Values above are positive, Index: firmware/App/Services/FPGA.h =================================================================== diff -u -r40b37059da0ecd27dc9beb48614f6f3869d18732 -r7611b3a8e323b688441c88f56aa114d292efd4e1 --- firmware/App/Services/FPGA.h (.../FPGA.h) (revision 40b37059da0ecd27dc9beb48614f6f3869d18732) +++ firmware/App/Services/FPGA.h (.../FPGA.h) (revision 7611b3a8e323b688441c88f56aa114d292efd4e1) @@ -83,6 +83,8 @@ U08 getFPGADialOutPumpHallSensorStatus( void ); U32 getFPGAArterialPressure( void ); +U08 getFPGAArterialPressureReadCounter( void ); +U08 getFPGAArterialPressureErrorCounter( void ); U16 getFPGAVenousPressure( void ); F32 getFPGAVenousPressureTemperature( void ); U08 getFPGAVenousPressureReadCounter( void );