Index: PersistentAlarm.c =================================================================== diff -u -r9f228dce073e260610bdf89eae3a9e651d27e04e -rb5fa411bf2daca8d0a7f4bd39a0c26264143c449 --- PersistentAlarm.c (.../PersistentAlarm.c) (revision 9f228dce073e260610bdf89eae3a9e651d27e04e) +++ PersistentAlarm.c (.../PersistentAlarm.c) (revision b5fa411bf2daca8d0a7f4bd39a0c26264143c449) @@ -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 ) ) {