Index: DialityCoreCanProtocol.py =================================================================== diff -u -r65448aafb518b3e8a7cb5de5ca115666cec839d1 -re0254e59354475c1e7c95ac4c0ff033a33d98fd7 --- DialityCoreCanProtocol.py (.../DialityCoreCanProtocol.py) (revision 65448aafb518b3e8a7cb5de5ca115666cec839d1) +++ DialityCoreCanProtocol.py (.../DialityCoreCanProtocol.py) (revision e0254e59354475c1e7c95ac4c0ff033a33d98fd7) @@ -359,6 +359,7 @@ self.__longMsgChannelIDSet = set() self.__dialinMessageList = None + self.__lastSentMessage = None self.__dialinCommandResponseMessage = None self.__dialinResponseChannelID = -1 @@ -505,42 +506,53 @@ \returns: Diality Packet, it it times out it returns None """ - channel_id = DenaliMessage.getChannelID(built_message) + msg_sent = False - padded_can_message_array = built_message['message'] + # keep trying to send message until we get a response + while msg_sent is not True: + self.__lastSentMessage = built_message - self.__sendPacketRequestID = DenaliMessage.getMessageID(built_message) + channel_id = DenaliMessage.getChannelID(built_message) - # A message can be longer than 8 bytes, so we need to split it - # into 8 bytes packets. + padded_can_message_array = built_message['message'] - number_of_packets = DenaliMessage.getTotalPackets(padded_can_message_array) + self.__sendPacketRequestID = DenaliMessage.getMessageID(built_message) - # We are sending one message at a time on CAN + # A message can be longer than 8 bytes, so we need to split it + # into 8 bytes packets. - for n in range(number_of_packets): - packet = padded_can_message_array[n * DenaliMessage.PACKET_LENGTH: - (n + 1) * DenaliMessage.PACKET_LENGTH] + number_of_packets = DenaliMessage.getTotalPackets(padded_can_message_array) - # Sending one packet at a time - packet = can.Message(arbitration_id=channel_id, - data=packet, - is_extended_id=False) + # We are sending one message at a time on CAN - self.__bus.send(packet) + for n in range(number_of_packets): + packet = padded_can_message_array[n * DenaliMessage.PACKET_LENGTH: + (n + 1) * DenaliMessage.PACKET_LENGTH] - # Sending - self.__dialinCommandResponseMessage = None + # Sending one packet at a time + packet = can.Message(arbitration_id=channel_id, + data=packet, + is_extended_id=False) - # After all message has been sent, we clear a flag - self.__sendEvent.clear() + self.__bus.send(packet) - # At this point, we sleep until the system times out or flag is set - self.__sendEvent.wait(time_out) + # Sending + self.__dialinCommandResponseMessage = None - # We are ready to send again. Reset request ID appropriately - self.__sendPacketRequestID = -1 + # After all message has been sent, we clear a flag + self.__sendEvent.clear() + # At this point, we sleep until the system times out or flag is set + self.__sendEvent.wait(time_out) + + if self.__dialinCommandResponseMessage is not None: + msg_sent = True + else: + print("No response. Re-sending message.") + + # We are ready to send again. Reset request ID appropriately + self.__sendPacketRequestID = -1 + # This value is None or it has a message depending of the listener return self.__dialinCommandResponseMessage