rccn-gen 1.0.2__py3-none-any.whl → 1.0.3__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rccn_gen/__init__.py +0 -1
- rccn_gen/systems.py +26 -22
- rccn_gen/utils.py +6 -4
- {rccn_gen-1.0.2.dist-info → rccn_gen-1.0.3.dist-info}/METADATA +1 -1
- {rccn_gen-1.0.2.dist-info → rccn_gen-1.0.3.dist-info}/RECORD +6 -9
- rccn_gen/application.py +0 -0
- rccn_gen/service.py +0 -0
- rccn_gen/telemetry.py +0 -83
- {rccn_gen-1.0.2.dist-info → rccn_gen-1.0.3.dist-info}/WHEEL +0 -0
rccn_gen/__init__.py
CHANGED
rccn_gen/systems.py
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
from yamcs.pymdb import System, Subsystem, Command
|
1
|
+
from yamcs.pymdb import System, Subsystem, Command, Container
|
2
2
|
import shutil
|
3
3
|
import difflib
|
4
4
|
import datetime
|
5
5
|
from caseconverter import *
|
6
6
|
from importlib.resources import files
|
7
7
|
from .utils import *
|
8
|
-
from .telemetry import *
|
9
|
-
|
10
8
|
|
11
9
|
class Application(Subsystem):
|
12
10
|
"""
|
@@ -283,14 +281,14 @@ class Service(Subsystem):
|
|
283
281
|
# Find and replace service variable keywords
|
284
282
|
var_keywords = get_var_keywords(text)
|
285
283
|
service_var_translation = {
|
286
|
-
'<<VAR_SERVICE_NAME>>': self.name,
|
287
|
-
'<<VAR_SERVICE_ID>>': str(self.service_id),
|
288
|
-
'<<VAR_SERVICE_NAME_UCASE>>': pascalcase(self.name),
|
289
|
-
'<<VAR_SERVICE_TELEMETRY>>': self.generate_rust_telemetry_definition(),
|
284
|
+
'<<VAR_SERVICE_NAME>>': lambda: self.name,
|
285
|
+
'<<VAR_SERVICE_ID>>': lambda: str(self.service_id),
|
286
|
+
'<<VAR_SERVICE_NAME_UCASE>>': lambda: pascalcase(self.name),
|
287
|
+
'<<VAR_SERVICE_TELEMETRY>>': lambda: self.generate_rust_telemetry_definition(),
|
290
288
|
}
|
291
289
|
for var_keyword in var_keywords:
|
292
290
|
if var_keyword in service_var_translation.keys():
|
293
|
-
text = replace_with_indentation(text, var_keyword, service_var_translation[var_keyword])
|
291
|
+
text = replace_with_indentation(text, var_keyword, service_var_translation[var_keyword]())
|
294
292
|
|
295
293
|
# Delete all command module keywords
|
296
294
|
text = delete_all_command_module_keywords(text)
|
@@ -385,7 +383,8 @@ class Service(Subsystem):
|
|
385
383
|
def generate_rust_telemetry_definition(self):
|
386
384
|
telemetry_definition_text = ''
|
387
385
|
for container in self.containers:
|
388
|
-
container
|
386
|
+
if not isinstance(container, RCCNContainer):
|
387
|
+
container.__class__ = RCCNContainer
|
389
388
|
telemetry_definition_text += container.generate_rccn_telemetry()
|
390
389
|
return telemetry_definition_text
|
391
390
|
|
@@ -431,14 +430,14 @@ class RCCNCommand(Command):
|
|
431
430
|
# Find and replace command variable keywords
|
432
431
|
command_var_keywords = get_var_keywords(text)
|
433
432
|
command_var_translation = {
|
434
|
-
'<<VAR_COMMAND_NAME_UCASE>>': pascalcase(self.name),
|
435
|
-
'<<VAR_COMMAND_NAME>>': self.name,
|
436
|
-
'<<VAR_COMMAND_SUBTYPE>>': str(self.assignments['subtype']),
|
437
|
-
'<<VAR_COMMAND_STRUCT>>': self.struct_definition()
|
433
|
+
'<<VAR_COMMAND_NAME_UCASE>>': lambda: pascalcase(self.name),
|
434
|
+
'<<VAR_COMMAND_NAME>>': lambda: self.name,
|
435
|
+
'<<VAR_COMMAND_SUBTYPE>>': lambda: str(self.assignments['subtype']),
|
436
|
+
'<<VAR_COMMAND_STRUCT>>': lambda: self.struct_definition()
|
438
437
|
}
|
439
438
|
for command_var_keyword in command_var_keywords:
|
440
439
|
if command_var_keyword in command_var_translation.keys():
|
441
|
-
text = replace_with_indentation(text, command_var_keyword, command_var_translation[command_var_keyword])
|
440
|
+
text = replace_with_indentation(text, command_var_keyword, command_var_translation[command_var_keyword]())
|
442
441
|
return text
|
443
442
|
|
444
443
|
def check_user_input(self):
|
@@ -452,11 +451,15 @@ class RCCNCommand(Command):
|
|
452
451
|
if len(self.arguments) == 0:
|
453
452
|
return ''
|
454
453
|
struct_definition_text = "#[derive(BitStruct, Debug, PartialEq)]\npub struct "+pascalcase(self.name)+" {\n"
|
454
|
+
ins = ""
|
455
|
+
append = ""
|
455
456
|
for argument in self.arguments:
|
456
|
-
|
457
|
+
arg_def = rust_type_definition(argument)
|
458
|
+
ins += arg_def[0]
|
459
|
+
append += arg_def[1]
|
460
|
+
struct_definition_text += ins
|
457
461
|
struct_definition_text += "}\n"
|
458
|
-
|
459
|
-
struct_definition_text += rust_type_definition(argument)[1]
|
462
|
+
struct_definition_text += append
|
460
463
|
return struct_definition_text
|
461
464
|
|
462
465
|
class RCCNContainer(Container):
|
@@ -475,11 +478,12 @@ class RCCNContainer(Container):
|
|
475
478
|
|
476
479
|
def generate_rccn_telemetry(self):
|
477
480
|
rccn_telemetry_text = "pub struct " + self.name + " {\n"
|
481
|
+
insert, append = ["",""]
|
478
482
|
for parameter_entry in self.entries:
|
479
|
-
|
480
|
-
|
483
|
+
par_def = rust_type_definition(parameter_entry.parameter)
|
484
|
+
insert += par_def[0]
|
485
|
+
append += par_def[1]
|
486
|
+
rccn_telemetry_text += insert
|
481
487
|
rccn_telemetry_text += "}\n"
|
482
|
-
|
483
|
-
rccn_telemetry_text += rust_type_definition(parameter_entry.parameter)[1]
|
484
|
-
|
488
|
+
rccn_telemetry_text += append
|
485
489
|
return rccn_telemetry_text
|
rccn_gen/utils.py
CHANGED
@@ -172,12 +172,14 @@ def rust_type_definition(pymdb_data_instance, parent_name="MyStruct"):
|
|
172
172
|
struct_name = pascalcase(pymdb_data_instance.name)
|
173
173
|
definition_text = ["\tpub "+sc_instance_name+": "+struct_name+",\n"]
|
174
174
|
definition_text.append("pub struct "+struct_name+" {\n")
|
175
|
+
insert, append = ["",""]
|
175
176
|
for member in pymdb_data_instance.members:
|
176
|
-
|
177
|
+
mem_def = rust_type_definition(member, parent_name=pymdb_data_instance.name)
|
178
|
+
insert += mem_def[0]
|
179
|
+
append += mem_def[1]
|
180
|
+
definition_text[1] += insert
|
177
181
|
definition_text[1] += "}\n"
|
178
|
-
|
179
|
-
definition_text[1] += rust_type_definition(member, parent_name=pymdb_data_instance.name)[1]
|
180
|
-
|
182
|
+
definition_text[1] += append
|
181
183
|
else:
|
182
184
|
definition_text = ["\t// Please implement datatype "+data_type+" here.\n", ""]
|
183
185
|
return definition_text
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: rccn_gen
|
3
|
-
Version: 1.0.
|
3
|
+
Version: 1.0.3
|
4
4
|
Summary: A python based generator for RACCOON OS source files in Rust from yamcs-pymdb config files.
|
5
5
|
Project-URL: Homepage, https://gitlab.com/rccn/pymdb_code_generation
|
6
6
|
Project-URL: Issues, https://gitlab.com/rccn/pymdb_code_generation/issues
|
@@ -1,10 +1,7 @@
|
|
1
1
|
rccn_gen/LICENSE,sha256=ixuiBLtpoK3iv89l7ylKkg9rs2GzF9ukPH7ynZYzK5s,35148
|
2
|
-
rccn_gen/__init__.py,sha256=
|
3
|
-
rccn_gen/
|
4
|
-
rccn_gen/
|
5
|
-
rccn_gen/systems.py,sha256=ibpegtBKPF-w6hmiWC_-TgJII6uvWP8wRSDpwEq8rjY,26755
|
6
|
-
rccn_gen/telemetry.py,sha256=huVcqGs95IXlpETWdlIyR9lK4ctZUsq7czgJwvTYtBk,3855
|
7
|
-
rccn_gen/utils.py,sha256=HF79aMpovRdqLdVjL1w0iEPTEvOl7VSPrf_9QifUyoc,7290
|
2
|
+
rccn_gen/__init__.py,sha256=rBnqIw3uQk-uBbRh9VnungoTRSr2V0Bqos32xFZ44Eo,168
|
3
|
+
rccn_gen/systems.py,sha256=D_AqspMI3VTyHbV3cmi6uizlZSKgmOHq21ASXoG-9vk,26863
|
4
|
+
rccn_gen/utils.py,sha256=FHNatrkeyjF1qxyw3_o5cvNjIX9SXrEWRD9ugj-qtSo,7292
|
8
5
|
rccn_gen/text_modules/cargo_toml/cargo.txt,sha256=2e6xKomkml6-onfQ0QHNqvKnhGLYMUl8zYgbykmm83Y,292
|
9
6
|
rccn_gen/text_modules/command/command.txt,sha256=8Y-uJilhFLoinftIbn7uKfia9LLMZno2LkoDJ-4Y-9M,345
|
10
7
|
rccn_gen/text_modules/command/command_module_enum.txt,sha256=ApzRDQIs-BHJHtFA4ysfpYuWElGntXakkzZkgy57b74,94
|
@@ -17,6 +14,6 @@ rccn_gen/text_modules/mod/mod.txt,sha256=BF8LablBE4ddutdl5m0prvpvLdBRejueVOujkyr
|
|
17
14
|
rccn_gen/text_modules/service/command_module_match_cmd.txt,sha256=eVGo6ltuerG37rVxpXtL-JYuLyLW4c0i6NXb5g1_U-A,89
|
18
15
|
rccn_gen/text_modules/service/service.txt,sha256=0KwwrfrjXuY4e3VNpCdTTzgW8bmYRQ21i-Lvhkz3hVA,691
|
19
16
|
rccn_gen/text_modules/telemetry/telemetry.txt,sha256=Re1d3BfpyXT_CEe7jJzLF3MARik0-J-K98K85iPOE40,193
|
20
|
-
rccn_gen-1.0.
|
21
|
-
rccn_gen-1.0.
|
22
|
-
rccn_gen-1.0.
|
17
|
+
rccn_gen-1.0.3.dist-info/METADATA,sha256=Z4LaK07eqhpSDcv-4rRO2hIerglzl6rUubE2CvtnVOs,8260
|
18
|
+
rccn_gen-1.0.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
19
|
+
rccn_gen-1.0.3.dist-info/RECORD,,
|
rccn_gen/application.py
DELETED
File without changes
|
rccn_gen/service.py
DELETED
File without changes
|
rccn_gen/telemetry.py
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
from yamcs.pymdb import Container, ParameterEntry, AggregateParameter, ArrayParameter, BinaryParameter, StringParameter, BooleanParameter, FloatParameter, IntegerParameter, StringMember, EnumeratedMember
|
2
|
-
from .utils import *
|
3
|
-
|
4
|
-
|
5
|
-
def generate_rccn_parameter_telemetry(parameter):
|
6
|
-
sc_parameter_name = to_snake_case(parameter.name)
|
7
|
-
|
8
|
-
if isinstance(parameter, ArrayParameter):
|
9
|
-
struct_name = to_upper_camel_case(parameter.name)
|
10
|
-
telemetry = ["\tpub "+sc_parameter_name+": Vec<"+struct_name+">,\n"]
|
11
|
-
telemetry.append("pub struct "+struct_name+" {\n")
|
12
|
-
for member in parameter.data_type.members:
|
13
|
-
telemetry[1] += generate_rccn_member_telementry(member)[0]
|
14
|
-
telemetry[1] += "}\n"
|
15
|
-
for member in parameter.data_type.members:
|
16
|
-
telemetry[1] += generate_rccn_member_telementry(member)[1]
|
17
|
-
|
18
|
-
elif isinstance(parameter, BooleanParameter):
|
19
|
-
telemetry = ["\t#[bits(1)]\n\tpub "+sc_parameter_name+": bool,\n"]
|
20
|
-
telemetry.append("")
|
21
|
-
|
22
|
-
elif isinstance(parameter, IntegerParameter):
|
23
|
-
if parameter.encoding is None or parameter.encoding.bits is None:
|
24
|
-
raw_bit_number_str = '8'
|
25
|
-
print("Warning: No encoding for parameter "+parameter.name+" found. Using 8 as default for raw bit number.")
|
26
|
-
else:
|
27
|
-
raw_bit_number = parameter.encoding.bits
|
28
|
-
raw_bit_number_str = str(raw_bit_number)
|
29
|
-
eng_bit_number = engineering_bit_number(raw_bit_number)
|
30
|
-
eng_bit_number_str = str(eng_bit_number)
|
31
|
-
telemetry = ["\t#[bits("+raw_bit_number_str+")]\n"]
|
32
|
-
if parameter.signed:
|
33
|
-
telemetry[0] += ("\tpub "+sc_parameter_name+": i"+eng_bit_number_str+",\n")
|
34
|
-
else:
|
35
|
-
telemetry += ("\tpub "+sc_parameter_name+": u"+eng_bit_number_str+",\n")
|
36
|
-
telemetry.append("")
|
37
|
-
|
38
|
-
elif isinstance(parameter, StringParameter):
|
39
|
-
telemetry = ["#[null_terminated]\npub "+sc_parameter_name+": String,\n"]
|
40
|
-
telemetry.append("")
|
41
|
-
|
42
|
-
else:
|
43
|
-
telemetry = ["\t// Please implement datatype "+type(parameter).__name__+" here.\n", ""]
|
44
|
-
return telemetry
|
45
|
-
|
46
|
-
def generate_rccn_member_telementry(member):
|
47
|
-
sc_member_name = to_snake_case(member.name)
|
48
|
-
|
49
|
-
if isinstance(member, StringMember):
|
50
|
-
member_telemetry = ["#[null_terminated]\n\tpub "+member.name+": String,\n"]
|
51
|
-
member_telemetry.append("")
|
52
|
-
|
53
|
-
elif isinstance(member, EnumeratedMember):
|
54
|
-
member_telemetry = ["\tpub "+member.name+": "+to_upper_camel_case(member.name)+",\n"]
|
55
|
-
member_telemetry.append("pub enum "+to_upper_camel_case(member.name)+" {\n")
|
56
|
-
for choice in member.choices:
|
57
|
-
member_telemetry[1] += "\t"+str(choice[1])+" = "+str(choice[0])+",\n"
|
58
|
-
member_telemetry[1] += "}\n"
|
59
|
-
|
60
|
-
elif isinstance(member, BooleanParameter):
|
61
|
-
telemetry = ["pub "+sc_member_name+": bool,\n"]
|
62
|
-
telemetry.append("")
|
63
|
-
|
64
|
-
elif isinstance(member, IntegerParameter):
|
65
|
-
if member.encoding is None or member.encoding.bits is None:
|
66
|
-
raw_bit_number = 8
|
67
|
-
print("Warning: No encoding for member "+member.name+" found. Using 8 as default for raw bit number.")
|
68
|
-
else:
|
69
|
-
raw_bit_number = member.encoding.bits
|
70
|
-
raw_bit_number_str = str(raw_bit_number)
|
71
|
-
eng_bit_number = engineering_bit_number(raw_bit_number)
|
72
|
-
eng_bit_number_str = str(eng_bit_number)
|
73
|
-
telemetry = ["\t#[bits("+raw_bit_number_str+")]\n"]
|
74
|
-
if member.signed:
|
75
|
-
telemetry[0] += ("\tpub "+sc_member_name+": i"+eng_bit_number_str+",\n")
|
76
|
-
else:
|
77
|
-
telemetry += ("\tpub "+sc_member_name+": u"+eng_bit_number_str+",\n")
|
78
|
-
telemetry.append("")
|
79
|
-
|
80
|
-
else:
|
81
|
-
member_telemetry[0] += "\t// Please implement datatype "+type(member).__name__+" here.\n"
|
82
|
-
member_telemetry.append("")
|
83
|
-
return member_telemetry
|
File without changes
|