-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcommon.py
More file actions
53 lines (47 loc) · 2.03 KB
/
common.py
File metadata and controls
53 lines (47 loc) · 2.03 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
#!/usr/bin/env python
# encoding: utf-8
'''
Author: Huibean Luo <huibean.luo@vimdrones.com>
'''
def get_cast_mode(type):
if type.cast_mode == type.CAST_MODE_TRUNCATED:
return "PrimitiveType.CAST_MODE_TRUNCATED"
elif type.cast_mode == type.CAST_MODE_SATURATED:
return "PrimitiveType.CAST_MODE_SATURATED"
else:
raise ValueError(f"Unsupported cast mode: {type.cast_mode}")
def get_compound_kind(type):
if type.kind == type.KIND_MESSAGE:
return "CompoundType.KIND_MESSAGE"
elif type.kind == type.KIND_SERVICE:
return "CompoundType.KIND_SERVICE"
else:
raise ValueError(f"Unsupported compound kind: {type.kind}")
def get_primitive_kind(type):
if type.kind == type.KIND_BOOLEAN:
return "PrimitiveType.KIND_BOOLEAN"
elif type.kind == type.KIND_UNSIGNED_INT:
return "PrimitiveType.KIND_UNSIGNED_INT"
elif type.kind == type.KIND_SIGNED_INT:
return "PrimitiveType.KIND_SIGNED_INT"
elif type.kind == type.KIND_FLOAT:
return "PrimitiveType.KIND_FLOAT"
else:
raise ValueError(f"Unsupported primitive kind: {type.kind}")
def generate_primitive_type_instance(value_type, bitlen):
bits = f"data.getBits(msg.bitOffset, {bitlen})"
if value_type.kind == value_type.KIND_BOOLEAN:
return f"PrimitiveType.unpack(PrimitiveType.KIND_BOOLEAN, {bits}, {bitlen})"
elif value_type.kind == value_type.KIND_UNSIGNED_INT:
return f"PrimitiveType.unpack(PrimitiveType.KIND_UNSIGNED_INT, {bits}, {bitlen}, {get_cast_mode(value_type)})"
elif value_type.kind == value_type.KIND_SIGNED_INT:
return f"PrimitiveType.unpack(PrimitiveType.KIND_SIGNED_INT, {bits}, {bitlen}, {get_cast_mode(value_type)})"
elif value_type.kind == value_type.KIND_FLOAT:
return f"PrimitiveType.unpack(PrimitiveType.KIND_FLOAT, {bits}, {bitlen})"
else:
raise NotImplementedError(f"Unsupported kind: {value_type.kind}")
def get_tao(index, fields):
if index == len(fields) - 1:
return 'true'
else:
return 'false'