-
Notifications
You must be signed in to change notification settings - Fork 28
Description
Describe the bug
The schema for Amendment 1 to the ISO 15118-20 has been released:
https://standards.iso.org/iso/15118/-20/ed-1/en/Amd/1/
Yet cbExiGen fails to create code for it.
Even if a potential bug is fixed (or worked around), the created code does not compile.
To Reproduce
Place V2G_CI_AC_DER.xsd into the same directory as the ISO 15118-20 schema files (e.g. ISO_15118-20/FDIS/).
Add this section to src/config.py:
diff --git a/src/config.py b/src/config.py
index 65884f4..a27330c 100644
--- a/src/config.py
+++ b/src/config.py
@@ -726,4 +726,61 @@ c_files_to_generate = {
'iso20_ACDP_Datatypes.h', 'iso20_ACDP_Encoder.h']
}
},
+ 'iso20_AC_DER_Datatypes': {
+ 'schema': 'ISO_15118-20/FDIS/V2G_CI_AC_DER.xsd',
+ 'prefix': 'iso20_ac_der_',
+ 'type': 'converter',
+ 'folder': 'iso-20',
+ 'h': {
+ 'filename': 'iso20_AC_DER_Datatypes.h',
+ 'identifier': 'ISO20_AC_DER_DATATYPES_H',
+ 'include_std_lib': ['stdint.h'],
+ 'include_other': ['exi_basetypes.h']
+ },
+ 'c': {
+ 'filename': 'iso20_AC_DER_Datatypes.c',
+ 'identifier': 'ISO20_AC_DER_DATATYPES_C',
+ 'include_std_lib': [],
+ 'include_other': ['iso20_AC_DER_Datatypes.h']
+ }
+ },
+ 'iso20_AC_DER_Decoder': {
+ 'schema': 'ISO_15118-20/FDIS/V2G_CI_AC_DER.xsd',
+ 'prefix': 'iso20_ac_der_',
+ 'type': 'decoder',
+ 'folder': 'iso-20',
+ 'h': {
+ 'filename': 'iso20_AC_DER_Decoder.h',
+ 'identifier': 'ISO20_AC_DER_DECODER_H',
+ 'include_std_lib': [],
+ 'include_other': ['exi_bitstream.h', 'iso20_AC_DER_Datatypes.h']
+ },
+ 'c': {
+ 'filename': 'iso20_AC_DER_Decoder.c',
+ 'identifier': 'ISO20_AC_DER_DECODER_C',
+ 'include_std_lib': ['stdint.h'],
+ 'include_other': ['exi_basetypes.h', 'exi_types_decoder.h', 'exi_basetypes_decoder.h',
+ 'exi_error_codes.h', 'exi_header.h', 'iso20_AC_DER_Datatypes.h',
+ 'iso20_AC_DER_Decoder.h']
+ }
+ },
+ 'iso20_AC_DER_Encoder': {
+ 'schema': 'ISO_15118-20/FDIS/V2G_CI_AC_DER.xsd',
+ 'prefix': 'iso20_ac_der_',
+ 'type': 'encoder',
+ 'folder': 'iso-20',
+ 'h': {
+ 'filename': 'iso20_AC_DER_Encoder.h',
+ 'identifier': 'ISO20_AC_DER_ENCODER_H',
+ 'include_std_lib': [],
+ 'include_other': ['exi_bitstream.h', 'iso20_AC_DER_Datatypes.h']
+ },
+ 'c': {
+ 'filename': 'iso20_AC_DER_Encoder.c',
+ 'identifier': 'ISO20_AC_DER_ENCODER_C',
+ 'include_std_lib': ['stdint.h'],
+ 'include_other': ['exi_basetypes.h', 'exi_basetypes_encoder.h', 'exi_error_codes.h', 'exi_header.h',
+ 'iso20_AC_DER_Datatypes.h', 'iso20_AC_DER_Encoder.h']
+ }
+ },
}Run cbExiGen, and note this failure:
*** Generator info: ISO_15118-20/FDIS/V2G_CI_AC_DER.xsd ***
Traceback (most recent call last):
File "src/main.py", line 58, in <module>
analyze_schema(sys.argv)
File "src/main.py", line 54, in analyze_schema
gen.generate_files()
File "/home/intech/Development/bitbucket/v2g_exi_codec_gen/src/cbexigen/FileGenerator.py", line 240, in generate_files
self.__generate(True, params)
File "/home/intech/Development/bitbucket/v2g_exi_codec_gen/src/cbexigen/FileGenerator.py", line 190, in __generate
self.__generate_converter_h(current_schema, parameters, self.__analyzer_data)
File "/home/intech/Development/bitbucket/v2g_exi_codec_gen/src/cbexigen/FileGenerator.py", line 144, in __generate_converter_h
header.generate_file()
File "/home/intech/Development/bitbucket/v2g_exi_codec_gen/src/cbexigen/datatype_classes.py", line 569, in generate_file
element = self.__generate[curr_idx]
IndexError: list index out of range
If you change this line:
cbexigen/src/cbexigen/encoder_classes.py
Line 968 in cc1470c
| if curr_idx > len(self.elements_to_generate): |
and the corresponding ones in
database_classes.py and decoder_classes.py, which may have off-by-one errors, as such:
diff --git a/src/cbexigen/datatype_classes.py b/src/cbexigen/datatype_classes.py
index de5ae06..a4fd47d 100644
--- a/src/cbexigen/datatype_classes.py
+++ b/src/cbexigen/datatype_classes.py
@@ -580,7 +580,7 @@ class DatatypeHeader:
if skip_element:
curr_idx += 1
- if curr_idx > len(self.__generate):
+ if curr_idx >= len(self.__generate):
log_write_error('Module datatypes: Generator loop aborted! Index larger than existing elements.')
break
else:
diff --git a/src/cbexigen/decoder_classes.py b/src/cbexigen/decoder_classes.py
index e2dabc8..1d08f55 100644
--- a/src/cbexigen/decoder_classes.py
+++ b/src/cbexigen/decoder_classes.py
@@ -973,7 +973,7 @@ class ExiDecoderCode(ExiBaseCoderCode):
if skip_element:
curr_idx += 1
- if curr_idx > len(self.elements_to_generate):
+ if curr_idx >= len(self.elements_to_generate):
log_write_error('Module decoder: Generator loop aborted! Index larger than existing elements.')
break
else:
diff --git a/src/cbexigen/encoder_classes.py b/src/cbexigen/encoder_classes.py
index d707145..3cc35a5 100644
--- a/src/cbexigen/encoder_classes.py
+++ b/src/cbexigen/encoder_classes.py
@@ -970,7 +970,7 @@ class ExiEncoderCode(ExiBaseCoderCode):
if skip_element:
curr_idx += 1
- if curr_idx > len(self.elements_to_generate):
+ if curr_idx >= len(self.elements_to_generate):
log_write_error('Module encoder: Generator loop aborted! Index larger than existing elements.')
break
else:then code for AC-DER is created, but with three warnings while generating
Generator loop aborted! Index larger than existing elements.
The generated code is incomplete, it does not compile, due to incomplete types, forward declared structs:
In file included from src/output/c/iso-20/iso20_AC_DER_Datatypes.c:21:
src/output/c/iso-20/iso20_AC_DER_Datatypes.h:2721:64: error: field has incomplete type 'struct iso20_ac_der_AC_ChargeParameterDiscoveryReqType'
struct iso20_ac_der_AC_ChargeParameterDiscoveryReqType AC_ChargeParameterDiscoveryReq;
^
src/output/c/iso-20/iso20_AC_DER_Datatypes.h:2721:16: note: forward declaration of 'struct iso20_ac_der_AC_ChargeParameterDiscoveryReqType'
struct iso20_ac_der_AC_ChargeParameterDiscoveryReqType AC_ChargeParameterDiscoveryReq;
Anything else?
No response