compile_gatt.py (4783d25609a5032739e1b6e67d2236f2d80f2100) compile_gatt.py (ced5a857a4247f7eaffbe9bc3bff2d5bde76efb7)
1#!/usr/bin/env python3
2#
3# BLE GATT configuration generator for use with BTstack
4# Copyright 2019 BlueKitchen GmbH
5#
6# Format of input file:
7# PRIMARY_SERVICE, SERVICE_UUID
8# CHARACTERISTIC, ATTRIBUTE_TYPE_UUID, [READ | WRITE | DYNAMIC], VALUE
9
10# dependencies:
11# - pip3 install pycryptodomex
1#!/usr/bin/env python3
2#
3# BLE GATT configuration generator for use with BTstack
4# Copyright 2019 BlueKitchen GmbH
5#
6# Format of input file:
7# PRIMARY_SERVICE, SERVICE_UUID
8# CHARACTERISTIC, ATTRIBUTE_TYPE_UUID, [READ | WRITE | DYNAMIC], VALUE
9
10# dependencies:
11# - pip3 install pycryptodomex
12# alternatively, the pycryptodome package can be used instead
13# - pip3 install pycryptodome
12
13import codecs
14import csv
15import io
16import os
17import re
18import string
19import sys
20import argparse
21import tempfile
22
14
15import codecs
16import csv
17import io
18import os
19import re
20import string
21import sys
22import argparse
23import tempfile
24
23# try to import Cryptodome
25have_crypto = True
26# try to import PyCryptodome independent from PyCrypto
24try:
25 from Cryptodome.Cipher import AES
26 from Cryptodome.Hash import CMAC
27try:
28 from Cryptodome.Cipher import AES
29 from Cryptodome.Hash import CMAC
27 have_crypto = True
28except ImportError:
30except ImportError:
29 have_crypto = False
30 print("\n[!] PyCryptodome required to calculate GATT Database Hash but not installed (using random value instead)")
31 print("[!] Please install PyCryptodome, e.g. 'pip install pycryptodomex'\n")
31 # fallback: try to import PyCryptodome as (an almost drop-in) replacement for the PyCrypto library
32 try:
33 from Crypto.Cipher import AES
34 from Crypto.Hash import CMAC
35 except ImportError:
36 have_crypto = False
37 print("\n[!] PyCryptodome required to calculate GATT Database Hash but not installed (using random value instead)")
38 print("[!] Please install PyCryptodome, e.g. 'pip install pycryptodomex' or 'pip install pycryptodome'\n")
32
33header = '''
34// {0} generated from {1} for BTstack
35// it needs to be regenerated when the .gatt file is updated.
36
37// To generate {0}:
38// {2} {1} {0}
39

--- 1016 unchanged lines hidden ---
39
40header = '''
41// {0} generated from {1} for BTstack
42// it needs to be regenerated when the .gatt file is updated.
43
44// To generate {0}:
45// {2} {1} {0}
46

--- 1016 unchanged lines hidden ---