Index: dialin/common/alarm_defs.py =================================================================== diff -u -r287af45040e35882e001fb3ea835f304007870c4 -r187980e6e0c0c490e6ed0f8c6831c8e44086586f --- dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 287af45040e35882e001fb3ea835f304007870c4) +++ dialin/common/alarm_defs.py (.../alarm_defs.py) (revision 187980e6e0c0c490e6ed0f8c6831c8e44086586f) @@ -115,7 +115,17 @@ ALARM_ID_POST_ACID_CONDUCTIVITY_OUT_OF_RANGE = 94 # Post-acid concentrate conductivity out of range. ALARM_ID_POST_BICARB_CONDUCTIVITY_OUT_OF_RANGE = 95 # Post-bicarb concentrate conductivity out of range. ALARM_ID_RO_PUMP_FLOW_RATE_OUT_OF_RANGE = 96 # RO pump flow rate out of range. - NUM_OF_ALARM_IDS = 97 # Total number of alarms + ALARM_ID_DG_THERMISOTRS_TEMPERATURE_OUT_OF_RANGE = 97 # DG thermistors/sensors temperature out of range. + ALARM_ID_DG_FAN_RPM_OUT_OF_RANGE = 98 # DG fan RPM out of range. + ALARM_ID_DG_DIALYSATE_FILL_OUT_OF_TIME = 99 # DG dialysate fill runs out of time. + ALARM_ID_CP1_SPEED_CONTROL_ERROR = 100 # DG concentrate pump CP1 speed control error. + ALARM_ID_CP2_SPEED_CONTROL_ERROR = 101 # DG concentrate pump CP2 speed control error. + ALARM_ID_FLOW_RATE_OUT_OF_RANGE = 102 # DG flow rate out of range. + ALARM_ID_RO_PUMP_PRESSURE_OUT_OF_RANGE = 103 # DG RO pump pressure out of range. + ALARM_ID_DRAIN_PUMP_RPM_OUT_OF_RANGE = 104 # DG drain pump RPM out of range. + ALARM_ID_DG_HEATERS_NEGATIVE_COLD_JUNCTION_TEMPERATURE = 105 # DG heaters cold junction temperature out of range. + ALARM_ID_DG_HEATERS_FAULT = 106 # DG heaters fault. + NUM_OF_ALARM_IDS = 107 # Total number of alarms @unique class AlarmPriorities(DialinEnum): Index: dialin/common/msg_defs.py =================================================================== diff -u -r8c066d92317217d5ae5e3993609a804930f7531a -r187980e6e0c0c490e6ed0f8c6831c8e44086586f --- dialin/common/msg_defs.py (.../msg_defs.py) (revision 8c066d92317217d5ae5e3993609a804930f7531a) +++ dialin/common/msg_defs.py (.../msg_defs.py) (revision 187980e6e0c0c490e6ed0f8c6831c8e44086586f) @@ -82,21 +82,25 @@ MSG_ID_UI_TREATMENT_END_REQUEST = 0x3C # UI user treatment end request MSG_ID_HD_TREATMENT_END_RESPONSE = 0x3D # HD response to user request to end treatment MSG_ID_HD_AIR_TRAP_DATA = 0x003E # HD broadcast of air trap data - MSG_ID_UI_ALARM_USER_ACKNOWLEDGE = 0x3F # UI user has acknowledged alarm + MSG_ID_ALARM_CONDITION_CLEARED = 0x3F # Alarm condition cleared event MSG_ID_UI_ALARM_USER_ACTION = 0x40 # UI user has requested an alarm action MSG_ID_USER_UF_PAUSE_RESUME_RESPONSE = 0x41 # HD response to user request to pause or resume UF MSG_ID_DG_CONCENTRATE_PUMP_DATA = 0x42 # DG broadcast of concentrate pump data MSG_ID_DG_PRIMING_STATUS_DATA = 0x43 # HD priming status during cartridge prime MSG_ID_DG_UV_REACTORS_DATA = 0x44 # DG broadcast UV reactors data MSG_ID_DG_THERMISTORS_DATA = 0x45 # DG broadcast thermistors data - MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST = 0x46 # DG broadcast thermistors data - MSG_ID_HD_PRESSURE_LIMITS_CHANGE_RESPONSE = 0x47 # DG broadcast thermistors data + MSG_ID_UI_PRESSURE_LIMITS_CHANGE_REQUEST = 0x46 # UI request to change pressure limits + MSG_ID_HD_PRESSURE_LIMITS_CHANGE_RESPONSE = 0x47 # HD response to change pressure limits request MSG_ID_DG_FANS_DATA = 0x48 # DG broadcast fans data MSG_ID_HD_CALIBRATION_DATA = 0x49 # HD broadcast calibration data MSG_ID_DG_CALIBRATION_DATA = 0x4A # DG broadcast calibration data + MSG_ID_UI_HEPARIN_PAUSE_RESUME_REQUEST = 0x4B # UI request to pause/resume Heparin delivery + MSG_ID_HD_HEPARIN_PAUSE_RESUME_RESPONSE = 0x4C # HD response to pause/resume Heparing delivery request + MSG_ID_HD_HEPARIN_DATA_BROADCAST = 0x4D # HD broadcast of Heparin delivery data + MSG_ID_UI_SET_ALARM_AUDIO_VOLUME_LEVEL_CMD = 0x4E # UI command to set alarm audio volume level + MSG_ID_UI_SET_UF_VOLUME_PARAMETER = 0x4F # UI request to validate new ultrafiltration volume treatment parameter + MSG_ID_HD_SET_UF_VOLUME_PARAMETER_RESPONSE = 0x50 # HD response to new treatment parameters set - MSG_ID_CAN_ERROR_COUNT = 0x999 # test code in support of EMC testing - # service/test CAN messages MSG_ID_TESTER_LOGIN_REQUEST = 0x8000 # HD tester log-in MSG_ID_DIAL_OUT_FLOW_SET_PT_OVERRIDE = 0x8001 # Dialysate outlet flow set point override request @@ -111,7 +115,7 @@ MSG_ID_BLOOD_PUMP_MC_MEAS_SPEED_OVERRIDE = 0x800A # Blood pump motor controller speed override request MSG_ID_BLOOD_PUMP_MC_MEAS_CURR_OVERRIDE = 0x800B # Blood pump motor controller current override request MSG_ID_BLOOD_FLOW_SEND_INTERVAL_OVERRIDE = 0x800C # Blood flow broadcast interval override request - MSG_ID_ALARM_STATUS_SEND_INTERVAL_OVERRIDE = 0x800D # Alarm status broadcast interval override request + MSG_ID___AVAILABLE_1 = 0x800D # This msg ID is available for use MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE = 0x800E # Blood pump measured motor speed override request MSG_ID_BLOOD_PUMP_MEAS_ROTOR_SPEED_OVERRIDE = 0x800F # Blood pump measured rotor speed override request MSG_ID_DIAL_IN_FLOW_SET_PT_OVERRIDE = 0x8010 # Dialysate inlet flow set point override request @@ -201,6 +205,14 @@ MSG_ID_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE = 0xA027 # Concentrate pumps' data publish interval override request MSG_ID_DG_START_STOP_UV_REACTORS_OVERRIDE = 0xA028 # DG start/stop UV reactors override request MSG_ID_DG_REQUEST_CALIBRATION_DATA = 0xA029 # Requests calibration data from DG + MSG_ID_DG_FANS_DATA_PUBLISH_INTERVAL_OVERRIDE = 0xA02A # DG fans data publish interval override request + MSG_ID_DG_UV_REACTORS_HEALTH_OVERRIDE = 0xA02C # DG UV reactors health override request + MSG_ID_DG_THERMISTORS_DATA_PUBLISH_INTERVAL_OVERRIDE = 0xA02D # DG thermistors data publish interval override + MSG_ID_DG_THERMISTORS_VALUE_OVERRIDE = 0xA02E # DG thermistors value override + MSG_ID_DG_RO_PUMP_DUTY_CYCLE_OVERRIDE = 0xA02F # DG RO pump duty cycle override + MSG_ID_DG_RO_FLOW_RATE_OVERRIDE = 0xA030 # DG RO flow rate override + MSG_ID_DG_RO_PUMP_TARGET_FLOW_OVERRIDE = 0xA031 # DG RO pump target flow rate override + MSG_ID_DG_RO_PUMP_TARGET_PRESSURE_OVERRIDE = 0xA032 # DG RO pump target pressure override MSG_ID_HD_DEBUG_EVENT = 0xFFF1 # HD debug event text to be logged in event log MSG_ID_DG_DEBUG_EVENT = 0xFFF2 # DG debug event text to be logged in event log Index: dialin/hd/alarms.py =================================================================== diff -u -r812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3 -r187980e6e0c0c490e6ed0f8c6831c8e44086586f --- dialin/hd/alarms.py (.../alarms.py) (revision 812bbf1e5b3b2f1c4f5cfbef1264787e18afb5c3) +++ dialin/hd/alarms.py (.../alarms.py) (revision 187980e6e0c0c490e6ed0f8c6831c8e44086586f) @@ -82,6 +82,11 @@ self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarm_clear) + channel_id = DenaliChannels.hd_alarm_broadcast_ch_id + msg_id = MsgIds.MSG_ID_ALARM_CONDITION_CLEARED.value + self.can_interface.register_receiving_publication_function(channel_id, msg_id, + self._handler_alarm_condition_clear) + # composite alarm status based on latest HD alarm status broadcast message self.alarms_state = 0 self.alarm_top = 0 @@ -91,8 +96,28 @@ # alarm states based on received HD alarm activation and alarm clear messages self.alarm_states = [False] * 500 + # alarm condition states based on received HD alarm activation and clear condition messages + self.alarm_conditions = [False] * 500 + def get_current_alarms_state(self): + """ + Gets the current alarms state. + None, Low, Medium, or High + @return: (str) the current alarms state in text form. + """ + result = "" + if self.alarms_state == self.HD_ALARM_STATE_NONE: + result = "None" + elif self.alarms_state == self.HD_ALARM_STATE_LOW: + result = "Low" + elif self.alarms_state == self.HD_ALARM_STATE_MEDIUM: + result = "Medium" + elif self.alarms_state == self.HD_ALARM_STATE_HIGH: + result = "High" + + return result + def get_alarm_states(self): """ Gets all states for all alarms @@ -101,6 +126,14 @@ """ return self.alarm_states + def get_alarm_conditions(self): + """ + Gets all alarm condition states for all alarms + + @return: List of booleans of size 500 + """ + return self.alarm_conditions + def get_alarms_top(self): """ Gets the top alarm @@ -125,7 +158,7 @@ """ return self.alarms_escalates_in - def get_alarms_flags(self): + def get_alarms_flags(self): # TODO - update flags to latest """ Gets the alarms flags @@ -138,16 +171,15 @@ No Rinseback = result & 16 No End Treatment = result & 32 No New Treatment = result & 64 - Bypass Dialyzer = result & 128 + User Must ACK = result & 128 Alarms to Escalate = result & 256 Alarms Silenced = result & 512 - TBD = result & 1024 + Alarm Lamp On = result & 1024 TBD = result & 2048 TBD = result & 4096 TBD = result & 8192 TBD = result & 16384 - TBD = result & 32768 - TBD = result & 65536 + Condition Detected = result & 32768 @return: (int) The alarms flags value """ @@ -196,6 +228,7 @@ alarm_id = struct.unpack('