Browse Source

extend coders with support of collapsing (same) fragment elements IF type is the same or is an extension (see https://sourceforge.net/p/openv2g/tickets/11/)

git-svn-id: https://svn.code.sf.net/p/openv2g/code/trunk@108 d9f2db14-54d0-4bde-b00c-16405c910529
daniel_peintner 8 years ago
parent
commit
f6072e1824

+ 1 - 1
src/din/dinEXIDatatypes.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 1 - 1
src/din/dinEXIDatatypes.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 433 - 54
src/din/dinEXIDatatypesDecoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>
@@ -14580,11 +14580,13 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 2:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+				errn = decode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus);
+				exiFrag->AC_EVSEStatus_isUsed = 1u;
 				break;
 			case 3:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+				errn = decode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus);
+				exiFrag->AC_EVSEStatus_isUsed = 1u;
 				break;
 			case 4:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body) */
@@ -14598,11 +14600,31 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 6:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->BulkChargingComplete);
+						exiFrag->BulkChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 7:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->BulkChargingComplete);
+						exiFrag->BulkChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 8:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) */
@@ -14636,7 +14658,23 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 12:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name Certificate */
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->Certificate.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->Certificate.bytesLen) <= EXIFragment_Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->Certificate.bytesLen, exiFrag->Certificate.bytes);
+						}
+						exiFrag->Certificate_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 13:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq) */
@@ -14675,11 +14713,31 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 20:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->ChargingComplete);
+						exiFrag->ChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 21:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->ChargingComplete);
+						exiFrag->ChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 22:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile) */
@@ -14741,15 +14799,51 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 30:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractID */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ContractID.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->ContractID.charactersLen >= 2) {
+								exiFrag->ContractID.charactersLen = (uint16_t)(exiFrag->ContractID.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->ContractID.charactersLen, exiFrag->ContractID.characters, EXIFragment_ContractID_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->ContractID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 31:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureCertChain */
+				errn = decode_dinCertificateChainType(stream, &exiFrag->ContractSignatureCertChain);
+				exiFrag->ContractSignatureCertChain_isUsed = 1u;
 				break;
 			case 32:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureEncryptedPrivateKey */
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen) <= EXIFragment_ContractSignatureEncryptedPrivateKey_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen, exiFrag->ContractSignatureEncryptedPrivateKey.bytes);
+						}
+						exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 33:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost) */
@@ -14783,23 +14877,43 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 39:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+				errn = decode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus);
+				exiFrag->DC_EVSEStatus_isUsed = 1u;
 				break;
 			case 40:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+				errn = decode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus);
+				exiFrag->DC_EVSEStatus_isUsed = 1u;
 				break;
 			case 41:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+				errn = decode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus);
+				exiFrag->DC_EVStatus_isUsed = 1u;
 				break;
 			case 42:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+				errn = decode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus);
+				exiFrag->DC_EVStatus_isUsed = 1u;
 				break;
 			case 43:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DHParams */
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->DHParams.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->DHParams.bytesLen) <= EXIFragment_DHParams_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->DHParams.bytesLen, exiFrag->DHParams.bytes);
+						}
+						exiFrag->DHParams_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 44:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */
@@ -14808,7 +14922,17 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 45:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DateTimeNow */
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeInteger64(stream, &exiFrag->DateTimeNow);
+						exiFrag->DateTimeNow_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 46:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime) */
@@ -14945,27 +15069,33 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 59:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit);
+				exiFrag->EVMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 60:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit);
+				exiFrag->EVMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 61:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit);
+				exiFrag->EVMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 62:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit);
+				exiFrag->EVMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 63:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit);
+				exiFrag->EVMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 64:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit);
+				exiFrag->EVMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 65:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent) */
@@ -15066,7 +15196,23 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 75:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEID */
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->EVSEID.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->EVSEID.bytesLen) <= EXIFragment_EVSEID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->EVSEID.bytesLen, exiFrag->EVSEID.bytes);
+						}
+						exiFrag->EVSEID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 76:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus) */
@@ -15085,11 +15231,13 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 77:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent);
+				exiFrag->EVSEMaxCurrent_isUsed = 1u;
 				break;
 			case 78:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent);
+				exiFrag->EVSEMaxCurrent_isUsed = 1u;
 				break;
 			case 79:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage) */
@@ -15098,27 +15246,33 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 80:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit);
+				exiFrag->EVSEMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 81:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit);
+				exiFrag->EVSEMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 82:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit);
+				exiFrag->EVSEMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 83:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit);
+				exiFrag->EVSEMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 84:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit);
+				exiFrag->EVSEMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 85:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit);
+				exiFrag->EVSEMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 86:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent) */
@@ -15137,7 +15291,18 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 89:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSENotification */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+						exiFrag->EVSENotification = (dinEVSENotificationType) uint32;
+						exiFrag->EVSENotification_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 90:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple) */
@@ -15165,11 +15330,23 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 93:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEPresentVoltage */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEPresentVoltage);
+				exiFrag->EVSEPresentVoltage_isUsed = 1u;
 				break;
 			case 94:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEProcessing */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 1, &uint32);
+						exiFrag->EVSEProcessing = (dinEVSEProcessingType) uint32;
+						exiFrag->EVSEProcessing_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 95:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus) */
@@ -15212,11 +15389,13 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 99:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetCurrent */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVTargetCurrent);
+				exiFrag->EVTargetCurrent_isUsed = 1u;
 				break;
 			case 100:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetVoltage */
