rccn-gen 1.0.1__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 +51 -46
- rccn_gen/utils.py +12 -9
- {rccn_gen-1.0.1.dist-info → rccn_gen-1.0.3.dist-info}/METADATA +3 -1
- {rccn_gen-1.0.1.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.1.dist-info → rccn_gen-1.0.3.dist-info}/WHEEL +0 -0
rccn_gen/__init__.py
CHANGED
rccn_gen/systems.py
CHANGED
@@ -1,11 +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
|
+
from caseconverter import *
|
5
6
|
from importlib.resources import files
|
6
7
|
from .utils import *
|
7
|
-
from .telemetry import *
|
8
|
-
|
9
8
|
|
10
9
|
class Application(Subsystem):
|
11
10
|
"""
|
@@ -47,12 +46,12 @@ class Application(Subsystem):
|
|
47
46
|
|
48
47
|
def file_paths(self):
|
49
48
|
paths = {
|
50
|
-
'main': os.path.join(self.export_file_path, 'rccn_usr_'+
|
51
|
-
'main_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
52
|
-
'main_user_snapshot': os.path.join(self.user_snapshot_path(), 'rccn_usr_'+
|
53
|
-
'main_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
49
|
+
'main': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'src', 'main.rs'),
|
50
|
+
'main_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.name), 'src', 'main.rs'),
|
51
|
+
'main_user_snapshot': os.path.join(self.user_snapshot_path(), 'rccn_usr_'+snakecase(self.name), 'src', 'main.rs'),
|
52
|
+
'main_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.name), 'src', 'main.diff'),
|
54
53
|
'main_template': os.path.join(self.text_modules_main_path, 'main.txt'),
|
55
|
-
'cargo_toml': os.path.join(self.export_file_path, 'rccn_usr_'+
|
54
|
+
'cargo_toml': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'Cargo.toml'),
|
56
55
|
'cargo_toml_template': os.path.join(self.text_modules_path, 'cargo_toml', 'cargo.txt'),
|
57
56
|
}
|
58
57
|
return paths
|
@@ -64,11 +63,11 @@ class Application(Subsystem):
|
|
64
63
|
return [subsystem for subsystem in self.subsystems if isinstance(subsystem, Service)]
|
65
64
|
|
66
65
|
def create_rccn_directories(self):
|
67
|
-
app_src_dir = os.path.join(self.export_file_path, 'rccn_usr_'+
|
66
|
+
app_src_dir = os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'src')
|
68
67
|
if not os.path.exists(app_src_dir):
|
69
68
|
os.makedirs(app_src_dir)
|
70
69
|
for service in self.services():
|
71
|
-
service_dir = os.path.join(app_src_dir,
|
70
|
+
service_dir = os.path.join(app_src_dir, snakecase(service.name))
|
72
71
|
if not os.path.exists(service_dir):
|
73
72
|
os.makedirs(service_dir)
|
74
73
|
|
@@ -101,7 +100,7 @@ class Application(Subsystem):
|
|
101
100
|
var_translation = {
|
102
101
|
'<<VAR_APID>>':str(self.apid),
|
103
102
|
'<<VAR_VCID>>':str(self.vcid),
|
104
|
-
'<<VAR_APP_NAME_SCASE>>':
|
103
|
+
'<<VAR_APP_NAME_SCASE>>':snakecase(self.name),
|
105
104
|
}
|
106
105
|
var_keywords = get_var_keywords(text)
|
107
106
|
for var_keyword in var_keywords:
|
@@ -128,7 +127,7 @@ class Application(Subsystem):
|
|
128
127
|
if not os.path.exists(service.file_paths()['mod']):
|
129
128
|
service.generate_mod_file()
|
130
129
|
service.generate_telemetry_file()
|
131
|
-
service.generate_rccn_command_file(os.path.join(self.export_file_path, 'rccn_usr_'+
|
130
|
+
service.generate_rccn_command_file(os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.name), 'src'), os.path.join(self.text_modules_path, 'command'))
|
132
131
|
self.delete_old_snapshots()
|
133
132
|
|
134
133
|
def generate_snapshot(self, current_file_reference, snapshot_file_reference):
|
@@ -236,22 +235,22 @@ class Service(Subsystem):
|
|
236
235
|
|
237
236
|
def file_paths(self):
|
238
237
|
paths = {
|
239
|
-
'service': os.path.join(self.export_file_path, 'rccn_usr_'+
|
240
|
-
'service_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
241
|
-
'service_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+
|
242
|
-
'service_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
238
|
+
'service': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.rs'),
|
239
|
+
'service_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.rs'),
|
240
|
+
'service_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.rs'),
|
241
|
+
'service_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'service.diff'),
|
243
242
|
'service_template': os.path.join(self.text_modules_service_path, 'service.txt'),
|
244
|
-
'command': os.path.join(self.export_file_path, 'rccn_usr_'+
|
245
|
-
'command_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
246
|
-
'command_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+
|
247
|
-
'command_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
243
|
+
'command': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
244
|
+
'command_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
245
|
+
'command_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
246
|
+
'command_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.diff'),
|
248
247
|
'command_template': os.path.join(self.text_modules_command_path, 'command.txt'),
|
249
|
-
'mod': os.path.join(self.export_file_path, 'rccn_usr_'+
|
248
|
+
'mod': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'mod.rs'),
|
250
249
|
'mod_template': os.path.join(self.text_modules_path, 'mod', 'mod.txt'),
|
251
|
-
'telemetry': os.path.join(self.export_file_path, 'rccn_usr_'+
|
252
|
-
'telemetry_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+
|
253
|
-
'telemetry_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+
|
254
|
-
'telemetry_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+
|
250
|
+
'telemetry': os.path.join(self.export_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'telemetry.rs'),
|
251
|
+
'telemetry_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'telemetry.rs'),
|
252
|
+
'telemetry_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'command.rs'),
|
253
|
+
'telemetry_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+snakecase(self.system.name), 'src', snakecase(self.name), 'telemetry.diff'),
|
255
254
|
'telemetry_template': os.path.join(self.text_modules_telemetry_path, 'telemetry.txt'),
|
256
255
|
}
|
257
256
|
return paths
|
@@ -282,14 +281,14 @@ class Service(Subsystem):
|
|
282
281
|
# Find and replace service variable keywords
|
283
282
|
var_keywords = get_var_keywords(text)
|
284
283
|
service_var_translation = {
|
285
|
-
'<<VAR_SERVICE_NAME>>': self.name,
|
286
|
-
'<<VAR_SERVICE_ID>>': str(self.service_id),
|
287
|
-
'<<VAR_SERVICE_NAME_UCASE>>':
|
288
|
-
'<<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(),
|
289
288
|
}
|
290
289
|
for var_keyword in var_keywords:
|
291
290
|
if var_keyword in service_var_translation.keys():
|
292
|
-
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]())
|
293
292
|
|
294
293
|
# Delete all command module keywords
|
295
294
|
text = delete_all_command_module_keywords(text)
|
@@ -331,7 +330,7 @@ class Service(Subsystem):
|
|
331
330
|
command_file_path = self.file_paths()['command_template']
|
332
331
|
with open(command_file_path, 'r') as file:
|
333
332
|
command_file_text = file.read()
|
334
|
-
command_export_file_path = os.path.join(export_file_dir,
|
333
|
+
command_export_file_path = os.path.join(export_file_dir, snakecase(self.name), 'command.rs')
|
335
334
|
with open(command_export_file_path, 'w') as file:
|
336
335
|
file.write(self.find_and_replace_keywords(command_file_text, text_modules_path))
|
337
336
|
# Create snapshot of command.rs if instructed
|
@@ -384,7 +383,8 @@ class Service(Subsystem):
|
|
384
383
|
def generate_rust_telemetry_definition(self):
|
385
384
|
telemetry_definition_text = ''
|
386
385
|
for container in self.containers:
|
387
|
-
container
|
386
|
+
if not isinstance(container, RCCNContainer):
|
387
|
+
container.__class__ = RCCNContainer
|
388
388
|
telemetry_definition_text += container.generate_rccn_telemetry()
|
389
389
|
return telemetry_definition_text
|
390
390
|
|
@@ -430,14 +430,14 @@ class RCCNCommand(Command):
|
|
430
430
|
# Find and replace command variable keywords
|
431
431
|
command_var_keywords = get_var_keywords(text)
|
432
432
|
command_var_translation = {
|
433
|
-
'<<VAR_COMMAND_NAME_UCASE>>':
|
434
|
-
'<<VAR_COMMAND_NAME>>': self.name,
|
435
|
-
'<<VAR_COMMAND_SUBTYPE>>': str(self.assignments['subtype']),
|
436
|
-
'<<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()
|
437
437
|
}
|
438
438
|
for command_var_keyword in command_var_keywords:
|
439
439
|
if command_var_keyword in command_var_translation.keys():
|
440
|
-
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]())
|
441
441
|
return text
|
442
442
|
|
443
443
|
def check_user_input(self):
|
@@ -450,12 +450,16 @@ class RCCNCommand(Command):
|
|
450
450
|
def struct_definition(self):
|
451
451
|
if len(self.arguments) == 0:
|
452
452
|
return ''
|
453
|
-
struct_definition_text = "#[derive(BitStruct, Debug, PartialEq)]\npub struct "+
|
453
|
+
struct_definition_text = "#[derive(BitStruct, Debug, PartialEq)]\npub struct "+pascalcase(self.name)+" {\n"
|
454
|
+
ins = ""
|
455
|
+
append = ""
|
454
456
|
for argument in self.arguments:
|
455
|
-
|
457
|
+
arg_def = rust_type_definition(argument)
|
458
|
+
ins += arg_def[0]
|
459
|
+
append += arg_def[1]
|
460
|
+
struct_definition_text += ins
|
456
461
|
struct_definition_text += "}\n"
|
457
|
-
|
458
|
-
struct_definition_text += rust_type_definition(argument)[1]
|
462
|
+
struct_definition_text += append
|
459
463
|
return struct_definition_text
|
460
464
|
|
461
465
|
class RCCNContainer(Container):
|
@@ -474,11 +478,12 @@ class RCCNContainer(Container):
|
|
474
478
|
|
475
479
|
def generate_rccn_telemetry(self):
|
476
480
|
rccn_telemetry_text = "pub struct " + self.name + " {\n"
|
481
|
+
insert, append = ["",""]
|
477
482
|
for parameter_entry in self.entries:
|
478
|
-
|
479
|
-
|
483
|
+
par_def = rust_type_definition(parameter_entry.parameter)
|
484
|
+
insert += par_def[0]
|
485
|
+
append += par_def[1]
|
486
|
+
rccn_telemetry_text += insert
|
480
487
|
rccn_telemetry_text += "}\n"
|
481
|
-
|
482
|
-
rccn_telemetry_text += rust_type_definition(parameter_entry.parameter)[1]
|
483
|
-
|
488
|
+
rccn_telemetry_text += append
|
484
489
|
return rccn_telemetry_text
|
rccn_gen/utils.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import re
|
2
2
|
import inflect
|
3
3
|
import os
|
4
|
+
from caseconverter import *
|
4
5
|
from yamcs.pymdb import IntegerArgument, FloatArgument, BooleanArgument, EnumeratedArgument, StringArgument
|
5
6
|
|
6
7
|
|
@@ -130,8 +131,8 @@ def rust_type_definition(pymdb_data_instance, parent_name="MyStruct"):
|
|
130
131
|
pymdb_data_instance.name = parent_name
|
131
132
|
else:
|
132
133
|
pymdb_data_instance.name = singular_name
|
133
|
-
print("RCCN-Gen: Information: An unnamed "+base_type+" has been named \""+
|
134
|
-
sc_instance_name =
|
134
|
+
print("RCCN-Gen: Information: An unnamed "+base_type+" has been named \""+pascalcase(pymdb_data_instance.name)+"\" in the generated RCCN code.")
|
135
|
+
sc_instance_name = snakecase(pymdb_data_instance.name)
|
135
136
|
|
136
137
|
if data_type == 'IntegerDataType':
|
137
138
|
if pymdb_data_instance.encoding is None or pymdb_data_instance.encoding.bits is None:
|
@@ -161,22 +162,24 @@ def rust_type_definition(pymdb_data_instance, parent_name="MyStruct"):
|
|
161
162
|
definition_text[0] = definition_text[0].replace(': ', ': Vec<').replace(',\n', '>,\n')
|
162
163
|
|
163
164
|
elif data_type == 'EnumeratedDataType':
|
164
|
-
definition_text = ["\tpub "+pymdb_data_instance.name+": "+
|
165
|
-
definition_text.append("pub enum "+
|
165
|
+
definition_text = ["\tpub "+pymdb_data_instance.name+": "+pascalcase(pymdb_data_instance.name)+",\n"]
|
166
|
+
definition_text.append("pub enum "+pascalcase(pymdb_data_instance.name)+" {\n")
|
166
167
|
for choice in pymdb_data_instance.choices:
|
167
168
|
definition_text[1] += "\t"+str(choice[1])+" = "+str(choice[0])+",\n"
|
168
169
|
definition_text[1] += "}\n"
|
169
170
|
|
170
171
|
elif data_type == 'AggregateDataType':
|
171
|
-
struct_name =
|
172
|
+
struct_name = pascalcase(pymdb_data_instance.name)
|
172
173
|
definition_text = ["\tpub "+sc_instance_name+": "+struct_name+",\n"]
|
173
174
|
definition_text.append("pub struct "+struct_name+" {\n")
|
175
|
+
insert, append = ["",""]
|
174
176
|
for member in pymdb_data_instance.members:
|
175
|
-
|
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
|
176
181
|
definition_text[1] += "}\n"
|
177
|
-
|
178
|
-
definition_text[1] += rust_type_definition(member, parent_name=pymdb_data_instance.name)[1]
|
179
|
-
|
182
|
+
definition_text[1] += append
|
180
183
|
else:
|
181
184
|
definition_text = ["\t// Please implement datatype "+data_type+" here.\n", ""]
|
182
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
|
@@ -9,6 +9,8 @@ License-Expression: GPL-3.0
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
11
11
|
Requires-Python: >=3.8
|
12
|
+
Requires-Dist: case-converter>=1.2.0
|
13
|
+
Requires-Dist: inflect>=7.5.0
|
12
14
|
Requires-Dist: yamcs-pymdb>=0.1.0
|
13
15
|
Description-Content-Type: text/markdown
|
14
16
|
|
@@ -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=oLm0_jcxV0MZ3Bg7YsCraQ_zTj_yD_geoQpdJs_ATys,26898
|
6
|
-
rccn_gen/telemetry.py,sha256=huVcqGs95IXlpETWdlIyR9lK4ctZUsq7czgJwvTYtBk,3855
|
7
|
-
rccn_gen/utils.py,sha256=tBzL6ZCSpjYnz4vtV7vzIAT6lcemCtIqxrmWMtzPEZU,7302
|
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
|