Index: PersistentAlarm.c =================================================================== diff -u -rffd3ac3c3107860b53463bc5336bbd3ab69477a4 -r4c8f5e8c8e26bb5c84859b4c846f3b583aae55fe --- PersistentAlarm.c (.../PersistentAlarm.c) (revision ffd3ac3c3107860b53463bc5336bbd3ab69477a4) +++ PersistentAlarm.c (.../PersistentAlarm.c) (revision 4c8f5e8c8e26bb5c84859b4c846f3b583aae55fe) @@ -26,51 +26,51 @@ // ********** private definitions ********** -#define NUM_OF_FPGA_ALARMS_PER_GROUP 2 -#define FPGA_READ_ALARM_INDEX 0 -#define FPGA_ERROR_ALARM_INDEX 1 +#define NUM_OF_FPGA_ALARMS_PER_GROUP 2 ///< Number of FPGA alarms per group. +#define FPGA_READ_ALARM_INDEX 0 ///< FPGA read alarm index number. +#define FPGA_ERROR_ALARM_INDEX 1 ///< FPGA error alarm index number. /// FPGA persistent alarm types typedef enum { - FPGA_READ_ERROR = 0, - FPGA_ERROR_ERROR, - FPGA_NOT_UPDATING_ERROR, - NUM_OF_FPGA_ERROR_TYPES + FPGA_READ_ERROR = 0, ///< FPGA read error type. + FPGA_ERROR_ERROR, ///< FPGA error error type. + FPGA_NOT_UPDATING_ERROR, ///< FPGA not updating error type. + NUM_OF_FPGA_ERROR_TYPES ///< Number of FPGA error types. } FPGA_ERROR_TYPE_T; /// Persistent alarm structure typedef struct { - ALARM_ID_T alarm; ///< Alarm ID - U32 persistentClearPeriod; ///< Persistent count limit before clear alarm - U32 persistentTriggerPeriod; ///< Persistent count limit before trigger alarm - U32 errorClearedStartTime; ///< Error cleared start time - U32 errorOccurredStartTime; ///< Error occurred start time + ALARM_ID_T alarm; ///< Alarm ID. + U32 persistentClearPeriod; ///< Persistent count limit before clear alarm. + U32 persistentTriggerPeriod; ///< Persistent count limit before trigger alarm. + U32 errorClearedStartTime; ///< Error cleared start time. + U32 errorOccurredStartTime; ///< Error occurred start time. } PERSISTENT_ALARM_DATA_T; /// FPGA persistent alarm data structure typedef struct { - U32 fpagErrorClearedStartTime; ///< FPGA error cleared start time - U32 fpgaErrorOccurredStartTime; ///< FPGA error occurred start time - U32 fpgaPreviousCount; ///< FPGA previous read count - BOOL fpgaIsConditionClear; ///< FPGA is persistent condition clear + U32 fpagErrorClearedStartTime; ///< FPGA error cleared start time. + U32 fpgaErrorOccurredStartTime; ///< FPGA error occurred start time. + U32 fpgaPreviousCount; ///< FPGA previous read count. + BOOL fpgaIsConditionClear; ///< FPGA is persistent condition clear. } FPGA_ALARM_DATA_T; /// FPGA persistent alarm structure 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_ERROR_TYPES ]; + 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_ERROR_TYPES ]; ///< FPGA persistent alarm data. } FPGA_PERSISTENT_ALARM_GROUP_T; // ********** private data ********** -static PERSISTENT_ALARM_DATA_T persistentAlarms[ NUM_OF_ALARM_IDS ]; ///< Array of persistent alarm structure -static FPGA_PERSISTENT_ALARM_GROUP_T fpgaPersistentAlarmGroup[ NUM_OF_FPGA_SENSOR_GROUPS ]; +static PERSISTENT_ALARM_DATA_T persistentAlarms[ NUM_OF_ALARM_IDS ]; ///< Array of persistent alarm structure. +static FPGA_PERSISTENT_ALARM_GROUP_T fpgaPersistentAlarmGroup[ NUM_OF_FPGA_SENSOR_GROUPS ]; ///< FPGA persistent alarm group. // ********** private function prototypes ********** @@ -106,6 +106,19 @@ } } +/*********************************************************************//** + * @brief + * The initFPGAPersistentAlarm function initializes the FPGA persistent alarm + * when the alarm count lower than maximum persistent alarm allowed and the FPGA + * sensor group is less than the maximum allowed sensor group. + * @details Inputs: none + * @details Outputs: fpgaPersistentAlarmGroup + * @param group which is the FPGA persistent alarm group + * @param alarmId Alarm id + * @param persistentClearPeriod Persistent period limit before clear alarm (in ms) + * @param persistentTriggerPeriod Persistent period limit before trigger alarm (in ms) + * @return none + *************************************************************************/ 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 ) ) @@ -252,6 +265,51 @@ /*********************************************************************//** * @brief + * The checkFPGAPersistentAlarms function checks the FPGA persistent alarm + * status of the provided FPGA persistent alarm group. + * @details Inputs: fpgaPersistentAlarmGroup + * @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 ) +{ + if ( group < NUM_OF_FPGA_SENSOR_GROUPS ) + { + FPGA_ERROR_TYPE_T type = NUM_OF_FPGA_ERROR_TYPES; + BOOL isReadPersTrgrd = FALSE; + BOOL isErroPersTrgrd = FALSE; + + isReadPersTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], readCount, FPGA_READ_ERROR ); + + if ( TRUE == isReadPersTrgrd ) + { + type = FPGA_READ_ERROR; + } + + isErroPersTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], errorCount, FPGA_ERROR_ERROR ); + + if ( TRUE == isErroPersTrgrd ) + { + type = FPGA_ERROR_ERROR; + } + + if ( ( TRUE == isReadPersTrgrd ) || ( TRUE == isErroPersTrgrd ) ) + { + SET_ALARM_WITH_2_U32_DATA( fpgaPersistentAlarmGroup[ group ].fpgaAlarm, type, group ); + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_FPGA_SENSOR_GROUP_SELECTED, (U32)group ); + } +} + +/*********************************************************************//** + * @brief * The isFPGAPersistentAlarmTriggered function checks whether persistent alarm * has been triggered or not. * @details Inputs: alarmGroup @@ -278,6 +336,7 @@ break; case FPGA_NOT_UPDATING_ERROR: + hasErrorOccured = TRUE; break; } @@ -303,52 +362,4 @@ return isPersistentTriggered; } -/*********************************************************************//** - * @brief - * The checkFPGAPersistentAlarms function checks the FPGA persistent alarm - * status of the provided FPGA persistent alarm group. - * @details Inputs: fpgaPersistentAlarmGroup - * @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 ) -{ - if ( group < NUM_OF_FPGA_SENSOR_GROUPS ) - { - FPGA_ERROR_TYPE_T type = NUM_OF_FPGA_ERROR_TYPES; - BOOL isPersistenceTrgrd = FALSE; - FPGA_ALARM_DATA_T readData = fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_READ_ERROR ]; - FPGA_ALARM_DATA_T errorData = fpgaPersistentAlarmGroup[ group ].fpgaAlarmData[ FPGA_ERROR_ERROR ]; - - if ( ( readCount == readData.fpgaPreviousCount ) && ( errorCount == errorData.fpgaPreviousCount ) ) - { - type = FPGA_NOT_UPDATING_ERROR; - isPersistenceTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], readCount, FPGA_NOT_UPDATING_ERROR ); - } - else if ( readData.fpgaPreviousCount != readCount ) - { - type = FPGA_READ_ERROR; - isPersistenceTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], readCount, FPGA_READ_ERROR ); - } - else if ( errorData.fpgaPreviousCount != errorCount ) - { - type = FPGA_ERROR_ERROR; - isPersistenceTrgrd = isFPGAPersistentAlarmTriggered( &fpgaPersistentAlarmGroup[ group ], errorCount, FPGA_ERROR_ERROR ); - } - - if ( TRUE == isPersistenceTrgrd ) - { - SET_ALARM_WITH_2_U32_DATA( fpgaPersistentAlarmGroup[ group ].fpgaAlarm, type, group ); - } - } - else - { - // TODO software fault - } -} - /**@}*/