generate_component_general.py
2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/usr/bin/env python
import argparse
import json
import lzma #to create .xz file
import re
parser = argparse.ArgumentParser(description="""Generate the COMPONENT_GENERAL json file""")
parser.add_argument('filename', metavar='component_general.json', help='JSON output file')
parser.add_argument('--compress', action='store_true', help='Add a compressed output file')
parser.add_argument('--type', metavar='type', action="append", default=[],
help='Metadata type (<type>,<metadata file>,<uri>,<fallback uri>,[translation uri])')
parser.add_argument('--version-file', metavar='build_git_version.h', help='Git version file')
args = parser.parse_args()
filename = args.filename
compress = args.compress
version_file = args.version_file
version_dir = ''
if version_file is not None:
for line in open(version_file, "r"):
version_search = re.search('PX4_GIT_TAG_OR_BRANCH_NAME\s+"(.+)"', line)
if version_search:
version_dir = version_search.group(1)
break
def save_compressed(filename):
#create lzma compressed version
xz_filename=filename+'.xz'
with lzma.open(xz_filename, 'wt', preset=9) as f:
with open(filename, 'r') as content_file:
f.write(content_file.read())
component_general = {}
component_general['version'] = 1
def create_table():
a = []
for i in range(256):
k = i
for j in range(8):
if k & 1:
k ^= 0x1db710640
k >>= 1
a.append(k)
return a
# MAVLink's CRC32
def crc_update(buf, crc_table, crc):
for k in buf:
crc = (crc >> 8) ^ crc_table[(crc & 0xff) ^ k]
return crc
crc_table = create_table()
metadata_types = []
for metadata_type_tuple in args.type:
type_id, metadata_file, uri, fallback_uri, translation_uri = metadata_type_tuple.split(',')
file_crc = 0
for line in open(metadata_file, "rb"):
file_crc = crc_update(line, crc_table, file_crc)
json_type = {
'type': int(type_id),
'uri': uri.replace('{version}', version_dir),
'fileCrc': file_crc,
'uriFallback': fallback_uri.replace('{version}', version_dir),
}
if len(translation_uri) > 0:
json_type['translationUri'] = translation_uri
metadata_types.append(json_type)
component_general['metadataTypes'] = metadata_types
with open(filename, 'w') as outfile:
json.dump(component_general, outfile)
if compress:
save_compressed(filename)