ISO 15118-20 Ed. 1 Amd 1 (AC-DER) fails to create code
- Dominant language
- Python
- Stars
- 69
- Forks
- 36
- Avg merge
- 3h 30m
- Merged PRs (30d)
- 1
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`:
```python
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:
```log
*** Generator info: ISO_15118-20/FDIS/V2G_CI_AC_DER.xsd ***
Traceback (most recent call last):
File "src/main.py", line 58, in
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:
https://github.com/EVerest/cbexigen/blob/cc1470c6e07c788e9a1d82fe4d02dcf92363bbf5/src/cbexigen/encoder_classes.py#L968
and the corresponding ones in `database_classes.py` and `decoder_classes.py`, which may have off-by-one errors, as such:
```diff
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_
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.