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,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:])