From b42d107422adb95bae84d86690cad36f4df43b02 Mon Sep 17 00:00:00 2001 From: Henrik Wahlqvist Date: Mon, 7 Apr 2025 18:05:09 +0200 Subject: [PATCH] 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 --- powertrain_build/rte_dummy.py | 99 ++++++++++++------- .../test_rte_dummy/rte_dummy.py | 24 +++-- tests/powertrain_build/test_rte_dummy.py | 11 ++- 3 files changed, 89 insertions(+), 45 deletions(-) diff --git a/powertrain_build/rte_dummy.py b/powertrain_build/rte_dummy.py index 91f57c0..3a9ed7f 100644 --- a/powertrain_build/rte_dummy.py +++ b/powertrain_build/rte_dummy.py @@ -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()) diff --git a/test_data/powertrain_build/test_rte_dummy/rte_dummy.py b/test_data/powertrain_build/test_rte_dummy/rte_dummy.py index 1994178..05d229e 100644 --- a/test_data/powertrain_build/test_rte_dummy/rte_dummy.py +++ b/test_data/powertrain_build/test_rte_dummy/rte_dummy.py @@ -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 = ( diff --git a/tests/powertrain_build/test_rte_dummy.py b/tests/powertrain_build/test_rte_dummy.py index d7a5daf..8d13e37 100644 --- a/tests/powertrain_build/test_rte_dummy.py +++ b/tests/powertrain_build/test_rte_dummy.py @@ -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,