Index: dialin/common/msg_ids.py =================================================================== diff -u -rfe1972cd6dd94cb89c66bfb238dac50cb710224e -r3b58405e25515e1cf391d513a5b6551ab3468369 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision fe1972cd6dd94cb89c66bfb238dac50cb710224e) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 3b58405e25515e1cf391d513a5b6551ab3468369) @@ -370,7 +370,12 @@ MSG_ID_DG_FLUID_LEAK_STATE_DETECTOR_OVERRIDE = 0XA040 MSG_ID_DG_FLUSH_PUBLISH_INTERVAL_OVERRIDE = 0XA041 MSG_ID_FILTER_FLUSH_TIME_PERIOD_OVERRIDE = 0XA042 + MSG_ID_DG_FANS_RPM_OVERRIDE = 0XA043 MSG_ID_DIALYSATE_FLOW_SEND_INTERVAL_OVERRIDE = 0xA044 + MSG_ID_DG_STOP_RTC_CLOCK = 0XA045 + MSG_ID_DG_DRAIN_PUMP_MEASURED_RPM_OVERRIDE = 0XA046 + MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD = 0XA047 + MSG_ID_HD_DEBUG_EVENT = 0XFFF1 MSG_ID_DG_DEBUG_EVENT = 0XFFF2 MSG_ID_ACK_MESSAGE_THAT_REQUIRES_ACK = 0XFFFF Index: dialin/dg/alarms.py =================================================================== diff -u -r5ac4d7d984a093a2e76df9ecef4b3753f76b6abd -r3b58405e25515e1cf391d513a5b6551ab3468369 --- dialin/dg/alarms.py (.../alarms.py) (revision 5ac4d7d984a093a2e76df9ecef4b3753f76b6abd) +++ dialin/dg/alarms.py (.../alarms.py) (revision 3b58405e25515e1cf391d513a5b6551ab3468369) @@ -44,12 +44,16 @@ msg_id = MsgIds.MSG_ID_ALARM_TRIGGERED.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarm_activate) - channel_id = DenaliChannels.dg_alarm_broadcast_ch_id msg_id = MsgIds.MSG_ID_ALARM_CLEARED.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarm_clear) + 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) + # alarm states based on received DG alarm activation and alarm clear messages self.alarm_states = [False] * 500 + # alarm condition states based on received DG alarm activation and clear condition messages + self.alarm_conditions = [False] * 500 def get_alarm_states(self): """ @@ -59,6 +63,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_alarm_state(self, alarm_id): """ Gets alarm state for given alarm @@ -78,6 +90,7 @@ alarm_id = struct.unpack(' int: """ Constructs and sends the alarm state override command @@ -129,3 +155,30 @@ # response payload is OK or not OK return 1 == received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] return False + + def cmd_clear_all_alarms(self) -> int: + """ + Constructs and sends the clear all active alarms command to the DG. + This will clear even non-recoverable alarms. + Constraints: + Must be logged into DG. + + @return: 1 if successful, zero otherwise + """ + + key = integer_to_bytearray(-758926171) # 0xD2C3B4A5 + payload = key + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_SUPER_CLEAR_ALARMS_CMD.value, + payload=payload) + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + self.logger.debug("All DG alarms cleared.") + # response payload is OK or not OK + return 1 == received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + return False Index: dialin/hd/alarms.py =================================================================== diff -u -recfaee3ad071edb368488eb750692f16a91ddbad -r3b58405e25515e1cf391d513a5b6551ab3468369 --- dialin/hd/alarms.py (.../alarms.py) (revision ecfaee3ad071edb368488eb750692f16a91ddbad) +++ dialin/hd/alarms.py (.../alarms.py) (revision 3b58405e25515e1cf391d513a5b6551ab3468369) @@ -142,6 +142,14 @@ """ return self.alarm_conditions + def get_alarm_state(self, alarm_id): + """ + Gets alarm state for given alarm + + @return: Alarm state + """ + return self.alarm_states[alarm_id] + def get_alarms_top(self): """ Gets the top alarm @@ -336,7 +344,7 @@ for x in range(500): self.alarm_states[x] = False - @publish(["alarm_states"]) + @publish(["alarm_states","alarm_conditions"]) def _handler_alarm_activate(self, message): """ Handles published HD alarm activation messages. @@ -350,7 +358,7 @@ self.alarm_states[alarm_id[0]] = True self.alarm_conditions[alarm_id[0]] = True - @publish(["alarm_states"]) + @publish(["alarm_states","alarm_conditions"]) def _handler_alarm_clear(self, message): """ Handles published HD alarm clear messages. @@ -363,7 +371,7 @@ self.alarm_states[alarm_id[0]] = False self.alarm_conditions[alarm_id[0]] = False - @publish(["alarm_conditions"]) + @publish(["alarm_conditions","alarm_conditions"]) def _handler_alarm_condition_clear(self, message): """ Handles published HD alarm clear alarm condition messages.