Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -rfa1a1b4206b3a917f93262bea47140a8a7d1afe3 -rc3c983b0354ac3e1dde2ed705a5874f5c1c30e30 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision fa1a1b4206b3a917f93262bea47140a8a7d1afe3) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision c3c983b0354ac3e1dde2ed705a5874f5c1c30e30) @@ -267,6 +267,13 @@ if ( ( FALSE == alarmIsActive[ alarm ] ) || ( ( FALSE == alarmIsDetected[ alarm ] ) && ( FALSE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) ) ) { + // If alarms are silenced and this new alarm is of higher or same priority, end silence due to new alarm + if ( ( ALARM_TABLE[ alarm ].alarmPriority >= ALARM_TABLE[ alarmStatus.alarmTop ].alarmPriority ) || + ( ( ALARM_TABLE[ alarm ].alarmPriority == ALARM_TABLE[ alarmStatus.alarmTop ].alarmPriority ) && + ( ALARM_RANK_TABLE[ alarm ].alarmSubRank < ALARM_RANK_TABLE[ alarmStatus.alarmTop ].alarmSubRank ) ) ) + { + alarmStatus.alarmsSilenced = FALSE; + } // If alarm status was that no alarms currently active, set this alarm as top alarm until status formally updated later if ( ALARM_ID_NO_ALARM == alarmStatus.alarmTop ) { @@ -277,8 +284,6 @@ { alarmStatus.stop = TRUE; } - // If alarms silenced, end silence due to new alarm - alarmStatus.alarmsSilenced = FALSE; // If alarm is a fault (and not in service mode), request transition to fault mode if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsFault ) && ( getCurrentOperationMode() != MODE_SERV ) ) {