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