Index: PersistentAlarm.c =================================================================== diff -u -r2c771c22ca9c419c1bb4869f1043b5308c562f2b -r59871c9964559b5137781af9c2eeed6bab18ef73 --- PersistentAlarm.c (.../PersistentAlarm.c) (revision 2c771c22ca9c419c1bb4869f1043b5308c562f2b) +++ PersistentAlarm.c (.../PersistentAlarm.c) (revision 59871c9964559b5137781af9c2eeed6bab18ef73) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2020-2022 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) 22-Sep-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 ) ) { @@ -278,30 +289,18 @@ * @details Outputs: fpgaPersistentAlarmGroup * @param alarmGroup which is the alarm group of the persistent alarm * (i.e. 2-wire temperature sensor) - * @param errorCount which is the FPGA error count of the sensor group * @param readCount which is the FPGA read count of the sensor group * @return none *************************************************************************/ -void checkFPGAPersistentAlarms( FPGA_PERSISTENT_ALARMS_GROUP_T group, U32 errorCount, U32 readCount ) +void checkFPGAPersistentAlarms( FPGA_PERSISTENT_ALARMS_GROUP_T group, U32 readCount ) { if ( group < NUM_OF_FPGA_SENSOR_GROUPS ) { - FPGA_ERROR_TYPE_T type = NUM_OF_FPGA_ERROR_TYPES; - BOOL isReadPersTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], readCount, FPGA_READ_ERROR ); - BOOL isErrorPersTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], errorCount, FPGA_ERROR_ERROR ); + FPGA_ERROR_TYPE_T type = FPGA_READ_ERROR; + BOOL isReadPersTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], readCount, type ); - if ( TRUE == isReadPersTrgrd ) + if ( TRUE == isReadPersTrgrd ) { - type = FPGA_READ_ERROR; - } - - if ( TRUE == isErrorPersTrgrd ) - { - type = FPGA_ERROR_ERROR; - } - - if ( ( TRUE == isReadPersTrgrd ) || ( TRUE == isErrorPersTrgrd ) ) - { SET_ALARM_WITH_2_U32_DATA( fpgaPersistentAlarmGroup[ group ].fpgaAlarm, type, group ) } }