Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -r0bb3fe3f34c02bd19c36aff2b98876e46a2ad177 -r6d49cf62d68a054a750989677793f4d1de42b847 --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 0bb3fe3f34c02bd19c36aff2b98876e46a2ad177) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision 6d49cf62d68a054a750989677793f4d1de42b847) @@ -42,10 +42,10 @@ #define AIR_TRAP_FILL_TIMEOUT_MS ( 10 * MS_PER_SECOND ) ///< Air trap fill timeout period (in ms). #define AIR_PUMP_ON_DELAY_TIME_MS ( 10 * MS_PER_SECOND ) ///< Delay between air pump On (in ms). #define AIR_PUMP_ON_STOP_TIME_MIN_MS 200 ///< Stop air Pump time. -#define AIR_PUMP_ON_ERROR_MAX_CNT 6 ///< Maximum number of air pump on events within time window before alarm triggered. Do not exceed MAX_TIME_WINDOWED_COUNT. -#define AIR_PUMP_ON_ERROR_TIME_WIN_MS ( 60 * MS_PER_SECOND ) ///< Time window for Air Pump on count error. +#define AIR_TRAP_ACTIVITY_MAX_COUNT 5 ///< Maximum number of air trap events (fills and air pump activations) within time window before alarm triggered. +#define AIR_TRAP_ACTIVITY_TIME_WIN_MS ( 60 * MS_PER_SECOND ) ///< Time window to monitor for too many air trap events. #define AIR_TRAP_LEVEL_DEBOUNCE_TIME_MS ( 400 ) ///< Air trap level sensor debounce time -/// Persistence period for illegal level sensors fault. +// Persistence period for illegal level sensors fault. #define AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS ( 2 * MS_PER_SECOND ) ///< Air trap illegal values timeout (in ms) #define AIR_TRAP_UPPER_LEVEL_FLUID_TIMEOUT_MS ( 60 * MS_PER_SECOND ) ///< Air trap upper level fluid timeout in milliseconds. @@ -124,6 +124,7 @@ initPersistentAlarm( ALARM_ID_HD_AIR_TRAP_ILLEGAL_LEVELS, AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS, AIR_TRAP_ILLEGAL_LEVELS_TIMEOUT_MS ); initPersistentAlarm( ALARM_ID_HD_AIR_TRAP_UPPER_LEVEL_FLUID_TIME_OUT, 0, AIR_TRAP_UPPER_LEVEL_FLUID_TIMEOUT_MS ); + initTimeWindowedCount( TIME_WINDOWED_COUNT_AIRTRAP_TOO_FREQ_ALARM, AIR_TRAP_ACTIVITY_MAX_COUNT, AIR_TRAP_ACTIVITY_TIME_WIN_MS ); } /*********************************************************************//** @@ -446,9 +447,17 @@ if ( ( AIR_PUMP_STATE_OFF == getAirPumpState() ) && ( TRUE == didTimeout( airPumpOnDelayStartTime, AIR_PUMP_ON_DELAY_TIME_MS ) ) ) { - setAirPumpState( AIR_PUMP_STATE_ON ); - stopAirPumpStartTime = getMSTimerCount(); - signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); + // Check air trap activity (fills/air pump activations) too frequent + if ( TRUE == incTimeWindowedCount( TIME_WINDOWED_COUNT_AIRTRAP_TOO_FREQ_ALARM ) ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_AIR_TRAP_ACTIVITY_TOO_FREQUENT, TIME_WINDOWED_COUNT_BATT_COMM_ERROR ); + } + else + { + setAirPumpState( AIR_PUMP_STATE_ON ); + stopAirPumpStartTime = getMSTimerCount(); + signalInitiatePressureStabilization( USE_SHORT_STABILIZATION_PERIOD ); + } } }