+				errn = decode_dinPhysicalValueType(stream, &exiFrag->EVTargetVoltage);
+				exiFrag->EVTargetVoltage_isUsed = 1u;
 				break;
 			case 101:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType) */
@@ -15347,7 +15526,26 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 109:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name GenChallenge */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->GenChallenge.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->GenChallenge.charactersLen >= 2) {
+								exiFrag->GenChallenge.charactersLen = (uint16_t)(exiFrag->GenChallenge.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->GenChallenge.charactersLen, exiFrag->GenChallenge.characters, EXIFragment_GenChallenge_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->GenChallenge_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 110:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) */
@@ -15423,7 +15621,8 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 116:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ListOfRootCertificateIDs */
+				errn = decode_dinListOfRootCertificateIDsType(stream, &exiFrag->ListOfRootCertificateIDs);
+				exiFrag->ListOfRootCertificateIDs_isUsed = 1u;
 				break;
 			case 117:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */
@@ -15455,7 +15654,8 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 119:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name MeterInfo */
+				errn = decode_dinMeterInfoType(stream, &exiFrag->MeterInfo);
+				exiFrag->MeterInfo_isUsed = 1u;
 				break;
 			case 120:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading) */
@@ -15551,7 +15751,17 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 128:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name NotificationMaxDelay */
+				/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger32(stream, &exiFrag->NotificationMaxDelay);
+						exiFrag->NotificationMaxDelay_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 129:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels) */
@@ -15640,7 +15850,23 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 135:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name PGPKeyPacket */
+				/* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->PGPKeyPacket.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->PGPKeyPacket.bytesLen) <= EXIFragment_PGPKeyPacket_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->PGPKeyPacket.bytesLen, exiFrag->PGPKeyPacket.bytes);
+						}
+						exiFrag->PGPKeyPacket_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 136:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax) */
@@ -15692,7 +15918,17 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 142:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ParameterSetID */
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeInteger16(stream, &exiFrag->ParameterSetID);
+						exiFrag->ParameterSetID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 143:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */
@@ -15872,7 +16108,18 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 163:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ResponseCode */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 5, &uint32);
+						exiFrag->ResponseCode = (dinresponseCodeType) uint32;
+						exiFrag->ResponseCode_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 164:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */
@@ -15928,11 +16175,31 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 169:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+				/* FirstStartTag[CHARACTERS[INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeInteger16(stream, &exiFrag->SAScheduleTupleID);
+						exiFrag->SAScheduleTupleID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 170:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+				/* FirstStartTag[CHARACTERS[INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeInteger16(stream, &exiFrag->SAScheduleTupleID);
+						exiFrag->SAScheduleTupleID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 171:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules) */
@@ -16063,11 +16330,33 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 183:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+						exiFrag->ServiceCategory = (dinserviceCategoryType) uint32;
+						exiFrag->ServiceCategory_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 184:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+						exiFrag->ServiceCategory = (dinserviceCategoryType) uint32;
+						exiFrag->ServiceCategory_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 185:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge) */
@@ -16096,11 +16385,31 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 190:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceID);
+						exiFrag->ServiceID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 191:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceID);
+						exiFrag->ServiceID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 192:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList) */
@@ -16147,11 +16456,49 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 197:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceScope.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->ServiceScope.charactersLen >= 2) {
+								exiFrag->ServiceScope.charactersLen = (uint16_t)(exiFrag->ServiceScope.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->ServiceScope.charactersLen, exiFrag->ServiceScope.characters, EXIFragment_ServiceScope_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->ServiceScope_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 198:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceScope.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->ServiceScope.charactersLen >= 2) {
+								exiFrag->ServiceScope.charactersLen = (uint16_t)(exiFrag->ServiceScope.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->ServiceScope.charactersLen, exiFrag->ServiceScope.characters, EXIFragment_ServiceScope_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->ServiceScope_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 199:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag) */
@@ -16160,11 +16507,43 @@ int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 				break;
 			case 200:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->SessionID.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->SessionID.bytesLen) <= EXIFragment_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->SessionID.bytesLen, exiFrag->SessionID.bytes);
+						}
+						exiFrag->SessionID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 201:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->SessionID.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->SessionID.bytesLen) <= EXIFragment_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->SessionID.bytesLen, exiFrag->SessionID.bytes);
+						}
+						exiFrag->SessionID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 202:
 				/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */

+ 1 - 1
src/din/dinEXIDatatypesDecoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 412 - 54
src/din/dinEXIDatatypesEncoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>
@@ -10585,10 +10585,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->AC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 2);
+			if(errn == 0) {
+				errn = encode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus );
+			}
 		} else if ( exiFrag->AC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 3);
+			if(errn == 0) {
+				errn = encode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus );
+			}
 		} else if ( exiFrag->Body_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 4);
