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
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
# Copyright 2024 Volvo Car Corporation
|
|
2
|
-
# Licensed under Apache 2.0.
|
|
3
|
-
|
|
4
|
-
# -*- coding: utf-8 -*-
|
|
5
|
-
"""Python module used for calculating interfaces for CSP HI"""
|
|
6
|
-
import argparse
|
|
7
|
-
import sys
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import List, Optional
|
|
10
|
-
|
|
11
|
-
from powertrain_build.interface import generation_utils
|
|
12
|
-
from powertrain_build.interface.device_proxy import DPAL
|
|
13
|
-
from powertrain_build.lib.helper_functions import recursive_default_dict, to_normal_dict
|
|
14
|
-
|
|
15
|
-
OP_READ = 'read'
|
|
16
|
-
OP_WRITE = 'write'
|
|
17
|
-
|
|
18
|
-
PARSER_HELP = "Generate HI YAML interface file."
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def generate_hi_interface(args, hi_interface):
|
|
22
|
-
"""Generate HI YAML interface file.
|
|
23
|
-
|
|
24
|
-
Args:
|
|
25
|
-
args (Namespace): Arguments from command line.
|
|
26
|
-
hi_interface (dict): HI interface dict based on HIApplication and generation_utils.get_interface.
|
|
27
|
-
Returns:
|
|
28
|
-
result (dict): Aggregated signal information as a dict.
|
|
29
|
-
"""
|
|
30
|
-
|
|
31
|
-
io_translation = {
|
|
32
|
-
'consumer': OP_READ,
|
|
33
|
-
'producer': OP_WRITE
|
|
34
|
-
}
|
|
35
|
-
result = recursive_default_dict()
|
|
36
|
-
for raster_data in hi_interface.values():
|
|
37
|
-
for direction, signals in raster_data.items():
|
|
38
|
-
hi_direction = io_translation[direction]
|
|
39
|
-
for signal in signals:
|
|
40
|
-
domain = signal['domain']
|
|
41
|
-
group = signal['group']
|
|
42
|
-
name = signal['variable']
|
|
43
|
-
property_name = signal['property']
|
|
44
|
-
if group is None:
|
|
45
|
-
port_name = signal['port_name'] or property_name
|
|
46
|
-
result[hi_direction]['signals'][domain][port_name]['data'][property_name] = name
|
|
47
|
-
else:
|
|
48
|
-
port_name = signal['port_name'] or group
|
|
49
|
-
result[hi_direction]['signal_groups'][domain][port_name][group]['data'][property_name] = name
|
|
50
|
-
generation_utils.write_to_file(to_normal_dict(result), args.output, is_yaml=True)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def generate_hi_interface_cli(args: argparse.Namespace):
|
|
54
|
-
"""CLI entrypoint for generating HI YAML interface file.
|
|
55
|
-
|
|
56
|
-
Args:
|
|
57
|
-
args (Namespace): Arguments from command line.
|
|
58
|
-
"""
|
|
59
|
-
app = generation_utils.process_app(args.config)
|
|
60
|
-
hi_app = DPAL(app)
|
|
61
|
-
interface = generation_utils.get_interface(app, hi_app)
|
|
62
|
-
generate_hi_interface(args, interface)
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def configure_parser(parser: argparse.ArgumentParser):
|
|
66
|
-
"""Configure parser for generating HI YAML interface file."""
|
|
67
|
-
generation_utils.add_base_args(parser)
|
|
68
|
-
parser.add_argument(
|
|
69
|
-
"output",
|
|
70
|
-
help="Output file with interface specifications.",
|
|
71
|
-
type=Path
|
|
72
|
-
)
|
|
73
|
-
parser.set_defaults(func=generate_hi_interface_cli)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def main(argv: Optional[List[str]] = None):
|
|
77
|
-
""" Main function for stand alone execution.
|
|
78
|
-
Mostly useful for testing and generation of dummy hal specifications.
|
|
79
|
-
"""
|
|
80
|
-
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
81
|
-
configure_parser(parser)
|
|
82
|
-
args = parser.parse_args(argv)
|
|
83
|
-
args.func(args)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if __name__ == "__main__":
|
|
87
|
-
main(sys.argv[1:])
|
|
1
|
+
# Copyright 2024 Volvo Car Corporation
|
|
2
|
+
# Licensed under Apache 2.0.
|
|
3
|
+
|
|
4
|
+
# -*- coding: utf-8 -*-
|
|
5
|
+
"""Python module used for calculating interfaces for CSP HI"""
|
|
6
|
+
import argparse
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List, Optional
|
|
10
|
+
|
|
11
|
+
from powertrain_build.interface import generation_utils
|
|
12
|
+
from powertrain_build.interface.device_proxy import DPAL
|
|
13
|
+
from powertrain_build.lib.helper_functions import recursive_default_dict, to_normal_dict
|
|
14
|
+
|
|
15
|
+
OP_READ = 'read'
|
|
16
|
+
OP_WRITE = 'write'
|
|
17
|
+
|
|
18
|
+
PARSER_HELP = "Generate HI YAML interface file."
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def generate_hi_interface(args, hi_interface):
|
|
22
|
+
"""Generate HI YAML interface file.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
args (Namespace): Arguments from command line.
|
|
26
|
+
hi_interface (dict): HI interface dict based on HIApplication and generation_utils.get_interface.
|
|
27
|
+
Returns:
|
|
28
|
+
result (dict): Aggregated signal information as a dict.
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
io_translation = {
|
|
32
|
+
'consumer': OP_READ,
|
|
33
|
+
'producer': OP_WRITE
|
|
34
|
+
}
|
|
35
|
+
result = recursive_default_dict()
|
|
36
|
+
for raster_data in hi_interface.values():
|
|
37
|
+
for direction, signals in raster_data.items():
|
|
38
|
+
hi_direction = io_translation[direction]
|
|
39
|
+
for signal in signals:
|
|
40
|
+
domain = signal['domain']
|
|
41
|
+
group = signal['group']
|
|
42
|
+
name = signal['variable']
|
|
43
|
+
property_name = signal['property']
|
|
44
|
+
if group is None:
|
|
45
|
+
port_name = signal['port_name'] or property_name
|
|
46
|
+
result[hi_direction]['signals'][domain][port_name]['data'][property_name] = name
|
|
47
|
+
else:
|
|
48
|
+
port_name = signal['port_name'] or group
|
|
49
|
+
result[hi_direction]['signal_groups'][domain][port_name][group]['data'][property_name] = name
|
|
50
|
+
generation_utils.write_to_file(to_normal_dict(result), args.output, is_yaml=True)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def generate_hi_interface_cli(args: argparse.Namespace):
|
|
54
|
+
"""CLI entrypoint for generating HI YAML interface file.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
args (Namespace): Arguments from command line.
|
|
58
|
+
"""
|
|
59
|
+
app = generation_utils.process_app(args.config)
|
|
60
|
+
hi_app = DPAL(app)
|
|
61
|
+
interface = generation_utils.get_interface(app, hi_app)
|
|
62
|
+
generate_hi_interface(args, interface)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def configure_parser(parser: argparse.ArgumentParser):
|
|
66
|
+
"""Configure parser for generating HI YAML interface file."""
|
|
67
|
+
generation_utils.add_base_args(parser)
|
|
68
|
+
parser.add_argument(
|
|
69
|
+
"output",
|
|
70
|
+
help="Output file with interface specifications.",
|
|
71
|
+
type=Path
|
|
72
|
+
)
|
|
73
|
+
parser.set_defaults(func=generate_hi_interface_cli)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def main(argv: Optional[List[str]] = None):
|
|
77
|
+
""" Main function for stand alone execution.
|
|
78
|
+
Mostly useful for testing and generation of dummy hal specifications.
|
|
79
|
+
"""
|
|
80
|
+
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
81
|
+
configure_parser(parser)
|
|
82
|
+
args = parser.parse_args(argv)
|
|
83
|
+
args.func(args)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if __name__ == "__main__":
|
|
87
|
+
main(sys.argv[1:])
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# Copyright 2024 Volvo Car Corporation
|
|
2
|
-
# Licensed under Apache 2.0.
|
|
3
|
-
|
|
4
|
-
# -*- coding: utf-8 -*-
|
|
5
|
-
"""Python module used for calculating interfaces for CSP"""
|
|
6
|
-
import argparse
|
|
7
|
-
import sys
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import List, Optional
|
|
10
|
-
|
|
11
|
-
from powertrain_build.interface.service import get_service
|
|
12
|
-
from powertrain_build.lib import logger
|
|
13
|
-
from powertrain_build.interface import generation_utils
|
|
14
|
-
|
|
15
|
-
LOGGER = logger.create_logger("CSP service")
|
|
16
|
-
|
|
17
|
-
PARSER_HELP = "Generate CSP service models"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def configure_parser(parser: argparse.ArgumentParser):
|
|
21
|
-
"""Configure parser for CSP service generation"""
|
|
22
|
-
generation_utils.add_base_args(parser)
|
|
23
|
-
parser.add_argument(
|
|
24
|
-
"--client-name",
|
|
25
|
-
help="Name of the context object in CSP. Defaults to project name."
|
|
26
|
-
)
|
|
27
|
-
parser.add_argument(
|
|
28
|
-
"output",
|
|
29
|
-
help="Output directory for service models",
|
|
30
|
-
type=Path
|
|
31
|
-
)
|
|
32
|
-
parser.set_defaults(func=generate_service_cli)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def generate_service_cli(args: argparse.Namespace):
|
|
36
|
-
"""CLI function for CSP service generation"""
|
|
37
|
-
app = generation_utils.process_app(args.config)
|
|
38
|
-
client_name = generation_utils.get_client_name(args, app)
|
|
39
|
-
service(args, app, client_name)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def main(argv: Optional[List[str]] = None):
|
|
43
|
-
""" Main function for stand alone execution.
|
|
44
|
-
Mostly useful for testing and generation of dummy hal specifications
|
|
45
|
-
"""
|
|
46
|
-
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
47
|
-
configure_parser(parser)
|
|
48
|
-
args = parser.parse_args(argv)
|
|
49
|
-
args.func(args)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def service(args, app, client_name):
|
|
53
|
-
""" Generate specifications for pt-scheduler wrappers.
|
|
54
|
-
|
|
55
|
-
Args:
|
|
56
|
-
args (Namespace): Arguments from command line
|
|
57
|
-
app (Application): Application to generate specifications for
|
|
58
|
-
client_name (str): Signal client name
|
|
59
|
-
"""
|
|
60
|
-
model_internal = get_service(app, client_name, 'internal')
|
|
61
|
-
model_external = get_service(app, client_name, 'external')
|
|
62
|
-
model_observer = get_service(app, client_name, 'observer')
|
|
63
|
-
generation_utils.write_to_file(model_internal, Path(args.output, 'model', 'internal.yaml'), is_yaml=True)
|
|
64
|
-
generation_utils.write_to_file(model_external, Path(args.output, 'model', 'external.yaml'), is_yaml=True)
|
|
65
|
-
generation_utils.write_to_file(model_observer, Path(args.output, 'model', 'observer.yaml'), is_yaml=True)
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if __name__ == "__main__":
|
|
69
|
-
main(sys.argv[1:])
|
|
1
|
+
# Copyright 2024 Volvo Car Corporation
|
|
2
|
+
# Licensed under Apache 2.0.
|
|
3
|
+
|
|
4
|
+
# -*- coding: utf-8 -*-
|
|
5
|
+
"""Python module used for calculating interfaces for CSP"""
|
|
6
|
+
import argparse
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List, Optional
|
|
10
|
+
|
|
11
|
+
from powertrain_build.interface.service import get_service
|
|
12
|
+
from powertrain_build.lib import logger
|
|
13
|
+
from powertrain_build.interface import generation_utils
|
|
14
|
+
|
|
15
|
+
LOGGER = logger.create_logger("CSP service")
|
|
16
|
+
|
|
17
|
+
PARSER_HELP = "Generate CSP service models"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def configure_parser(parser: argparse.ArgumentParser):
|
|
21
|
+
"""Configure parser for CSP service generation"""
|
|
22
|
+
generation_utils.add_base_args(parser)
|
|
23
|
+
parser.add_argument(
|
|
24
|
+
"--client-name",
|
|
25
|
+
help="Name of the context object in CSP. Defaults to project name."
|
|
26
|
+
)
|
|
27
|
+
parser.add_argument(
|
|
28
|
+
"output",
|
|
29
|
+
help="Output directory for service models",
|
|
30
|
+
type=Path
|
|
31
|
+
)
|
|
32
|
+
parser.set_defaults(func=generate_service_cli)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def generate_service_cli(args: argparse.Namespace):
|
|
36
|
+
"""CLI function for CSP service generation"""
|
|
37
|
+
app = generation_utils.process_app(args.config)
|
|
38
|
+
client_name = generation_utils.get_client_name(args, app)
|
|
39
|
+
service(args, app, client_name)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def main(argv: Optional[List[str]] = None):
|
|
43
|
+
""" Main function for stand alone execution.
|
|
44
|
+
Mostly useful for testing and generation of dummy hal specifications
|
|
45
|
+
"""
|
|
46
|
+
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
47
|
+
configure_parser(parser)
|
|
48
|
+
args = parser.parse_args(argv)
|
|
49
|
+
args.func(args)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def service(args, app, client_name):
|
|
53
|
+
""" Generate specifications for pt-scheduler wrappers.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
args (Namespace): Arguments from command line
|
|
57
|
+
app (Application): Application to generate specifications for
|
|
58
|
+
client_name (str): Signal client name
|
|
59
|
+
"""
|
|
60
|
+
model_internal = get_service(app, client_name, 'internal')
|
|
61
|
+
model_external = get_service(app, client_name, 'external')
|
|
62
|
+
model_observer = get_service(app, client_name, 'observer')
|
|
63
|
+
generation_utils.write_to_file(model_internal, Path(args.output, 'model', 'internal.yaml'), is_yaml=True)
|
|
64
|
+
generation_utils.write_to_file(model_external, Path(args.output, 'model', 'external.yaml'), is_yaml=True)
|
|
65
|
+
generation_utils.write_to_file(model_observer, Path(args.output, 'model', 'observer.yaml'), is_yaml=True)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
if __name__ == "__main__":
|
|
69
|
+
main(sys.argv[1:])
|
|
@@ -1,147 +1,147 @@
|
|
|
1
|
-
# Copyright 2024 Volvo Car Corporation
|
|
2
|
-
# Licensed under Apache 2.0.
|
|
3
|
-
|
|
4
|
-
# -*- coding: utf-8 -*-
|
|
5
|
-
"""Python module used for calculating interfaces for CSP"""
|
|
6
|
-
import argparse
|
|
7
|
-
import sys
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import List, Optional
|
|
10
|
-
|
|
11
|
-
from powertrain_build.interface.hal import HALA, get_hal_list
|
|
12
|
-
from powertrain_build.interface.device_proxy import DPAL
|
|
13
|
-
from powertrain_build.interface.service import ServiceFramework, get_service_list
|
|
14
|
-
from powertrain_build.lib import logger
|
|
15
|
-
from powertrain_build.interface import generation_utils
|
|
16
|
-
|
|
17
|
-
LOGGER = logger.create_logger("CSP wrappers")
|
|
18
|
-
|
|
19
|
-
PARSER_HELP = "Generate specifications for pt-scheduler wrappers"
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def get_manifest(app, domain, client_name):
|
|
23
|
-
"""Get signal manifest for application
|
|
24
|
-
|
|
25
|
-
The model yaml files are parsed for the models included in the application.
|
|
26
|
-
If there are no signals to interact with,
|
|
27
|
-
this function returns None to indicate that there should not be a manifest.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
app (Application): Pybuild project
|
|
31
|
-
domain (str): Domain that the signals should not be part of
|
|
32
|
-
client_name (str): Client name in the signal database
|
|
33
|
-
Returns:
|
|
34
|
-
spec (dict/None): signal manifest, None if no manifest should be written
|
|
35
|
-
"""
|
|
36
|
-
rasters = app.get_rasters()
|
|
37
|
-
LOGGER.debug("Rasters: %s", rasters)
|
|
38
|
-
translation_files = app.get_translation_files()
|
|
39
|
-
|
|
40
|
-
dpal = DPAL(app)
|
|
41
|
-
dpal.domain_filter = [domain]
|
|
42
|
-
dpal.parse_definition(translation_files)
|
|
43
|
-
dpal.clear_signal_names()
|
|
44
|
-
dpal.add_signals(app.insignals, "insignals")
|
|
45
|
-
dpal.add_signals(app.outsignals, "outsignals")
|
|
46
|
-
return dpal.to_manifest(client_name)
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def configure_parser(parser: argparse.ArgumentParser):
|
|
50
|
-
"""Configure parser for generating pt-scheduler wrappers."""
|
|
51
|
-
generation_utils.add_base_args(parser)
|
|
52
|
-
parser.add_argument(
|
|
53
|
-
"--client-name",
|
|
54
|
-
help="Name of the context object in CSP. Defaults to project name."
|
|
55
|
-
)
|
|
56
|
-
parser.add_argument(
|
|
57
|
-
"--dp-interface",
|
|
58
|
-
help="Output file with DP interface specifications",
|
|
59
|
-
type=Path
|
|
60
|
-
)
|
|
61
|
-
parser.add_argument(
|
|
62
|
-
"--dp-manifest-dir",
|
|
63
|
-
help="Output directory for signal manifests",
|
|
64
|
-
type=Path
|
|
65
|
-
)
|
|
66
|
-
parser.add_argument(
|
|
67
|
-
"--hal-interface",
|
|
68
|
-
help="Output file with HAL interface specifications",
|
|
69
|
-
type=Path,
|
|
70
|
-
)
|
|
71
|
-
parser.add_argument(
|
|
72
|
-
"--service-interface",
|
|
73
|
-
help="Output file with service interface specifications",
|
|
74
|
-
type=Path
|
|
75
|
-
)
|
|
76
|
-
parser.set_defaults(func=generate_wrappers_cli)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def generate_wrappers_cli(args: argparse.Namespace):
|
|
80
|
-
"""Generate specifications for pt-scheduler wrappers.
|
|
81
|
-
|
|
82
|
-
Args:
|
|
83
|
-
args (Namespace): Arguments from command line
|
|
84
|
-
"""
|
|
85
|
-
app = generation_utils.process_app(args.config)
|
|
86
|
-
client_name = generation_utils.get_client_name(args, app)
|
|
87
|
-
wrappers(args, app, client_name)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def main(argv: Optional[List[str]] = None):
|
|
91
|
-
""" Main function for stand alone execution.
|
|
92
|
-
Mostly useful for testing and generation of dummy hal specifications
|
|
93
|
-
"""
|
|
94
|
-
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
95
|
-
configure_parser(parser)
|
|
96
|
-
args = parser.parse_args(argv)
|
|
97
|
-
args.func(args)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def wrappers(args, app, client_name):
|
|
101
|
-
""" Generate specifications for pt-scheduler wrappers.
|
|
102
|
-
|
|
103
|
-
Args:
|
|
104
|
-
args (Namespace): Arguments from command line
|
|
105
|
-
app (Application): Application to generate specifications for
|
|
106
|
-
client_name (str): Signal client name
|
|
107
|
-
"""
|
|
108
|
-
if args.hal_interface:
|
|
109
|
-
hala = HALA(app)
|
|
110
|
-
interface = generation_utils.get_interface(app, hala)
|
|
111
|
-
interface["relocatable_language"] = "C"
|
|
112
|
-
generation_utils.write_to_file(interface, args.hal_interface, is_yaml=True)
|
|
113
|
-
hals = get_hal_list(app)
|
|
114
|
-
cmake = Path(args.hal_interface.parent, 'hal.cmake')
|
|
115
|
-
generation_utils.write_to_file(hals, cmake)
|
|
116
|
-
if args.dp_interface:
|
|
117
|
-
dp = DPAL(app)
|
|
118
|
-
interface = generation_utils.get_interface(app, dp)
|
|
119
|
-
interface["relocatable_language"] = "C"
|
|
120
|
-
generation_utils.write_to_file(interface, args.dp_interface, is_yaml=True)
|
|
121
|
-
if args.service_interface:
|
|
122
|
-
service = ServiceFramework(app)
|
|
123
|
-
interface = generation_utils.get_interface(app, service)
|
|
124
|
-
interface["relocatable_language"] = "C"
|
|
125
|
-
generation_utils.write_to_file(interface, args.service_interface, is_yaml=True)
|
|
126
|
-
proxies = get_service_list(app)
|
|
127
|
-
cmake = Path(args.service_interface.parent, 'service-proxies.cmake')
|
|
128
|
-
generation_utils.write_to_file(proxies, cmake)
|
|
129
|
-
if args.dp_manifest_dir:
|
|
130
|
-
if not args.dp_manifest_dir.is_dir():
|
|
131
|
-
args.dp_manifest_dir.mkdir()
|
|
132
|
-
|
|
133
|
-
# Enable changing client name in generation
|
|
134
|
-
for domain in app.get_domain_names():
|
|
135
|
-
manifest = get_manifest(app, domain, client_name)
|
|
136
|
-
if manifest is None:
|
|
137
|
-
# Manifests without produced or consumed signals are not allowed
|
|
138
|
-
# Therefore get_manifests returned None to tell us to skip this domain
|
|
139
|
-
continue
|
|
140
|
-
domain_file = Path(
|
|
141
|
-
args.dp_manifest_dir,
|
|
142
|
-
f"{domain}_{app.name}.yaml")
|
|
143
|
-
generation_utils.write_to_file(manifest, domain_file, is_yaml=True)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if __name__ == "__main__":
|
|
147
|
-
main(sys.argv[1:])
|
|
1
|
+
# Copyright 2024 Volvo Car Corporation
|
|
2
|
+
# Licensed under Apache 2.0.
|
|
3
|
+
|
|
4
|
+
# -*- coding: utf-8 -*-
|
|
5
|
+
"""Python module used for calculating interfaces for CSP"""
|
|
6
|
+
import argparse
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List, Optional
|
|
10
|
+
|
|
11
|
+
from powertrain_build.interface.hal import HALA, get_hal_list
|
|
12
|
+
from powertrain_build.interface.device_proxy import DPAL
|
|
13
|
+
from powertrain_build.interface.service import ServiceFramework, get_service_list
|
|
14
|
+
from powertrain_build.lib import logger
|
|
15
|
+
from powertrain_build.interface import generation_utils
|
|
16
|
+
|
|
17
|
+
LOGGER = logger.create_logger("CSP wrappers")
|
|
18
|
+
|
|
19
|
+
PARSER_HELP = "Generate specifications for pt-scheduler wrappers"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_manifest(app, domain, client_name):
|
|
23
|
+
"""Get signal manifest for application
|
|
24
|
+
|
|
25
|
+
The model yaml files are parsed for the models included in the application.
|
|
26
|
+
If there are no signals to interact with,
|
|
27
|
+
this function returns None to indicate that there should not be a manifest.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
app (Application): Pybuild project
|
|
31
|
+
domain (str): Domain that the signals should not be part of
|
|
32
|
+
client_name (str): Client name in the signal database
|
|
33
|
+
Returns:
|
|
34
|
+
spec (dict/None): signal manifest, None if no manifest should be written
|
|
35
|
+
"""
|
|
36
|
+
rasters = app.get_rasters()
|
|
37
|
+
LOGGER.debug("Rasters: %s", rasters)
|
|
38
|
+
translation_files = app.get_translation_files()
|
|
39
|
+
|
|
40
|
+
dpal = DPAL(app)
|
|
41
|
+
dpal.domain_filter = [domain]
|
|
42
|
+
dpal.parse_definition(translation_files)
|
|
43
|
+
dpal.clear_signal_names()
|
|
44
|
+
dpal.add_signals(app.insignals, "insignals")
|
|
45
|
+
dpal.add_signals(app.outsignals, "outsignals")
|
|
46
|
+
return dpal.to_manifest(client_name)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def configure_parser(parser: argparse.ArgumentParser):
|
|
50
|
+
"""Configure parser for generating pt-scheduler wrappers."""
|
|
51
|
+
generation_utils.add_base_args(parser)
|
|
52
|
+
parser.add_argument(
|
|
53
|
+
"--client-name",
|
|
54
|
+
help="Name of the context object in CSP. Defaults to project name."
|
|
55
|
+
)
|
|
56
|
+
parser.add_argument(
|
|
57
|
+
"--dp-interface",
|
|
58
|
+
help="Output file with DP interface specifications",
|
|
59
|
+
type=Path
|
|
60
|
+
)
|
|
61
|
+
parser.add_argument(
|
|
62
|
+
"--dp-manifest-dir",
|
|
63
|
+
help="Output directory for signal manifests",
|
|
64
|
+
type=Path
|
|
65
|
+
)
|
|
66
|
+
parser.add_argument(
|
|
67
|
+
"--hal-interface",
|
|
68
|
+
help="Output file with HAL interface specifications",
|
|
69
|
+
type=Path,
|
|
70
|
+
)
|
|
71
|
+
parser.add_argument(
|
|
72
|
+
"--service-interface",
|
|
73
|
+
help="Output file with service interface specifications",
|
|
74
|
+
type=Path
|
|
75
|
+
)
|
|
76
|
+
parser.set_defaults(func=generate_wrappers_cli)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def generate_wrappers_cli(args: argparse.Namespace):
|
|
80
|
+
"""Generate specifications for pt-scheduler wrappers.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
args (Namespace): Arguments from command line
|
|
84
|
+
"""
|
|
85
|
+
app = generation_utils.process_app(args.config)
|
|
86
|
+
client_name = generation_utils.get_client_name(args, app)
|
|
87
|
+
wrappers(args, app, client_name)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def main(argv: Optional[List[str]] = None):
|
|
91
|
+
""" Main function for stand alone execution.
|
|
92
|
+
Mostly useful for testing and generation of dummy hal specifications
|
|
93
|
+
"""
|
|
94
|
+
parser = argparse.ArgumentParser(description=PARSER_HELP)
|
|
95
|
+
configure_parser(parser)
|
|
96
|
+
args = parser.parse_args(argv)
|
|
97
|
+
args.func(args)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def wrappers(args, app, client_name):
|
|
101
|
+
""" Generate specifications for pt-scheduler wrappers.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
args (Namespace): Arguments from command line
|
|
105
|
+
app (Application): Application to generate specifications for
|
|
106
|
+
client_name (str): Signal client name
|
|
107
|
+
"""
|
|
108
|
+
if args.hal_interface:
|
|
109
|
+
hala = HALA(app)
|
|
110
|
+
interface = generation_utils.get_interface(app, hala)
|
|
111
|
+
interface["relocatable_language"] = "C"
|
|
112
|
+
generation_utils.write_to_file(interface, args.hal_interface, is_yaml=True)
|
|
113
|
+
hals = get_hal_list(app)
|
|
114
|
+
cmake = Path(args.hal_interface.parent, 'hal.cmake')
|
|
115
|
+
generation_utils.write_to_file(hals, cmake)
|
|
116
|
+
if args.dp_interface:
|
|
117
|
+
dp = DPAL(app)
|
|
118
|
+
interface = generation_utils.get_interface(app, dp)
|
|
119
|
+
interface["relocatable_language"] = "C"
|
|
120
|
+
generation_utils.write_to_file(interface, args.dp_interface, is_yaml=True)
|
|
121
|
+
if args.service_interface:
|
|
122
|
+
service = ServiceFramework(app)
|
|
123
|
+
interface = generation_utils.get_interface(app, service)
|
|
124
|
+
interface["relocatable_language"] = "C"
|
|
125
|
+
generation_utils.write_to_file(interface, args.service_interface, is_yaml=True)
|
|
126
|
+
proxies = get_service_list(app)
|
|
127
|
+
cmake = Path(args.service_interface.parent, 'service-proxies.cmake')
|
|
128
|
+
generation_utils.write_to_file(proxies, cmake)
|
|
129
|
+
if args.dp_manifest_dir:
|
|
130
|
+
if not args.dp_manifest_dir.is_dir():
|
|
131
|
+
args.dp_manifest_dir.mkdir()
|
|
132
|
+
|
|
133
|
+
# Enable changing client name in generation
|
|
134
|
+
for domain in app.get_domain_names():
|
|
135
|
+
manifest = get_manifest(app, domain, client_name)
|
|
136
|
+
if manifest is None:
|
|
137
|
+
# Manifests without produced or consumed signals are not allowed
|
|
138
|
+
# Therefore get_manifests returned None to tell us to skip this domain
|
|
139
|
+
continue
|
|
140
|
+
domain_file = Path(
|
|
141
|
+
args.dp_manifest_dir,
|
|
142
|
+
f"{domain}_{app.name}.yaml")
|
|
143
|
+
generation_utils.write_to_file(manifest, domain_file, is_yaml=True)
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
if __name__ == "__main__":
|
|
147
|
+
main(sys.argv[1:])
|