1#!/usr/bin/env python 2# BlueKitchen GmbH (c) 2017 3 4# primitive dump for .tlv format 5 6import re 7import sys 8import time 9import datetime 10 11def read_net_32(f): 12 a = f.read(1) 13 if a == '': 14 return -1 15 b = f.read(1) 16 if b == '': 17 return -1 18 c = f.read(1) 19 if c == '': 20 return -1 21 d = f.read(1) 22 if d == '': 23 return -1 24 return ord(a) << 24 | ord(b) << 16 | ord(c) << 8 | ord(d) 25 26def as_hex(data): 27 str_list = [] 28 for byte in data: 29 str_list.append("{0:02x} ".format(ord(byte))) 30 return ''.join(str_list) 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 try: 44 # check header 45 magic_0 = read_net_32(fin) 46 magic_1 = read_net_32(fin) 47 if magic_0 != 0x42547374 or magic_1 != 0x61636b00: 48 print("%x" % magic_0) 49 print("%x" % magic_1) 50 print ("Not a valid BTstack .tlv file\n") 51 exit(0) 52 pos += 8 53 print("Valid .tlv file") 54 while True: 55 tag = read_net_32(fin) 56 if tag < 0: 57 break 58 pos += 4 59 len = read_net_32(fin) 60 pos += 4 61 packet = fin.read(len) 62 pos += len 63 print('%04x: ' % tag + as_hex(packet)) 64 print("Done") 65 66 except TypeError: 67 print ("Error parsing tlv at offset %u (%x)." % (pos, pos)) 68 69