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