From 791342d4970ce88235a68bd46ab907c4c0e15fd3 Mon Sep 17 00:00:00 2001 From: "andreu.castillo" Date: Wed, 10 Sep 2025 11:44:47 +0200 Subject: [PATCH 1/4] Jinja templates uses memset Signed-off-by: andreu.castillo (cherry picked from commit e6bdb4abbca61f304357201fcddcf8a4c186217a) --- src/input/code_templates/c/BaseInitWithArrayLenAndUsed.jinja | 4 ++++ src/input/code_templates/c/BaseInitWithUsed.jinja | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/input/code_templates/c/BaseInitWithArrayLenAndUsed.jinja b/src/input/code_templates/c/BaseInitWithArrayLenAndUsed.jinja index 6b771c27..9c24e6c8 100644 --- a/src/input/code_templates/c/BaseInitWithArrayLenAndUsed.jinja +++ b/src/input/code_templates/c/BaseInitWithArrayLenAndUsed.jinja @@ -1,5 +1,8 @@ {{ element_comment }} void {{ function_name }}(struct {{ struct_type }}* {{ parameter_name }}) { +{%- if use_memset %} + memset({{ parameter_name }}, 0, sizeof(struct {{ struct_type }})); +{%- else %} {%- if not arrays and not elements %} (void) {{ parameter_name }}; {%- endif %} @@ -9,4 +12,5 @@ void {{ function_name }}(struct {{ struct_type }}* {{ parameter_name }}) { {%- for name in elements %} {{ parameter_name }}->{{ name }}_isUsed = 0u; {%- endfor %} +{%- endif %} } diff --git a/src/input/code_templates/c/BaseInitWithUsed.jinja b/src/input/code_templates/c/BaseInitWithUsed.jinja index 514bae9f..d6bb0b34 100644 --- a/src/input/code_templates/c/BaseInitWithUsed.jinja +++ b/src/input/code_templates/c/BaseInitWithUsed.jinja @@ -1,9 +1,13 @@ {{ element_comment }} void {{ function_name }}(struct {{ struct_type }}* {{ parameter_name }}) { +{%- if use_memset %} + memset({{ parameter_name }}, 0, sizeof(struct {{ struct_type }})); +{%- else %} {%- if not elements %} (void) {{ parameter_name }}; {%- endif %} {%- for name in elements %} {{ parameter_name }}->{{ name }}_isUsed = 0u; {%- endfor %} +{%- endif %} } From db89e5bc632eb0e0728c3b41e76ab842c62a1668 Mon Sep 17 00:00:00 2001 From: "andreu.castillo" Date: Wed, 10 Sep 2025 11:45:18 +0200 Subject: [PATCH 2/4] Proper arguments are passed into jinja templates Signed-off-by: andreu.castillo (cherry picked from commit 830fa0f1174c989eb8de9676e1d23829f01e331f) --- src/cbexigen/datatype_classes.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cbexigen/datatype_classes.py b/src/cbexigen/datatype_classes.py index de5ae069..0408603c 100644 --- a/src/cbexigen/datatype_classes.py +++ b/src/cbexigen/datatype_classes.py @@ -720,6 +720,7 @@ def __get_root_content(self): self.config['root_struct_name'] struct_type = self.parameters['prefix'] + self.config['root_struct_name'] parameter_name = self.config['root_parameter_name'] + use_memset = self.config['use_memset_root_content'] if len(self.analyzer_data.root_elements) > 1: for element in self.analyzer_data.root_elements: @@ -738,6 +739,7 @@ def __get_root_content(self): temp = self.generator.get_template("BaseInitWithUsed.jinja") return temp.render(function_name=function_name, + use_memset=use_memset, struct_type=struct_type, parameter_name=parameter_name, element_comment=comment, @@ -748,6 +750,7 @@ def __get_fragment_content(self): struct_type = f'{self.__schema_prefix}{self.config["fragment_struct_name"]}' parameter_name = self.config['fragment_parameter_name'] function_name = f'{self.config["init_function_prefix"]}{struct_type}' + use_memset = self.config['use_memset_child_elements'] ele = [] arr = [] @@ -768,6 +771,7 @@ def __get_fragment_content(self): # generate init function with arrayLen = 0u and isUsed = 0u temp = self.generator.get_template("BaseInitWithArrayLenAndUsed.jinja") result = temp.render(function_name=function_name, + use_memset=use_memset, struct_type=struct_type, parameter_name=parameter_name, element_comment=comment, @@ -785,6 +789,7 @@ def __get_xmldsig_fragment_content(self): struct_type = f'{self.__schema_prefix}{self.config["xmldsig_fragment_struct_name"]}' parameter_name = self.config['xmldsig_fragment_parameter_name'] function_name = f'{self.config["init_function_prefix"]}{struct_type}' + use_memset = self.config['use_memset_child_elements'] ele = [] arr = [] @@ -805,6 +810,7 @@ def __get_xmldsig_fragment_content(self): # generate init function with arrayLen = 0u and isUsed = 0u temp = self.generator.get_template("BaseInitWithArrayLenAndUsed.jinja") result = temp.render(function_name=function_name, + use_memset=use_memset, struct_type=struct_type, parameter_name=parameter_name, element_comment=comment, @@ -828,6 +834,7 @@ def __get_function_content(self): function_name = self.config['init_function_prefix'] + element.prefixed_type struct_type = element.prefixed_type parameter_name = element.type_short + use_memset = self.config['use_memset_child_elements'] if element.type_short == 'AnonType': function_name = self.config['init_function_prefix'] + element.prefixed_name @@ -856,6 +863,7 @@ def __get_function_content(self): # generate init function with arrayLen = 0u and isUsed = 0u temp = self.generator.get_template("BaseInitWithArrayLenAndUsed.jinja") result += temp.render(function_name=function_name, + use_memset=use_memset, struct_type=struct_type, parameter_name=parameter_name, element_comment=comment, From f2f89070d20ad073b55186053f58e6d8e61894b8 Mon Sep 17 00:00:00 2001 From: "andreu.castillo" Date: Wed, 10 Sep 2025 11:45:54 +0200 Subject: [PATCH 3/4] Variables for configuring memset options are defined Signed-off-by: andreu.castillo (cherry picked from commit 021cd0aaf8a99b2b0fe82cf962a0df511b38eaff) --- src/cbexigen/tools_config.py | 11 +++++++++++ src/config.py | 22 ++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/cbexigen/tools_config.py b/src/cbexigen/tools_config.py index c34ae7de..23512f3e 100644 --- a/src/cbexigen/tools_config.py +++ b/src/cbexigen/tools_config.py @@ -48,6 +48,9 @@ # general c-code style 'c_code_indent_chars': 4, 'c_replace_chars': [' ', '-'], + # usage of memset + 'use_memset_root_content': False, + 'use_memset_child_elements': False, } __CONFIG_MODULE = None @@ -186,6 +189,14 @@ def process_config_parameters(): if hasattr(config_module, 'c_replace_chars'): CONFIG_PARAMS['c_replace_chars'] = config_module.c_replace_chars + ''' usage of memset ''' + # initialization of EXI child elements + if hasattr(config_module, 'use_memset_root_content'): + CONFIG_PARAMS['use_memset_root_content'] = config_module.use_memset_root_content + # initialization of EXI child elements + if hasattr(config_module, 'use_memset_child_elements'): + CONFIG_PARAMS['use_memset_child_elements'] = config_module.use_memset_child_elements + ISO2_SCHEMAS_URL = "https://standards.iso.org/iso/15118/-2/ed-2/en/" ISO20_SCHEMAS_URL = "https://standards.iso.org/iso/15118/-20/ed-1/en/" diff --git a/src/config.py b/src/config.py index 65884f4b..e61a15ea 100644 --- a/src/config.py +++ b/src/config.py @@ -126,6 +126,12 @@ # these characters will be replaced by an underscore in generated code c_replace_chars = [' ', '-', '/'] +# Usage of memset for initialization of EXI Documents and Fragments +use_memset_root_content = True + +# Usage of memset for initialization of EXI child elements +use_memset_child_elements = True + # files to be generated c_files_to_generate = { 'exi_error_codes': { @@ -287,7 +293,7 @@ 'c': { 'filename': 'appHand_Datatypes.c', 'identifier': 'APP_HANDSHAKE_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['appHand_Datatypes.h'] } }, @@ -344,7 +350,7 @@ 'c': { 'filename': 'din_msgDefDatatypes.c', 'identifier': 'DIN_MSG_DEF_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['din_msgDefDatatypes.h'] } }, @@ -400,7 +406,7 @@ 'c': { 'filename': 'iso2_msgDefDatatypes.c', 'identifier': 'ISO2_MSG_DEF_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['iso2_msgDefDatatypes.h'] } }, @@ -456,7 +462,7 @@ 'c': { 'filename': 'iso20_CommonMessages_Datatypes.c', 'identifier': 'ISO20_COMMON_MESSAGES_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['iso20_CommonMessages_Datatypes.h'] } }, @@ -513,7 +519,7 @@ 'c': { 'filename': 'iso20_AC_Datatypes.c', 'identifier': 'ISO20_AC_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['iso20_AC_Datatypes.h'] } }, @@ -569,7 +575,7 @@ 'c': { 'filename': 'iso20_DC_Datatypes.c', 'identifier': 'ISO20_DC_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['iso20_DC_Datatypes.h'] } }, @@ -626,7 +632,7 @@ 'c': { 'filename': 'iso20_WPT_Datatypes.c', 'identifier': 'ISO20_WPT_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['iso20_WPT_Datatypes.h'] } }, @@ -683,7 +689,7 @@ 'c': { 'filename': 'iso20_ACDP_Datatypes.c', 'identifier': 'ISO20_ACDP_DATATYPES_C', - 'include_std_lib': [], + "include_std_lib": ["string.h"], 'include_other': ['iso20_ACDP_Datatypes.h'] } }, From 0ade942d6961e40d246a23fe231ec498c97684de Mon Sep 17 00:00:00 2001 From: "andreu.castillo" Date: Wed, 10 Sep 2025 12:21:15 +0200 Subject: [PATCH 4/4] Changed double quotes by simple one Signed-off-by: andreu.castillo --- src/config.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/config.py b/src/config.py index e61a15ea..a2015065 100644 --- a/src/config.py +++ b/src/config.py @@ -293,7 +293,7 @@ 'c': { 'filename': 'appHand_Datatypes.c', 'identifier': 'APP_HANDSHAKE_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['appHand_Datatypes.h'] } }, @@ -350,7 +350,7 @@ 'c': { 'filename': 'din_msgDefDatatypes.c', 'identifier': 'DIN_MSG_DEF_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['din_msgDefDatatypes.h'] } }, @@ -406,7 +406,7 @@ 'c': { 'filename': 'iso2_msgDefDatatypes.c', 'identifier': 'ISO2_MSG_DEF_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['iso2_msgDefDatatypes.h'] } }, @@ -462,7 +462,7 @@ 'c': { 'filename': 'iso20_CommonMessages_Datatypes.c', 'identifier': 'ISO20_COMMON_MESSAGES_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['iso20_CommonMessages_Datatypes.h'] } }, @@ -519,7 +519,7 @@ 'c': { 'filename': 'iso20_AC_Datatypes.c', 'identifier': 'ISO20_AC_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['iso20_AC_Datatypes.h'] } }, @@ -575,7 +575,7 @@ 'c': { 'filename': 'iso20_DC_Datatypes.c', 'identifier': 'ISO20_DC_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['iso20_DC_Datatypes.h'] } }, @@ -632,7 +632,7 @@ 'c': { 'filename': 'iso20_WPT_Datatypes.c', 'identifier': 'ISO20_WPT_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['iso20_WPT_Datatypes.h'] } }, @@ -689,7 +689,7 @@ 'c': { 'filename': 'iso20_ACDP_Datatypes.c', 'identifier': 'ISO20_ACDP_DATATYPES_C', - "include_std_lib": ["string.h"], + 'include_std_lib': ['string.h'], 'include_other': ['iso20_ACDP_Datatypes.h'] } },