@@ -10603,10 +10609,28 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->BulkChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 6);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->BulkChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->BulkChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 7);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->BulkChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->BulkSOC_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 8);
@@ -10639,7 +10663,19 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->Certificate_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name Certificate */
+			errn = encodeNBitUnsignedInteger(stream, 8, 12);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Certificate.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->Certificate.bytes, exiFrag->Certificate.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->CertificateInstallationReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 13);
@@ -10684,10 +10720,28 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 20);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->ChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 21);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->ChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ChargingProfile_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 22);
@@ -10750,13 +10804,41 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ContractID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 30);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ContractID.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->ContractID.characters, exiFrag->ContractID.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ContractSignatureCertChain_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureCertChain */
+			errn = encodeNBitUnsignedInteger(stream, 8, 31);
+			if(errn == 0) {
+				errn = encode_dinCertificateChainType(stream, &exiFrag->ContractSignatureCertChain );
+			}
 		} else if ( exiFrag->ContractSignatureEncryptedPrivateKey_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureEncryptedPrivateKey */
+			errn = encodeNBitUnsignedInteger(stream, 8, 32);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->ContractSignatureEncryptedPrivateKey.bytes, exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->Cost_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 33);
@@ -10795,19 +10877,43 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->DC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 39);
+			if(errn == 0) {
+				errn = encode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus );
+			}
 		} else if ( exiFrag->DC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 40);
+			if(errn == 0) {
+				errn = encode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus );
+			}
 		} else if ( exiFrag->DC_EVStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 41);
+			if(errn == 0) {
+				errn = encode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus );
+			}
 		} else if ( exiFrag->DC_EVStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 42);
+			if(errn == 0) {
+				errn = encode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus );
+			}
 		} else if ( exiFrag->DHParams_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DHParams */
+			errn = encodeNBitUnsignedInteger(stream, 8, 43);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->DHParams.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->DHParams.bytes, exiFrag->DHParams.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->DSAKeyValue_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 44);
@@ -10816,7 +10922,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->DateTimeNow_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DateTimeNow */
+			errn = encodeNBitUnsignedInteger(stream, 8, 45);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeInteger64(stream, exiFrag->DateTimeNow);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->DepartureTime_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 46);
@@ -10939,22 +11054,40 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 59);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 60);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 61);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 62);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 63);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 64);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVMinCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 65);
@@ -11047,7 +11180,19 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVSEID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 75);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->EVSEID.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->EVSEID.bytes, exiFrag->EVSEID.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->EVSEIsolationStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 76);
@@ -11062,10 +11207,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVSEMaxCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+			errn = encodeNBitUnsignedInteger(stream, 8, 77);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent );
+			}
 		} else if ( exiFrag->EVSEMaxCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+			errn = encodeNBitUnsignedInteger(stream, 8, 78);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent );
+			}
 		} else if ( exiFrag->EVSEMaxVoltage_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 79);
@@ -11074,22 +11225,40 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVSEMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 80);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 81);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 82);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 83);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 84);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 85);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVSEMinCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 86);
@@ -11110,7 +11279,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVSENotification_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSENotification */
+			errn = encodeNBitUnsignedInteger(stream, 8, 89);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->EVSENotification);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->EVSEPeakCurrentRipple_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 90);
@@ -11137,10 +11315,22 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVSEPresentVoltage_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEPresentVoltage */
+			errn = encodeNBitUnsignedInteger(stream, 8, 93);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEPresentVoltage );
+			}
 		} else if ( exiFrag->EVSEProcessing_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEProcessing */
+			errn = encodeNBitUnsignedInteger(stream, 8, 94);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 1, exiFrag->EVSEProcessing);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 95);
@@ -11179,10 +11369,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->EVTargetCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetCurrent */
+			errn = encodeNBitUnsignedInteger(stream, 8, 99);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVTargetCurrent );
+			}
 		} else if ( exiFrag->EVTargetVoltage_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetVoltage */
+			errn = encodeNBitUnsignedInteger(stream, 8, 100);
+			if(errn == 0) {
+				errn = encode_dinPhysicalValueType(stream, &exiFrag->EVTargetVoltage );
+			}
 		} else if ( exiFrag->EnergyTransferType_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 101);
@@ -11285,7 +11481,20 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->GenChallenge_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name GenChallenge */
+			errn = encodeNBitUnsignedInteger(stream, 8, 109);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->GenChallenge.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->GenChallenge.characters, exiFrag->GenChallenge.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->HMACOutputLength_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 110);
@@ -11349,7 +11558,10 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ListOfRootCertificateIDs_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ListOfRootCertificateIDs */
+			errn = encodeNBitUnsignedInteger(stream, 8, 116);
+			if(errn == 0) {
+				errn = encode_dinListOfRootCertificateIDsType(stream, &exiFrag->ListOfRootCertificateIDs );
+			}
 		} else if ( exiFrag->Manifest_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 117);
@@ -11374,7 +11586,10 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->MeterInfo_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name MeterInfo */
+			errn = encodeNBitUnsignedInteger(stream, 8, 119);
+			if(errn == 0) {
+				errn = encode_dinMeterInfoType(stream, &exiFrag->MeterInfo );
+			}
 		} else if ( exiFrag->MeterReading_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 120);
