Index: PersistentAlarm.c =================================================================== diff -u -r2bd145db589fc7533cab20e3009addf58eef0dbc -rf74fbf44ae7855cb229e39278481cb9f57d6bcd8 --- PersistentAlarm.c (.../PersistentAlarm.c) (revision 2bd145db589fc7533cab20e3009addf58eef0dbc) +++ PersistentAlarm.c (.../PersistentAlarm.c) (revision f74fbf44ae7855cb229e39278481cb9f57d6bcd8) @@ -43,8 +43,6 @@ /// FPGA persistent alarm data structure typedef struct { - U32 fpgaPersistentClearPeriod; ///< FPGA persistent count limit before clear alarm - U32 fpgaPersistentTriggerPeriod; ///< FPGA persistent count limit before trigger alarm U32 fpagErrorClearedStartTime; ///< FPGA error cleared start time U32 fpgaErrorOccurredStartTime; ///< FPGA error occurred start time U32 fpgaPreviousCount; ///< FPGA previous read count @@ -55,6 +53,8 @@ typedef struct { ALARM_ID_T fpgaAlarm; ///< FPGA read alarm + U32 fpgaPersistentClearPeriod; ///< FPGA persistent count limit before clear alarm + U32 fpgaPersistentTriggerPeriod; ///< FPGA persistent count limit before trigger alarm FPGA_ALARM_DATA_T fpgaAlarmData[ NUM_OF_FPGA_ALARMS_PER_GROUP ]; } FPGA_PERSISTENT_ALARM_GROUP_T; @@ -65,7 +65,7 @@ // ********** private function prototypes ********** -static BOOL isFPGAPersistentAlarmTriggered( FPGA_ALARM_DATA_T* data, U32 fpgaCount ); +static BOOL isFPGAPersistentAlarmTriggered( FPGA_PERSISTENT_ALARM_GROUP_T* alarmGroup, U32 readOrErrorIndex, U32 fpgaCount, BOOL isThisErrorCount ); /*********************************************************************//** * @brief @@ -97,6 +97,19 @@ } } +void initFPGAPersistentAlarm( FPGA_PERSISTENT_ALARMS_GROUP_T group, ALARM_ID_T alarmIndex, U32 persistentClearPeriod, U32 persistentTriggerPeriod ) +{ + if ( ( group < NUM_OF_FPGA_SENSOR_GROUPS ) && ( alarmIndex < NUM_OF_ALARM_IDS ) ) + { + fpgaPersistentAlarmGroup[ group ].fpgaAlarm = alarmIndex; + fpgaPersistentAlarmGroup[ group ].fpgaPersistentClearPeriod = persistentClearPeriod; + fpgaPersistentAlarmGroup[ group ].fpgaPersistentTriggerPeriod = persistentTriggerPeriod; + + memset( &fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_READ_ALARM_INDEX ], 0x0, sizeof( FPGA_ALARM_DATA_T ) ); + memset( &fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_ERROR_ALARM_INDEX ], 0x0, sizeof( FPGA_ALARM_DATA_T ) ); + } +} + /*********************************************************************//** * @brief * The isPersistentAlarmTriggered function checks if the error condition has @@ -198,28 +211,38 @@ persistentAlarms[ alarmId ].errorClearedStartTime = 0; } -static BOOL isFPGAPersistentAlarmTriggered( FPGA_ALARM_DATA_T* data, U32 fpgaCount ) +static BOOL isFPGAPersistentAlarmTriggered( FPGA_PERSISTENT_ALARM_GROUP_T* alarmGroup, U32 readOrErrorIndex, U32 fpgaCount, BOOL isThisErrorCount ) { BOOL isPersistentTriggered = FALSE; + BOOL hasErrorOccured = FALSE; - if ( fpgaCount == data->fpgaPreviousCount ) + if ( TRUE == isThisErrorCount ) { - if ( TRUE == data->fpgaIsConditionClear ) + hasErrorOccured = ( alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaPreviousCount != fpgaCount ? TRUE : FALSE ); + } + else + { + hasErrorOccured = ( fpgaCount == alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaPreviousCount ? TRUE : FALSE ); + } + + if ( TRUE == hasErrorOccured ) + { + if ( TRUE == alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaIsConditionClear ) { - data->fpgaIsConditionClear = FALSE; - data->fpgaErrorOccurredStartTime = getMSTimerCount(); + alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaIsConditionClear = FALSE; + alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaErrorOccurredStartTime = getMSTimerCount(); } - else if ( TRUE == didTimeout( data->fpgaErrorOccurredStartTime, data->fpgaPersistentTriggerPeriod ) ) + else if ( TRUE == didTimeout( alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaErrorOccurredStartTime, alarmGroup->fpgaPersistentTriggerPeriod ) ) { isPersistentTriggered = TRUE; } } else { - data->fpgaIsConditionClear = TRUE; + alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaIsConditionClear = TRUE; } - data->fpgaPreviousCount = fpgaCount; + alarmGroup->fpgaAlarmData[ readOrErrorIndex ].fpgaPreviousCount = fpgaCount; return isPersistentTriggered; } @@ -228,11 +251,23 @@ { if ( group < NUM_OF_FPGA_SENSOR_GROUPS ) { - FPGA_ALARM_DATA_T readData = fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_READ_ALARM_INDEX ]; - FPGA_ALARM_DATA_T errorData = fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_ERROR_ALARM_INDEX ]; + BOOL isErrorPersistentTriggered = FALSE; + FPGA_ALARM_DATA_T readData = fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_READ_ALARM_INDEX ]; + FPGA_ALARM_DATA_T errorData = fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_ERROR_ALARM_INDEX ]; + BOOL isReadPersistentTriggered = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], FPGA_READ_ALARM_INDEX, readCount, FALSE ); - if ( readCount == readData.fpgaPreviousCount ) + if ( readData.fpgaPreviousCount != readCount ) { + isErrorPersistentTriggered = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], FPGA_ERROR_ALARM_INDEX, errorCount, TRUE ); + } + + if ( ( TRUE == isReadPersistentTriggered ) || ( TRUE == isErrorPersistentTriggered ) ) + { + SET_ALARM_WITH_1_U32_DATA( fpgaPersistentAlarmGroup[ group ].fpgaAlarm, sensorIndex ); + } + + /*if ( readCount == readData.fpgaPreviousCount ) + { if ( TRUE == readData.fpgaIsConditionClear ) { readData.fpgaErrorOccurredStartTime = getMSTimerCount(); @@ -266,7 +301,7 @@ } readData.fpgaPreviousCount = readCount; - errorData.fpgaPreviousCount = errorCount; + errorData.fpgaPreviousCount = errorCount;*/ } else