1#!/usr/bin/env python3 2# BlueKitchen GmbH (c) 2017 3 4# primitive dump for .tlv format 5 6import sys 7 8def read_net_32(f): 9 a = f.read(1) 10 if a == '': 11 return -1 12 b = f.read(1) 13 if b == '': 14 return -1 15 c = f.read(1) 16 if c == '': 17 return -1 18 d = f.read(1) 19 if d == '': 20 return -1 21 return ord(a) << 24 | ord(b) << 16 | ord(c) << 8 | ord(d) 22 23def as_hex(data): 24 str_list = [] 25 for byte in data: 26 str_list.append("{0:02x} ".format(byte)) 27 return ''.join(str_list) 28 29if len(sys.argv) == 1: 30 print ('Dump TLV file') 31 print ('Copyright 2017, BlueKitchen GmbH') 32 print ('') 33 print ('Usage: ', sys.argv[0], 'file.tlv') 34 exit(0) 35 36infile = sys.argv[1] 37 38with open (infile, 'rb') as fin: 39 pos = 0 40 try: 41 # check header 42 magic_0 = read_net_32(fin) 43 magic_1 = read_net_32(fin) 44 if magic_0 != 0x42547374 or magic_1 != 0x61636b00: 45 print("%x" % magic_0) 46 print("%x" % magic_1) 47 print ("Not a valid BTstack .tlv file\n") 48 exit(0) 49 pos += 8 50 print("Valid .tlv file") 51 while True: 52 tag = read_net_32(fin) 53 if tag < 0: 54 break 55 pos += 4 56 len = read_net_32(fin) 57 pos += 4 58 packet = fin.read(len) 59 pos += len 60 print('%04x: ' % tag + as_hex(packet)) 61 print("Done") 62 63 except TypeError: 64 print ("Error parsing tlv at offset %u (%x)." % (pos, pos)) 65