xref: /btstack/tool/bluetooth_gatt_process_uuid_list.py (revision 987989bd15851120a37de9994e074fd793fba0e8)
1*987989bdSMilanka Ringwald#!/usr/bin/env python3
2*987989bdSMilanka Ringwald#
3*987989bdSMilanka Ringwald# Convert format UUID16 // SERVICE_NAME into bluetooth_gatt.h defines
4*987989bdSMilanka Ringwald# Copyright 2021 BlueKitchen GmbH
5*987989bdSMilanka Ringwald#
6*987989bdSMilanka Ringwaldimport os, sys, getopt
7*987989bdSMilanka Ringwald
8*987989bdSMilanka Ringwaldtag_description = {
9*987989bdSMilanka Ringwald    "-c" : "ORG_BLUETOOTH_CHARACTERISTIC",
10*987989bdSMilanka Ringwald    "-s" : "ORG_BLUETOOTH_SERVICE"
11*987989bdSMilanka Ringwald}
12*987989bdSMilanka Ringwald
13*987989bdSMilanka Ringwalddef main(argv):
14*987989bdSMilanka Ringwald    cmd = "\nUSAGE: %s [-s|-c] [-f filename]" % sys.argv[0]
15*987989bdSMilanka Ringwald    cmd += "\n -s: for SERVICE_UUID"
16*987989bdSMilanka Ringwald    cmd += "\n -c: for CHARACTERISTICS_UUID"
17*987989bdSMilanka Ringwald    cmd += "\n -f filename: input file with UUID and comment, i.e. 0x2B29 // Client Supported Features\n"
18*987989bdSMilanka Ringwald
19*987989bdSMilanka Ringwald    tag_define = None
20*987989bdSMilanka Ringwald    filename = None
21*987989bdSMilanka Ringwald
22*987989bdSMilanka Ringwald    try:
23*987989bdSMilanka Ringwald        opts, args = getopt.getopt(argv[1:],"scf:")
24*987989bdSMilanka Ringwald    except getopt.GetoptError:
25*987989bdSMilanka Ringwald        print("ERROR: wrong options")
26*987989bdSMilanka Ringwald        print (cmd)
27*987989bdSMilanka Ringwald        sys.exit(2)
28*987989bdSMilanka Ringwald
29*987989bdSMilanka Ringwald    print(opts)
30*987989bdSMilanka Ringwald
31*987989bdSMilanka Ringwald    for opt, arg in opts:
32*987989bdSMilanka Ringwald        if opt == '-s' or opt == '-c':
33*987989bdSMilanka Ringwald            tag_define = tag_description[opt]
34*987989bdSMilanka Ringwald        elif opt == '-f':
35*987989bdSMilanka Ringwald            print("filename")
36*987989bdSMilanka Ringwald            filename = arg
37*987989bdSMilanka Ringwald        else:
38*987989bdSMilanka Ringwald            print("ERROR: wrong options")
39*987989bdSMilanka Ringwald            print (cmd)
40*987989bdSMilanka Ringwald            sys.exit(2)
41*987989bdSMilanka Ringwald
42*987989bdSMilanka Ringwald    if (not tag_define) or (not filename):
43*987989bdSMilanka Ringwald        print("ERROR: wrong options")
44*987989bdSMilanka Ringwald        print (cmd)
45*987989bdSMilanka Ringwald        sys.exit(2)
46*987989bdSMilanka Ringwald
47*987989bdSMilanka Ringwald    with open (filename, 'rt') as fin:
48*987989bdSMilanka Ringwald        for line in fin:
49*987989bdSMilanka Ringwald            data = line.strip('\n').split(" // ")
50*987989bdSMilanka Ringwald            if len(data) != 2:
51*987989bdSMilanka Ringwald                continue
52*987989bdSMilanka Ringwald            else:
53*987989bdSMilanka Ringwald                uuid = data[0]
54*987989bdSMilanka Ringwald                summary = data[1]
55*987989bdSMilanka Ringwald
56*987989bdSMilanka Ringwald                tag = summary.upper().replace('.', '_').replace('-','_').replace(' ', '_')
57*987989bdSMilanka Ringwald                print("#define %s_%-80s %s // %s" %  (tag_define, tag, uuid, summary))
58*987989bdSMilanka Ringwald
59*987989bdSMilanka Ringwald
60*987989bdSMilanka Ringwald
61*987989bdSMilanka Ringwaldif __name__ == "__main__":
62*987989bdSMilanka Ringwald   main(sys.argv)
63*987989bdSMilanka Ringwald