xref: /btstack/tool/dump_tlv.py (revision 1d3bd1e51ca491d6783233c8d7431c44f06daa5a)
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