コード例 #1
0
ファイル: message.py プロジェクト: thecubic/openomni
    def packets(self):
        message_type = self.body[0:2]
        body_remaining = self.body[2:] + self.computed_crc_bytes()
        packets = []
        while len(body_remaining) > 0:
            packet = Packet()
            packet.pod_address_1 = self.pod_id
            packet.sequence = self.start_seq + len(packets) * 2
            if len(packets) == 0:
                packet.packet_type = Packet.PACKET_TYPE_PDM
                packet.pod_address_2 = self.pod_id
                packet.byte9 = self.byte9
                packet.message_type = message_type
                segment_len = min(Packet.MAX_BODY_SEGMENT_LEN,
                                  len(body_remaining))
                packet.body = body_remaining[:segment_len]
                packet.body_len = len(self.body)
                body_remaining = body_remaining[segment_len:]
            else:
                packet.packet_type = Packet.PACKET_TYPE_CON
                segment_len = min(Packet.MAX_CON_BODY_SEGMENT_LEN,
                                  len(body_remaining))
                packet.body = body_remaining[:segment_len]
                body_remaining = body_remaining[segment_len:]

            packets.append(packet)

        return packets
コード例 #2
0
ファイル: message.py プロジェクト: openaps/openomni
    def packets(self):
        message_type = self.body[0:2]
        body_remaining = self.body[2:] + self.computed_crc_bytes()
        packets = []
        while len(body_remaining) > 0:
            packet = Packet()
            packet.pod_address_1 = self.pod_id
            packet.sequence = self.start_seq + len(packets) * 2
            if len(packets) == 0:
                packet.packet_type = Packet.PACKET_TYPE_PDM
                packet.pod_address_2 = self.pod_id
                packet.byte9 = self.byte9
                packet.message_type = message_type
                segment_len = min(Packet.MAX_BODY_SEGMENT_LEN,len(body_remaining))
                packet.body = body_remaining[:segment_len]
                packet.body_len = len(self.body)
                body_remaining = body_remaining[segment_len:]
            else:
                packet.packet_type = Packet.PACKET_TYPE_CON
                segment_len = min(Packet.MAX_CON_BODY_SEGMENT_LEN,len(body_remaining))
                packet.body = body_remaining[:segment_len]
                body_remaining = body_remaining[segment_len:]

            packets.append(packet)

        return packets
コード例 #3
0
def decode_control_msg(raw_packet):
    if raw_packet[1] != 0x03:
        print("- packet parser: decode_control_msg: raw packet not 0x03 type")
        return None

    if len(raw_packet) != 10:
        print("- packet parser: decode_control_msg: raw packet not 10 bytes",
              raw_packet.hex())
        return None

    unpacked = unpack('<ccccfcc', raw_packet)

    pkt = Packet()
    pkt.message_type = 0x03
    pkt.raw = raw_packet

    control_msg = {
        'node_id': int.from_bytes(unpacked[2], 'little'),
        'type': int.from_bytes(unpacked[3], 'little'),
        'u': unpacked[4]
    }

    crc = ((int.from_bytes(unpacked[5], 'little') & 0xff) << 8) | (
        int.from_bytes(unpacked[6], 'little') & 0xff)

    pkt.valid = validate_crc(raw_packet, crc)
    pkt.parsed = control_msg

    return pkt
コード例 #4
0
def decode_state_msg(raw_packet):
    if raw_packet[1] != 0x01:
        print("- packet parser: decode_state_msg: raw packet not 0x01 type")
        return None

    if len(raw_packet) != 24:
        print("- packet parser: decode_state_msg: raw packet not 24 bytes",
              raw_packet.hex())
        return None

    unpacked = unpack('<ccfffffcc', raw_packet)

    pkt = Packet()
    pkt.message_type = 0x01
    pkt.raw = raw_packet

    state_msg = {
        'x': unpacked[2],
        'y': unpacked[3],
        'phi': unpacked[4],
        'sp_x': unpacked[5],
        'sp_y': unpacked[6]
    }

    crc = ((int.from_bytes(unpacked[7], 'little') & 0xff) << 8) | (
        int.from_bytes(unpacked[8], 'little') & 0xff)
    pkt.valid = validate_crc(raw_packet, crc)
    pkt.parsed = state_msg
    return pkt
コード例 #5
0
def decode_user_msg(raw_packet):
    if raw_packet[1] != 0x04:
        print("- packet parser: decode_user_msg: raw packet not 0x04 type")
        return None

    pkt = Packet()
    pkt.message_type = 0x04
    pkt.raw = raw_packet
    crc = ((raw_packet[-2] & 0xff) << 8) | (raw_packet[-1] & 0xff)
    pkt.valid = validate_crc(raw_packet, crc)

    return pkt
コード例 #6
0
def decode_staterq_msg(raw_packet):
    if raw_packet[1] != 0x02:
        print("- packet parser: decode_staterq_msg: raw packet not 0x02 type")
        return None

    if len(raw_packet) != 5:
        print("- packet parser: decode_staterq_msg: raw packet not 5 bytes",
              raw_packet.hex())
        return None

    unpacked = unpack('<ccccc', raw_packet)

    pkt = Packet()
    pkt.message_type = 0x02
    pkt.raw = raw_packet

    staterq_msg = {'node_id': int.from_bytes(unpacked[2], 'little')}

    crc = ((int.from_bytes(unpacked[3], 'little') & 0xff) << 8) | (
        int.from_bytes(unpacked[4], 'little') & 0xff)
    pkt.valid = validate_crc(raw_packet, crc)
    pkt.parsed = staterq_msg

    return pkt