Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r5217f70ca5c74bd586dc14540e6404b43feea004 -r89a95cb8fbc537f1c7a5448a05788342f7319c01 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 5217f70ca5c74bd586dc14540e6404b43feea004) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 89a95cb8fbc537f1c7a5448a05788342f7319c01) @@ -1,192 +1,193 @@ -/************************************************************************** - * - * Copyright (c) 2019-2019 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__ - -// ********** public definitions ********** - -typedef enum Alarm_List -{ - ALARM_ID_NO_ALARM = 0, - ALARM_ID_SOFTWARE_FAULT, - ALARM_ID_STUCK_BUTTON_TEST_FAILED, - ALARM_ID_FPGA_POST_TEST_FAILED, - ALARM_ID_WATCHDOG_POST_TEST_FAILED, - ALARM_ID_UI_COMM_POST_FAILED, // 5 - ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, - ALARM_ID_BLOOD_PUMP_MC_SPEED_CHECK, - ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK, - ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK, - ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK, // 10 - ALARM_ID_DIAL_IN_PUMP_MC_SPEED_CHECK, - ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK, - ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK, - ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK, - ALARM_ID_DIAL_OUT_PUMP_MC_SPEED_CHECK, // 15 - ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK, - ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK, - ALARM_ID_WATCHDOG_EXPIRED, - ALARM_ID_RTC_COMM_ERROR, - ALARM_ID_RTC_CONFIG_ERROR, // 20 - NUM_OF_ALARM_IDS -} ALARM_ID_T; - -typedef enum Alarm_Priorities -{ - ALARM_PRIORITY_NONE = 0, - ALARM_PRIORITY_LOW, - ALARM_PRIORITY_MEDIUM, - ALARM_PRIORITY_HIGH, - NUM_OF_ALARM_PRIORITIES -} ALARM_PRIORITY_T; - -typedef enum Alarm_Data_Types -{ - ALARM_DATA_TYPE_NONE = 0, - ALARM_DATA_TYPE_U32, - ALARM_DATA_TYPE_S32, - ALARM_DATA_TYPE_F32, - ALARM_DATA_TYPE_BOOL, - NUM_OF_ALARM_DATA_TYPES -} ALARM_DATA_TYPES_T; - -#pragma pack(push,4) -typedef struct -{ - ALARM_PRIORITY_T alarmsState; // current alarm priority level - BOOL alarmsSilenced; // alarms are currently silenced? - U32 alarmsSilenceStart; // time stamp for when alarms were silenced (ms) - U32 alarmsSilenceExpiresIn; // time until alarm silence expires (seconds) - BOOL alarmsToEscalate; // are any active alarms due to escalate (should UI show count down timer?) - U32 alarmsEscalatesIn; // time until alarm will escalate (seconds) - ALARM_ID_T alarmTop; // ID of current top alarm that will drive lamp/audio and UI should be displaying right now - BOOL systemFault; // a system fault is active? - BOOL stop; // we should be in controlled stop right now - BOOL noClear; // no recovery will be possible - BOOL noResume; // treatment may not be resumed at this time - BOOL noRinseback; // rinseback may not be initiated at this time - BOOL noEndTreatment; // ending the treatment is not an option at this time - BOOL noNewTreatment; // no new treatments may be started even if current treatment is ended - BOOL bypassDialyzer; // the dialyzer should be bypassed at this time -} COMP_ALARM_STATUS_T; - -typedef struct -{ - U32 data; -} ALARM_DATA_U32_T; - -typedef struct -{ - S32 data; -} ALARM_DATA_S32_T; - -typedef struct -{ - F32 data; -} ALARM_DATA_F32_T; - -typedef struct -{ - BOOL data; -} ALARM_DATA_BOOL_T; - -typedef union -{ - ALARM_DATA_U32_T uInt; - ALARM_DATA_S32_T sInt; - ALARM_DATA_F32_T flt; - ALARM_DATA_BOOL_T bln; -} ALARM_DATAS_T; - -typedef struct -{ - ALARM_DATA_TYPES_T dataType; - ALARM_DATAS_T data; -} ALARM_DATA_T; -#pragma pack(pop) - -typedef enum -{ - SW_FAULT_ID_NONE = 0, - SW_FAULT_ID_ALARM_LAMP_INVALID_PATTERN_REQUESTED, - SW_FAULT_ID_ALARM_LAMP_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_BLOOD_FLOW_SET_TOO_HIGH, - SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_STATE, - SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_DIRECTION, // 5 - SW_FAULT_ID_BUTTONS_INVALID_SELF_TEST_STATE, - SW_FAULT_ID_BUTTONS_STOP_BUTTON_NOT_CONSUMED, - SW_FAULT_ID_INT_ADC_DATA_OVERRUN, - SW_FAULT_ID_INT_ADC_INVALID_CHANNEL_REQUESTED, - SW_FAULT_ID_MODE_INIT_POST_INVALID_POST_STATE, // 10 - 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, // 15 - SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_CLEAR, - SW_FAULT_ID_ALARM_MGMT_LAMP_INVALID_ALARM_STATE, - 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, // 20 - 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, // 25 - 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, // 30 - 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_ALARM_MGMT_INVALID_FIFO_TO_RESET, // 35 - SW_FAULT_ID_DIAL_IN_FLOW_INVALID_DIAL_IN_PUMP_DIRECTION, - SW_FAULT_ID_DIAL_IN_FLOW_INVALID_DIAL_IN_PUMP_STATE, - SW_FAULT_ID_DIAL_IN_FLOW_SET_TOO_HIGH, - SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_DIRECTION, - SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_STATE, // 40 - SW_FAULT_ID_DIAL_OUT_FLOW_SET_TOO_HIGH, - SW_FAULT_ID_BLOOD_FLOW_INVALID_FILTER_STATE, - SW_FAULT_ID_DIAL_IN_FLOW_INVALID_FILTER_STATE, - SW_FAULT_ID_RTC_EXEC_INVALID_STATE, - SW_FAULT_ID_RTC_SELF_TEST_INVALID_STATE, // 45 - SW_FAULT_ID_RTC_TRANSACTION_SERVICE_INVALID_STATE, - 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 testSetAlarmStatusPublishIntervalOverride( U32 value ); -BOOL testResetAlarmStatusPublishIntervalOverride( void ); -BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); -BOOL testResetAlarmStateOverride( U32 alarmID ); -BOOL testSetAlarmStartOverride( U32 alarmID, U32 value ); -BOOL testResetAlarmStartOverride( U32 alarmID ); - -#endif +/************************************************************************** + * + * Copyright (c) 2019-2019 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__ + +// ********** public definitions ********** + +typedef enum Alarm_List +{ + ALARM_ID_NO_ALARM = 0, + ALARM_ID_SOFTWARE_FAULT, + ALARM_ID_STUCK_BUTTON_TEST_FAILED, + ALARM_ID_FPGA_POST_TEST_FAILED, + ALARM_ID_WATCHDOG_POST_TEST_FAILED, + ALARM_ID_UI_COMM_POST_FAILED, // 5 + ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, + ALARM_ID_BLOOD_PUMP_MC_SPEED_CHECK, + ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK, + ALARM_ID_BLOOD_PUMP_ROTOR_SPEED_CHECK, + ALARM_ID_DIAL_IN_PUMP_MC_CURRENT_CHECK, // 10 + ALARM_ID_DIAL_IN_PUMP_MC_SPEED_CHECK, + ALARM_ID_DIAL_IN_PUMP_MC_DIRECTION_CHECK, + ALARM_ID_DIAL_IN_PUMP_ROTOR_SPEED_CHECK, + ALARM_ID_DIAL_OUT_PUMP_MC_CURRENT_CHECK, + ALARM_ID_DIAL_OUT_PUMP_MC_SPEED_CHECK, // 15 + ALARM_ID_DIAL_OUT_PUMP_MC_DIRECTION_CHECK, + ALARM_ID_DIAL_OUT_PUMP_ROTOR_SPEED_CHECK, + ALARM_ID_WATCHDOG_EXPIRED, + ALARM_ID_RTC_COMM_ERROR, + ALARM_ID_RTC_CONFIG_ERROR, // 20 + NUM_OF_ALARM_IDS +} ALARM_ID_T; + +typedef enum Alarm_Priorities +{ + ALARM_PRIORITY_NONE = 0, + ALARM_PRIORITY_LOW, + ALARM_PRIORITY_MEDIUM, + ALARM_PRIORITY_HIGH, + NUM_OF_ALARM_PRIORITIES +} ALARM_PRIORITY_T; + +typedef enum Alarm_Data_Types +{ + ALARM_DATA_TYPE_NONE = 0, + ALARM_DATA_TYPE_U32, + ALARM_DATA_TYPE_S32, + ALARM_DATA_TYPE_F32, + ALARM_DATA_TYPE_BOOL, + NUM_OF_ALARM_DATA_TYPES +} ALARM_DATA_TYPES_T; + +#pragma pack(push,4) +typedef struct +{ + ALARM_PRIORITY_T alarmsState; // current alarm priority level + BOOL alarmsSilenced; // alarms are currently silenced? + U32 alarmsSilenceStart; // time stamp for when alarms were silenced (ms) + U32 alarmsSilenceExpiresIn; // time until alarm silence expires (seconds) + BOOL alarmsToEscalate; // are any active alarms due to escalate (should UI show count down timer?) + U32 alarmsEscalatesIn; // time until alarm will escalate (seconds) + ALARM_ID_T alarmTop; // ID of current top alarm that will drive lamp/audio and UI should be displaying right now + BOOL systemFault; // a system fault is active? + BOOL stop; // we should be in controlled stop right now + BOOL noClear; // no recovery will be possible + BOOL noResume; // treatment may not be resumed at this time + BOOL noRinseback; // rinseback may not be initiated at this time + BOOL noEndTreatment; // ending the treatment is not an option at this time + BOOL noNewTreatment; // no new treatments may be started even if current treatment is ended + BOOL bypassDialyzer; // the dialyzer should be bypassed at this time +} COMP_ALARM_STATUS_T; + +typedef struct +{ + U32 data; +} ALARM_DATA_U32_T; + +typedef struct +{ + S32 data; +} ALARM_DATA_S32_T; + +typedef struct +{ + F32 data; +} ALARM_DATA_F32_T; + +typedef struct +{ + BOOL data; +} ALARM_DATA_BOOL_T; + +typedef union +{ + ALARM_DATA_U32_T uInt; + ALARM_DATA_S32_T sInt; + ALARM_DATA_F32_T flt; + ALARM_DATA_BOOL_T bln; +} ALARM_DATAS_T; + +typedef struct +{ + ALARM_DATA_TYPES_T dataType; + ALARM_DATAS_T data; +} ALARM_DATA_T; +#pragma pack(pop) + +typedef enum +{ + SW_FAULT_ID_NONE = 0, + SW_FAULT_ID_ALARM_LAMP_INVALID_PATTERN_REQUESTED, + SW_FAULT_ID_ALARM_LAMP_INVALID_SELF_TEST_STATE, + SW_FAULT_ID_BLOOD_FLOW_SET_TOO_HIGH, + SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_STATE, + SW_FAULT_ID_BLOOD_FLOW_INVALID_BLOOD_PUMP_DIRECTION, // 5 + SW_FAULT_ID_BUTTONS_INVALID_SELF_TEST_STATE, + SW_FAULT_ID_BUTTONS_STOP_BUTTON_NOT_CONSUMED, + SW_FAULT_ID_INT_ADC_DATA_OVERRUN, + SW_FAULT_ID_INT_ADC_INVALID_CHANNEL_REQUESTED, + SW_FAULT_ID_MODE_INIT_POST_INVALID_POST_STATE, // 10 + 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, // 15 + SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_CLEAR, + SW_FAULT_ID_ALARM_MGMT_LAMP_INVALID_ALARM_STATE, + 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, // 20 + 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, // 25 + 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, // 30 + 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_ALARM_MGMT_INVALID_FIFO_TO_RESET, // 35 + SW_FAULT_ID_DIAL_IN_FLOW_INVALID_DIAL_IN_PUMP_DIRECTION, + SW_FAULT_ID_DIAL_IN_FLOW_INVALID_DIAL_IN_PUMP_STATE, + SW_FAULT_ID_DIAL_IN_FLOW_SET_TOO_HIGH, + SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_DIRECTION, + SW_FAULT_ID_DIAL_OUT_FLOW_INVALID_DIAL_OUT_PUMP_STATE, // 40 + SW_FAULT_ID_DIAL_OUT_FLOW_SET_TOO_HIGH, + SW_FAULT_ID_BLOOD_FLOW_INVALID_FILTER_STATE, + SW_FAULT_ID_DIAL_IN_FLOW_INVALID_FILTER_STATE, + SW_FAULT_ID_RTC_EXEC_INVALID_STATE, + SW_FAULT_ID_RTC_SELF_TEST_INVALID_STATE, // 45 + SW_FAULT_ID_RTC_TRANSACTION_SERVICE_INVALID_STATE, + SW_FAULT_ID_DIAL_OUT_MEASURED_SIGNAL_STATE, + 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 testSetAlarmStatusPublishIntervalOverride( U32 value ); +BOOL testResetAlarmStatusPublishIntervalOverride( void ); +BOOL testSetAlarmStateOverride( U32 alarmID, BOOL value ); +BOOL testResetAlarmStateOverride( U32 alarmID ); +BOOL testSetAlarmStartOverride( U32 alarmID, U32 value ); +BOOL testResetAlarmStartOverride( U32 alarmID ); + +#endif