@@ -11456,7 +11671,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->NotificationMaxDelay_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name NotificationMaxDelay */
+			errn = encodeNBitUnsignedInteger(stream, 8, 128);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger32(stream, exiFrag->NotificationMaxDelay);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->NumEPriceLevels_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 129);
@@ -11528,7 +11752,19 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->PGPKeyPacket_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name PGPKeyPacket */
+			errn = encodeNBitUnsignedInteger(stream, 8, 135);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->PGPKeyPacket.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->PGPKeyPacket.bytes, exiFrag->PGPKeyPacket.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->PMax_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 136);
@@ -11579,7 +11815,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ParameterSetID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ParameterSetID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 142);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeInteger16(stream, exiFrag->ParameterSetID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->PaymentDetailsReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 143);
@@ -11750,7 +11995,16 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ResponseCode_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ResponseCode */
+			errn = encodeNBitUnsignedInteger(stream, 8, 163);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 5, exiFrag->ResponseCode);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->RetrievalMethod_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 164);
@@ -11799,10 +12053,28 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->SAScheduleTupleID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 169);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeInteger16(stream, exiFrag->SAScheduleTupleID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SAScheduleTupleID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 170);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeInteger16(stream, exiFrag->SAScheduleTupleID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SASchedules_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 171);
@@ -11917,10 +12189,28 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ServiceCategory_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+			errn = encodeNBitUnsignedInteger(stream, 8, 183);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->ServiceCategory);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceCategory_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+			errn = encodeNBitUnsignedInteger(stream, 8, 184);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->ServiceCategory);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceCharge_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 185);
@@ -11953,10 +12243,28 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ServiceID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 190);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, exiFrag->ServiceID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 191);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, exiFrag->ServiceID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceList_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 192);
@@ -11999,10 +12307,36 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->ServiceScope_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+			errn = encodeNBitUnsignedInteger(stream, 8, 197);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceScope.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->ServiceScope.characters, exiFrag->ServiceScope.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceScope_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+			errn = encodeNBitUnsignedInteger(stream, 8, 198);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceScope.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->ServiceScope.characters, exiFrag->ServiceScope.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceTag_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 199);
@@ -12011,10 +12345,34 @@ int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) {
 			}
 		} else if ( exiFrag->SessionID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 200);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SessionID.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->SessionID.bytes, exiFrag->SessionID.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SessionID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 201);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SessionID.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->SessionID.bytes, exiFrag->SessionID.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SessionSetupReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 202);

+ 1 - 1
src/din/dinEXIDatatypesEncoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 1 - 1
src/iso1/iso1EXIDatatypes.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-19 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 1 - 1
src/iso1/iso1EXIDatatypes.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-19 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 377 - 54
src/iso1/iso1EXIDatatypesDecoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-19 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>
@@ -16901,11 +16901,13 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 2:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}AC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+				errn = decode_iso1AC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus);
+				exiFrag->AC_EVSEStatus_isUsed = 1u;
 				break;
 			case 3:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}AC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+				errn = decode_iso1AC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus);
+				exiFrag->AC_EVSEStatus_isUsed = 1u;
 				break;
 			case 4:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}AuthorizationReq) */
@@ -16929,11 +16931,31 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 8:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}BulkChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->BulkChargingComplete);
+						exiFrag->BulkChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 9:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}BulkChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->BulkChargingComplete);
+						exiFrag->BulkChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 10:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}BulkSOC) */
@@ -16967,7 +16989,23 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 14:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}Certificate) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name Certificate */
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->Certificate.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->Certificate.bytesLen) <= EXIFragment_Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->Certificate.bytesLen, exiFrag->Certificate.bytes);
+						}
+						exiFrag->Certificate_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 15:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}CertificateInstallationReq) */
@@ -17021,11 +17059,31 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 23:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->ChargingComplete);
+						exiFrag->ChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 24:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ChargingComplete) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->ChargingComplete);
+						exiFrag->ChargingComplete_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 25:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ChargingProfile) */
@@ -17098,11 +17156,13 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 33:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ContractSignatureCertChain) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureCertChain */
+				errn = decode_iso1CertificateChainType(stream, &exiFrag->ContractSignatureCertChain);
+				exiFrag->ContractSignatureCertChain_isUsed = 1u;
 				break;
 			case 34:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ContractSignatureEncryptedPrivateKey) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureEncryptedPrivateKey */
+				errn = decode_iso1ContractSignatureEncryptedPrivateKeyType(stream, &exiFrag->ContractSignatureEncryptedPrivateKey);
+				exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 1u;
 				break;
 			case 35:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}Cost) */
@@ -17136,23 +17196,28 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 41:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}DC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+				errn = decode_iso1DC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus);
+				exiFrag->DC_EVSEStatus_isUsed = 1u;
 				break;
 			case 42:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+				errn = decode_iso1DC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus);
+				exiFrag->DC_EVSEStatus_isUsed = 1u;
 				break;
 			case 43:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}DC_EVStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+				errn = decode_iso1DC_EVStatusType(stream, &exiFrag->DC_EVStatus);
+				exiFrag->DC_EVStatus_isUsed = 1u;
 				break;
 			case 44:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}DC_EVStatus) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+				errn = decode_iso1DC_EVStatusType(stream, &exiFrag->DC_EVStatus);
+				exiFrag->DC_EVStatus_isUsed = 1u;
 				break;
 			case 45:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}DHpublickey) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DHpublickey */
+				errn = decode_iso1DiffieHellmanPublickeyType(stream, &exiFrag->DHpublickey);
+				exiFrag->DHpublickey_isUsed = 1u;
 				break;
 			case 46:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */
