Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r8f2b9d878195896cf41091e97630e264f11394bb -r213af8d663da48931adb07f641ebacf8d0f3b4aa --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 8f2b9d878195896cf41091e97630e264f11394bb) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 213af8d663da48931adb07f641ebacf8d0f3b4aa) @@ -21,6 +21,7 @@ #include "FPGA.h" #include "ModeTreatmentParams.h" #include "OperationModes.h" +#include "PersistentAlarm.h" #include "Switches.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" @@ -39,7 +40,7 @@ #define AIR_TRAP_FILL_TIMEOUT_MS ( 6 * MS_PER_SECOND ) ///< Air trap fill timeout period (in ms). #define AIR_PUMP_UPPER_LEVEL_PERSISTENCE ( 100 / TASK_GENERAL_INTERVAL ) ///< Persistence time for air pump operation after air trap upper level reads air. /// Persistence period for illegal level sensors fault. -static const U32 AIR_TRAP_ILLEGAL_LEVELS_PERSISTENCE = ( MS_PER_SECOND * 2 / TASK_PRIORITY_INTERVAL ); +#define AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Air trap illegal values timeout (in ms) /// Volume (in mL) of venous portion of blood circuit line. TODO - get actual volume from Systems. #define VENOUS_LINE_VOLUME_ML ( 200.0F ) @@ -70,7 +71,6 @@ static U32 fillStartTime = 0; ///< Time stamp for start of air trap fill. static U32 airPumpUpperLevelCtr = 0; ///< Timer count for air pump persistence. -static U32 airTrapIllegalLevelSensorsCtr = 0; ///< Timer counter for illegal level sensor fault. // ********** private function prototypes ********** @@ -91,7 +91,6 @@ U32 i; resetAirTrap(); - airTrapIllegalLevelSensorsCtr = 0; airTrapDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; airPumpUpperLevelCtr = 0; @@ -102,6 +101,9 @@ airTrapLevels[i].ovInitData = 0; airTrapLevels[i].override = OVERRIDE_RESET; } + + initPersistentAlarm( ALARM_ID_HD_AIR_TRAP_ILLEGAL_LEVELS, AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS, AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS ); + } /*********************************************************************//** @@ -180,6 +182,8 @@ void execAirTrapMonitor( void ) { BOOL lower, upper; + bool isAirTrapLevelsValid = FALSE; + AIR_TRAP_LEVELS_T lowerAirTrap, upperAirTrap; // Get latest level readings getFPGAAirTrapLevels( &lower, &upper ); @@ -189,27 +193,21 @@ if ( STATE_OPEN == getSwitchStatus( PUMP_TRACK_SWITCH ) ) { // If the pump track on open, zero the persistent counter to not check the air trap illegal level alarm - airTrapIllegalLevelSensorsCtr = 0; + checkPersistentAlarm( ALARM_ID_HD_AIR_TRAP_ILLEGAL_LEVELS, FALSE, 0.0, 0.0 ); } - - // Check level readings are valid - if ( ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) && - ( AIR_TRAP_LEVEL_FLUID == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ) ) ) + else { - if ( ++airTrapIllegalLevelSensorsCtr >= AIR_TRAP_ILLEGAL_LEVELS_PERSISTENCE ) - { + lowerAirTrap = getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ); + upperAirTrap = getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_UPPER ); + isAirTrapLevelsValid = ( ( AIR_TRAP_LEVEL_AIR == lowerAirTrap ) && ( AIR_TRAP_LEVEL_FLUID == upperAirTrap ) ) ? TRUE : FALSE; + #ifndef _RELEASE_ - if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ILLEGAL_AIR_TRAP_ALARM ) != SW_CONFIG_ENABLE_VALUE ) + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ILLEGAL_AIR_TRAP_ALARM ) != SW_CONFIG_ENABLE_VALUE ) #endif - { - activateAlarmNoData( ALARM_ID_HD_AIR_TRAP_ILLEGAL_LEVELS ); - } + { + checkPersistentAlarm( ALARM_ID_HD_AIR_TRAP_ILLEGAL_LEVELS, isAirTrapLevelsValid, lowerAirTrap, upperAirTrap ); } } - else - { - airTrapIllegalLevelSensorsCtr = 0; - } } /*********************************************************************//**