powertrain-build 1.13.1__py3-none-any.whl → 1.13.3.dev3__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.
Files changed (132) hide show
  1. powertrain_build/__init__.py +40 -40
  2. powertrain_build/__main__.py +6 -6
  3. powertrain_build/a2l.py +582 -582
  4. powertrain_build/a2l_merge.py +650 -650
  5. powertrain_build/a2l_templates.py +717 -717
  6. powertrain_build/build.py +985 -985
  7. powertrain_build/build_defs.py +309 -309
  8. powertrain_build/build_proj_config.py +690 -690
  9. powertrain_build/check_interface.py +575 -575
  10. powertrain_build/cli.py +141 -141
  11. powertrain_build/config.py +542 -542
  12. powertrain_build/core.py +395 -395
  13. powertrain_build/core_dummy.py +343 -343
  14. powertrain_build/create_conversion_table.py +73 -73
  15. powertrain_build/dids.py +916 -916
  16. powertrain_build/dummy.py +157 -157
  17. powertrain_build/dummy_spm.py +252 -252
  18. powertrain_build/environmentcheck.py +52 -52
  19. powertrain_build/ext_dbg.py +255 -255
  20. powertrain_build/ext_var.py +327 -327
  21. powertrain_build/feature_configs.py +301 -301
  22. powertrain_build/gen_allsysteminfo.py +227 -227
  23. powertrain_build/gen_label_split.py +449 -449
  24. powertrain_build/handcode_replacer.py +124 -124
  25. powertrain_build/html_report.py +133 -133
  26. powertrain_build/interface/__init__.py +4 -4
  27. powertrain_build/interface/application.py +511 -511
  28. powertrain_build/interface/base.py +500 -500
  29. powertrain_build/interface/csp_api.py +490 -490
  30. powertrain_build/interface/device_proxy.py +677 -677
  31. powertrain_build/interface/ems.py +67 -67
  32. powertrain_build/interface/export_global_vars.py +121 -121
  33. powertrain_build/interface/generate_adapters.py +132 -132
  34. powertrain_build/interface/generate_hi_interface.py +87 -87
  35. powertrain_build/interface/generate_service.py +69 -69
  36. powertrain_build/interface/generate_wrappers.py +147 -147
  37. powertrain_build/interface/generation_utils.py +142 -142
  38. powertrain_build/interface/hal.py +194 -194
  39. powertrain_build/interface/model_yaml_verification.py +348 -348
  40. powertrain_build/interface/service.py +296 -296
  41. powertrain_build/interface/simulink.py +249 -249
  42. powertrain_build/interface/update_call_sources.py +180 -180
  43. powertrain_build/interface/update_model_yaml.py +186 -186
  44. powertrain_build/interface/zone_controller.py +362 -362
  45. powertrain_build/lib/__init__.py +4 -4
  46. powertrain_build/lib/helper_functions.py +127 -127
  47. powertrain_build/lib/logger.py +55 -55
  48. powertrain_build/matlab_scripts/CodeGen/BuildAutomationPyBuild.m +78 -78
  49. powertrain_build/matlab_scripts/CodeGen/Generate_A2L.m +154 -154
  50. powertrain_build/matlab_scripts/CodeGen/generateTLUnit.m +239 -239
  51. powertrain_build/matlab_scripts/CodeGen/getAsilClassification.m +28 -28
  52. powertrain_build/matlab_scripts/CodeGen/modelConfiguredForTL.m +28 -28
  53. powertrain_build/matlab_scripts/CodeGen/moveDefOutports.m +88 -88
  54. powertrain_build/matlab_scripts/CodeGen/parseCalMeasData.m +410 -410
  55. powertrain_build/matlab_scripts/CodeGen/parseCoreIdentifiers.m +139 -139
  56. powertrain_build/matlab_scripts/CodeGen/parseDIDs.m +141 -141
  57. powertrain_build/matlab_scripts/CodeGen/parseInPorts.m +106 -106
  58. powertrain_build/matlab_scripts/CodeGen/parseIncludeConfigs.m +25 -25
  59. powertrain_build/matlab_scripts/CodeGen/parseModelInfo.m +38 -38
  60. powertrain_build/matlab_scripts/CodeGen/parseNVM.m +81 -81
  61. powertrain_build/matlab_scripts/CodeGen/parseOutPorts.m +120 -120
  62. powertrain_build/matlab_scripts/CodeGen/parsePreProcBlks.m +23 -23
  63. powertrain_build/matlab_scripts/CodeGen/struct2JSON.m +128 -128
  64. powertrain_build/matlab_scripts/CodeGen/updateCodeSwConfig.m +31 -31
  65. powertrain_build/matlab_scripts/Init_PyBuild.m +91 -91
  66. powertrain_build/matlab_scripts/__init__.py +2 -2
  67. powertrain_build/matlab_scripts/helperFunctions/Get_Full_Name.m +46 -46
  68. powertrain_build/matlab_scripts/helperFunctions/Get_SrcLines.m +12 -12
  69. powertrain_build/matlab_scripts/helperFunctions/Init_Models.m +78 -78
  70. powertrain_build/matlab_scripts/helperFunctions/Init_Projects.m +67 -67
  71. powertrain_build/matlab_scripts/helperFunctions/Read_Units.m +34 -34
  72. powertrain_build/matlab_scripts/helperFunctions/SetProjectTimeSamples.m +26 -26
  73. powertrain_build/matlab_scripts/helperFunctions/Strip_Suffix.m +16 -16
  74. powertrain_build/matlab_scripts/helperFunctions/followLink.m +118 -118
  75. powertrain_build/matlab_scripts/helperFunctions/getCodeSwitches.m +50 -50
  76. powertrain_build/matlab_scripts/helperFunctions/getConsumerBlocks.m +30 -30
  77. powertrain_build/matlab_scripts/helperFunctions/getDefBlock.m +39 -39
  78. powertrain_build/matlab_scripts/helperFunctions/getDefOutport.m +58 -58
  79. powertrain_build/matlab_scripts/helperFunctions/getDstBlocks.m +19 -19
  80. powertrain_build/matlab_scripts/helperFunctions/getDstLines.m +13 -13
  81. powertrain_build/matlab_scripts/helperFunctions/getInterfaceSignals.m +37 -37
  82. powertrain_build/matlab_scripts/helperFunctions/getName.m +37 -37
  83. powertrain_build/matlab_scripts/helperFunctions/getPath.m +6 -6
  84. powertrain_build/matlab_scripts/helperFunctions/getProperValue.m +21 -21
  85. powertrain_build/matlab_scripts/helperFunctions/getSrcBlocks.m +19 -19
  86. powertrain_build/matlab_scripts/helperFunctions/getSrcLines.m +13 -13
  87. powertrain_build/matlab_scripts/helperFunctions/loadLibraries.m +10 -10
  88. powertrain_build/matlab_scripts/helperFunctions/loadjson.m +6 -6
  89. powertrain_build/matlab_scripts/helperFunctions/modifyEnumStructField.m +21 -21
  90. powertrain_build/matlab_scripts/helperFunctions/removeConfigDuplicates.m +31 -31
  91. powertrain_build/matlab_scripts/helperFunctions/sortSystemByClass.m +26 -26
  92. powertrain_build/matlab_scripts/helperFunctions/tl_getfast.m +89 -89
  93. powertrain_build/matlab_scripts/helperFunctions/topLevelSystem.m +20 -20
  94. powertrain_build/matlab_scripts/helperFunctions/updateModels.m +131 -131
  95. powertrain_build/memory_section.py +224 -224
  96. powertrain_build/nvm_def.py +729 -729
  97. powertrain_build/problem_logger.py +86 -86
  98. powertrain_build/pt_matlab.py +430 -430
  99. powertrain_build/pt_win32.py +144 -144
  100. powertrain_build/replace_compu_tab_ref.py +105 -105
  101. powertrain_build/rte_dummy.py +254 -254
  102. powertrain_build/sched_funcs.py +209 -207
  103. powertrain_build/signal.py +7 -7
  104. powertrain_build/signal_if_html_rep.py +221 -221
  105. powertrain_build/signal_if_html_rep_all.py +302 -302
  106. powertrain_build/signal_incons_html_rep.py +180 -180
  107. powertrain_build/signal_incons_html_rep_all.py +366 -366
  108. powertrain_build/signal_incons_html_rep_base.py +168 -168
  109. powertrain_build/signal_inconsistency_check.py +641 -641
  110. powertrain_build/signal_interfaces.py +864 -864
  111. powertrain_build/templates/Index_SigCheck_All.html +22 -22
  112. powertrain_build/templates/Index_SigIf_All.html +19 -19
  113. powertrain_build/types.py +218 -218
  114. powertrain_build/unit_configs.py +419 -419
  115. powertrain_build/user_defined_types.py +660 -660
  116. powertrain_build/versioncheck.py +66 -66
  117. powertrain_build/wrapper.py +512 -512
  118. powertrain_build/xlrd_csv.py +87 -87
  119. powertrain_build/zone_controller/__init__.py +4 -4
  120. powertrain_build/zone_controller/calibration.py +176 -176
  121. powertrain_build/zone_controller/composition_yaml.py +880 -878
  122. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/METADATA +100 -100
  123. powertrain_build-1.13.3.dev3.dist-info/RECORD +130 -0
  124. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/WHEEL +1 -1
  125. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/LICENSE +202 -202
  126. powertrain_build-1.13.3.dev3.dist-info/pbr.json +1 -0
  127. powertrain_build-1.13.1.dist-info/RECORD +0 -130
  128. powertrain_build-1.13.1.dist-info/pbr.json +0 -1
  129. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/entry_points.txt +0 -0
  130. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/AUTHORS +0 -0
  131. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/NOTICE +0 -0
  132. {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/top_level.txt +0 -0
@@ -1,254 +1,254 @@
1
- # Copyright 2024 Volvo Car Corporation
2
- # Licensed under Apache 2.0.
3
-
4
- # -*- coding: utf-8 -*-
5
- """Module containing classes for generating RTE dummy code.
6
-
7
- These files are needed for building test SW,
8
- where the RTE is not available.
9
- For example, when running Silver tests.
10
- """
11
-
12
- from powertrain_build.problem_logger import ProblemLogger
13
-
14
- from pathlib import Path
15
-
16
-
17
- class RteDummy(ProblemLogger):
18
- """A class for RTE dummy file generation."""
19
-
20
- def __init__(self, build_cfg, nvm_def, calib_data):
21
- """Init.
22
-
23
- Args:
24
- build_cfg (BuildProjConfig): Object with build configuration settings.
25
- nvm_def (ZCNVMDef): Object with NVM definition information.
26
- calib_data (dict): Dictionary containing calibration data for a ZoneController project.
27
- """
28
- super().__init__()
29
- self.build_cfg = build_cfg
30
- self.nvm_def = nvm_def
31
- self.calibration_variables = calib_data.get("class_info", {})
32
- mem_map_config = self.build_cfg.get_memory_map_config()
33
- self.mem_map_header_file_name = f"{mem_map_config['memMapPrefix']}_MemMap"
34
- self.swc_header_file_name = f"Rte_{self.build_cfg.get_composition_config('softwareComponentName')}"
35
- self.type_header_file_name = "Rte_Type"
36
- self.source_file_name = "Rte_Dummy"
37
-
38
- def _get_common_header(self):
39
- """Get common header for the RTE dummy files."""
40
- return (
41
- "/*\n"
42
- " * This file is generated by the Powertrain Build System.\n"
43
- " * It defines RTE dummy types and/or functions.\n"
44
- " * Do not modify this file manually.\n"
45
- " */\n"
46
- )
47
-
48
- def _get_mem_map_header_content(self):
49
- """Get content for the dummy memory map header."""
50
- return (
51
- f"{self._get_common_header()}"
52
- f"#ifndef {self.mem_map_header_file_name.upper()}_H\n"
53
- f"#define {self.mem_map_header_file_name.upper()}_H\n\n"
54
- f"#endif /* {self.mem_map_header_file_name.upper()}_H */\n"
55
- )
56
-
57
- def _get_swc_header_content(self):
58
- """Get content for the SWC RTE dummy header."""
59
- return (
60
- f"{self._get_common_header()}"
61
- f"#ifndef {self.swc_header_file_name.upper()}_H\n"
62
- f"#define {self.swc_header_file_name.upper()}_H\n\n"
63
- f'#include "{self.type_header_file_name}.h"\n'
64
- f"#endif /* {self.swc_header_file_name.upper()}_H */\n"
65
- )
66
-
67
- def _get_type_header_header(self):
68
- """Get header for the RTE type dummy header."""
69
- include_nvm_header = ""
70
- if not self.build_cfg.get_code_generation_config("useRteNvmStructs"):
71
- nvm_defs = self.build_cfg.get_nvm_defs()
72
- nvm_file_name = nvm_defs["fileName"]
73
- include_nvm_header = f'#include "{nvm_file_name}.h"\n'
74
- return (
75
- f"{self._get_common_header()}"
76
- f"#ifndef {self.type_header_file_name.upper()}_H\n"
77
- f"#define {self.type_header_file_name.upper()}_H\n\n"
78
- '#include "tl_basetypes.h"\n'
79
- f"{include_nvm_header}\n"
80
- "#define FALSE 0U\n"
81
- "#define TRUE 1U\n\n"
82
- )
83
-
84
- def _get_type_header_footer(self):
85
- """Get footer for the RTE type dummy header."""
86
- return f"\n#endif /* {self.type_header_file_name.upper()}_H */\n"
87
-
88
- def _get_source_header(self):
89
- """Get header for the RTE dummy source."""
90
- return (
91
- f"{self._get_common_header()}"
92
- f'#include "{self.swc_header_file_name}.h"\n\n'
93
- )
94
-
95
- def _get_typedef_dummy(self):
96
- """Get typedef dummy code."""
97
- typedefs = []
98
-
99
- function_name = self.build_cfg.get_composition_config("compositionName")
100
- if function_name is None:
101
- function_name = self.build_cfg.get_composition_config("softwareComponentName")
102
-
103
- # MAPs get typedef:ed to structs and need special data type mapping in calibration.py
104
- for signal_name, signal_data in self.calibration_variables.items():
105
- if isinstance(signal_data["width"], list):
106
- if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]:
107
- typedefs.append(
108
- f"typedef {signal_data['type']} {signal_data['autosar_type']}_e[{signal_data['width'][0]}];\n"
109
- )
110
- typedefs.append(
111
- "typedef struct \n"
112
- "{\n"
113
- f" {signal_data['autosar_type']}_e {signal_data['autosar_type']}[{signal_data['width'][1]}];\n"
114
- f"}} {signal_data['autosar_type']};\n\n"
115
- )
116
-
117
- return "".join(typedefs)
118
-
119
- def _get_nvm_header_dummy(self):
120
- """Get NVM dummy header code."""
121
- struct_defines = []
122
- function_declarations = []
123
- prefix = self.build_cfg.get_scheduler_prefix()
124
- use_rte_nvm_structs = self.build_cfg.get_code_generation_config("useRteNvmStructs")
125
-
126
- for memory_area in self.nvm_def._nvm_memory_areas:
127
- nvm_name = f"{prefix}{memory_area}"
128
- struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
129
- function_declarations.append(f"{struct_name} *Rte_Pim_{nvm_name}(void);")
130
- function_declarations.append(f"void Rte_Read_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block);")
131
- function_declarations.append(f"void Rte_Write_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block);")
132
-
133
- if use_rte_nvm_structs:
134
- struct_defines.append("typedef struct\n{")
135
- memory_area_index = self.nvm_def._get_nvm_areas_index(memory_area)
136
- nr_of_unused_signals = self.nvm_def.nvm_definitions[memory_area_index]["size"]
137
- signals = self.nvm_def.nvm_definitions[memory_area_index]["signals"]
138
- for signal in signals:
139
- signal_string = ""
140
- nr_of_unused_signals -= signal["x_size"] * signal["y_size"]
141
- signal_string += f' {signal["type"]} {self.nvm_def.struct_member_prefix}{signal["name"]}'
142
- size = max(signal["x_size"], 1) * max(signal["y_size"], 1)
143
- if size > 1:
144
- if signal["x_size"] > 1:
145
- signal_string += f'[{signal["x_size"]}]'
146
- if signal["y_size"] > 1:
147
- signal_string += f'[{signal["y_size"]}]'
148
- signal_string += ";"
149
- struct_defines.append(signal_string)
150
- if nr_of_unused_signals > 0:
151
- struct_defines.append(
152
- f' {self.nvm_def.nvm_definitions[memory_area_index]["default_datatype"]} '
153
- f'unused[{nr_of_unused_signals}];'
154
- )
155
- struct_defines.append(f"}} {struct_name};\n")
156
-
157
- return "\n".join(struct_defines + function_declarations)
158
-
159
- def _get_nvm_source_dummy(self):
160
- """Generate NVM source dummy code."""
161
- lines_to_write = []
162
- prefix = self.build_cfg.get_scheduler_prefix()
163
- use_rte_nvm_structs = self.build_cfg.get_code_generation_config("useRteNvmStructs")
164
- for memory_area in self.nvm_def._nvm_memory_areas:
165
- nvm_name = f"{prefix}{memory_area}"
166
- struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
167
- return_string = f"{struct_name} dummy; {struct_name}* dummyPtr = &dummy; return dummyPtr;"
168
- lines_to_write.append(f"{struct_name} *Rte_Pim_{nvm_name}(void) {{ {return_string} }}")
169
- lines_to_write.append(f"void Rte_Read_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
170
- lines_to_write.append(f"void Rte_Write_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
171
- lines_to_write.append("")
172
- return "\n".join(lines_to_write)
173
-
174
- def _get_calibration_function_data(self, signal_name, signal_data):
175
- """"Get calibration function data.
176
-
177
- Args:
178
- signal_name (str): Name of the signal.
179
- signal_data (dict): Dictionary containing signal data.
180
- Returns:
181
- return_type, return_string (tuple): Tuple containing the return type and return string.
182
- """
183
- if isinstance(signal_data["width"], list):
184
- if signal_data["width"][0] == 1:
185
- dummy_variable = f"dummy[{signal_data['width'][1]}]"
186
- else:
187
- dummy_variable = f"dummy[{signal_data['width'][0]}][{signal_data['width'][1]}]"
188
- # MAPs get typedef:ed to structs and need special data type mapping in calibration.py
189
- if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]:
190
- return_type = f'const {signal_data["autosar_type"]}*'
191
- return_string = (
192
- f"const {signal_data['autosar_type']} {dummy_variable}; "
193
- f"{return_type} dummyPtr = &dummy; "
194
- "return dummyPtr;"
195
- )
196
- else:
197
- return_type = f'const {signal_data["type"]}*'
198
- return_string = (
199
- f"{signal_data['type']} {dummy_variable}; "
200
- f"{return_type} dummyPtr = &dummy; "
201
- "return dummyPtr;"
202
- )
203
- else:
204
- return_type = f'{signal_data["type"]}'
205
- return_string = f"return ({return_type})0;"
206
- return return_type, return_string
207
-
208
- def _get_calibration_header_dummy(self):
209
- """Get calibration dummy header code."""
210
- if not self.calibration_variables:
211
- return ""
212
-
213
- lines_to_write = []
214
- swc_name = self.build_cfg.get_composition_config("softwareComponentName")
215
- for signal_name, signal_data in self.calibration_variables.items():
216
- return_type = self._get_calibration_function_data(signal_name, signal_data)[0]
217
- lines_to_write.append(f"{return_type} Rte_CData_{swc_name}_{signal_name}(void);")
218
- lines_to_write.append("")
219
- return "\n".join(lines_to_write)
220
-
221
- def _get_calibration_source_dummy(self):
222
- """Get calibration source dummy code."""
223
- if not self.calibration_variables:
224
- return ""
225
-
226
- lines_to_write = []
227
- swc_name = self.build_cfg.get_composition_config("softwareComponentName")
228
- for signal_name, signal_data in self.calibration_variables.items():
229
- return_type, return_string = self._get_calibration_function_data(signal_name, signal_data)
230
- lines_to_write.append(f"{return_type} Rte_CData_{swc_name}_{signal_name}(void) {{ {return_string} }}")
231
- lines_to_write.append("")
232
- return "\n".join(lines_to_write)
233
-
234
- def generate_rte_dummy(self):
235
- """Generate RTE dummy files."""
236
- src_code_dest_dir = self.build_cfg.get_src_code_dst_dir()
237
- mem_map_header_file = Path(src_code_dest_dir, self.mem_map_header_file_name + ".h")
238
- swc_header_file = Path(src_code_dest_dir, self.swc_header_file_name + ".h")
239
- type_header_file = Path(src_code_dest_dir, self.type_header_file_name + ".h")
240
- source_file = Path(src_code_dest_dir, self.source_file_name + ".c")
241
- with mem_map_header_file.open(mode="w", encoding="utf-8") as mem_map_header_fh:
242
- mem_map_header_fh.write(self._get_mem_map_header_content())
243
- with swc_header_file.open(mode="w", encoding="utf-8") as swc_header_fh:
244
- swc_header_fh.write(self._get_swc_header_content())
245
- with type_header_file.open(mode="w", encoding="utf-8") as type_header_fh:
246
- type_header_fh.write(self._get_type_header_header())
247
- type_header_fh.write(self._get_typedef_dummy())
248
- type_header_fh.write(self._get_nvm_header_dummy())
249
- type_header_fh.write(self._get_calibration_header_dummy())
250
- type_header_fh.write(self._get_type_header_footer())
251
- with source_file.open(mode="w", encoding="utf-8") as source_fh:
252
- source_fh.write(self._get_source_header())
253
- source_fh.write(self._get_nvm_source_dummy())
254
- source_fh.write(self._get_calibration_source_dummy())
1
+ # Copyright 2024 Volvo Car Corporation
2
+ # Licensed under Apache 2.0.
3
+
4
+ # -*- coding: utf-8 -*-
5
+ """Module containing classes for generating RTE dummy code.
6
+
7
+ These files are needed for building test SW,
8
+ where the RTE is not available.
9
+ For example, when running Silver tests.
10
+ """
11
+
12
+ from powertrain_build.problem_logger import ProblemLogger
13
+
14
+ from pathlib import Path
15
+
16
+
17
+ class RteDummy(ProblemLogger):
18
+ """A class for RTE dummy file generation."""
19
+
20
+ def __init__(self, build_cfg, nvm_def, calib_data):
21
+ """Init.
22
+
23
+ Args:
24
+ build_cfg (BuildProjConfig): Object with build configuration settings.
25
+ nvm_def (ZCNVMDef): Object with NVM definition information.
26
+ calib_data (dict): Dictionary containing calibration data for a ZoneController project.
27
+ """
28
+ super().__init__()
29
+ self.build_cfg = build_cfg
30
+ self.nvm_def = nvm_def
31
+ self.calibration_variables = calib_data.get("class_info", {})
32
+ mem_map_config = self.build_cfg.get_memory_map_config()
33
+ self.mem_map_header_file_name = f"{mem_map_config['memMapPrefix']}_MemMap"
34
+ self.swc_header_file_name = f"Rte_{self.build_cfg.get_composition_config('softwareComponentName')}"
35
+ self.type_header_file_name = "Rte_Type"
36
+ self.source_file_name = "Rte_Dummy"
37
+
38
+ def _get_common_header(self):
39
+ """Get common header for the RTE dummy files."""
40
+ return (
41
+ "/*\n"
42
+ " * This file is generated by the Powertrain Build System.\n"
43
+ " * It defines RTE dummy types and/or functions.\n"
44
+ " * Do not modify this file manually.\n"
45
+ " */\n"
46
+ )
47
+
48
+ def _get_mem_map_header_content(self):
49
+ """Get content for the dummy memory map header."""
50
+ return (
51
+ f"{self._get_common_header()}"
52
+ f"#ifndef {self.mem_map_header_file_name.upper()}_H\n"
53
+ f"#define {self.mem_map_header_file_name.upper()}_H\n\n"
54
+ f"#endif /* {self.mem_map_header_file_name.upper()}_H */\n"
55
+ )
56
+
57
+ def _get_swc_header_content(self):
58
+ """Get content for the SWC RTE dummy header."""
59
+ return (
60
+ f"{self._get_common_header()}"
61
+ f"#ifndef {self.swc_header_file_name.upper()}_H\n"
62
+ f"#define {self.swc_header_file_name.upper()}_H\n\n"
63
+ f'#include "{self.type_header_file_name}.h"\n'
64
+ f"#endif /* {self.swc_header_file_name.upper()}_H */\n"
65
+ )
66
+
67
+ def _get_type_header_header(self):
68
+ """Get header for the RTE type dummy header."""
69
+ include_nvm_header = ""
70
+ if not self.build_cfg.get_code_generation_config("useRteNvmStructs"):
71
+ nvm_defs = self.build_cfg.get_nvm_defs()
72
+ nvm_file_name = nvm_defs["fileName"]
73
+ include_nvm_header = f'#include "{nvm_file_name}.h"\n'
74
+ return (
75
+ f"{self._get_common_header()}"
76
+ f"#ifndef {self.type_header_file_name.upper()}_H\n"
77
+ f"#define {self.type_header_file_name.upper()}_H\n\n"
78
+ '#include "tl_basetypes.h"\n'
79
+ f"{include_nvm_header}\n"
80
+ "#define FALSE 0U\n"
81
+ "#define TRUE 1U\n\n"
82
+ )
83
+
84
+ def _get_type_header_footer(self):
85
+ """Get footer for the RTE type dummy header."""
86
+ return f"\n#endif /* {self.type_header_file_name.upper()}_H */\n"
87
+
88
+ def _get_source_header(self):
89
+ """Get header for the RTE dummy source."""
90
+ return (
91
+ f"{self._get_common_header()}"
92
+ f'#include "{self.swc_header_file_name}.h"\n\n'
93
+ )
94
+
95
+ def _get_typedef_dummy(self):
96
+ """Get typedef dummy code."""
97
+ typedefs = []
98
+
99
+ function_name = self.build_cfg.get_composition_config("compositionName")
100
+ if function_name is None:
101
+ function_name = self.build_cfg.get_composition_config("softwareComponentName")
102
+
103
+ # MAPs get typedef:ed to structs and need special data type mapping in calibration.py
104
+ for signal_name, signal_data in self.calibration_variables.items():
105
+ if isinstance(signal_data["width"], list):
106
+ if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]:
107
+ typedefs.append(
108
+ f"typedef {signal_data['type']} {signal_data['autosar_type']}_e[{signal_data['width'][0]}];\n"
109
+ )
110
+ typedefs.append(
111
+ "typedef struct \n"
112
+ "{\n"
113
+ f" {signal_data['autosar_type']}_e {signal_data['autosar_type']}[{signal_data['width'][1]}];\n"
114
+ f"}} {signal_data['autosar_type']};\n\n"
115
+ )
116
+
117
+ return "".join(typedefs)
118
+
119
+ def _get_nvm_header_dummy(self):
120
+ """Get NVM dummy header code."""
121
+ struct_defines = []
122
+ function_declarations = []
123
+ prefix = self.build_cfg.get_scheduler_prefix()
124
+ use_rte_nvm_structs = self.build_cfg.get_code_generation_config("useRteNvmStructs")
125
+
126
+ for memory_area in self.nvm_def._nvm_memory_areas:
127
+ nvm_name = f"{prefix}{memory_area}"
128
+ struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
129
+ function_declarations.append(f"{struct_name} *Rte_Pim_{nvm_name}(void);")
130
+ function_declarations.append(f"void Rte_Read_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block);")
131
+ function_declarations.append(f"void Rte_Write_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block);")
132
+
133
+ if use_rte_nvm_structs:
134
+ struct_defines.append("typedef struct\n{")
135
+ memory_area_index = self.nvm_def._get_nvm_areas_index(memory_area)
136
+ nr_of_unused_signals = self.nvm_def.nvm_definitions[memory_area_index]["size"]
137
+ signals = self.nvm_def.nvm_definitions[memory_area_index]["signals"]
138
+ for signal in signals:
139
+ signal_string = ""
140
+ nr_of_unused_signals -= signal["x_size"] * signal["y_size"]
141
+ signal_string += f' {signal["type"]} {self.nvm_def.struct_member_prefix}{signal["name"]}'
142
+ size = max(signal["x_size"], 1) * max(signal["y_size"], 1)
143
+ if size > 1:
144
+ if signal["x_size"] > 1:
145
+ signal_string += f'[{signal["x_size"]}]'
146
+ if signal["y_size"] > 1:
147
+ signal_string += f'[{signal["y_size"]}]'
148
+ signal_string += ";"
149
+ struct_defines.append(signal_string)
150
+ if nr_of_unused_signals > 0:
151
+ struct_defines.append(
152
+ f' {self.nvm_def.nvm_definitions[memory_area_index]["default_datatype"]} '
153
+ f'unused[{nr_of_unused_signals}];'
154
+ )
155
+ struct_defines.append(f"}} {struct_name};\n")
156
+
157
+ return "\n".join(struct_defines + function_declarations)
158
+
159
+ def _get_nvm_source_dummy(self):
160
+ """Generate NVM source dummy code."""
161
+ lines_to_write = []
162
+ prefix = self.build_cfg.get_scheduler_prefix()
163
+ use_rte_nvm_structs = self.build_cfg.get_code_generation_config("useRteNvmStructs")
164
+ for memory_area in self.nvm_def._nvm_memory_areas:
165
+ nvm_name = f"{prefix}{memory_area}"
166
+ struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
167
+ return_string = f"{struct_name} dummy; {struct_name}* dummyPtr = &dummy; return dummyPtr;"
168
+ lines_to_write.append(f"{struct_name} *Rte_Pim_{nvm_name}(void) {{ {return_string} }}")
169
+ lines_to_write.append(f"void Rte_Read_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
170
+ lines_to_write.append(f"void Rte_Write_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
171
+ lines_to_write.append("")
172
+ return "\n".join(lines_to_write)
173
+
174
+ def _get_calibration_function_data(self, signal_name, signal_data):
175
+ """"Get calibration function data.
176
+
177
+ Args:
178
+ signal_name (str): Name of the signal.
179
+ signal_data (dict): Dictionary containing signal data.
180
+ Returns:
181
+ return_type, return_string (tuple): Tuple containing the return type and return string.
182
+ """
183
+ if isinstance(signal_data["width"], list):
184
+ if signal_data["width"][0] == 1:
185
+ dummy_variable = f"dummy[{signal_data['width'][1]}]"
186
+ else:
187
+ dummy_variable = f"dummy[{signal_data['width'][0]}][{signal_data['width'][1]}]"
188
+ # MAPs get typedef:ed to structs and need special data type mapping in calibration.py
189
+ if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]:
190
+ return_type = f'const {signal_data["autosar_type"]}*'
191
+ return_string = (
192
+ f"const {signal_data['autosar_type']} {dummy_variable}; "
193
+ f"{return_type} dummyPtr = &dummy; "
194
+ "return dummyPtr;"
195
+ )
196
+ else:
197
+ return_type = f'const {signal_data["type"]}*'
198
+ return_string = (
199
+ f"{signal_data['type']} {dummy_variable}; "
200
+ f"{return_type} dummyPtr = &dummy; "
201
+ "return dummyPtr;"
202
+ )
203
+ else:
204
+ return_type = f'{signal_data["type"]}'
205
+ return_string = f"return ({return_type})0;"
206
+ return return_type, return_string
207
+
208
+ def _get_calibration_header_dummy(self):
209
+ """Get calibration dummy header code."""
210
+ if not self.calibration_variables:
211
+ return ""
212
+
213
+ lines_to_write = []
214
+ swc_name = self.build_cfg.get_composition_config("softwareComponentName")
215
+ for signal_name, signal_data in self.calibration_variables.items():
216
+ return_type = self._get_calibration_function_data(signal_name, signal_data)[0]
217
+ lines_to_write.append(f"{return_type} Rte_CData_{swc_name}_{signal_name}(void);")
218
+ lines_to_write.append("")
219
+ return "\n".join(lines_to_write)
220
+
221
+ def _get_calibration_source_dummy(self):
222
+ """Get calibration source dummy code."""
223
+ if not self.calibration_variables:
224
+ return ""
225
+
226
+ lines_to_write = []
227
+ swc_name = self.build_cfg.get_composition_config("softwareComponentName")
228
+ for signal_name, signal_data in self.calibration_variables.items():
229
+ return_type, return_string = self._get_calibration_function_data(signal_name, signal_data)
230
+ lines_to_write.append(f"{return_type} Rte_CData_{swc_name}_{signal_name}(void) {{ {return_string} }}")
231
+ lines_to_write.append("")
232
+ return "\n".join(lines_to_write)
233
+
234
+ def generate_rte_dummy(self):
235
+ """Generate RTE dummy files."""
236
+ src_code_dest_dir = self.build_cfg.get_src_code_dst_dir()
237
+ mem_map_header_file = Path(src_code_dest_dir, self.mem_map_header_file_name + ".h")
238
+ swc_header_file = Path(src_code_dest_dir, self.swc_header_file_name + ".h")
239
+ type_header_file = Path(src_code_dest_dir, self.type_header_file_name + ".h")
240
+ source_file = Path(src_code_dest_dir, self.source_file_name + ".c")
241
+ with mem_map_header_file.open(mode="w", encoding="utf-8") as mem_map_header_fh:
242
+ mem_map_header_fh.write(self._get_mem_map_header_content())
243
+ with swc_header_file.open(mode="w", encoding="utf-8") as swc_header_fh:
244
+ swc_header_fh.write(self._get_swc_header_content())
245
+ with type_header_file.open(mode="w", encoding="utf-8") as type_header_fh:
246
+ type_header_fh.write(self._get_type_header_header())
247
+ type_header_fh.write(self._get_typedef_dummy())
248
+ type_header_fh.write(self._get_nvm_header_dummy())
249
+ type_header_fh.write(self._get_calibration_header_dummy())
250
+ type_header_fh.write(self._get_type_header_footer())
251
+ with source_file.open(mode="w", encoding="utf-8") as source_fh:
252
+ source_fh.write(self._get_source_header())
253
+ source_fh.write(self._get_nvm_source_dummy())
254
+ source_fh.write(self._get_calibration_source_dummy())