@@ -17280,27 +17345,33 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 59:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit);
+				exiFrag->EVMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 60:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit);
+				exiFrag->EVMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 61:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit);
+				exiFrag->EVMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 62:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit);
+				exiFrag->EVMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 63:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit);
+				exiFrag->EVMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 64:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit);
+				exiFrag->EVMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 65:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMinCurrent) */
@@ -17372,7 +17443,26 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 73:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEID */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->EVSEID.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->EVSEID.charactersLen >= 2) {
+								exiFrag->EVSEID.charactersLen = (uint16_t)(exiFrag->EVSEID.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->EVSEID.charactersLen, exiFrag->EVSEID.characters, EXIFragment_EVSEID_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->EVSEID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 74:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEIsolationStatus) */
@@ -17391,35 +17481,43 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 75:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaxCurrent) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaxCurrent);
+				exiFrag->EVSEMaxCurrent_isUsed = 1u;
 				break;
 			case 76:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaxCurrent) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaxCurrent);
+				exiFrag->EVSEMaxCurrent_isUsed = 1u;
 				break;
 			case 77:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit);
+				exiFrag->EVSEMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 78:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumCurrentLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit);
+				exiFrag->EVSEMaximumCurrentLimit_isUsed = 1u;
 				break;
 			case 79:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit);
+				exiFrag->EVSEMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 80:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumPowerLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit);
+				exiFrag->EVSEMaximumPowerLimit_isUsed = 1u;
 				break;
 			case 81:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit);
+				exiFrag->EVSEMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 82:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumVoltageLimit) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit);
+				exiFrag->EVSEMaximumVoltageLimit_isUsed = 1u;
 				break;
 			case 83:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMinimumCurrentLimit) */
@@ -17477,11 +17575,23 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 90:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEPresentVoltage) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEPresentVoltage */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVSEPresentVoltage);
+				exiFrag->EVSEPresentVoltage_isUsed = 1u;
 				break;
 			case 91:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEProcessing) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEProcessing */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+						exiFrag->EVSEProcessing = (iso1EVSEProcessingType) uint32;
+						exiFrag->EVSEProcessing_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 92:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEStatus) */
@@ -17505,7 +17615,17 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 94:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSETimeStamp) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSETimeStamp */
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeInteger64(stream, &exiFrag->EVSETimeStamp);
+						exiFrag->EVSETimeStamp_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 95:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEVoltageLimitAchieved) */
@@ -17528,11 +17648,13 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 97:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVTargetCurrent) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetCurrent */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVTargetCurrent);
+				exiFrag->EVTargetCurrent_isUsed = 1u;
 				break;
 			case 98:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVTargetVoltage) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetVoltage */
+				errn = decode_iso1PhysicalValueType(stream, &exiFrag->EVTargetVoltage);
+				exiFrag->EVTargetVoltage_isUsed = 1u;
 				break;
 			case 99:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EnergyTransferMode) */
@@ -17663,7 +17785,23 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 107:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}GenChallenge) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name GenChallenge */
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->GenChallenge.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->GenChallenge.bytesLen) <= EXIFragment_GenChallenge_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->GenChallenge.bytesLen, exiFrag->GenChallenge.bytes);
+						}
+						exiFrag->GenChallenge_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 108:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) */
@@ -17739,7 +17877,8 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 114:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ListOfRootCertificateIDs) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ListOfRootCertificateIDs */
+				errn = decode_iso1ListOfRootCertificateIDsType(stream, &exiFrag->ListOfRootCertificateIDs);
+				exiFrag->ListOfRootCertificateIDs_isUsed = 1u;
 				break;
 			case 115:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */
@@ -17785,7 +17924,8 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 118:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}MeterInfo) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name MeterInfo */
+				errn = decode_iso1MeterInfoType(stream, &exiFrag->MeterInfo);
+				exiFrag->MeterInfo_isUsed = 1u;
 				break;
 			case 119:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}MeterReading) */
@@ -17989,7 +18129,23 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 134:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name PGPKeyPacket */
+				/* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->PGPKeyPacket.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->PGPKeyPacket.bytesLen) <= EXIFragment_PGPKeyPacket_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->PGPKeyPacket.bytesLen, exiFrag->PGPKeyPacket.bytes);
+						}
+						exiFrag->PGPKeyPacket_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 135:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}PMax) */
@@ -18018,7 +18174,17 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 140:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ParameterSetID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ParameterSetID */
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeInteger16(stream, &exiFrag->ParameterSetID);
+						exiFrag->ParameterSetID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 141:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}PaymentDetailsReq) */
@@ -18146,7 +18312,17 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 156:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ReceiptRequired) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ReceiptRequired */
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeBoolean(stream, &exiFrag->ReceiptRequired);
+						exiFrag->ReceiptRequired_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 157:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference) */
@@ -18185,7 +18361,18 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 162:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ResponseCode) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ResponseCode */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 5, &uint32);
+						exiFrag->ResponseCode = (iso1responseCodeType) uint32;
+						exiFrag->ResponseCode_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 163:
 				/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */
@@ -18213,7 +18400,8 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 166:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SAProvisioningCertificateChain) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAProvisioningCertificateChain */
+				errn = decode_iso1CertificateChainType(stream, &exiFrag->SAProvisioningCertificateChain);
+				exiFrag->SAProvisioningCertificateChain_isUsed = 1u;
 				break;
 			case 167:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}SAScheduleList) */
