xref: /btstack/test/hfp/dump_test_sequence_from_pklg.py (revision 18602070d314e5290678397b862119fe00d2f45c)
10cacd247SMilanka Ringwald#!/usr/bin/env python
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:
350cacd247SMilanka Ringwald    print 'Dump PacketLogger file'
360cacd247SMilanka Ringwald    print 'Copyright 2014, BlueKitchen GmbH'
370cacd247SMilanka Ringwald    print ''
380cacd247SMilanka 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 = "    "
450cacd247SMilanka Ringwaldprint "const char * "+test_name+"[] = {"
460cacd247SMilanka Ringwald
47*18602070SMilanka 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:
59*18602070SMilanka Ringwald                packet = packet.replace("\n","\\n")
60*18602070SMilanka Ringwald                packet = packet.replace("\r","\\r")
61*18602070SMilanka Ringwald                packet = packet.replace("\"","\\\"")
620cacd247SMilanka Ringwald
630cacd247SMilanka Ringwald                parts = re.match('HFP_RX(.*)',packet)
640cacd247SMilanka Ringwald                if not parts:
65*18602070SMilanka Ringwald                    parts = re.match('HFP_TX(.*)',packet)
660cacd247SMilanka Ringwald
670cacd247SMilanka Ringwald                cmd = 0
680cacd247SMilanka Ringwald                if parts:
69*18602070SMilanka Ringwald                    hfp_cmds = parts.groups()[0].split('\\r\\n')
70*18602070SMilanka Ringwald                    for cmd in hfp_cmds:
71*18602070SMilanka Ringwald                        cmd = cmd.strip()
72*18602070SMilanka Ringwald                        if cmd <> "":
730cacd247SMilanka Ringwald                            print separator+spaces+"\""+cmd+"\"",
740cacd247SMilanka Ringwald                            separator = ",\n"
750cacd247SMilanka Ringwald
76*18602070SMilanka Ringwald
770cacd247SMilanka Ringwald    except TypeError:
780cacd247SMilanka Ringwald        print "\n};\n"
790cacd247SMilanka Ringwald        exit(0)
800cacd247SMilanka Ringwald
810cacd247SMilanka Ringwaldprint "\n};\n"
820cacd247SMilanka Ringwald
83