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 CHANGED
@@ -1,6 +1,5 @@
1
1
  from .systems import *
2
2
  from .utils import *
3
- from .telemetry import *
4
3
 
5
4
  __version__ = "0.1.0"
6
5
 
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_'+to_snake_case(self.name), 'src', 'main.rs'),
51
- 'main_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+to_snake_case(self.name), 'src', 'main.rs'),
52
- 'main_user_snapshot': os.path.join(self.user_snapshot_path(), 'rccn_usr_'+to_snake_case(self.name), 'src', 'main.rs'),
53
- 'main_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+to_snake_case(self.name), 'src', 'main.diff'),
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_'+to_snake_case(self.name), 'Cargo.toml'),
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_'+to_snake_case(self.name), 'src')
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, to_snake_case(service.name))
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>>':to_snake_case(self.name),
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_'+to_snake_case(self.name), 'src'), os.path.join(self.text_modules_path, 'command'))
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_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'service.rs'),
240
- 'service_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'service.rs'),
241
- 'service_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'service.rs'),
242
- 'service_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'service.diff'),
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_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'command.rs'),
245
- 'command_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'command.rs'),
246
- 'command_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'command.rs'),
247
- 'command_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'command.diff'),
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_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'mod.rs'),
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_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'telemetry.rs'),
252
- 'telemetry_generated_snapshot': os.path.join(self.snapshot_file_path, 'generated', 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'telemetry.rs'),
253
- 'telemetry_user_snapshot': os.path.join(self.snapshot_file_path, 'user', datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'command.rs'),
254
- 'telemetry_diff': os.path.join(self.diff_file_path, 'rccn_usr_'+to_snake_case(self.system.name), 'src', to_snake_case(self.name), 'telemetry.diff'),
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>>': to_upper_camel_case(self.name),
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, to_snake_case(self.name), 'command.rs')
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.__class__ = RCCNContainer
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>>': to_upper_camel_case(self.name),
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 "+to_upper_camel_case(self.name)+" {\n"
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
- struct_definition_text += rust_type_definition(argument)[0]
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
- for argument in self.arguments:
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
- rccn_telemetry_text += rust_type_definition(parameter_entry.parameter)[0]
479
- #rccn_telemetry_text += parameter_entry.generate_rccn_telemetry()[0]
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
- for parameter_entry in self.entries:
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 \""+to_upper_camel_case(pymdb_data_instance.name)+"\" in the generated RCCN code.")
134
- sc_instance_name = to_snake_case(pymdb_data_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+": "+to_upper_camel_case(pymdb_data_instance.name)+",\n"]
165
- definition_text.append("pub enum "+to_upper_camel_case(pymdb_data_instance.name)+" {\n")
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 = to_upper_camel_case(pymdb_data_instance.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
- definition_text[1] += rust_type_definition(member, parent_name=pymdb_data_instance.name)[0]
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
- for member in pymdb_data_instance.members:
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.1
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=XVvKYcWw9K1P3J1BTbzbODY71Nc1FApCc0wf7ezd4Gc,193
3
- rccn_gen/application.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- rccn_gen/service.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
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.1.dist-info/METADATA,sha256=dm4UtqPyzUKNv_hnmprPaSmQtRrjE-lCuU-X_O9wnHc,8193
21
- rccn_gen-1.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
22
- rccn_gen-1.0.1.dist-info/RECORD,,
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