@@ -18227,11 +18415,33 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 169:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SAScheduleTupleID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+				/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 8, &(uint32));
+						exiFrag->SAScheduleTupleID = (uint8_t)(uint32 + 1);
+						exiFrag->SAScheduleTupleID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 170:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}SAScheduleTupleID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+				/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 8, &(uint32));
+						exiFrag->SAScheduleTupleID = (uint8_t)(uint32 + 1);
+						exiFrag->SAScheduleTupleID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 171:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}SASchedules) */
@@ -18363,11 +18573,33 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 183:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceCategory) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+						exiFrag->ServiceCategory = (iso1serviceCategoryType) uint32;
+						exiFrag->ServiceCategory_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 184:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ServiceCategory) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
+						exiFrag->ServiceCategory = (iso1serviceCategoryType) uint32;
+						exiFrag->ServiceCategory_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 185:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceDetailReq) */
@@ -18391,11 +18623,31 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 189:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceID);
+						exiFrag->ServiceID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 190:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ServiceID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceID);
+						exiFrag->ServiceID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 191:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceList) */
@@ -18432,19 +18684,89 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 194:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceScope) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceScope.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->ServiceScope.charactersLen >= 2) {
+								exiFrag->ServiceScope.charactersLen = (uint16_t)(exiFrag->ServiceScope.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->ServiceScope.charactersLen, exiFrag->ServiceScope.characters, EXIFragment_ServiceScope_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->ServiceScope_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 195:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ServiceScope) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceScope.charactersLen);
+						if (errn == 0) {
+							if (exiFrag->ServiceScope.charactersLen >= 2) {
+								exiFrag->ServiceScope.charactersLen = (uint16_t)(exiFrag->ServiceScope.charactersLen - 2); /* string table miss */
+								errn = decodeCharacters(stream, exiFrag->ServiceScope.charactersLen, exiFrag->ServiceScope.characters, EXIFragment_ServiceScope_CHARACTERS_SIZE);
+							} else {
+								/* string table hit */
+								errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+							}
+						}
+						exiFrag->ServiceScope_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 196:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SessionID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->SessionID.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->SessionID.bytesLen) <= EXIFragment_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->SessionID.bytesLen, exiFrag->SessionID.bytes);
+						}
+						exiFrag->SessionID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 197:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgHeader}SessionID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+				if(errn == 0) {
+					if(eventCode == 0) {
+						errn = decodeUnsignedInteger16(stream, &exiFrag->SessionID.bytesLen);
+						if (errn == 0) {
+							errn =  (exiFrag->SessionID.bytesLen) <= EXIFragment_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER;
+						}
+						if (errn == 0) {
+							errn = decodeBytes(stream, exiFrag->SessionID.bytesLen, exiFrag->SessionID.bytes);
+						}
+						exiFrag->SessionID_isUsed = 1u;
+					} else {
+						/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+						errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+					}
+				}
 				break;
 			case 198:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SessionSetupReq) */
@@ -18861,7 +19183,8 @@ int decode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 				break;
 			case 236:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}eMAID) */
-				errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name eMAID */
+				errn = decode_iso1EMAIDType(stream, &exiFrag->eMAID);
+				exiFrag->eMAID_isUsed = 1u;
 				break;
 			case 237:
 				/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}intValue) */

+ 1 - 1
src/iso1/iso1EXIDatatypesDecoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-19 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 378 - 54
src/iso1/iso1EXIDatatypesEncoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-19 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>
@@ -12339,10 +12339,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->AC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}AC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 2);
+			if(errn == 0) {
+				errn = encode_iso1AC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus );
+			}
 		} else if ( exiFrag->AC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}AC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name AC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 3);
+			if(errn == 0) {
+				errn = encode_iso1AC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus );
+			}
 		} else if ( exiFrag->AuthorizationReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}AuthorizationReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 4);
@@ -12369,10 +12375,28 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->BulkChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}BulkChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 8);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->BulkChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->BulkChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}BulkChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name BulkChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 9);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->BulkChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->BulkSOC_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}BulkSOC) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 10);
@@ -12405,7 +12429,19 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->Certificate_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}Certificate) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name Certificate */
+			errn = encodeNBitUnsignedInteger(stream, 8, 14);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Certificate.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->Certificate.bytes, exiFrag->Certificate.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->CertificateInstallationReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}CertificateInstallationReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 15);
@@ -12462,10 +12498,28 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 23);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->ChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ChargingComplete_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ChargingComplete) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ChargingComplete */
+			errn = encodeNBitUnsignedInteger(stream, 8, 24);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->ChargingComplete);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ChargingProfile_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ChargingProfile) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 25);
@@ -12534,10 +12588,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ContractSignatureCertChain_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ContractSignatureCertChain) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureCertChain */
+			errn = encodeNBitUnsignedInteger(stream, 8, 33);
+			if(errn == 0) {
+				errn = encode_iso1CertificateChainType(stream, &exiFrag->ContractSignatureCertChain );
+			}
 		} else if ( exiFrag->ContractSignatureEncryptedPrivateKey_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ContractSignatureEncryptedPrivateKey) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ContractSignatureEncryptedPrivateKey */
