Index: DialityCoreCanProtocol.py =================================================================== diff -u -r680670f948d164932a6a68effa940bd8455e820e -rc199e4078bf228540f736e2d954c49f86b27e890 --- DialityCoreCanProtocol.py (.../DialityCoreCanProtocol.py) (revision 680670f948d164932a6a68effa940bd8455e820e) +++ DialityCoreCanProtocol.py (.../DialityCoreCanProtocol.py) (revision c199e4078bf228540f736e2d954c49f86b27e890) @@ -45,16 +45,23 @@ self.__number_of_can_message_needed = math.ceil((can_message[3] + 4) / 8) self.__number_of_can_message_up_to_now = 1 - def push(self, can_message): + def push(self, can_message, first_packet=False): """ push appends the can_message to the current packet. :param can_message: 8-byte message + :param first_packet: True if it is the first packet received + :return: None if the packet is not completed, otherwise returns the complete packet """ - self.__message += can_message - self.__number_of_can_message_up_to_now += 1 + if first_packet: + self.__message = can_message + self.__number_of_can_message_needed = math.ceil((can_message[3] + 4) / 8) + self.__number_of_can_message_up_to_now = 1 + else: + self.__message += can_message + self.__number_of_can_message_up_to_now += 1 if self.__number_of_can_message_up_to_now == self.__number_of_can_message_needed: return_message = self.__message @@ -150,13 +157,17 @@ if channel_id not in self.__longPacketsBuilders.keys(): # if we don't have a builder. Create it! - self.__longPacketsBuilders[channel_id] = __LongDialityPacketBuilder(can_data) + self.__longPacketsBuilders[channel_id] = LongDialityPacketBuilder(can_data) self.__dialityPacket = None - else: # this is the continuation of a long packet. A builder must have been created + else: #if we do have a builder. This is the first time + self.__dialityPacket = self.__longPacketsBuilders[channel_id].push(can_data, first_packet=True) + + else: # this is the continuation of a long message + if channel_id in self.__longPacketsBuilders.keys(): - self.__dialityPacket = self.__longPacketBuilders[channel_id].push(can_data) + self.__dialityPacket = self.__longPacketsBuilders[channel_id].push(can_data) # At this point we have a complete (long or short) Diality Packet