Index: dialin/hd/hemodialysis_device.py =================================================================== diff -u -r363867c876456821000c189f86fbb55b4d583c50 -r4e09b977d0165c359f66307e45db83b0a7e8e9c9 --- dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 363867c876456821000c189f86fbb55b4d583c50) +++ dialin/hd/hemodialysis_device.py (.../hemodialysis_device.py) (revision 4e09b977d0165c359f66307e45db83b0a7e8e9c9) @@ -204,7 +204,7 @@ self.logger.debug("Logging in...") # Send message - received_message = self.can_interface.send(message) + received_message = self.can_interface.send(message, resend=True) if received_message is not None: if received_message['message'][DenaliMessage.PAYLOAD_START_INDEX] == 1: Index: dialin/protocols/CAN.py =================================================================== diff -u -r3338499f8613c3e0156b21c5535109c464cc5438 -r4e09b977d0165c359f66307e45db83b0a7e8e9c9 --- dialin/protocols/CAN.py (.../CAN.py) (revision 3338499f8613c3e0156b21c5535109c464cc5438) +++ dialin/protocols/CAN.py (.../CAN.py) (revision 4e09b977d0165c359f66307e45db83b0a7e8e9c9) @@ -511,14 +511,14 @@ else: self.sync_response_dictionary[channel_id] = {message_id: function} - def send(self, built_message, time_out=DIALIN_MSG_RESP_TO): + def send(self, built_message: dict, time_out: float = DIALIN_MSG_RESP_TO, resend: bool = False): """ - sends can_packet to channel_id. + Sends a denali message - @param built_message: message built using DialinMessage class - @param time_out: time it will wait for a response in seconds - - @return:: Diality Packet, it it times out it returns None + @param built_message: (dict) message built using DialinMessage class + @param time_out: (float) time it will wait for a response in seconds + @param resend: (bool) Allow resending the message when no response is received. Disabled by default + @return: (dict) The denali packet. If a timeout occurs returns None """ msg_sent = False @@ -555,20 +555,20 @@ # Sending self.command_response_message = None - # After all message has been sent, we clear a flag + # After all messages have been sent, we clear a flag self.send_event.clear() - # At this point, we sleep until the system times out or flag is set + # Block until the timeout completes or until the threading event's flag is set in self.listener, + # indicating a response has been received self.send_event.wait(time_out) - if self.command_response_message is not None: - msg_sent = True - elif time_out == 0: - msg_sent = True - else: - # msg_sent = False - self.logger.debug("No response. Re-sending message.") + msg_sent = True + # only resend the message if resend is enabled and we haven't received a response yet + if resend and self.command_response_message is None: + msg_sent = False + self.logger.debug("No response. Re-sending message.") + # We are ready to send again. Reset request ID appropriately self.send_packet_request_id = -1 Index: tests/test_hd_reset.py =================================================================== diff -u -r2547391a5b9dd00230b8238dba5d0ae6caf2e4c6 -r4e09b977d0165c359f66307e45db83b0a7e8e9c9 --- tests/test_hd_reset.py (.../test_hd_reset.py) (revision 2547391a5b9dd00230b8238dba5d0ae6caf2e4c6) +++ tests/test_hd_reset.py (.../test_hd_reset.py) (revision 4e09b977d0165c359f66307e45db83b0a7e8e9c9) @@ -23,7 +23,7 @@ @return: None """ - hd = HD(log_level="CAN_ONLY") + hd = HD(log_level="DEBUG") hd.cmd_log_in_to_hd() hd.cmd_hd_software_reset_request()