Index: leahi_dialin/dd/modules/alarms.py =================================================================== diff -u -r7b57215288f7346175091c6f69e0edddca5018b5 -r1c0302ebcb0d4d70249ab0932f43b0143e19a1d9 --- leahi_dialin/dd/modules/alarms.py (.../alarms.py) (revision 7b57215288f7346175091c6f69e0edddca5018b5) +++ leahi_dialin/dd/modules/alarms.py (.../alarms.py) (revision 1c0302ebcb0d4d70249ab0932f43b0143e19a1d9) @@ -41,7 +41,7 @@ self.logger = logger if self.can_interface is not None: - channel_id = DenaliChannels.fp_alarm_broadcast_ch_id + channel_id = DenaliChannels.dd_alarm_broadcast_ch_id msg_id = MsgIds.MSG_ID_ALARM_TRIGGERED.value self.can_interface.register_receiving_publication_function(channel_id, msg_id, self._handler_alarm_triggered) @@ -126,5 +126,45 @@ def _handler_alarm_info(self, message, timestamp = 0.0): pass + def cmd_alarm_state_override(self, alarm: int, state: int, reset: int = NO_RESET) -> int: + """ + Constructs and sends the alarm state override command + Constraints: + Must be logged into DD. + Given alarm must be valid. + If inactivating alarm, given alarm must be recoverable (clearable). + @param alarm: integer - ID of alarm to override + @param state: integer - 1 for alarm active, 0 for alarm inactive + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + """ + + rst = integer_to_bytearray(reset) + sta = integer_to_bytearray(state) + alm = integer_to_bytearray(alarm) + payload = rst + sta + alm + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dd_ch_id, + message_id=MsgIds.MSG_ID_DD_ALARM_STATE_OVERRIDE_REQUEST.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(received_message) + if reset == RESET: + str_res = "reset back to normal" + else: + str_res = ("active" if state != 0 else "inactive") + self.logger.debug("Alarm " + str(alarm) + " " + str_res + ": " + + str(received_message['message'][DenaliMessage.PAYLOAD_START_INDEX])) + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") + return False + #TODO: alarm state override, alarm info pubish override