+			errn = encodeNBitUnsignedInteger(stream, 8, 34);
+			if(errn == 0) {
+				errn = encode_iso1ContractSignatureEncryptedPrivateKeyType(stream, &exiFrag->ContractSignatureEncryptedPrivateKey );
+			}
 		} else if ( exiFrag->Cost_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}Cost) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 35);
@@ -12576,19 +12636,34 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->DC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}DC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 41);
+			if(errn == 0) {
+				errn = encode_iso1DC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus );
+			}
 		} else if ( exiFrag->DC_EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVSEStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 42);
+			if(errn == 0) {
+				errn = encode_iso1DC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus );
+			}
 		} else if ( exiFrag->DC_EVStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}DC_EVStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 43);
+			if(errn == 0) {
+				errn = encode_iso1DC_EVStatusType(stream, &exiFrag->DC_EVStatus );
+			}
 		} else if ( exiFrag->DC_EVStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}DC_EVStatus) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DC_EVStatus */
+			errn = encodeNBitUnsignedInteger(stream, 8, 44);
+			if(errn == 0) {
+				errn = encode_iso1DC_EVStatusType(stream, &exiFrag->DC_EVStatus );
+			}
 		} else if ( exiFrag->DHpublickey_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}DHpublickey) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name DHpublickey */
+			errn = encodeNBitUnsignedInteger(stream, 8, 45);
+			if(errn == 0) {
+				errn = encode_iso1DiffieHellmanPublickeyType(stream, &exiFrag->DHpublickey );
+			}
 		} else if ( exiFrag->DSAKeyValue_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 46);
@@ -12705,22 +12780,40 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->EVMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 59);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 60);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 61);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 62);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 63);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 64);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVMinCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVMinCurrent) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 65);
@@ -12789,7 +12882,20 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->EVSEID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 73);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->EVSEID.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->EVSEID.characters, exiFrag->EVSEID.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->EVSEIsolationStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEIsolationStatus) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 74);
@@ -12804,28 +12910,52 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->EVSEMaxCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaxCurrent) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+			errn = encodeNBitUnsignedInteger(stream, 8, 75);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaxCurrent );
+			}
 		} else if ( exiFrag->EVSEMaxCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaxCurrent) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaxCurrent */
+			errn = encodeNBitUnsignedInteger(stream, 8, 76);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaxCurrent );
+			}
 		} else if ( exiFrag->EVSEMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 77);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumCurrentLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumCurrentLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 78);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 79);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumPowerLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumPowerLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumPowerLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 80);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 81);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVSEMaximumVoltageLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumVoltageLimit) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEMaximumVoltageLimit */
+			errn = encodeNBitUnsignedInteger(stream, 8, 82);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit );
+			}
 		} else if ( exiFrag->EVSEMinimumCurrentLimit_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEMinimumCurrentLimit) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 83);
@@ -12882,10 +13012,22 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->EVSEPresentVoltage_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEPresentVoltage) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEPresentVoltage */
+			errn = encodeNBitUnsignedInteger(stream, 8, 90);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVSEPresentVoltage );
+			}
 		} else if ( exiFrag->EVSEProcessing_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEProcessing) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSEProcessing */
+			errn = encodeNBitUnsignedInteger(stream, 8, 91);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->EVSEProcessing);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->EVSEStatus_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EVSEStatus) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 92);
@@ -12906,7 +13048,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->EVSETimeStamp_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSETimeStamp) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVSETimeStamp */
+			errn = encodeNBitUnsignedInteger(stream, 8, 94);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeInteger64(stream, exiFrag->EVSETimeStamp);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->EVSEVoltageLimitAchieved_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVSEVoltageLimitAchieved) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 95);
@@ -12927,10 +13078,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->EVTargetCurrent_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVTargetCurrent) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetCurrent */
+			errn = encodeNBitUnsignedInteger(stream, 8, 97);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVTargetCurrent );
+			}
 		} else if ( exiFrag->EVTargetVoltage_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}EVTargetVoltage) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name EVTargetVoltage */
+			errn = encodeNBitUnsignedInteger(stream, 8, 98);
+			if(errn == 0) {
+				errn = encode_iso1PhysicalValueType(stream, &exiFrag->EVTargetVoltage );
+			}
 		} else if ( exiFrag->EnergyTransferMode_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}EnergyTransferMode) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 99);
@@ -13033,7 +13190,19 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->GenChallenge_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}GenChallenge) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name GenChallenge */
+			errn = encodeNBitUnsignedInteger(stream, 8, 107);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->GenChallenge.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->GenChallenge.bytes, exiFrag->GenChallenge.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->HMACOutputLength_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 108);
@@ -13097,7 +13266,10 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ListOfRootCertificateIDs_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ListOfRootCertificateIDs) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ListOfRootCertificateIDs */
+			errn = encodeNBitUnsignedInteger(stream, 8, 114);
+			if(errn == 0) {
+				errn = encode_iso1ListOfRootCertificateIDsType(stream, &exiFrag->ListOfRootCertificateIDs );
+			}
 		} else if ( exiFrag->Manifest_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 115);
@@ -13134,7 +13306,10 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->MeterInfo_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}MeterInfo) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name MeterInfo */
+			errn = encodeNBitUnsignedInteger(stream, 8, 118);
+			if(errn == 0) {
+				errn = encode_iso1MeterInfoType(stream, &exiFrag->MeterInfo );
+			}
 		} else if ( exiFrag->MeterReading_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}MeterReading) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 119);
