xref: /btstack/test/hfp/dump_test_sequence_from_pklg.py (revision 6ccd8248590f666db07dd7add13fecb4f5664fb5)
1*6ccd8248SMilanka Ringwald#!/usr/bin/env python3
20cacd247SMilanka Ringwald# BlueKitchen GmbH (c) 2014
30cacd247SMilanka Ringwald
40cacd247SMilanka Ringwald# primitive dump for PacketLogger format
50cacd247SMilanka Ringwald
60cacd247SMilanka Ringwald# APPLE PacketLogger
70cacd247SMilanka Ringwald# typedef struct {
80cacd247SMilanka Ringwald#   uint32_t    len;
90cacd247SMilanka Ringwald#   uint32_t    ts_sec;
100cacd247SMilanka Ringwald#   uint32_t    ts_usec;
110cacd247SMilanka Ringwald#   uint8_t     type;   // 0xfc for note
120cacd247SMilanka Ringwald# }
130cacd247SMilanka Ringwald
140cacd247SMilanka Ringwaldimport re
150cacd247SMilanka Ringwaldimport sys
160cacd247SMilanka Ringwaldimport time
170cacd247SMilanka Ringwaldimport datetime
180cacd247SMilanka Ringwald
190cacd247SMilanka Ringwaldpacket_types = [ "CMD =>", "EVT <=", "ACL =>", "ACL <="]
200cacd247SMilanka Ringwald
210cacd247SMilanka Ringwalddef read_net_32(f):
220cacd247SMilanka Ringwald    a = f.read(1)
230cacd247SMilanka Ringwald    b = f.read(1)
240cacd247SMilanka Ringwald    c = f.read(1)
250cacd247SMilanka Ringwald    d = f.read(1)
260cacd247SMilanka Ringwald    return ord(a) << 24 | ord(b) << 16 | ord(c) << 8 | ord(d)
270cacd247SMilanka Ringwald
280cacd247SMilanka Ringwalddef as_hex(data):
290cacd247SMilanka Ringwald    str_list = []
300cacd247SMilanka Ringwald    for byte in data:
310cacd247SMilanka Ringwald        str_list.append("{0:02x} ".format(ord(byte)))
320cacd247SMilanka Ringwald    return ''.join(str_list)
330cacd247SMilanka Ringwald
340cacd247SMilanka Ringwaldif len(sys.argv) < 2:
35*6ccd8248SMilanka Ringwald    print ('Dump PacketLogger file')
36*6ccd8248SMilanka Ringwald    print ('Copyright 2014, BlueKitchen GmbH')
37*6ccd8248SMilanka Ringwald    print ('')
38*6ccd8248SMilanka Ringwald    print ('Usage: ', sys.argv[0], 'hci_dump.pklg test_name')
390cacd247SMilanka Ringwald    exit(0)
400cacd247SMilanka Ringwald
410cacd247SMilanka Ringwaldinfile = sys.argv[1]
420cacd247SMilanka Ringwaldtest_name = sys.argv[2]
430cacd247SMilanka Ringwaldseparator = ""
440cacd247SMilanka Ringwaldspaces = "    "
45*6ccd8248SMilanka Ringwaldprint ("const char * "+test_name+"[] = {")
460cacd247SMilanka Ringwald
4718602070SMilanka Ringwald
480cacd247SMilanka Ringwaldwith open (infile, 'rb') as fin:
490cacd247SMilanka Ringwald    try:
500cacd247SMilanka Ringwald        while True:
510cacd247SMilanka Ringwald            len     = read_net_32(fin)
520cacd247SMilanka Ringwald            ts_sec  = read_net_32(fin)
530cacd247SMilanka Ringwald            ts_usec = read_net_32(fin)
540cacd247SMilanka Ringwald            type    = ord(fin.read(1))
550cacd247SMilanka Ringwald            packet_len = len - 9;
560cacd247SMilanka Ringwald            packet  = fin.read(packet_len)
570cacd247SMilanka Ringwald            time    = "[%s.%03u]" % (datetime.datetime.fromtimestamp(ts_sec).strftime("%Y-%m-%d %H:%M:%S"), ts_usec / 1000)
580cacd247SMilanka Ringwald            if type == 0xfc:
5918602070SMilanka Ringwald                packet = packet.replace("\n","\\n")
6018602070SMilanka Ringwald                packet = packet.replace("\r","\\r")
6118602070SMilanka Ringwald                packet = packet.replace("\"","\\\"")
620cacd247SMilanka Ringwald
630cacd247SMilanka Ringwald                parts = re.match('HFP_RX(.*)',packet)
640cacd247SMilanka Ringwald                if not parts:
6518602070SMilanka Ringwald                    parts = re.match('HFP_TX(.*)',packet)
660cacd247SMilanka Ringwald
670cacd247SMilanka Ringwald                cmd = 0
680cacd247SMilanka Ringwald                if parts:
6918602070SMilanka Ringwald                    hfp_cmds = parts.groups()[0].split('\\r\\n')
7018602070SMilanka Ringwald                    for cmd in hfp_cmds:
7118602070SMilanka Ringwald                        cmd = cmd.strip()
72*6ccd8248SMilanka Ringwald                        if cmd != "":
73c3a23b29SMilanka Ringwald                            cmd = cmd.replace("\\r","")
74*6ccd8248SMilanka Ringwald                            print (separator+spaces+"\""+cmd+"\"",)
750cacd247SMilanka Ringwald                            separator = ",\n"
760cacd247SMilanka Ringwald
77c926bcaeSMilanka Ringwald                else:
78c926bcaeSMilanka Ringwald                    parts = re.match('USER:\'(.*)\'.*',packet)
79c926bcaeSMilanka Ringwald                    if parts:
80c926bcaeSMilanka Ringwald                        cmd = 'USER:'+parts.groups()[0]
81*6ccd8248SMilanka Ringwald                        print (separator+spaces+"\""+cmd+"\"",)
82c926bcaeSMilanka Ringwald                        separator = ",\n"
83c926bcaeSMilanka Ringwald
8418602070SMilanka Ringwald
850cacd247SMilanka Ringwald    except TypeError:
86*6ccd8248SMilanka Ringwald        print ("\n};\n")
870cacd247SMilanka Ringwald        exit(0)
880cacd247SMilanka Ringwald
89*6ccd8248SMilanka Ringwaldprint ("\n};\n")
90