Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -re27e413ff88e196f300fee9c05f5c4e30ccf5e1b -r52863cba9685f31136ab3f4b4764a17ccf34fc05 --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision e27e413ff88e196f300fee9c05f5c4e30ccf5e1b) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 52863cba9685f31136ab3f4b4764a17ccf34fc05) @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright (c) 2019-2019 Diality Inc. - All Rights Reserved. + * 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. @@ -23,6 +23,14 @@ { 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, NUM_OF_ALARM_IDS } ALARM_ID_T; @@ -48,6 +56,24 @@ #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) + 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; @@ -81,14 +107,65 @@ } 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_TOO_MUCH_DATA, // 20 + SW_FAULT_ID_COMM_BUFFERS_GET_INVALID_BUFFER, + SW_FAULT_ID_COMM_BUFFERS_PEEK_TOO_MUCH_DATA, + SW_FAULT_ID_COMM_BUFFERS_PEEK_INVALID_BUFFER, + SW_FAULT_ID_COMM_BUFFERS_COUNT_INVALID_BUFFER, + SW_FAULT_ID_FPGA_INVALID_IN_STATE, // 25 + 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, // 30 + 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, // 35 + SW_FAULT_ID_WATCHDOG_INVALID_SELF_TEST_STATE, + SW_FAULT_ID_ALARM_MGMT_INVALID_FIFO_TO_RESET, + NUM_OF_SW_FAULT_IDS +} SW_FAULT_ID_T; + // ********** public function prototypes ********** void initAlarmMgmt( void ); void execAlarmMgmt( void ); -void activateAlarm( ALARM_ID_T alarm ); +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