Add RTE SWC dummy files and data types to rte_dummy
Change-Id: I2d29bafbf8d2d67b3aff55de486fbef5f2755845
This commit is contained in:
@@ -939,7 +939,7 @@ def build(
|
|||||||
if rte_dummy:
|
if rte_dummy:
|
||||||
LOG.info("******************************************************")
|
LOG.info("******************************************************")
|
||||||
LOG.info("Generating RTE dummy files")
|
LOG.info("Generating RTE dummy files")
|
||||||
zc_rte = RteDummy(build_cfg, zc_nvm)
|
zc_rte = RteDummy(build_cfg, zc_nvm, composition_yaml.cal_class_info["tl"])
|
||||||
zc_rte.generate_rte_dummy()
|
zc_rte.generate_rte_dummy()
|
||||||
|
|
||||||
if code_generation_config["generateCalibrationInterfaceFiles"]:
|
if code_generation_config["generateCalibrationInterfaceFiles"]:
|
||||||
|
@@ -17,71 +17,96 @@ from pathlib import Path
|
|||||||
class RteDummy(ProblemLogger):
|
class RteDummy(ProblemLogger):
|
||||||
"""A class for RTE dummy file generation."""
|
"""A class for RTE dummy file generation."""
|
||||||
|
|
||||||
def __init__(self, build_cfg, nvm_def):
|
def __init__(self, build_cfg, nvm_def, calib_data):
|
||||||
"""Init.
|
"""Init.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
build_cfg (BuildProjConfig): Object with build configuration settings.
|
build_cfg (BuildProjConfig): Object with build configuration settings.
|
||||||
nvm_def (ZCNVMDef): Object with NVM definition information.
|
nvm_def (ZCNVMDef): Object with NVM definition information.
|
||||||
|
calib_data (dict): Dictionary containing calibration data for a ZoneController project.
|
||||||
"""
|
"""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.build_cfg = build_cfg
|
self.build_cfg = build_cfg
|
||||||
self.nvm_def = nvm_def
|
self.nvm_def = nvm_def
|
||||||
self.header_file_name = "Rte_Type"
|
self.calibration_variables = calib_data.get("class_info", {})
|
||||||
|
self.swc_header_file_name = f"Rte_{self.build_cfg.get_composition_config('softwareComponentName')}"
|
||||||
|
self.type_header_file_name = "Rte_Type"
|
||||||
self.source_file_name = "Rte_Dummy"
|
self.source_file_name = "Rte_Dummy"
|
||||||
|
|
||||||
def _get_header_header(self):
|
def _get_common_header(self):
|
||||||
"""Get header for the RTE dummy header."""
|
"""Get common header for the RTE dummy files."""
|
||||||
|
return (
|
||||||
|
"/*\n"
|
||||||
|
" * This file is generated by the Powertrain Build System.\n"
|
||||||
|
" * It defines RTE dummy types and/or functions.\n"
|
||||||
|
" * Do not modify this file manually.\n"
|
||||||
|
" */\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_swc_header_content(self):
|
||||||
|
"""Get content for the SWC RTE dummy header."""
|
||||||
|
return (
|
||||||
|
f"{self._get_common_header()}"
|
||||||
|
f"#ifndef {self.swc_header_file_name.upper()}_H\n"
|
||||||
|
f"#define {self.swc_header_file_name.upper()}_H\n\n"
|
||||||
|
f'#include "{self.type_header_file_name}.h"\n'
|
||||||
|
f"#endif /* {self.swc_header_file_name.upper()}_H */\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_type_header_header(self):
|
||||||
|
"""Get header for the RTE type dummy header."""
|
||||||
include_nvm_header = ""
|
include_nvm_header = ""
|
||||||
if not self.build_cfg.get_code_generation_config("useRteNvmStructs"):
|
if not self.build_cfg.get_code_generation_config("useRteNvmStructs"):
|
||||||
nvm_defs = self.build_cfg.get_nvm_defs()
|
nvm_defs = self.build_cfg.get_nvm_defs()
|
||||||
nvm_file_name = nvm_defs["fileName"]
|
nvm_file_name = nvm_defs["fileName"]
|
||||||
include_nvm_header = f'#include "{nvm_file_name}.h"\n'
|
include_nvm_header = f'#include "{nvm_file_name}.h"\n'
|
||||||
return (
|
return (
|
||||||
"/*\n"
|
f"{self._get_common_header()}"
|
||||||
" * This file is generated by the Powertrain Build System.\n"
|
f"#ifndef {self.type_header_file_name.upper()}_H\n"
|
||||||
" * It defines RTE dummy types.\n"
|
f"#define {self.type_header_file_name.upper()}_H\n\n"
|
||||||
" * Do not modify this file manually.\n"
|
|
||||||
" */\n"
|
|
||||||
f"#ifndef {self.header_file_name.upper()}_H\n"
|
|
||||||
f"#define {self.header_file_name.upper()}_H\n\n"
|
|
||||||
'#include "tl_basetypes.h"\n'
|
'#include "tl_basetypes.h"\n'
|
||||||
f"{include_nvm_header}\n"
|
f"{include_nvm_header}\n"
|
||||||
"#define FALSE 0U\n"
|
"#define FALSE 0U\n"
|
||||||
"#define TRUE 1U\n\n"
|
"#define TRUE 1U\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
def _get_header_footer(self):
|
def _get_type_header_footer(self):
|
||||||
"""Get footer for the RTE dummy header."""
|
"""Get footer for the RTE type dummy header."""
|
||||||
return f"\n#endif /* {self.header_file_name.upper()}_H */\n"
|
return f"\n#endif /* {self.type_header_file_name.upper()}_H */\n"
|
||||||
|
|
||||||
def _get_source_header(self):
|
def _get_source_header(self):
|
||||||
"""Get header for the RTE dummy source."""
|
"""Get header for the RTE dummy source."""
|
||||||
return (
|
return (
|
||||||
"/*\n"
|
f"{self._get_common_header()}"
|
||||||
" * This file is generated by the Powertrain Build System.\n"
|
f'#include "{self.swc_header_file_name}.h"\n\n'
|
||||||
" * It defines RTE dummy functions.\n"
|
|
||||||
" * Do not modify this file manually.\n"
|
|
||||||
" */\n"
|
|
||||||
f'#include "{self.header_file_name}.h"\n\n'
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _get_typedef_dummy(self):
|
||||||
|
"""Get typedef dummy code."""
|
||||||
|
typedefs = []
|
||||||
|
|
||||||
|
function_name = self.build_cfg.get_composition_config("compositionName")
|
||||||
|
if function_name is None:
|
||||||
|
function_name = self.build_cfg.get_composition_config("softwareComponentName")
|
||||||
|
if self.build_cfg.get_code_generation_config("generateRteCheckpointIds"):
|
||||||
|
typedefs.append(f"typedef UInt8 {function_name}FctList;\n")
|
||||||
|
|
||||||
|
# MAPs get typedef:ed to structs and need special data type mapping in calibration.py
|
||||||
|
for signal_name, signal_data in self.calibration_variables.items():
|
||||||
|
if isinstance(signal_data["width"], list):
|
||||||
|
if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]:
|
||||||
|
typedefs.append(f"typedef {signal_data['type']} {signal_data['autosar_type']};\n")
|
||||||
|
typedefs.append("\n")
|
||||||
|
|
||||||
|
return "".join(typedefs)
|
||||||
|
|
||||||
def _get_nvm_header_dummy(self):
|
def _get_nvm_header_dummy(self):
|
||||||
"""Get NVM dummy header code."""
|
"""Get NVM dummy header code."""
|
||||||
typedefs = []
|
|
||||||
struct_defines = []
|
struct_defines = []
|
||||||
function_declarations = []
|
function_declarations = []
|
||||||
include_name = self.build_cfg.get_composition_config("softwareComponentName")
|
|
||||||
function_name = self.build_cfg.get_composition_config("compositionName")
|
|
||||||
if function_name is None:
|
|
||||||
function_name = include_name
|
|
||||||
prefix = self.build_cfg.get_scheduler_prefix()
|
prefix = self.build_cfg.get_scheduler_prefix()
|
||||||
use_rte_nvm_structs = self.build_cfg.get_code_generation_config("useRteNvmStructs")
|
use_rte_nvm_structs = self.build_cfg.get_code_generation_config("useRteNvmStructs")
|
||||||
|
|
||||||
if self.build_cfg.get_code_generation_config("generateRteCheckpointIds"):
|
|
||||||
typedefs.append(f"typedef UInt8 {function_name}FctList;")
|
|
||||||
typedefs.append("")
|
|
||||||
|
|
||||||
for memory_area in self.nvm_def._nvm_memory_areas:
|
for memory_area in self.nvm_def._nvm_memory_areas:
|
||||||
nvm_name = f"{prefix}{memory_area}"
|
nvm_name = f"{prefix}{memory_area}"
|
||||||
struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
|
struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
|
||||||
@@ -113,9 +138,40 @@ class RteDummy(ProblemLogger):
|
|||||||
)
|
)
|
||||||
struct_defines.append(f"}} {struct_name};\n")
|
struct_defines.append(f"}} {struct_name};\n")
|
||||||
|
|
||||||
return "\n".join(typedefs + struct_defines + function_declarations)
|
return "\n".join(struct_defines + function_declarations)
|
||||||
|
|
||||||
def _generate_nvm_source_dummy(self):
|
def _get_calibration_source_dummy(self):
|
||||||
|
"""Get calibration source dummy code."""
|
||||||
|
if not self.calibration_variables:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
lines_to_write = []
|
||||||
|
swc_name = self.build_cfg.get_composition_config("softwareComponentName")
|
||||||
|
for signal_name, signal_data in self.calibration_variables.items():
|
||||||
|
if isinstance(signal_data["width"], list):
|
||||||
|
# MAPs get typedef:ed to structs and need special data type mapping in calibration.py
|
||||||
|
if signal_name.startswith("m") and signal_name[-2:] not in ["_r", "_c"]:
|
||||||
|
return_type = f'const {signal_data["autosar_type"]}*'
|
||||||
|
return_string = (
|
||||||
|
f"const {signal_data['autosar_type']} dummy; "
|
||||||
|
f"{return_type} dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr;"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return_type = f'const {signal_data["type"]}*'
|
||||||
|
return_string = (
|
||||||
|
f"{signal_data['type']} dummy; "
|
||||||
|
f"{return_type} dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr;"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return_type = f'{signal_data["type"]}'
|
||||||
|
return_string = f"return ({return_type})0;"
|
||||||
|
lines_to_write.append(f"{return_type} Rte_CData_{swc_name}_{signal_name}(void) {{ {return_string} }}")
|
||||||
|
lines_to_write.append("")
|
||||||
|
return "\n".join(lines_to_write)
|
||||||
|
|
||||||
|
def _get_nvm_source_dummy(self):
|
||||||
"""Generate NVM source dummy code."""
|
"""Generate NVM source dummy code."""
|
||||||
lines_to_write = []
|
lines_to_write = []
|
||||||
prefix = self.build_cfg.get_scheduler_prefix()
|
prefix = self.build_cfg.get_scheduler_prefix()
|
||||||
@@ -123,7 +179,8 @@ class RteDummy(ProblemLogger):
|
|||||||
for memory_area in self.nvm_def._nvm_memory_areas:
|
for memory_area in self.nvm_def._nvm_memory_areas:
|
||||||
nvm_name = f"{prefix}{memory_area}"
|
nvm_name = f"{prefix}{memory_area}"
|
||||||
struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
|
struct_name = f"dt_{nvm_name}" if use_rte_nvm_structs else f"struct {nvm_name}"
|
||||||
lines_to_write.append(f"{struct_name} *Rte_Pim_{nvm_name}(void) {{ return ({struct_name} *)0; }}")
|
return_string = f"{struct_name} dummy; {struct_name}* dummyPtr = &dummy; return dummyPtr;"
|
||||||
|
lines_to_write.append(f"{struct_name} *Rte_Pim_{nvm_name}(void) {{ {return_string} }}")
|
||||||
lines_to_write.append(f"void Rte_Read_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
|
lines_to_write.append(f"void Rte_Read_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
|
||||||
lines_to_write.append(f"void Rte_Write_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
|
lines_to_write.append(f"void Rte_Write_{nvm_name.upper()}_{nvm_name.upper()}({struct_name} *block) {{}}")
|
||||||
lines_to_write.append("")
|
lines_to_write.append("")
|
||||||
@@ -132,12 +189,17 @@ class RteDummy(ProblemLogger):
|
|||||||
def generate_rte_dummy(self):
|
def generate_rte_dummy(self):
|
||||||
"""Generate RTE dummy files."""
|
"""Generate RTE dummy files."""
|
||||||
src_code_dest_dir = self.build_cfg.get_src_code_dst_dir()
|
src_code_dest_dir = self.build_cfg.get_src_code_dst_dir()
|
||||||
header_file = Path(src_code_dest_dir, self.header_file_name + ".h")
|
swc_header_file = Path(src_code_dest_dir, self.swc_header_file_name + ".h")
|
||||||
|
type_header_file = Path(src_code_dest_dir, self.type_header_file_name + ".h")
|
||||||
source_file = Path(src_code_dest_dir, self.source_file_name + ".c")
|
source_file = Path(src_code_dest_dir, self.source_file_name + ".c")
|
||||||
with header_file.open(mode="w", encoding="utf-8") as header_fh:
|
with swc_header_file.open(mode="w", encoding="utf-8") as swc_header_fh:
|
||||||
header_fh.write(self._get_header_header())
|
swc_header_fh.write(self._get_swc_header_content())
|
||||||
header_fh.write(self._get_nvm_header_dummy())
|
with type_header_file.open(mode="w", encoding="utf-8") as type_header_fh:
|
||||||
header_fh.write(self._get_header_footer())
|
type_header_fh.write(self._get_type_header_header())
|
||||||
|
type_header_fh.write(self._get_typedef_dummy())
|
||||||
|
type_header_fh.write(self._get_nvm_header_dummy())
|
||||||
|
type_header_fh.write(self._get_type_header_footer())
|
||||||
with source_file.open(mode="w", encoding="utf-8") as source_fh:
|
with source_file.open(mode="w", encoding="utf-8") as source_fh:
|
||||||
source_fh.write(self._get_source_header())
|
source_fh.write(self._get_source_header())
|
||||||
source_fh.write(self._generate_nvm_source_dummy())
|
source_fh.write(self._get_nvm_source_dummy())
|
||||||
|
source_fh.write(self._get_calibration_source_dummy())
|
||||||
|
143
test_data/powertrain_build/test_rte_dummy/rte_dummy.py
Normal file
143
test_data/powertrain_build/test_rte_dummy/rte_dummy.py
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
# Copyright 2024 Volvo Car Corporation
|
||||||
|
# Licensed under Apache 2.0.
|
||||||
|
|
||||||
|
"""Unit test data for powertrain_build.rte_dummy."""
|
||||||
|
|
||||||
|
expected_swc_content = (
|
||||||
|
"/*\n"
|
||||||
|
" * This file is generated by the Powertrain Build System.\n"
|
||||||
|
" * It defines RTE dummy types and/or functions.\n"
|
||||||
|
" * Do not modify this file manually.\n"
|
||||||
|
" */\n"
|
||||||
|
"#ifndef RTE_TESTNAME_SC_H\n"
|
||||||
|
"#define RTE_TESTNAME_SC_H\n\n"
|
||||||
|
"#include \"Rte_Type.h\""
|
||||||
|
"\n#endif /* RTE_TESTNAME_SC_H */\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_type_header_header = (
|
||||||
|
"/*\n"
|
||||||
|
" * This file is generated by the Powertrain Build System.\n"
|
||||||
|
" * It defines RTE dummy types and/or functions.\n"
|
||||||
|
" * Do not modify this file manually.\n"
|
||||||
|
" */\n"
|
||||||
|
"#ifndef RTE_TYPE_H\n"
|
||||||
|
"#define RTE_TYPE_H\n\n"
|
||||||
|
"#include \"tl_basetypes.h\"\n"
|
||||||
|
"#include \"vcc_nvm_struct.h\"\n"
|
||||||
|
"\n"
|
||||||
|
"#define FALSE 0U\n"
|
||||||
|
"#define TRUE 1U\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_rte_structs_type_header_header = (
|
||||||
|
"/*\n"
|
||||||
|
" * This file is generated by the Powertrain Build System.\n"
|
||||||
|
" * It defines RTE dummy types and/or functions.\n"
|
||||||
|
" * Do not modify this file manually.\n"
|
||||||
|
" */\n"
|
||||||
|
"#ifndef RTE_TYPE_H\n"
|
||||||
|
"#define RTE_TYPE_H\n\n"
|
||||||
|
"#include \"tl_basetypes.h\"\n"
|
||||||
|
"\n"
|
||||||
|
"#define FALSE 0U\n"
|
||||||
|
"#define TRUE 1U\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_typedefs = "\n"
|
||||||
|
|
||||||
|
expected_rte_structs_typedefs = (
|
||||||
|
"typedef UInt8 testNameFctList;\n"
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_rte_structs_and_calibration_typedefs = (
|
||||||
|
"typedef UInt8 testNameFctList;\n"
|
||||||
|
"typedef UInt16 dt_mVcSignalOne;\n"
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_type_header_content = (
|
||||||
|
"struct DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void);\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block);\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block);\n"
|
||||||
|
"struct DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void);\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block);\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block);"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_rte_structs_type_header_content = (
|
||||||
|
"typedef struct\n"
|
||||||
|
"{\n"
|
||||||
|
" UInt8 e_dummy;\n"
|
||||||
|
" UInt8 unused[1];\n"
|
||||||
|
"} dt_DUMMY_NVM_LIST_8;\n\n"
|
||||||
|
"typedef struct\n"
|
||||||
|
"{\n"
|
||||||
|
" UInt16 e_dummy2;\n"
|
||||||
|
" UInt16 unused[1];\n"
|
||||||
|
"} dt_DUMMY_NVM_LIST_16;\n"
|
||||||
|
"\n"
|
||||||
|
"dt_DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void);\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block);\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block);\n"
|
||||||
|
"dt_DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void);\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block);\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block);"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_type_header_footer = "\n#endif /* RTE_TYPE_H */\n"
|
||||||
|
|
||||||
|
expected_source_header = (
|
||||||
|
"/*\n"
|
||||||
|
" * This file is generated by the Powertrain Build System.\n"
|
||||||
|
" * It defines RTE dummy types and/or functions.\n"
|
||||||
|
" * Do not modify this file manually.\n"
|
||||||
|
" */\n"
|
||||||
|
"#include \"Rte_testName_SC.h\"\n\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_nvm_source_content = (
|
||||||
|
"struct DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void) { "
|
||||||
|
"struct DUMMY_NVM_LIST_8 dummy; "
|
||||||
|
"struct DUMMY_NVM_LIST_8* dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr; "
|
||||||
|
"}\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block) {}\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block) {}\n"
|
||||||
|
"struct DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void) { "
|
||||||
|
"struct DUMMY_NVM_LIST_16 dummy; "
|
||||||
|
"struct DUMMY_NVM_LIST_16* dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr; "
|
||||||
|
"}\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block) {}\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block) {}\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_rte_structs_nvm_source_content = (
|
||||||
|
"dt_DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void) { "
|
||||||
|
"dt_DUMMY_NVM_LIST_8 dummy; "
|
||||||
|
"dt_DUMMY_NVM_LIST_8* dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr; "
|
||||||
|
"}\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block) {}\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block) {}\n"
|
||||||
|
"dt_DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void) { "
|
||||||
|
"dt_DUMMY_NVM_LIST_16 dummy; "
|
||||||
|
"dt_DUMMY_NVM_LIST_16* dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr; "
|
||||||
|
"}\n"
|
||||||
|
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block) {}\n"
|
||||||
|
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block) {}\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
expected_calibration_source_content = ""
|
||||||
|
|
||||||
|
expected_calibration_calibration_source_content = (
|
||||||
|
"const dt_mVcSignalOne* Rte_CData_testName_SC_mVcSignalOne(void) { "
|
||||||
|
"const dt_mVcSignalOne dummy; "
|
||||||
|
"const dt_mVcSignalOne* dummyPtr = &dummy; "
|
||||||
|
"return dummyPtr; "
|
||||||
|
"}\n"
|
||||||
|
"UInt16 Rte_CData_testName_SC_sVcSignalTwo(void) { return (UInt16)0; }\n"
|
||||||
|
)
|
@@ -8,6 +8,7 @@ from pathlib import Path
|
|||||||
from unittest.mock import MagicMock, patch, mock_open
|
from unittest.mock import MagicMock, patch, mock_open
|
||||||
|
|
||||||
from powertrain_build.rte_dummy import RteDummy
|
from powertrain_build.rte_dummy import RteDummy
|
||||||
|
from test_data.powertrain_build.test_rte_dummy import rte_dummy
|
||||||
|
|
||||||
|
|
||||||
def mock_get_composition_config(key):
|
def mock_get_composition_config(key):
|
||||||
@@ -65,7 +66,7 @@ class TestRteDummy(unittest.TestCase):
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
self.rte_dummy = RteDummy(self.build_cfg, self.nvm_def)
|
self.rte_dummy = RteDummy(self.build_cfg, self.nvm_def, {})
|
||||||
|
|
||||||
def test_generate_rte_dummy(self):
|
def test_generate_rte_dummy(self):
|
||||||
"""Test RteDummy.generate_rte_dummy()."""
|
"""Test RteDummy.generate_rte_dummy()."""
|
||||||
@@ -75,111 +76,69 @@ class TestRteDummy(unittest.TestCase):
|
|||||||
with patch.object(Path, "open", m_open, create=True):
|
with patch.object(Path, "open", m_open, create=True):
|
||||||
self.rte_dummy.generate_rte_dummy()
|
self.rte_dummy.generate_rte_dummy()
|
||||||
expected = [
|
expected = [
|
||||||
( # header header
|
rte_dummy.expected_swc_content,
|
||||||
"/*\n"
|
rte_dummy.expected_type_header_header,
|
||||||
" * This file is generated by the Powertrain Build System.\n"
|
rte_dummy.expected_typedefs,
|
||||||
" * It defines RTE dummy types.\n"
|
rte_dummy.expected_type_header_content,
|
||||||
" * Do not modify this file manually.\n"
|
rte_dummy.expected_type_header_footer,
|
||||||
" */\n"
|
rte_dummy.expected_source_header,
|
||||||
"#ifndef RTE_TYPE_H\n"
|
rte_dummy.expected_nvm_source_content,
|
||||||
"#define RTE_TYPE_H\n\n"
|
rte_dummy.expected_calibration_source_content,
|
||||||
"#include \"tl_basetypes.h\"\n"
|
|
||||||
"#include \"vcc_nvm_struct.h\"\n\n"
|
|
||||||
"#define FALSE 0U\n"
|
|
||||||
"#define TRUE 1U\n\n"
|
|
||||||
),
|
|
||||||
( # header content
|
|
||||||
"\n"
|
|
||||||
"struct DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void);\n"
|
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block);\n"
|
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block);\n"
|
|
||||||
"struct DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void);\n"
|
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block);\n"
|
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block);"
|
|
||||||
),
|
|
||||||
( # header footer
|
|
||||||
"\n#endif /* RTE_TYPE_H */\n"
|
|
||||||
),
|
|
||||||
( # source header
|
|
||||||
"/*\n"
|
|
||||||
" * This file is generated by the Powertrain Build System.\n"
|
|
||||||
" * It defines RTE dummy functions.\n"
|
|
||||||
" * Do not modify this file manually.\n"
|
|
||||||
" */\n"
|
|
||||||
"#include \"Rte_Type.h\"\n\n"
|
|
||||||
),
|
|
||||||
( # source content
|
|
||||||
"struct DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void) { return (struct DUMMY_NVM_LIST_8 *)0; }\n"
|
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block) {}\n"
|
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(struct DUMMY_NVM_LIST_8 *block) {}\n"
|
|
||||||
"struct DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void) { return (struct DUMMY_NVM_LIST_16 *)0; }\n"
|
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block) {}\n"
|
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block) {}\n"
|
|
||||||
)
|
|
||||||
]
|
]
|
||||||
self.assertListEqual(result, expected)
|
self.assertListEqual(result, expected)
|
||||||
|
|
||||||
def test_generate_rte_dummy_rte_structs(self):
|
def test_generate_rte_dummy_rte_structs(self):
|
||||||
"""Test RteDummy.generate_rte_dummy()."""
|
"""Test RteDummy.generate_rte_dummy()."""
|
||||||
self.build_cfg.get_code_generation_config.return_value = True
|
self.build_cfg.get_code_generation_config.return_value = True
|
||||||
self.rte_dummy = RteDummy(self.build_cfg, self.nvm_def)
|
self.rte_dummy = RteDummy(self.build_cfg, self.nvm_def, {})
|
||||||
result = []
|
result = []
|
||||||
m_open = mock_open()
|
m_open = mock_open()
|
||||||
m_open.return_value.write = result.append
|
m_open.return_value.write = result.append
|
||||||
with patch.object(Path, "open", m_open, create=True):
|
with patch.object(Path, "open", m_open, create=True):
|
||||||
self.rte_dummy.generate_rte_dummy()
|
self.rte_dummy.generate_rte_dummy()
|
||||||
expected = [
|
expected = [
|
||||||
( # header header
|
rte_dummy.expected_swc_content,
|
||||||
"/*\n"
|
rte_dummy.expected_rte_structs_type_header_header,
|
||||||
" * This file is generated by the Powertrain Build System.\n"
|
rte_dummy.expected_rte_structs_typedefs,
|
||||||
" * It defines RTE dummy types.\n"
|
rte_dummy.expected_rte_structs_type_header_content,
|
||||||
" * Do not modify this file manually.\n"
|
rte_dummy.expected_type_header_footer,
|
||||||
" */\n"
|
rte_dummy.expected_source_header,
|
||||||
"#ifndef RTE_TYPE_H\n"
|
rte_dummy.expected_rte_structs_nvm_source_content,
|
||||||
"#define RTE_TYPE_H\n\n"
|
rte_dummy.expected_calibration_source_content,
|
||||||
"#include \"tl_basetypes.h\"\n"
|
]
|
||||||
"\n"
|
self.assertListEqual(result, expected)
|
||||||
"#define FALSE 0U\n"
|
|
||||||
"#define TRUE 1U\n\n"
|
def test_generate_rte_dummy_rte_structs_and_calibration(self):
|
||||||
),
|
"""Test RteDummy.generate_rte_dummy()."""
|
||||||
( # header content
|
self.build_cfg.get_code_generation_config.return_value = True
|
||||||
"typedef UInt8 testNameFctList;\n"
|
calibration_data = {
|
||||||
"\n"
|
"class_info": {
|
||||||
"typedef struct\n"
|
"mVcSignalOne": {
|
||||||
"{\n"
|
"width": [2, 2],
|
||||||
" UInt8 e_dummy;\n"
|
"type": "UInt16",
|
||||||
" UInt8 unused[1];\n"
|
"autosar_type": "dt_mVcSignalOne",
|
||||||
"} dt_DUMMY_NVM_LIST_8;\n\n"
|
},
|
||||||
"typedef struct\n"
|
"sVcSignalTwo": {
|
||||||
"{\n"
|
"width": 1,
|
||||||
" UInt16 e_dummy2;\n"
|
"type": "UInt16",
|
||||||
" UInt16 unused[1];\n"
|
"autosar_type": "UInt16",
|
||||||
"} dt_DUMMY_NVM_LIST_16;\n\n"
|
},
|
||||||
"dt_DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void);\n"
|
}
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block);\n"
|
}
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block);\n"
|
self.rte_dummy = RteDummy(self.build_cfg, self.nvm_def, calibration_data)
|
||||||
"dt_DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void);\n"
|
result = []
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block);\n"
|
m_open = mock_open()
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block);"
|
m_open.return_value.write = result.append
|
||||||
),
|
with patch.object(Path, "open", m_open, create=True):
|
||||||
( # header footer
|
self.rte_dummy.generate_rte_dummy()
|
||||||
"\n#endif /* RTE_TYPE_H */\n"
|
expected = [
|
||||||
),
|
rte_dummy.expected_swc_content,
|
||||||
( # source header
|
rte_dummy.expected_rte_structs_type_header_header,
|
||||||
"/*\n"
|
rte_dummy.expected_rte_structs_and_calibration_typedefs,
|
||||||
" * This file is generated by the Powertrain Build System.\n"
|
rte_dummy.expected_rte_structs_type_header_content,
|
||||||
" * It defines RTE dummy functions.\n"
|
rte_dummy.expected_type_header_footer,
|
||||||
" * Do not modify this file manually.\n"
|
rte_dummy.expected_source_header,
|
||||||
" */\n"
|
rte_dummy.expected_rte_structs_nvm_source_content,
|
||||||
"#include \"Rte_Type.h\"\n\n"
|
rte_dummy.expected_calibration_calibration_source_content
|
||||||
),
|
|
||||||
( # source content
|
|
||||||
"dt_DUMMY_NVM_LIST_8 *Rte_Pim_DUMMY_NVM_LIST_8(void) { return (dt_DUMMY_NVM_LIST_8 *)0; }\n"
|
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block) {}\n"
|
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_8_DUMMY_NVM_LIST_8(dt_DUMMY_NVM_LIST_8 *block) {}\n"
|
|
||||||
"dt_DUMMY_NVM_LIST_16 *Rte_Pim_DUMMY_NVM_LIST_16(void) { return (dt_DUMMY_NVM_LIST_16 *)0; }\n"
|
|
||||||
"void Rte_Read_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block) {}\n"
|
|
||||||
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block) {}\n"
|
|
||||||
)
|
|
||||||
]
|
]
|
||||||
self.assertListEqual(result, expected)
|
self.assertListEqual(result, expected)
|
||||||
|
Reference in New Issue
Block a user