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.
- powertrain_build/__init__.py +40 -40
- powertrain_build/__main__.py +6 -6
- powertrain_build/a2l.py +582 -582
- powertrain_build/a2l_merge.py +650 -650
- powertrain_build/a2l_templates.py +717 -717
- powertrain_build/build.py +985 -985
- powertrain_build/build_defs.py +309 -309
- powertrain_build/build_proj_config.py +690 -690
- powertrain_build/check_interface.py +575 -575
- powertrain_build/cli.py +141 -141
- powertrain_build/config.py +542 -542
- powertrain_build/core.py +395 -395
- powertrain_build/core_dummy.py +343 -343
- powertrain_build/create_conversion_table.py +73 -73
- powertrain_build/dids.py +916 -916
- powertrain_build/dummy.py +157 -157
- powertrain_build/dummy_spm.py +252 -252
- powertrain_build/environmentcheck.py +52 -52
- powertrain_build/ext_dbg.py +255 -255
- powertrain_build/ext_var.py +327 -327
- powertrain_build/feature_configs.py +301 -301
- powertrain_build/gen_allsysteminfo.py +227 -227
- powertrain_build/gen_label_split.py +449 -449
- powertrain_build/handcode_replacer.py +124 -124
- powertrain_build/html_report.py +133 -133
- powertrain_build/interface/__init__.py +4 -4
- powertrain_build/interface/application.py +511 -511
- powertrain_build/interface/base.py +500 -500
- powertrain_build/interface/csp_api.py +490 -490
- powertrain_build/interface/device_proxy.py +677 -677
- powertrain_build/interface/ems.py +67 -67
- powertrain_build/interface/export_global_vars.py +121 -121
- powertrain_build/interface/generate_adapters.py +132 -132
- powertrain_build/interface/generate_hi_interface.py +87 -87
- powertrain_build/interface/generate_service.py +69 -69
- powertrain_build/interface/generate_wrappers.py +147 -147
- powertrain_build/interface/generation_utils.py +142 -142
- powertrain_build/interface/hal.py +194 -194
- powertrain_build/interface/model_yaml_verification.py +348 -348
- powertrain_build/interface/service.py +296 -296
- powertrain_build/interface/simulink.py +249 -249
- powertrain_build/interface/update_call_sources.py +180 -180
- powertrain_build/interface/update_model_yaml.py +186 -186
- powertrain_build/interface/zone_controller.py +362 -362
- powertrain_build/lib/__init__.py +4 -4
- powertrain_build/lib/helper_functions.py +127 -127
- powertrain_build/lib/logger.py +55 -55
- powertrain_build/matlab_scripts/CodeGen/BuildAutomationPyBuild.m +78 -78
- powertrain_build/matlab_scripts/CodeGen/Generate_A2L.m +154 -154
- powertrain_build/matlab_scripts/CodeGen/generateTLUnit.m +239 -239
- powertrain_build/matlab_scripts/CodeGen/getAsilClassification.m +28 -28
- powertrain_build/matlab_scripts/CodeGen/modelConfiguredForTL.m +28 -28
- powertrain_build/matlab_scripts/CodeGen/moveDefOutports.m +88 -88
- powertrain_build/matlab_scripts/CodeGen/parseCalMeasData.m +410 -410
- powertrain_build/matlab_scripts/CodeGen/parseCoreIdentifiers.m +139 -139
- powertrain_build/matlab_scripts/CodeGen/parseDIDs.m +141 -141
- powertrain_build/matlab_scripts/CodeGen/parseInPorts.m +106 -106
- powertrain_build/matlab_scripts/CodeGen/parseIncludeConfigs.m +25 -25
- powertrain_build/matlab_scripts/CodeGen/parseModelInfo.m +38 -38
- powertrain_build/matlab_scripts/CodeGen/parseNVM.m +81 -81
- powertrain_build/matlab_scripts/CodeGen/parseOutPorts.m +120 -120
- powertrain_build/matlab_scripts/CodeGen/parsePreProcBlks.m +23 -23
- powertrain_build/matlab_scripts/CodeGen/struct2JSON.m +128 -128
- powertrain_build/matlab_scripts/CodeGen/updateCodeSwConfig.m +31 -31
- powertrain_build/matlab_scripts/Init_PyBuild.m +91 -91
- powertrain_build/matlab_scripts/__init__.py +2 -2
- powertrain_build/matlab_scripts/helperFunctions/Get_Full_Name.m +46 -46
- powertrain_build/matlab_scripts/helperFunctions/Get_SrcLines.m +12 -12
- powertrain_build/matlab_scripts/helperFunctions/Init_Models.m +78 -78
- powertrain_build/matlab_scripts/helperFunctions/Init_Projects.m +67 -67
- powertrain_build/matlab_scripts/helperFunctions/Read_Units.m +34 -34
- powertrain_build/matlab_scripts/helperFunctions/SetProjectTimeSamples.m +26 -26
- powertrain_build/matlab_scripts/helperFunctions/Strip_Suffix.m +16 -16
- powertrain_build/matlab_scripts/helperFunctions/followLink.m +118 -118
- powertrain_build/matlab_scripts/helperFunctions/getCodeSwitches.m +50 -50
- powertrain_build/matlab_scripts/helperFunctions/getConsumerBlocks.m +30 -30
- powertrain_build/matlab_scripts/helperFunctions/getDefBlock.m +39 -39
- powertrain_build/matlab_scripts/helperFunctions/getDefOutport.m +58 -58
- powertrain_build/matlab_scripts/helperFunctions/getDstBlocks.m +19 -19
- powertrain_build/matlab_scripts/helperFunctions/getDstLines.m +13 -13
- powertrain_build/matlab_scripts/helperFunctions/getInterfaceSignals.m +37 -37
- powertrain_build/matlab_scripts/helperFunctions/getName.m +37 -37
- powertrain_build/matlab_scripts/helperFunctions/getPath.m +6 -6
- powertrain_build/matlab_scripts/helperFunctions/getProperValue.m +21 -21
- powertrain_build/matlab_scripts/helperFunctions/getSrcBlocks.m +19 -19
- powertrain_build/matlab_scripts/helperFunctions/getSrcLines.m +13 -13
- powertrain_build/matlab_scripts/helperFunctions/loadLibraries.m +10 -10
- powertrain_build/matlab_scripts/helperFunctions/loadjson.m +6 -6
- powertrain_build/matlab_scripts/helperFunctions/modifyEnumStructField.m +21 -21
- powertrain_build/matlab_scripts/helperFunctions/removeConfigDuplicates.m +31 -31
- powertrain_build/matlab_scripts/helperFunctions/sortSystemByClass.m +26 -26
- powertrain_build/matlab_scripts/helperFunctions/tl_getfast.m +89 -89
- powertrain_build/matlab_scripts/helperFunctions/topLevelSystem.m +20 -20
- powertrain_build/matlab_scripts/helperFunctions/updateModels.m +131 -131
- powertrain_build/memory_section.py +224 -224
- powertrain_build/nvm_def.py +729 -729
- powertrain_build/problem_logger.py +86 -86
- powertrain_build/pt_matlab.py +430 -430
- powertrain_build/pt_win32.py +144 -144
- powertrain_build/replace_compu_tab_ref.py +105 -105
- powertrain_build/rte_dummy.py +254 -254
- powertrain_build/sched_funcs.py +209 -207
- powertrain_build/signal.py +7 -7
- powertrain_build/signal_if_html_rep.py +221 -221
- powertrain_build/signal_if_html_rep_all.py +302 -302
- powertrain_build/signal_incons_html_rep.py +180 -180
- powertrain_build/signal_incons_html_rep_all.py +366 -366
- powertrain_build/signal_incons_html_rep_base.py +168 -168
- powertrain_build/signal_inconsistency_check.py +641 -641
- powertrain_build/signal_interfaces.py +864 -864
- powertrain_build/templates/Index_SigCheck_All.html +22 -22
- powertrain_build/templates/Index_SigIf_All.html +19 -19
- powertrain_build/types.py +218 -218
- powertrain_build/unit_configs.py +419 -419
- powertrain_build/user_defined_types.py +660 -660
- powertrain_build/versioncheck.py +66 -66
- powertrain_build/wrapper.py +512 -512
- powertrain_build/xlrd_csv.py +87 -87
- powertrain_build/zone_controller/__init__.py +4 -4
- powertrain_build/zone_controller/calibration.py +176 -176
- powertrain_build/zone_controller/composition_yaml.py +880 -878
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/METADATA +100 -100
- powertrain_build-1.13.3.dev3.dist-info/RECORD +130 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/WHEEL +1 -1
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/LICENSE +202 -202
- powertrain_build-1.13.3.dev3.dist-info/pbr.json +1 -0
- powertrain_build-1.13.1.dist-info/RECORD +0 -130
- powertrain_build-1.13.1.dist-info/pbr.json +0 -1
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/entry_points.txt +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/AUTHORS +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/NOTICE +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/top_level.txt +0 -0
powertrain_build/dummy.py
CHANGED
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
# Copyright 2024 Volvo Car Corporation
|
|
2
|
-
# Licensed under Apache 2.0.
|
|
3
|
-
|
|
4
|
-
"""Module for generation of c- and a2l-file with dummy signal declarations."""
|
|
5
|
-
|
|
6
|
-
import powertrain_build.build_defs as bd
|
|
7
|
-
|
|
8
|
-
from powertrain_build.types import byte_size_string, get_bitmask
|
|
9
|
-
from powertrain_build.a2l import A2l
|
|
10
|
-
from powertrain_build.problem_logger import ProblemLogger
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class DummyVar(ProblemLogger):
|
|
14
|
-
"""Generate c- and a2l-files which declares all missing variables in the interfaces.
|
|
15
|
-
|
|
16
|
-
TODO: Please remove this file! Only used while testing.
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
def __init__(self, unit_cfg, ext_dict, res_dict, prj_cfg, user_defined_types):
|
|
20
|
-
"""Initialize instance of class."""
|
|
21
|
-
super().__init__()
|
|
22
|
-
self._unit_cfg = unit_cfg
|
|
23
|
-
self._unit_vars = unit_cfg.get_per_cfg_unit_cfg()
|
|
24
|
-
self._ext_dict = ext_dict
|
|
25
|
-
self._res_dict = res_dict
|
|
26
|
-
self._ext_vars = {}
|
|
27
|
-
self._int_vars = {}
|
|
28
|
-
self._prj_cfg = prj_cfg
|
|
29
|
-
self._enumerations = user_defined_types.get_enumerations()
|
|
30
|
-
self._common_header_files = user_defined_types.common_header_files
|
|
31
|
-
|
|
32
|
-
def _get_byte_size_string(self, data_type):
|
|
33
|
-
"""Get byte size of a data type as string.
|
|
34
|
-
Enumeration byte sizes are derived from the underlying data type.
|
|
35
|
-
|
|
36
|
-
Args:
|
|
37
|
-
data_type (str): Data type.
|
|
38
|
-
Returns:
|
|
39
|
-
byte_size_string(powertrain_build.types.byte_size_string): Return result of
|
|
40
|
-
powertrain_build.types.byte_size_string.
|
|
41
|
-
"""
|
|
42
|
-
if data_type in self._enumerations:
|
|
43
|
-
return byte_size_string(self._enumerations[data_type]["underlying_data_type"])
|
|
44
|
-
return byte_size_string(data_type)
|
|
45
|
-
|
|
46
|
-
def _restruct_input_data(self):
|
|
47
|
-
"""Restructure all the input variables per data-type.
|
|
48
|
-
|
|
49
|
-
This will be used for declaring the variables and generating the
|
|
50
|
-
A2L-file
|
|
51
|
-
"""
|
|
52
|
-
ext_out = {
|
|
53
|
-
var: data
|
|
54
|
-
for ioclass, vardict in self._ext_dict.items()
|
|
55
|
-
if ioclass.endswith("-Output")
|
|
56
|
-
for var, data in vardict.items()
|
|
57
|
-
}
|
|
58
|
-
ext_ = {}
|
|
59
|
-
for var in self._res_dict["sigs"]["ext"]["missing"]:
|
|
60
|
-
self.debug("ext: %s", var)
|
|
61
|
-
if var in ext_out:
|
|
62
|
-
data = ext_out[var]
|
|
63
|
-
self.debug("ext_data: %s", data)
|
|
64
|
-
ext_[var] = data
|
|
65
|
-
int_ = {}
|
|
66
|
-
for unit in self._res_dict["sigs"]["int"]:
|
|
67
|
-
for var in self._res_dict["sigs"]["int"][unit]["missing"]:
|
|
68
|
-
if var not in ext_ and var in self._unit_vars["inports"]:
|
|
69
|
-
data = self._unit_vars["inports"][var][unit]
|
|
70
|
-
int_[var] = data
|
|
71
|
-
for var, data in int_.items():
|
|
72
|
-
data_type_size = self._get_byte_size_string(data["type"])
|
|
73
|
-
self._int_vars.setdefault(data_type_size, {})[var] = data
|
|
74
|
-
for var, data in ext_.items():
|
|
75
|
-
data_type_size = self._get_byte_size_string(data["type"])
|
|
76
|
-
self._ext_vars.setdefault(data_type_size, {})[var] = data
|
|
77
|
-
|
|
78
|
-
def _a2l_dict(self):
|
|
79
|
-
"""Return a dict defining all parameters for a2l-generation."""
|
|
80
|
-
res = {"vars": {}, "function": "VcDummy"}
|
|
81
|
-
for inp in [self._ext_vars]:
|
|
82
|
-
for sizes in inp.values():
|
|
83
|
-
for var, data in sizes.items():
|
|
84
|
-
if data["type"] in self._enumerations:
|
|
85
|
-
data_type = self._enumerations[data["type"]]["underlying_data_type"]
|
|
86
|
-
else:
|
|
87
|
-
data_type = data["type"]
|
|
88
|
-
|
|
89
|
-
resv = res["vars"]
|
|
90
|
-
resv.setdefault(var, {})["a2l_data"] = {
|
|
91
|
-
"bitmask": get_bitmask(data_type),
|
|
92
|
-
"description": data.get("description", ""),
|
|
93
|
-
"lsb": "2^0",
|
|
94
|
-
"max": data.get("max"),
|
|
95
|
-
"min": data.get("min"),
|
|
96
|
-
"offset": "0",
|
|
97
|
-
"unit": data["unit"],
|
|
98
|
-
"x_axis": None,
|
|
99
|
-
"y_axis": None,
|
|
100
|
-
}
|
|
101
|
-
resv[var]["array"] = []
|
|
102
|
-
resv[var]["function"] = ["VcEc"]
|
|
103
|
-
resv[var]["var"] = {"cvc_type": "CVC_DISP", "type": data_type, "var": var}
|
|
104
|
-
return res
|
|
105
|
-
|
|
106
|
-
@classmethod
|
|
107
|
-
def _generate_var_defs(cls, fh_c, vars, enums, comment):
|
|
108
|
-
"""Generate the variable definitions."""
|
|
109
|
-
fh_c.write(f"\n{comment}\n\n")
|
|
110
|
-
for varsize in sorted(vars.keys(), reverse=True):
|
|
111
|
-
fh_c.write(f"/* Variables of size {varsize} bytes */\n\n")
|
|
112
|
-
var_defs = vars[varsize]
|
|
113
|
-
for var in sorted(var_defs.keys()):
|
|
114
|
-
data = var_defs[var]
|
|
115
|
-
if data["type"] in enums:
|
|
116
|
-
if enums[data["type"]]["default_value"] is not None:
|
|
117
|
-
init_value = enums[data["type"]]["default_value"]
|
|
118
|
-
else:
|
|
119
|
-
cls.warning('Initializing enumeration %s to "zero".', data["type"])
|
|
120
|
-
init_value = [k for k, v in enums[data["type"]]["members"].items() if v == 0][0]
|
|
121
|
-
fh_c.write(f"{data['type']} {var} = {init_value};\n")
|
|
122
|
-
else:
|
|
123
|
-
fh_c.write(f"{data['type']} {var} = {0};\n")
|
|
124
|
-
fh_c.write("\n")
|
|
125
|
-
|
|
126
|
-
@classmethod
|
|
127
|
-
def _generate_var_initialization(cls, fh_c, vars, comment):
|
|
128
|
-
"""Generate the variable initializations."""
|
|
129
|
-
fh_c.write(f"\n{comment}\n\n")
|
|
130
|
-
fh_c.write("\nvoid RESTART_VcDummy(void)\n{\n")
|
|
131
|
-
for varsize in sorted(vars.keys(), reverse=True):
|
|
132
|
-
var_defs = vars[varsize]
|
|
133
|
-
for var in sorted(var_defs.keys()):
|
|
134
|
-
fh_c.write(f" {var} = {0};\n")
|
|
135
|
-
fh_c.write("}\n")
|
|
136
|
-
|
|
137
|
-
def _generate_c_file(self, filename):
|
|
138
|
-
"""Generate the c-file defining all missing input variables."""
|
|
139
|
-
general_includes = ""
|
|
140
|
-
general_includes += self._unit_cfg.base_types_headers
|
|
141
|
-
for common_header_file in self._common_header_files:
|
|
142
|
-
general_includes += f'#include "{common_header_file}"\n'
|
|
143
|
-
general_includes += "\n"
|
|
144
|
-
|
|
145
|
-
with open(filename, "w", encoding="utf-8") as fh_c:
|
|
146
|
-
fh_c.write(general_includes)
|
|
147
|
-
fh_c.write(f'#include "{bd.CVC_DISP_START}"\n\n')
|
|
148
|
-
self._generate_var_defs(fh_c, self._ext_vars, self._enumerations, "/** Missing external signals **/")
|
|
149
|
-
fh_c.write(f'\n#include "{bd.CVC_DISP_END}"\n')
|
|
150
|
-
self.info("Generated %s", filename)
|
|
151
|
-
|
|
152
|
-
def generate_file(self, filename):
|
|
153
|
-
"""Generate the files for defining all missing input variables."""
|
|
154
|
-
self._restruct_input_data()
|
|
155
|
-
self._generate_c_file(filename + ".c")
|
|
156
|
-
a2l_dict = self._a2l_dict()
|
|
157
|
-
A2l(a2l_dict, self._prj_cfg).gen_a2l(filename + ".a2l")
|
|
1
|
+
# Copyright 2024 Volvo Car Corporation
|
|
2
|
+
# Licensed under Apache 2.0.
|
|
3
|
+
|
|
4
|
+
"""Module for generation of c- and a2l-file with dummy signal declarations."""
|
|
5
|
+
|
|
6
|
+
import powertrain_build.build_defs as bd
|
|
7
|
+
|
|
8
|
+
from powertrain_build.types import byte_size_string, get_bitmask
|
|
9
|
+
from powertrain_build.a2l import A2l
|
|
10
|
+
from powertrain_build.problem_logger import ProblemLogger
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DummyVar(ProblemLogger):
|
|
14
|
+
"""Generate c- and a2l-files which declares all missing variables in the interfaces.
|
|
15
|
+
|
|
16
|
+
TODO: Please remove this file! Only used while testing.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
def __init__(self, unit_cfg, ext_dict, res_dict, prj_cfg, user_defined_types):
|
|
20
|
+
"""Initialize instance of class."""
|
|
21
|
+
super().__init__()
|
|
22
|
+
self._unit_cfg = unit_cfg
|
|
23
|
+
self._unit_vars = unit_cfg.get_per_cfg_unit_cfg()
|
|
24
|
+
self._ext_dict = ext_dict
|
|
25
|
+
self._res_dict = res_dict
|
|
26
|
+
self._ext_vars = {}
|
|
27
|
+
self._int_vars = {}
|
|
28
|
+
self._prj_cfg = prj_cfg
|
|
29
|
+
self._enumerations = user_defined_types.get_enumerations()
|
|
30
|
+
self._common_header_files = user_defined_types.common_header_files
|
|
31
|
+
|
|
32
|
+
def _get_byte_size_string(self, data_type):
|
|
33
|
+
"""Get byte size of a data type as string.
|
|
34
|
+
Enumeration byte sizes are derived from the underlying data type.
|
|
35
|
+
|
|
36
|
+
Args:
|
|
37
|
+
data_type (str): Data type.
|
|
38
|
+
Returns:
|
|
39
|
+
byte_size_string(powertrain_build.types.byte_size_string): Return result of
|
|
40
|
+
powertrain_build.types.byte_size_string.
|
|
41
|
+
"""
|
|
42
|
+
if data_type in self._enumerations:
|
|
43
|
+
return byte_size_string(self._enumerations[data_type]["underlying_data_type"])
|
|
44
|
+
return byte_size_string(data_type)
|
|
45
|
+
|
|
46
|
+
def _restruct_input_data(self):
|
|
47
|
+
"""Restructure all the input variables per data-type.
|
|
48
|
+
|
|
49
|
+
This will be used for declaring the variables and generating the
|
|
50
|
+
A2L-file
|
|
51
|
+
"""
|
|
52
|
+
ext_out = {
|
|
53
|
+
var: data
|
|
54
|
+
for ioclass, vardict in self._ext_dict.items()
|
|
55
|
+
if ioclass.endswith("-Output")
|
|
56
|
+
for var, data in vardict.items()
|
|
57
|
+
}
|
|
58
|
+
ext_ = {}
|
|
59
|
+
for var in self._res_dict["sigs"]["ext"]["missing"]:
|
|
60
|
+
self.debug("ext: %s", var)
|
|
61
|
+
if var in ext_out:
|
|
62
|
+
data = ext_out[var]
|
|
63
|
+
self.debug("ext_data: %s", data)
|
|
64
|
+
ext_[var] = data
|
|
65
|
+
int_ = {}
|
|
66
|
+
for unit in self._res_dict["sigs"]["int"]:
|
|
67
|
+
for var in self._res_dict["sigs"]["int"][unit]["missing"]:
|
|
68
|
+
if var not in ext_ and var in self._unit_vars["inports"]:
|
|
69
|
+
data = self._unit_vars["inports"][var][unit]
|
|
70
|
+
int_[var] = data
|
|
71
|
+
for var, data in int_.items():
|
|
72
|
+
data_type_size = self._get_byte_size_string(data["type"])
|
|
73
|
+
self._int_vars.setdefault(data_type_size, {})[var] = data
|
|
74
|
+
for var, data in ext_.items():
|
|
75
|
+
data_type_size = self._get_byte_size_string(data["type"])
|
|
76
|
+
self._ext_vars.setdefault(data_type_size, {})[var] = data
|
|
77
|
+
|
|
78
|
+
def _a2l_dict(self):
|
|
79
|
+
"""Return a dict defining all parameters for a2l-generation."""
|
|
80
|
+
res = {"vars": {}, "function": "VcDummy"}
|
|
81
|
+
for inp in [self._ext_vars]:
|
|
82
|
+
for sizes in inp.values():
|
|
83
|
+
for var, data in sizes.items():
|
|
84
|
+
if data["type"] in self._enumerations:
|
|
85
|
+
data_type = self._enumerations[data["type"]]["underlying_data_type"]
|
|
86
|
+
else:
|
|
87
|
+
data_type = data["type"]
|
|
88
|
+
|
|
89
|
+
resv = res["vars"]
|
|
90
|
+
resv.setdefault(var, {})["a2l_data"] = {
|
|
91
|
+
"bitmask": get_bitmask(data_type),
|
|
92
|
+
"description": data.get("description", ""),
|
|
93
|
+
"lsb": "2^0",
|
|
94
|
+
"max": data.get("max"),
|
|
95
|
+
"min": data.get("min"),
|
|
96
|
+
"offset": "0",
|
|
97
|
+
"unit": data["unit"],
|
|
98
|
+
"x_axis": None,
|
|
99
|
+
"y_axis": None,
|
|
100
|
+
}
|
|
101
|
+
resv[var]["array"] = []
|
|
102
|
+
resv[var]["function"] = ["VcEc"]
|
|
103
|
+
resv[var]["var"] = {"cvc_type": "CVC_DISP", "type": data_type, "var": var}
|
|
104
|
+
return res
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def _generate_var_defs(cls, fh_c, vars, enums, comment):
|
|
108
|
+
"""Generate the variable definitions."""
|
|
109
|
+
fh_c.write(f"\n{comment}\n\n")
|
|
110
|
+
for varsize in sorted(vars.keys(), reverse=True):
|
|
111
|
+
fh_c.write(f"/* Variables of size {varsize} bytes */\n\n")
|
|
112
|
+
var_defs = vars[varsize]
|
|
113
|
+
for var in sorted(var_defs.keys()):
|
|
114
|
+
data = var_defs[var]
|
|
115
|
+
if data["type"] in enums:
|
|
116
|
+
if enums[data["type"]]["default_value"] is not None:
|
|
117
|
+
init_value = enums[data["type"]]["default_value"]
|
|
118
|
+
else:
|
|
119
|
+
cls.warning('Initializing enumeration %s to "zero".', data["type"])
|
|
120
|
+
init_value = [k for k, v in enums[data["type"]]["members"].items() if v == 0][0]
|
|
121
|
+
fh_c.write(f"{data['type']} {var} = {init_value};\n")
|
|
122
|
+
else:
|
|
123
|
+
fh_c.write(f"{data['type']} {var} = {0};\n")
|
|
124
|
+
fh_c.write("\n")
|
|
125
|
+
|
|
126
|
+
@classmethod
|
|
127
|
+
def _generate_var_initialization(cls, fh_c, vars, comment):
|
|
128
|
+
"""Generate the variable initializations."""
|
|
129
|
+
fh_c.write(f"\n{comment}\n\n")
|
|
130
|
+
fh_c.write("\nvoid RESTART_VcDummy(void)\n{\n")
|
|
131
|
+
for varsize in sorted(vars.keys(), reverse=True):
|
|
132
|
+
var_defs = vars[varsize]
|
|
133
|
+
for var in sorted(var_defs.keys()):
|
|
134
|
+
fh_c.write(f" {var} = {0};\n")
|
|
135
|
+
fh_c.write("}\n")
|
|
136
|
+
|
|
137
|
+
def _generate_c_file(self, filename):
|
|
138
|
+
"""Generate the c-file defining all missing input variables."""
|
|
139
|
+
general_includes = ""
|
|
140
|
+
general_includes += self._unit_cfg.base_types_headers
|
|
141
|
+
for common_header_file in self._common_header_files:
|
|
142
|
+
general_includes += f'#include "{common_header_file}"\n'
|
|
143
|
+
general_includes += "\n"
|
|
144
|
+
|
|
145
|
+
with open(filename, "w", encoding="utf-8") as fh_c:
|
|
146
|
+
fh_c.write(general_includes)
|
|
147
|
+
fh_c.write(f'#include "{bd.CVC_DISP_START}"\n\n')
|
|
148
|
+
self._generate_var_defs(fh_c, self._ext_vars, self._enumerations, "/** Missing external signals **/")
|
|
149
|
+
fh_c.write(f'\n#include "{bd.CVC_DISP_END}"\n')
|
|
150
|
+
self.info("Generated %s", filename)
|
|
151
|
+
|
|
152
|
+
def generate_file(self, filename):
|
|
153
|
+
"""Generate the files for defining all missing input variables."""
|
|
154
|
+
self._restruct_input_data()
|
|
155
|
+
self._generate_c_file(filename + ".c")
|
|
156
|
+
a2l_dict = self._a2l_dict()
|
|
157
|
+
A2l(a2l_dict, self._prj_cfg).gen_a2l(filename + ".a2l")
|