@@ -13303,7 +13478,19 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->PGPKeyPacket_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name PGPKeyPacket */
+			errn = encodeNBitUnsignedInteger(stream, 8, 134);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->PGPKeyPacket.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->PGPKeyPacket.bytes, exiFrag->PGPKeyPacket.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->PMax_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}PMax) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 135);
@@ -13336,7 +13523,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ParameterSetID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ParameterSetID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ParameterSetID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 140);
+			if(errn == 0) {
+				/* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeInteger16(stream, exiFrag->ParameterSetID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->PaymentDetailsReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}PaymentDetailsReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 141);
@@ -13459,7 +13655,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ReceiptRequired_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ReceiptRequired) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ReceiptRequired */
+			errn = encodeNBitUnsignedInteger(stream, 8, 156);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BOOLEAN]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeBoolean(stream, exiFrag->ReceiptRequired);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->Reference_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 157);
@@ -13498,7 +13703,16 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ResponseCode_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ResponseCode) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ResponseCode */
+			errn = encodeNBitUnsignedInteger(stream, 8, 162);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 5, exiFrag->ResponseCode);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->RetrievalMethod_isUsed == 1u ) { 
 			/* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 163);
@@ -13525,7 +13739,10 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->SAProvisioningCertificateChain_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SAProvisioningCertificateChain) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAProvisioningCertificateChain */
+			errn = encodeNBitUnsignedInteger(stream, 8, 166);
+			if(errn == 0) {
+				errn = encode_iso1CertificateChainType(stream, &exiFrag->SAProvisioningCertificateChain );
+			}
 		} else if ( exiFrag->SAScheduleList_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}SAScheduleList) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 167);
@@ -13540,10 +13757,28 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->SAScheduleTupleID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SAScheduleTupleID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 169);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(exiFrag->SAScheduleTupleID - 1));
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SAScheduleTupleID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}SAScheduleTupleID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SAScheduleTupleID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 170);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(exiFrag->SAScheduleTupleID - 1));
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SASchedules_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}SASchedules) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 171);
@@ -13658,10 +13893,28 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ServiceCategory_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceCategory) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+			errn = encodeNBitUnsignedInteger(stream, 8, 183);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->ServiceCategory);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceCategory_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ServiceCategory) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceCategory */
+			errn = encodeNBitUnsignedInteger(stream, 8, 184);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->ServiceCategory);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceDetailReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceDetailReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 185);
@@ -13688,10 +13941,28 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ServiceID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 189);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, exiFrag->ServiceID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ServiceID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 190);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, exiFrag->ServiceID);
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceList_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceList) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 191);
@@ -13722,16 +13993,66 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->ServiceScope_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}ServiceScope) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+			errn = encodeNBitUnsignedInteger(stream, 8, 194);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceScope.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->ServiceScope.characters, exiFrag->ServiceScope.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->ServiceScope_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}ServiceScope) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name ServiceScope */
+			errn = encodeNBitUnsignedInteger(stream, 8, 195);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[STRING]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* encode string as string table miss (+2 len)*/
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceScope.charactersLen + 2));
+					if (errn == 0) {
+						errn = encodeCharacters(stream, exiFrag->ServiceScope.characters, exiFrag->ServiceScope.charactersLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SessionID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SessionID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 196);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SessionID.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->SessionID.bytes, exiFrag->SessionID.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SessionID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgHeader}SessionID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name SessionID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 197);
+			if(errn == 0) {
+				/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SessionID.bytesLen));
+					if (errn == 0) {
+						errn = encodeBytes(stream, exiFrag->SessionID.bytes, exiFrag->SessionID.bytesLen);
+					}
+					/* valid EE */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				}
+			}
 		} else if ( exiFrag->SessionSetupReq_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}SessionSetupReq) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 198);
@@ -14097,7 +14418,10 @@ int encode_iso1ExiFragment(bitstream_t* stream, struct iso1EXIFragment* exiFrag)
 			}
 		} else if ( exiFrag->eMAID_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgBody}eMAID) */
-			errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; /* overlapping name eMAID */
+			errn = encodeNBitUnsignedInteger(stream, 8, 236);
+			if(errn == 0) {
+				errn = encode_iso1EMAIDType(stream, &exiFrag->eMAID );
+			}
 		} else if ( exiFrag->intValue_isUsed == 1u ) { 
 			/* START_ELEMENT({urn:iso:15118:2:2013:MsgDataTypes}intValue) */
 			errn = encodeNBitUnsignedInteger(stream, 8, 237);

+ 1 - 1
src/iso1/iso1EXIDatatypesEncoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-19 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 1 - 1
src/iso2/iso2EXIDatatypes.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

+ 1 - 1
src/iso2/iso2EXIDatatypes.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

File diff suppressed because it is too large
+ 500 - 89
src/iso2/iso2EXIDatatypesDecoder.c


+ 1 - 1
src/iso2/iso2EXIDatatypesDecoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

File diff suppressed because it is too large
+ 550 - 89
src/iso2/iso2EXIDatatypesEncoder.c


+ 1 - 1
src/iso2/iso2EXIDatatypesEncoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 2017-09-26 
+ * @version 2017-11-16 
  * @contact Richard.Kuntschke@siemens.com
  *
  * <p>Code generated by EXIdizer</p>

Some files were not shown because too many files changed in this diff