Bug fixes to rte_dummy.py

Introduced in: 75b3991f5720dcbe78f06def9a85fa55169cab65

* Rte_CData_* functions were never declared.
* Type definitions of Maps should be structs.

Change-Id: Id8d371e6fd0dee7e7accf480a5a09e568db80af4
This commit is contained in:
Henrik Wahlqvist 2025-04-07 18:05:09 +02:00
parent ed73202f9d
commit b42d107422
3 changed files with 89 additions and 45 deletions

View File

@ -95,8 +95,15 @@ class RteDummy(ProblemLogger):
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")
typedefs.append(
f"typedef {signal_data['type']} {signal_data['autosar_type']}_e[{signal_data['width'][0]}];\n"
)
typedefs.append(
"typedef struct \n"
"{\n"
f" {signal_data['autosar_type']}_e {signal_data['autosar_type']}[{signal_data['width'][1]}];\n"
f"}} {signal_data['autosar_type']};\n\n"
)
return "".join(typedefs)
@ -140,37 +147,6 @@ class RteDummy(ProblemLogger):
return "\n".join(struct_defines + function_declarations)
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."""
lines_to_write = []
@ -186,6 +162,62 @@ class RteDummy(ProblemLogger):
lines_to_write.append("")
return "\n".join(lines_to_write)
def _get_calibration_function_data(self, signal_name, signal_data):
""""Get calibration function data.
Args:
signal_name (str): Name of the signal.
signal_data (dict): Dictionary containing signal data.
Returns:
return_type, return_string (tuple): Tuple containing the return type and return string.
"""
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;"
return return_type, return_string
def _get_calibration_header_dummy(self):
"""Get calibration dummy header 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():
return_type = self._get_calibration_function_data(signal_name, signal_data)[0]
lines_to_write.append(f"{return_type} Rte_CData_{swc_name}_{signal_name}(void);")
lines_to_write.append("")
return "\n".join(lines_to_write)
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():
return_type, return_string = self._get_calibration_function_data(signal_name, signal_data)
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 generate_rte_dummy(self):
"""Generate RTE dummy files."""
src_code_dest_dir = self.build_cfg.get_src_code_dst_dir()
@ -198,6 +230,7 @@ class RteDummy(ProblemLogger):
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_calibration_header_dummy())
type_header_fh.write(self._get_type_header_footer())
with source_file.open(mode="w", encoding="utf-8") as source_fh:
source_fh.write(self._get_source_header())

View File

@ -44,20 +44,21 @@ expected_rte_structs_type_header_header = (
"#define TRUE 1U\n"
)
expected_typedefs = "\n"
expected_typedefs = ""
expected_rte_structs_typedefs = (
"typedef UInt8 testNameFctList;\n"
"\n"
)
expected_rte_structs_typedefs = "typedef UInt8 testNameFctList;\n"
expected_rte_structs_and_calibration_typedefs = (
"typedef UInt8 testNameFctList;\n"
"typedef UInt16 dt_mVcSignalOne;\n"
"typedef UInt16 dt_mVcSignalOne_e[2];\n"
"typedef struct \n"
"{\n"
" dt_mVcSignalOne_e dt_mVcSignalOne[3];\n"
"} dt_mVcSignalOne;\n"
"\n"
)
expected_type_header_content = (
expected_nvm_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"
@ -66,7 +67,7 @@ expected_type_header_content = (
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(struct DUMMY_NVM_LIST_16 *block);"
)
expected_rte_structs_type_header_content = (
expected_rte_structs_nvm_header_content = (
"typedef struct\n"
"{\n"
" UInt8 e_dummy;\n"
@ -86,6 +87,13 @@ expected_rte_structs_type_header_content = (
"void Rte_Write_DUMMY_NVM_LIST_16_DUMMY_NVM_LIST_16(dt_DUMMY_NVM_LIST_16 *block);"
)
expected_calibration_header_content = ""
expected_calibration_calibration_header_content = (
"const dt_mVcSignalOne* Rte_CData_testName_SC_mVcSignalOne(void);\n"
"UInt16 Rte_CData_testName_SC_sVcSignalTwo(void);\n"
)
expected_type_header_footer = "\n#endif /* RTE_TYPE_H */\n"
expected_source_header = (

View File

@ -79,7 +79,8 @@ class TestRteDummy(unittest.TestCase):
rte_dummy.expected_swc_content,
rte_dummy.expected_type_header_header,
rte_dummy.expected_typedefs,
rte_dummy.expected_type_header_content,
rte_dummy.expected_nvm_header_content,
rte_dummy.expected_calibration_header_content,
rte_dummy.expected_type_header_footer,
rte_dummy.expected_source_header,
rte_dummy.expected_nvm_source_content,
@ -100,7 +101,8 @@ class TestRteDummy(unittest.TestCase):
rte_dummy.expected_swc_content,
rte_dummy.expected_rte_structs_type_header_header,
rte_dummy.expected_rte_structs_typedefs,
rte_dummy.expected_rte_structs_type_header_content,
rte_dummy.expected_rte_structs_nvm_header_content,
rte_dummy.expected_calibration_header_content,
rte_dummy.expected_type_header_footer,
rte_dummy.expected_source_header,
rte_dummy.expected_rte_structs_nvm_source_content,
@ -114,7 +116,7 @@ class TestRteDummy(unittest.TestCase):
calibration_data = {
"class_info": {
"mVcSignalOne": {
"width": [2, 2],
"width": [2, 3],
"type": "UInt16",
"autosar_type": "dt_mVcSignalOne",
},
@ -135,7 +137,8 @@ class TestRteDummy(unittest.TestCase):
rte_dummy.expected_swc_content,
rte_dummy.expected_rte_structs_type_header_header,
rte_dummy.expected_rte_structs_and_calibration_typedefs,
rte_dummy.expected_rte_structs_type_header_content,
rte_dummy.expected_rte_structs_nvm_header_content,
rte_dummy.expected_calibration_calibration_header_content,
rte_dummy.expected_type_header_footer,
rte_dummy.expected_source_header,
rte_dummy.expected_rte_structs_nvm_source_content,