/**********************************************************************//** * * Copyright (c) 2019-2020 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 AlarmMgmt.h * * @date 07-Nov-2019 * @author S. Nash * * @brief header file for Alarm Management service module. * **************************************************************************/ #ifndef __ALARM_MGMT_H__ #define __ALARM_MGMT_H__ #include "DGCommon.h" /** * @defgroup AlarmManagement AlarmManagement * @brief Alarm Management service module. Provides general alarm management \n * functionality including support functions for triggering and clearing \n * specific alarms. * * @addtogroup AlarmManagement * @{ */ // ********** public definitions ********** #include "AlarmDefs.h" /// Alarm data types list. typedef enum Alarm_Data_Types { ALARM_DATA_TYPE_NONE = 0, ///< No data given. ALARM_DATA_TYPE_U32 = 1, ///< Alarm data is unsigned 32-bit integer type. ALARM_DATA_TYPE_S32 = 2, ///< Alarm data is signed 32-bit integer type. ALARM_DATA_TYPE_F32 = 3, ///< Alarm data is 32-bit floating point type. ALARM_DATA_TYPE_BOOL = 4, ///< Alarm data is 32-bit boolean type. NUM_OF_ALARM_DATA_TYPES ///< Total number of alarm data types. } ALARM_DATA_TYPES_T; #pragma pack(push,4) /// Record structure for unsigned integer alarm data. typedef struct { U32 data; ///< Alarm data of unsigned integer type. } ALARM_DATA_U32_T; /// Record structure for signed integer alarm data. typedef struct { S32 data; ///< Alarm data of signed integer type. } ALARM_DATA_S32_T; /// Record structure for floating point alarm data. typedef struct { F32 data; ///< Alarm data of floating point type. } ALARM_DATA_F32_T; /// Record structure for boolean alarm data. typedef struct { BOOL data; ///< Alarm data of boolean type. } ALARM_DATA_BOOL_T; /// Record structure for alarm data of any supported type. typedef union { ALARM_DATA_U32_T uInt; ///< Alarm data of unsigned integer type. ALARM_DATA_S32_T sInt; ///< Alarm data of signed integer type. ALARM_DATA_F32_T flt; ///< Alarm data of floating point type. ALARM_DATA_BOOL_T bln; ///< Alarm data of boolean type. } ALARM_DATAS_T; /// Record structure for alarm data including the data type to aid in interpretation. typedef struct { ALARM_DATA_TYPES_T dataType; ///< The type of alarm data provided. ALARM_DATAS_T data; ///< The alarm data of specified type. } ALARM_DATA_T; #pragma pack(pop) // Listing of specific software faults for logging purposes. typedef enum { SW_FAULT_ID_NONE = 0, SW_FAULT_ID_INT_ADC_DATA_OVERRUN, SW_FAULT_ID_INT_ADC_INVALID_CHANNEL_REQUESTED, SW_FAULT_ID_MODE_INIT_POST_INVALID_POST_STATE, SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, SW_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_CLEAR, SW_FAULT_ID_COMM_BUFFERS_ADD_TOO_MUCH_DATA, SW_FAULT_ID_COMM_BUFFERS_ADD_INVALID_BUFFER, SW_FAULT_ID_COMM_BUFFERS_GET_INVALID_BUFFER, SW_FAULT_ID_COMM_BUFFERS_PEEK_INVALID_BUFFER, SW_FAULT_ID_COMM_BUFFERS_COUNT_INVALID_BUFFER, SW_FAULT_ID_FPGA_INVALID_IN_STATE, SW_FAULT_ID_FPGA_INVALID_OUT_STATE, SW_FAULT_ID_FPGA_WRITE_CMD_TOO_MUCH_DATA, SW_FAULT_ID_FPGA_WRITE_RSP_TOO_MUCH_DATA, SW_FAULT_ID_FPGA_READ_CMD_TOO_MUCH_DATA, SW_FAULT_ID_FPGA_READ_RSP_TOO_MUCH_DATA, SW_FAULT_ID_MSG_QUEUES_ADD_QUEUE_FULL, SW_FAULT_ID_MSG_QUEUES_ADD_INVALID_QUEUE, SW_FAULT_ID_MSG_QUEUES_GET_INVALID_QUEUE, SW_FAULT_ID_MSG_QUEUES_IS_EMPTY_INVALID_QUEUE, SW_FAULT_ID_MSG_QUEUES_IS_FULL_INVALID_QUEUE, SW_FAULT_ID_WATCHDOG_INVALID_SELF_TEST_STATE, SW_FAULT_ID_RTC_EXEC_INVALID_STATE, SW_FAULT_ID_RTC_SELF_TEST_INVALID_STATE, SW_FAULT_ID_RTC_TRANSACTION_SERVICE_INVALID_STATE, SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL, SW_FAULT_ID_PI_CTRL_INVALID_CONTROLLER, SW_FAULT_ID_PI_CTRL_INVALID_SIGNAL, SW_FAULT_ID_NVDATAMGMT_EXEC_INVALID_STATE, SW_FAULT_ID_NVDATAMGMT_INVALID_SELF_TEST_STATE, SW_FAULT_ID_VALVES_INVALID_VALVE_STATE_NAME, SW_FAULT_ID_VALVES_INVALID_VALVE_ID, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; // ********** public function prototypes ********** void initAlarmMgmt( void ); void execAlarmMgmt( void ); void activateAlarmNoData( ALARM_ID_T alarm ); void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ); void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2 ); void clearAlarm( ALARM_ID_T alarm ); BOOL isAlarmActive( ALARM_ID_T alarm ); /**@}*/ BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); BOOL testResetAlarmStateOverride( U32 alarmID ); #endif