Index: dialin/common/msg_ids.py =================================================================== diff -u -rd2b3fbb3d2f087b815a6a74f85098e0ae57e6b85 -r3317ac65578c37688f260093b37d782b89006297 --- dialin/common/msg_ids.py (.../msg_ids.py) (revision d2b3fbb3d2f087b815a6a74f85098e0ae57e6b85) +++ dialin/common/msg_ids.py (.../msg_ids.py) (revision 3317ac65578c37688f260093b37d782b89006297) @@ -383,6 +383,7 @@ MSG_ID_HD_SIGNAL_RECOVER_FROM_FAULT_MODE = 0x8098 MSG_ID_HD_RAM_STATUS_OVERRIDE = 0x8099 MSG_ID_HD_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE = 0x809A + MSG_ID_HD_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE = 0x809B MSG_ID_DG_TESTER_LOGIN_REQUEST = 0xA000 MSG_ID_DG_ALARM_STATE_OVERRIDE = 0xA001 @@ -497,6 +498,8 @@ MSG_ID_DG_DRAIN_MODE_BROADCAST_INTERVAL_OVERRIDE = 0xA070 MSG_ID_DG_DIALIN_RO_ONLY_MODE_STATUS_REQUEST = 0xA071 MSG_ID_DG_RAM_STATUS_OVERRIDE = 0xA072 + MSG_ID_DG_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE = 0xA073 + MSG_ID_DG_RESERVOIR_BROADCAST_INTERVAL_OVERRIDE = 0xA074 MSG_ID_HD_DEBUG_EVENT = 0xFFF1 MSG_ID_DG_DEBUG_EVENT = 0xFFF2 Index: dialin/dg/dialysate_generator.py =================================================================== diff -u -rd2b3fbb3d2f087b815a6a74f85098e0ae57e6b85 -r3317ac65578c37688f260093b37d782b89006297 --- dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision d2b3fbb3d2f087b815a6a74f85098e0ae57e6b85) +++ dialin/dg/dialysate_generator.py (.../dialysate_generator.py) (revision 3317ac65578c37688f260093b37d782b89006297) @@ -607,4 +607,43 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") + return False + + def cmd_dg_pending_ack_override(self, pending_ack_channel: int = 0, reset: int = NO_RESET) -> int: + """ + Constructs and sends an DG pending ack override command via CAN bus. + Constraints: + Must be logged into DG. + + Will prevent receiving ACK messages from being registered. + Used to trigger ALARM_ID_DG_CAN_MESSAGE_NOT_ACKED + after retries are sent. + + Use 1 for HD CAN messages Alarm. + + + @param pending_ack_channel: integer - 1 for HD Channel ACK + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + + """ + rst = integer_to_bytearray(reset) + pack = integer_to_bytearray(pending_ack_channel) + payload = rst + pack + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_dg_ch_id, + message_id=MsgIds.MSG_ID_DG_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE.value, + payload=payload) + + self.logger.debug("overriding DG Pending ACK") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") return False \ No newline at end of file Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -rf26e9473ddcf393ae7b8e1ca852067507c82b3be -r3317ac65578c37688f260093b37d782b89006297 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision f26e9473ddcf393ae7b8e1ca852067507c82b3be) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 3317ac65578c37688f260093b37d782b89006297) @@ -792,4 +792,43 @@ return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] else: self.logger.debug("Timeout!!!!") + return False + + def cmd_hd_pending_ack_override(self, pending_ack_channel: int = 0, reset: int = NO_RESET) -> int: + """ + Constructs and sends an HD pending ack override command via CAN bus. + Constraints: + Must be logged into HD. + + Will prevent receiving ACK messages from being registered. + Used to trigger ALARM_ID_HD_CAN_MESSAGE_NOT_ACKED_BY_UI and ALARM_ID_HD_CAN_MESSAGE_NOT_ACKED_BY_DG + after retries are sent. + + Use 1 for UI CAN messages Alarm. + 2 for DG CAN messages Alarm. + + @param pending_ack_channel: integer - 1 for UI Channel ACK, 2 for DG Channel ACK + @param reset: integer - 1 to reset a previous override, 0 to override + @return: 1 if successful, zero otherwise + + """ + rst = integer_to_bytearray(reset) + pack = integer_to_bytearray(pending_ack_channel) + payload = rst + pack + + message = DenaliMessage.build_message(channel_id=DenaliChannels.dialin_to_hd_ch_id, + message_id=MsgIds.MSG_ID_HD_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE.value, + payload=payload) + + self.logger.debug("overriding HD Pending ACK") + + # Send message + received_message = self.can_interface.send(message) + + # If there is content... + if received_message is not None: + # response payload is OK or not OK + return received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] + else: + self.logger.debug("Timeout!!!!") return False \ No newline at end of file