/************************************************************************** * * Copyright (c) 2024-2024 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 AlarmDefs.h * * @author (last) Sean * @date (last) 01-Aug-2024 * * @author (original) Sean * @date (original) 30-Jul-2024 * ***************************************************************************/ #ifndef __ALARM_DEFINITIONS_H__ #define __ALARM_DEFINITIONS_H__ // ********** public definitions ********** /** * @addtogroup AlarmManagement * @{ */ /// Enumeration of alarm IDs. enum Alarm_List { ALARM_ID_NO_ALARM = 0, ///< Indication for when no alarms is a possible situation ALARM_ID_TD_SOFTWARE_FAULT = 1, ///< TD Software fault. Software found itself in an unexpected state ALARM_ID_DD_SOFTWARE_FAULT = 2, ///< DD software fault. Software found itself in an unexpected state ALARM_ID_RO_SOFTWARE_FAULT = 3, ///< RO software fault. Software found itself in an unexpected state ALARM_ID_TD_FPGA_POST_TEST_FAILED = 4, ///< TD FPGA POST failure ALARM_ID_TD_WATCHDOG_POST_TEST_FAILED = 5, ///< TD Watchdog POST failure ALARM_ID_TD_UI_COMM_POST_FAILED = 6, ///< TD UI communication POST failure. UI failed to communicate within a reasonable time after power up ALARM_ID_TD_FPGA_CLOCK_SPEED_CHECK_FAILURE = 7, ///< TD processor clock speed checks against FPGA clock failure ALARM_ID_TD_FPGA_COMM_TIMEOUT = 8, ///< TD FPGA communication down for too long ALARM_ID_TD_UI_COMM_TIMEOUT = 9, ///< TD UI communication timeout ALARM_ID_TD_DD_COMM_TIMEOUT = 10, ///< TD DD communication timeout ALARM_ID_TD_COMM_TOO_MANY_BAD_CRCS = 11, ///< TD too many bad communications CRC ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_UI = 12, ///< TD didn't get ACK on message to UI that required acknowledgment ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_DD = 13, ///< TD didn't get ACK on message to DD that required acknowledgment ALARM_ID_TD_CRITICAL_DATA_ERROR = 14, ///< TD critical data integrity check failed ALARM_ID_DD_CRITICAL_DATA_ERROR = 15, ///< DD critical data integrity check failed ALARM_ID_TD_WATCHDOG_EXPIRED = 16, ///< TD watchdog expired ALARM_ID_DD_WATCHDOG_EXPIRED = 17, ///< DD watchdog expired ALARM_ID_DD_COMM_TOO_MANY_BAD_CRCS = 18, ///< DD too many bad communications CRC ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_RO = 19, ///< DD didn't get ACK on message to RO that required acknowledgment ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_TD = 20, ///< DD didn't get ACK on message to TD that required acknowledgment ALARM_ID_DD_FPGA_POST_TEST_FAILED = 21, ///< DD FPGA POST failure ALARM_ID_DD_FPGA_CLOCK_SPEED_CHECK_FAILURE = 22, ///< DD processor clock speed checks against FPGA clock failure ALARM_ID_DD_FPGA_COMM_TIMEOUT = 23, ///< DD FPGA communication down for too long ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE = 24, ///< TD alarm audio failed POST ALARM_ID_DD_VALVE_CONTROL_FAILURE = 25, ///< DD FPGA not accepting commanded valve states NUM_OF_ALARM_IDS ///< Total number of alarms }; typedef enum Alarm_List ALARM_ID_T; ///< Type for alarm list enumeration /// Enumeration of alarm priorities. enum Alarm_Priorities { ALARM_PRIORITY_NONE = 0, ///< Indicates not an alarm or no alarms active at this time ALARM_PRIORITY_LOW = 1, ///< Low priority alarm ALARM_PRIORITY_MEDIUM = 2, ///< Medium priority alarm ALARM_PRIORITY_HIGH = 3, ///< High priority alarm NUM_OF_ALARM_PRIORITIES ///< Total number of alarm priorities }; typedef enum Alarm_Priorities ALARM_PRIORITY_T; ///< Type for alarm priorities enumeration /// Alarm data types list. 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. }; typedef enum Alarm_Data_Types ALARM_DATA_TYPES_T; ///< Type for data type of triggered alarm. /// Enumeration of alarm sources. enum Alarm_Sources { ALARM_SOURCE_UI = 0, ///< User interface alarm source ALARM_SOURCE_TD, ///< TD firmware alarm source ALARM_SOURCE_DD, ///< DD firmware alarm source ALARM_SOURCE_RO, ///< RO firmware alarm source NUMBER_OF_ALARM_SOURCES ///< Number of alarm sources }; typedef enum Alarm_Sources ALARM_SOURCE_T; ///< Type for alarm sources enumeration /**@}*/ /** * @addtogroup AlarmManagementTD * @{ */ /// Enumeration of alarm silence commands. enum Alarm_Silence_Commands { ALARM_SILENCE_CMD_CANCEL = 0, ///< Cancel alarm silence command. ALARM_SILENCE_CMD_START = 1, ///< Start alarm silence command. NUM_OF_ALARM_SILENCE_CMDS ///< Total number of alarm silence commands. }; typedef enum Alarm_Silence_Commands ALARM_SILENCE_CMD_T; ///< Type for alarm silence commands /// Enumeration of alarm user actions. enum Alarm_User_Actions { ALARM_USER_ACTION_RESUME = 0, ///< User selected resume from alarm recovery options ALARM_USER_ACTION_RINSEBACK, ///< User selected rinseback from alarm recovery options ALARM_USER_ACTION_END_TREATMENT, ///< User selected end treatment from alarm recovery options ALARM_USER_ACTION_ACK, ///< User selected acknowledge (ok) from alarm recovery options NUMBER_OF_ALARM_USER_ACTIONS ///< Number of alarm user actions }; typedef enum Alarm_User_Actions ALARM_USER_ACTION_T; ///< Type for alarm user actions enumeration /// Enumeration of alarm state flags bit positions in periodic broadcast enum Alarm_State_Flag_Bit_Positions { ALARM_STATE_FLAG_BIT_POS_SYSTEM_FAULT = 0, ///< One or more system faults has been triggered ALARM_STATE_FLAG_BIT_POS_STOP = 1, ///< Alarm(s) have stopped treatment/activity and placed system in a safe state ALARM_STATE_FLAG_BIT_POS_NO_CLEAR = 2, ///< One or more active alarms is not recoverable ALARM_STATE_FLAG_BIT_POS_NO_RESUME = 3, ///< The "resume" user recovery option is disabled ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK = 4, ///< The "rinseback" user recovery option is disabled ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT = 5, ///< The "end treatment" user recovery option is disabled ALARM_STATE_FLAG_BIT_POS____AVAILABLE = 6, ///< Not used - available for use ALARM_STATE_FLAG_BIT_POS_OK_BUTTON_ONLY = 7, ///< The "ok" user recovery option is enabled ALARM_STATE_FLAG_BIT_POS_ALARMS_TO_ESCALATE = 8, ///< One or more active alarms will escalate in time ALARM_STATE_FLAG_BIT_POS_ALARMS_SILENCED = 9, ///< Alarms have been temporarily silenced by user ALARM_STATE_FLAG_BIT_POS_LAMP_ON = 10, ///< Alarm lamp is currently on (for syncing to UI) ALARM_STATE_FLAG_BIT_POS_NO_RETRIGGER = 11, ///< Alarm block re-trigger flag is set ALARM_STATE_FLAG_BIT_POS_BLOOD_RECIRC = 12, ///< Blood recirculation is disabled ALARM_STATE_FLAG_BIT_POS_DIALYSATE_RECIRC = 13, ///< Dialysate recirculation is disabled ALARM_STATE_FLAG_BIT_POS_NO_MINIMIZE = 14, ///< Prevent user from minimizing alarm window ALARM_STATE_FLAG_BIT_POS_TOP_CONDITION = 15, ///< The top alarm's condition is still being detected NUM_OF_ALARM_STATE_FLAG_BIT_POS = 16 ///< The number of alarm state flag bit positions }; typedef enum Alarm_State_Flag_Bit_Positions ALARM_STATE_FLAG_BIT_POSITIONS_T; /**@}*/ /** * @addtogroup AlarmManagement * @{ */ /// Record defining the properties of each individual alarm. struct AlarmsStateRecord { ALARM_PRIORITY_T alarmPriority; ///< Priority of alarm U32 alarmSubRank; ///< Alarm's rank within it's priority BOOL alarmIsFault; ///< Alarm is a system fault? BOOL alarmIsDDFault; ///< Alarm is a fault for DD BOOL alarmStops; ///< Alarm activation should cause a controlled stop BOOL alarmConditionClearImmed; ///< Alarm condition is cleared immediately (does not persist after alarm triggered) BOOL alarmNoClear; ///< Alarm cannot be cleared (unrecoverable)? BOOL alarmNoResume; ///< Alarm prevents treatment resume BOOL alarmNoRinseback; ///< Alarm prevents rinseback BOOL alarmNoEndTreatment; ///< Alarm prevents ending treatment BOOL alarmBlockRinseback; ///< Alarm should not trigger while in rinseback states BOOL alarmBlockEndTx; ///< Alarm should not trigger while in post-treatment mode BOOL alarmNoBloodRecirc; ///< Alarm prevents blood re-circulation BOOL alarmNoDialysateRecirc; ///< Alarm prevents dialysate re-circulation BOOL alarmClearOnly; ///< Clear only this alarm on user acknowledgment BOOL alarmTreatmentLog; ///< Log alarm to treatment log if active during treatment ALARM_ID_T alarmID; ///< Alarm ID }; typedef struct AlarmsStateRecord ALARM_T; /// Record defining the ranking of each individual alarm. struct AlarmsRankRecord { U32 alarmSubRank; ///< Alarm's rank within it's priority ALARM_ID_T alarmID; ///< Alarm ID }; typedef struct AlarmsRankRecord ALARM_RANK_T; #ifdef __ALARM_MGMT_C__ /// Table of alarms and their static properties. const ALARM_T ALARM_TABLE[] = { // Priority Rank Fault DDFault Stops ClrIm NoClr NoRes NoRin NoEnd BlkRB BlkET NoBRcr NoDRcr ClrOnly TxLog ID { ALARM_PRIORITY_NONE, 999, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, ALARM_ID_NO_ALARM }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_SOFTWARE_FAULT }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_SOFTWARE_FAULT }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_RO_SOFTWARE_FAULT }, { ALARM_PRIORITY_HIGH, 1, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_FPGA_POST_TEST_FAILED }, { ALARM_PRIORITY_HIGH, 1, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_WATCHDOG_POST_TEST_FAILED }, { ALARM_PRIORITY_HIGH, 1, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_UI_COMM_POST_FAILED }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_FPGA_CLOCK_SPEED_CHECK_FAILURE }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_FPGA_COMM_TIMEOUT }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_UI_COMM_TIMEOUT }, { ALARM_PRIORITY_HIGH, 111, FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE, TRUE , ALARM_ID_TD_DD_COMM_TIMEOUT }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_COMM_TOO_MANY_BAD_CRCS }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_UI }, { ALARM_PRIORITY_HIGH, 111, FALSE, FALSE, TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_DD }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_CRITICAL_DATA_ERROR }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_CRITICAL_DATA_ERROR }, { ALARM_PRIORITY_HIGH, 10, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_WATCHDOG_EXPIRED }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_WATCHDOG_EXPIRED }, { ALARM_PRIORITY_HIGH, 10, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_DD_COMM_TOO_MANY_BAD_CRCS }, { ALARM_PRIORITY_HIGH, 111, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_RO }, { ALARM_PRIORITY_HIGH, 111, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_TD }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_FPGA_POST_TEST_FAILED }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_FPGA_CLOCK_SPEED_CHECK_FAILURE }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, TRUE , FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_FPGA_COMM_TIMEOUT }, { ALARM_PRIORITY_HIGH, 1, TRUE , FALSE, TRUE , TRUE , TRUE , TRUE , TRUE , TRUE , FALSE, FALSE, TRUE , TRUE , FALSE, FALSE, ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE }, { ALARM_PRIORITY_HIGH, 110, FALSE, TRUE , TRUE , TRUE , FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, TRUE , FALSE, FALSE, ALARM_ID_DD_VALVE_CONTROL_FAILURE }, }; // Priority Rank Fault DDFault Stops ClrIm NoClr NoRes NoRin NoEnd BlkRB BlkET NoBRcr NoDRcr ClrOnly TxLog ID /// Table of alarms and their rank. const ALARM_RANK_T ALARM_RANK_TABLE[] = { { 1, ALARM_ID_TD_FPGA_POST_TEST_FAILED }, { 1, ALARM_ID_TD_WATCHDOG_POST_TEST_FAILED }, { 1, ALARM_ID_TD_UI_COMM_POST_FAILED }, { 1, ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE }, { 10, ALARM_ID_TD_SOFTWARE_FAULT }, { 10, ALARM_ID_TD_UI_COMM_TIMEOUT }, { 10, ALARM_ID_TD_COMM_TOO_MANY_BAD_CRCS }, { 10, ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_UI }, { 10, ALARM_ID_TD_FPGA_COMM_TIMEOUT }, { 10, ALARM_ID_TD_CRITICAL_DATA_ERROR }, { 10, ALARM_ID_TD_FPGA_CLOCK_SPEED_CHECK_FAILURE }, { 10, ALARM_ID_TD_WATCHDOG_EXPIRED }, { 10, ALARM_ID_DD_COMM_TOO_MANY_BAD_CRCS }, { 110, ALARM_ID_DD_CRITICAL_DATA_ERROR }, { 110, ALARM_ID_DD_WATCHDOG_EXPIRED }, { 110, ALARM_ID_DD_SOFTWARE_FAULT }, { 110, ALARM_ID_RO_SOFTWARE_FAULT }, { 110, ALARM_ID_DD_FPGA_POST_TEST_FAILED }, { 110, ALARM_ID_DD_FPGA_CLOCK_SPEED_CHECK_FAILURE }, { 110, ALARM_ID_DD_FPGA_COMM_TIMEOUT }, { 110, ALARM_ID_DD_VALVE_CONTROL_FAILURE }, { 111, ALARM_ID_TD_DD_COMM_TIMEOUT }, { 111, ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_DD }, { 111, ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_RO }, { 111, ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_TD }, { 999, ALARM_ID_NO_ALARM }, }; #endif // included by AlarmMgmt.c /**@}*/ #ifdef __MANUAL_ALARMS__ // Manual alarm table. These fields must be filled by a user even if we have to get the data from other departments // This part is only compiled when the checkAlarms.sh creates a .c file to check the alarm tables. This code is not used in the firmware. // The character fields are separated by | instead of , so the parser script can distinguish the end of each field column from the other it does not // get confused with the , in the text. struct AlarmsManualRecord { U32 alarmNumber; ///< Alarm number ALARM_ID_T alarmID; ///< Alarm ID char field[2000]; ///< Alarm text field }; typedef struct AlarmsManualRecord ALARM_MANUAL_T; const ALARM_MANUAL_T ALARM_MANUAL_TABLE[] = { // Num Alarm ID Device Display Title Instructions Alarm List Title Description Trigger Condition { 0 , ALARM_ID_NO_ALARM , "N/A | | | | Indication for when no alarms is a possible situation | N/A | "}, { 1 , ALARM_ID_TD_SOFTWARE_FAULT , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: SW Invalid State | HD Software fault. Software found itself in an unexpected state | If the specific software faults listed in alarm management SW faults has been detected | "}, { 2 , ALARM_ID_DD_SOFTWARE_FAULT , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: Software Invalid State | DD software fault. Software found itself in an unexpected state | If the specific software faults listed in alarm management SW faults has been detected | "}, { 3 , ALARM_ID_RO_SOFTWARE_FAULT , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: Software Invalid State | DD software fault. Software found itself in an unexpected state | If the specific software faults listed in alarm management SW faults has been detected | "}, { 4 , ALARM_ID_TD_FPGA_POST_TEST_FAILED , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD POST: FPGA Compatibility | HD FPGA POST failure | Minimum HD FPGA major revision is not compatible with this version of HD firmware or the FPGA Id is not correct. | "}, { 5 , ALARM_ID_TD_WATCHDOG_POST_TEST_FAILED , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD POST: WD Safestate | HD Watchdog POST failure | If the following are not observed after 500ms of not petting the WD: 1. WD exp pin=low 2. 24V <= 5V 3. audio current >= 200mA If the following are not observed after 500ms of resumed WD petting at proper timing: 1. WD exp pin=high 2. 24V >= 22.6V 3. audio current <= 10 mA | "}, { 6 , ALARM_ID_TD_UI_COMM_POST_FAILED , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD POST: Proc- UI Comm | UI communication POST failure. UI failed to communicate within a reasonable time after power up | If the UI failed to checkin via the CAN bus within 40 seconds | "}, { 7 , ALARM_ID_TD_FPGA_CLOCK_SPEED_CHECK_FAILURE , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: Proc- FPGA Clock | HD processor clock speed checks against FPGA clock failure | If during initialization mode, the difference between the processor clock speed and the FPGA clock speed > 1. | "}, { 8 , ALARM_ID_TD_FPGA_COMM_TIMEOUT , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: FPGA Com | HD FPGA communication down for too long | If there are more than 3 comm errors in a 1 min period. | "}, { 9 , ALARM_ID_TD_UI_COMM_TIMEOUT , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: UI Comm | User interface communication timeout | If the sub-system communication timeout has occurred. UI is 5 seconds. DD is 2 seconds. | "}, { 10 , ALARM_ID_TD_DD_COMM_TIMEOUT , "TD | Communication Error | A communication problem has been detected.\n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | Loss of DD Comm (Timeout) | Dialysate generator communication timeout | If DD communication timeout is detected for more than 2 seconds. | "}, { 11 , ALARM_ID_TD_COMM_TOO_MANY_BAD_CRCS , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: CAN CRC Com | Too many bad CRCs detected on received system messages | If too many bad messages CRCs are received within a set period of time | "}, { 12 , ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_UI , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: CAN ACK UI Com | System message that required acknowledgment was not acknowledged | If no retries left in the pending acknowlegement list. | "}, { 13 , ALARM_ID_TD_CAN_MESSAGE_NOT_ACKED_BY_DD , "TD | Communication Error | A communication problem has been detected.\n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | Loss of DD Comm (DD ACK) | HD to DD comm error. | HD message to DD that requires acknowledge was not acknowledged within a certain time. | "}, { 14 , ALARM_ID_TD_CRITICAL_DATA_ERROR , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: Critical Data Err | HD critical data integrity check failed | If the critical data failed range check. | "}, { 15 , ALARM_ID_DD_CRITICAL_DATA_ERROR , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: Critical Data Err | DD critical data integrity check failed | If the critical data failed range check. | "}, { 16 , ALARM_ID_TD_WATCHDOG_EXPIRED , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD Fault: WD Error | HD watchdog expired | If the watchdog signal is low while not in POST. | "}, { 17 , ALARM_ID_DD_WATCHDOG_EXPIRED , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: WD Error | DD watchdog expired | If the watchdog signal is low while not in POST. | "}, { 18 , ALARM_ID_DD_COMM_TOO_MANY_BAD_CRCS , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: CAN CRC Com | Too many bad CRCs detected on received system messages | If too many bad messages CRCs are received within a set period of time | "}, { 19 , ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_RO , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | Loss of RO Comm (RO ACK) | DD to RO comm error | DD message to RO that requires acknowledge was not acknowledged within a certain time. | "}, { 20 , ALARM_ID_DD_CAN_MESSAGE_NOT_ACKED_BY_TD , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | Loss of TD Comm (TD ACK) | DD to TD comm error | DD message to TD that requires acknowledge was not acknowledged within a certain time. | "}, { 21 , ALARM_ID_DD_FPGA_POST_TEST_FAILED , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD POST: FPGA Compatibility | DD FPGA POST failure | Minimum DD FPGA major and minor revision are not equal to the FPGA major and minor revision in FPGA header | "}, { 22 , ALARM_ID_DD_FPGA_CLOCK_SPEED_CHECK_FAILURE , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: Proc- FPGA Clock | FPGA clock speed failure | If the FPGA clock speed is relatively close to the processor clock for a certain period of time. | "}, { 23 , ALARM_ID_DD_FPGA_COMM_TIMEOUT , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: FPGA Com | DD FPGA communication down for too long | If retries for commands exceeds limit or FPGA reports comm error. | "}, { 24 , ALARM_ID_HD_ALARM_AUDIO_SELF_TEST_FAILURE , "TD | Service Required: Hemodialysis Device | A problem was detected with the hemodialysis device.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | HD POST: Primary Alarm Current | HD alarm audio failed POST | If alarm audio current is NOT in expected range for than 1 second while alarm tone is being output | "}, { 25 , ALARM_ID_DD_VALVE_CONTROL_FAILURE , "DD | Service Required: Dialysate Device | A problem was detected with the dialysate device. \n- Treatment must be terminated.\n- Locate the ID code found in the bottom left corner\nof the alarm screen.\n- Call service to report the issue and schedule a repair. | DD Fault: Valve Control | DD FPGA not accepting commanded valve states | If the read back FPGA valve states does not match the commanded valve states for a certain amount of time. | "}, // Num Alarm ID Device Display Title Instructions Alarm List Title Description Trigger Condition }; #endif // manual alarms #endif