Index: PersistentAlarm.c =================================================================== diff -u -raf6827ea592a5fe9f3d85e41c3749ac31fe9c911 -r59871c9964559b5137781af9c2eeed6bab18ef73 --- PersistentAlarm.c (.../PersistentAlarm.c) (revision af6827ea592a5fe9f3d85e41c3749ac31fe9c911) +++ PersistentAlarm.c (.../PersistentAlarm.c) (revision 59871c9964559b5137781af9c2eeed6bab18ef73) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2020-2023 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2024 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file PersistentAlarm.c * -* @author (last) Dara Navaei -* @date (last) 12-Oct-2022 +* @author (last) Sean Nash +* @date (last) 11-Aug-2023 * * @author (original) Quang Nguyen * @date (original) 17-Aug-2020 @@ -46,6 +46,7 @@ U32 persistentTriggerPeriod; ///< Persistent count limit before trigger alarm. U32 errorClearedStartTime; ///< Error cleared start time. U32 errorOccurredStartTime; ///< Error occurred start time. + BOOL alarmActive; ///< State of alarm last time alarm checked. } PERSISTENT_ALARM_DATA_T; /// FPGA persistent alarm data structure @@ -94,6 +95,7 @@ persistentAlarms[ alarmId ].persistentTriggerPeriod = persistentTriggerPeriod; persistentAlarms[ alarmId ].errorClearedStartTime = 0U; persistentAlarms[ alarmId ].errorOccurredStartTime = 0U; + persistentAlarms[ alarmId ].alarmActive = FALSE; } else { @@ -154,6 +156,15 @@ if ( alarmId < NUM_OF_ALARM_IDS ) { + BOOL alarmIsActive = isAlarmActive( alarmId ); + + // Reset persistence if alarm was just cleared + if ( ( FALSE == alarmIsActive ) && ( TRUE == persistentAlarms[ alarmId ].alarmActive ) ) + { + persistentAlarms[ alarmId ].errorOccurredStartTime = 0; + } + persistentAlarms[ alarmId ].alarmActive = alarmIsActive; // remember latest alarm state for next time + // Update start time when error occurs for the first time if ( ( TRUE == isErrorOccurred ) && ( 0 == persistentAlarms[ alarmId ].errorOccurredStartTime ) ) {