diff --git a/.cproject b/.cproject
index 418178e..691cbe6 100644
--- a/.cproject
+++ b/.cproject
@@ -5,1121 +5,623 @@
Code generated by EXISeGen
@@ -32,12 +32,16 @@ #include "appHand_service.h" #include "appHand_dataTypes.h" #include "EXITypes.h" - #include "appHand_EXIDecoder.h" + #include "appHandEXIDecoder.h" + #include "appHandEXIEncoder.h" #include "StringTable.h" + #include "appHandQNameDefines.h" #includeCode generated by EXISeGen
+ * + ********************************************************************/ + + +#include "appHand_service.h" +#include "appHand_dataTypes.h" +#include "EXITypes.h" +#include "StringTable.h" +#include "appHandEXIEncoder.h" +#include "appHandQNameDefines.h" +#includeCode generated by EXISeGen
+ * + ********************************************************************/ + + +#include "EXITypes.h" +#include "appHand_dataTypes.h" + + +static void init_protocolNamespaceType(struct protocolNamespaceType* type) +{ + type->arraylen.data=0; + +} + +static void init_AppProtocolType(struct AppProtocolType* type) +{ + init_protocolNamespaceType(&(type->ProtocolNamespace)); + +} + +void init_AnonType_supportedAppProtocolReq(struct AnonType_supportedAppProtocolReq* type) +{ + int i_loop; + + for(i_loop=0; i_loop<20;i_loop++) + { + init_AppProtocolType(&(type->AppProtocol[i_loop])); + } + + type->arraylen.AppProtocol=0; + +} + +void init_AnonType_supportedAppProtocolRes(struct AnonType_supportedAppProtocolRes* type) +{ + type->isused.SchemaID=0; + +} + +void init_EXIDocumentType_appHand(struct EXIDocumentType_appHand* type) +{ + type->isused.supportedAppProtocolReq=0; + type->isused.supportedAppProtocolRes=0; + +} diff --git a/src/appHandshake/appHand_dataTypes.h b/src/appHandshake/appHand_dataTypes.h new file mode 100644 index 0000000..a66fedb --- /dev/null +++ b/src/appHandshake/appHand_dataTypes.h @@ -0,0 +1,133 @@ + +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXISeGen
+ * + ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef APPHANDDATATYPES_H +#define APPHANDDATATYPES_H + +#include "EXITypes.h" + + + + +enum responseCodeType_appHand +{ + OK_SuccessfulNegotiation_responseCodeType=0, + OK_SuccessfulNegotiationWithMinorDeviation_responseCodeType=1, + Failed_NoNegotiation_responseCodeType=2 + +}; + + + + +struct arraylen_protocolNamespaceType +{ + size_t data; + + +}; + +struct protocolNamespaceType +{ + uint32_t data[100]; + struct arraylen_protocolNamespaceType arraylen; + +}; + +struct AppProtocolType +{ + struct protocolNamespaceType ProtocolNamespace; + uint32_t VersionNumberMajor; + uint32_t VersionNumberMinor; + uint8_t SchemaID; + uint8_t Priority; + + +}; + +struct arraylen_AnonType_supportedAppProtocolReq +{ + size_t AppProtocol; + + +}; + +struct AnonType_supportedAppProtocolReq +{ + struct AppProtocolType AppProtocol[20]; + struct arraylen_AnonType_supportedAppProtocolReq arraylen; + +}; + +struct selection_EXIDocumentType_appHand +{ + unsigned int supportedAppProtocolReq:1; + unsigned int supportedAppProtocolRes:1; + + +}; + +struct selection_AnonType_supportedAppProtocolRes +{ + unsigned int SchemaID:1; + + +}; + +struct AnonType_supportedAppProtocolRes +{ + enum responseCodeType_appHand ResponseCode; + uint8_t SchemaID; + struct selection_AnonType_supportedAppProtocolRes isused; + +}; + +struct EXIDocumentType_appHand +{ + struct AnonType_supportedAppProtocolReq* supportedAppProtocolReq; + struct AnonType_supportedAppProtocolRes* supportedAppProtocolRes; + struct selection_EXIDocumentType_appHand isused; + +}; + + +void init_EXIDocumentType_appHand(struct EXIDocumentType_appHand* type); +void init_AnonType_supportedAppProtocolRes(struct AnonType_supportedAppProtocolRes* type); +void init_AnonType_supportedAppProtocolReq(struct AnonType_supportedAppProtocolReq* type); + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/service/v2g_service.h b/src/appHandshake/appHand_service.h similarity index 60% rename from src/service/v2g_service.h rename to src/appHandshake/appHand_service.h index 3d9c033..454a131 100644 --- a/src/service/v2g_service.h +++ b/src/appHandshake/appHand_service.h @@ -18,7 +18,7 @@ /******************************************************************* * * @author Sebastian.Kaebisch.EXT@siemens.com - * @version 0.6 + * @version 0.7 * @contact Joerg.Heuer@siemens.com * ********************************************************************/ @@ -27,20 +27,19 @@ extern "C" { #endif -#ifndef EXI_SERVICE_H_ -#define EXI_SERVICE_H_ +#ifndef EXI_DATABINDER_H_ +#define EXI_DATABINDER_H_ -#include "v2g_serviceDataTypes.h" -#include "EXITypes.h" +#include "appHand_dataTypes.h" -struct uniqueIDPath +struct uniqueIDPath2 { int id[10]; size_t pos; }; -struct EXIService +struct EXIDatabinder { /* in-/ out-stream */ bitstream_t inStream; @@ -50,30 +49,38 @@ struct EXIService exi_state_t stateDecode; exi_state_t stateEncode; exi_event_t event; - eqname_t eqn; exi_value_t val; + uint16_t qnameID; - /* v2g message data structure */ - struct EXIDocumentType exiMsg; + /* main message data structure */ + struct EXIDocumentType_appHand exiMsg; /* unique id for ambiguous elements */ - struct uniqueIDPath idPath; + struct uniqueIDPath2 idPath; + + uint16_t transportHeaderOffset; /* error code */ uint8_t errorCode; - - /* offset for transported header data */ - uint16_t transportHeaderOffset; }; -/* define error codes (TODO: define precise error codes) */ +int serialize_appHand(struct EXIDatabinder* service, uint8_t* outStream, size_t* payloadLength, struct EXIDocumentType_appHand* exiDoc); +int deserialize_appHand(struct EXIDatabinder* service, uint8_t* inStream, uint16_t sizeInStream, struct EXIDocumentType_appHand* exiDoc); +int init_appHandSerializer(struct EXIDatabinder* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, size_t max_outStream_size, uint16_t transportHeaderOffset); +int init_appHandDeserializer(struct EXIDatabinder* service, exi_bytes_t bytes, exi_string_ucs_t string, uint16_t transportHeaderOffset); + + + +/* define error codes */ #define EXI_NON_VALID_MESSAGE 0x01 #define EXI_SERIALIZATION_FAILED 0x02 #define EXI_DESERIALIZATION_FAILED 0x03 +#define EXI_DATATYPE_FAILED 0x04 +#define EXI_VALUE_RANGE_FAILED 0x05 #define EXI_UNKNOWN_ERROR 0xFF -#endif /* EXI_SERVICE_H_ */ +#endif /* EXI_DATABINDER_H_ */ #ifdef __cplusplus } diff --git a/src/codec/AbstractDecoderChannel.c b/src/codec/AbstractDecoderChannel.c new file mode 100644 index 0000000..75d9a62 --- /dev/null +++ b/src/codec/AbstractDecoderChannel.c @@ -0,0 +1,699 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "DecoderChannel.h" +#include "CoderChannel.h" +#include "BitInputStream.h" +#include "EXIOptions.h" +#include "EXITypes.h" +#include "MethodsBag.h" +#include "EXICoder.h" +#include "ErrorCodes.h" + + +#ifndef ABSTRACT_DECODER_CHANNEL_C +#define ABSTRACT_DECODER_CHANNEL_C + +/* unsigned long == 64 bits, 10 * 7bits = 70 bits */ +#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_64 10 +/* unsigned int == 32 bits, 5 * 7bits = 35 bits */ +#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_32 5 + +/* buffer for reading (arbitrary) large integer values */ +static uint8_t maskedOctets[MAX_OCTETS_FOR_UNSIGNED_INTEGER_64]; + + +static int _decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv, int negative) { + int errn = 0; + int i, k; + uint8_t b; + + for (i = 0; i < MAX_OCTETS_FOR_UNSIGNED_INTEGER_64; i++) { + /* Read the next octet */ + errn = decode(stream, &b); + /* If the most significant bit of the octet was 1, + another octet is going to come */ + if (b < 128) { + /* no more octets */ + + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + + switch(i) { + case 0: /* 7 bits */ + if (negative) { + iv->val.int8 = - ( b + 1); + iv->type = EXI_INTEGER_8; + } else { + iv->val.uint8 = b; + iv->type = EXI_UNSIGNED_INTEGER_8; + } + return 0; + case 1: /* 14 bits */ + maskedOctets[i] = b; + iv->val.uint16 = 0; + for (k = i; k >= 0 ; k--) { + iv->val.uint16 = (iv->val.uint16 << 7) | maskedOctets[k]; + } + if (negative) { + iv->val.int16 = - ( iv->val.uint16 + 1 ); + iv->type = EXI_INTEGER_16; + } else { + iv->type = EXI_UNSIGNED_INTEGER_16; + } + return 0; + case 2: /* 21 bits */ + case 3: /* 28 bits */ + maskedOctets[i] = b; + iv->val.uint32 = 0; + for (k = i; k >= 0 ; k--) { + iv->val.uint32 = (iv->val.uint32 << 7) | maskedOctets[k]; + } + if (negative) { + iv->val.int32 = (-1) * ( iv->val.uint32 + 1 ); + if (iv->val.int32 <= INT16_MAX && iv->val.int32 >= INT16_MIN ) { + iv->type = EXI_INTEGER_16; + } else { + iv->type = EXI_INTEGER_32; + } + } else { + if (iv->val.uint32 <= UINT16_MAX) { + iv->type = EXI_UNSIGNED_INTEGER_16; + } else { + iv->type = EXI_UNSIGNED_INTEGER_32; + } + } + return 0; + case 4: /* 35 bits */ + case 5: /* 42 bits */ + case 6: /* 49 bits */ + case 7: /* 56 bits */ + case 8: /* 63 bits */ + case 9: /* 70 bits */ + maskedOctets[i] = b; + iv->val.uint64 = 0; + for (k = i; k >= 0 ; k--) { + iv->val.uint64 = (iv->val.uint64 << 7) | maskedOctets[k]; + } + if (negative) { + if (i > 8) { + /* too large */ + return EXI_UNSUPPORTED_INTEGER_VALUE; + } + iv->val.int64 = (-1) * ( iv->val.uint64 + 1 ); + if (iv->val.int64 <= INT32_MAX && iv->val.int64 >= INT32_MIN ) { + iv->type = EXI_INTEGER_32; + } else { + iv->type = EXI_INTEGER_64; + } + } else { + if (iv->val.uint64 <= UINT32_MAX) { + iv->type = EXI_UNSIGNED_INTEGER_32; + /* iv->val.uint32 = iv->val.uint64;*/ + } else { + iv->type = EXI_UNSIGNED_INTEGER_64; + } + } + return 0; + default: + return EXI_UNSUPPORTED_INTEGER_VALUE; + } + } else { + /* the 7 least significant bits hold the actual value */ + maskedOctets[i] = (b & 127); + } + } + + + return EXI_UNSUPPORTED_INTEGER_VALUE; +} + +int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) { + return _decodeUnsignedInteger(stream, iv, 0); +} + +int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16) { + unsigned int mShift = 0; + int errn = 0; + uint8_t b; + *uint16 = 0; + + do { + /* 1. Read the next octet */ + errn = decode(stream, &b); + /* 2. Multiply the value of the unsigned number represented by the 7 + * least significant + * bits of the octet by the current multiplier and add the result to + * the current value */ + *uint16 += (b & 127) << mShift; + /* 3. Multiply the multiplier by 128 */ + mShift += 7; + /* 4. If the most significant bit of the octet was 1, go back to step 1 */ + } while (errn >= 0 && (b >> 7) == 1); + + return errn; +} + +int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32) { + /* 0XXXXXXX ... 1XXXXXXX 1XXXXXXX */ + unsigned int mShift = 0; + int errn = 0; + uint8_t b; + *uint32 = 0; + + do { + /* 1. Read the next octet */ + errn = decode(stream, &b); + /* 2. Multiply the value of the unsigned number represented by the 7 + * least significant + * bits of the octet by the current multiplier and add the result to + * the current value */ + *uint32 += (b & 127) << mShift; + /* 3. Multiply the multiplier by 128 */ + mShift += 7; + /* 4. If the most significant bit of the octet was 1, go back to step 1 */ + } while (errn >= 0 && (b >> 7) == 1); + + return errn; +} + +/** + * Decode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64) { + unsigned int mShift = 0; + int errn = 0; + uint8_t b; + *uint64 = 0L; + + do { + errn = decode(stream, &b); + *uint64 += ((uint64_t) (b & 127)) << mShift; + mShift += 7; + } while (errn >= 0 && (b >> 7) == 1); + + return errn; +} + + +int decodeInteger(bitstream_t* stream, exi_integer_t* iv) { + int b; + int errn = decodeBoolean(stream, &b); + if (errn < 0) { + return errn; + } + + return _decodeUnsignedInteger(stream, iv, b); +} + + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeInteger16(bitstream_t* stream, int16_t* int16) { + int b; + uint16_t uint16; + int errn = decodeBoolean(stream, &b); + + if (errn < 0) { + return errn; + } + + if (b) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + errn = decodeUnsignedInteger16(stream, &uint16); + *int16 = -(uint16 + 1); + } else { + /* positive */ + errn = decodeUnsignedInteger16(stream, &uint16); + *int16 = (int16_t)(uint16); + } + + return errn; +} + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeInteger32(bitstream_t* stream, int32_t* int32) { + int b; + uint32_t uint32; + int errn = decodeBoolean(stream, &b); + + if (errn < 0) { + return errn; + } + + if (b) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + errn = decodeUnsignedInteger32(stream, &uint32); + *int32 = (-1) * (uint32 + 1); + } else { + /* positive */ + errn = decodeUnsignedInteger32(stream, &uint32); + *int32 = (int32_t)(uint32); + } + + return errn; +} + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeInteger64(bitstream_t* stream, int64_t* int64) { + int b; + uint64_t uint64; + int errn = decodeBoolean(stream, &b); + + if (errn < 0) { + return errn; + } + + if (b) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + errn = decodeUnsignedInteger64(stream, &uint64); + *int64 = (-1) * (uint64 + 1); + } else { + /* positive */ + errn = decodeUnsignedInteger64(stream, &uint64); + *int64 = (int64_t)(uint64); + } + + return errn; +} + +/** + * Decode a Float datatype as two consecutive Integers. + * The first Integer represents the mantissa of the floating point + * number and the second Integer represents the base-10 exponent + * of the floating point number. + */ +int decodeFloat(bitstream_t* stream, exi_float_me_t* f) { + int errn = decodeInteger64(stream, &f->mantissa); + if (errn < 0) { + return errn; + } + return decodeInteger16(stream, &f->exponent); +} + +/** + * Decode a decimal represented as a Boolean sign followed by two Unsigned + * Integers. A sign value of zero (0) is used to represent positive Decimal + * values and a sign value of one (1) is used to represent negative Decimal + * values The first Integer represents the integral portion of the Decimal + * value. The second positive integer represents the fractional portion of + * the decimal with the digits in reverse order to preserve leading zeros. + */ +int decodeDecimal(bitstream_t* stream, exi_decimal_t* d) { + int errn = decodeBoolean(stream, &d->negative); + if (errn < 0) { + return errn; + } + errn = decodeUnsignedInteger(stream, &d->integral); + if (errn < 0) { + return errn; + } + errn = decodeUnsignedInteger(stream, &d->reverseFraction); + + return errn; +} + +/** + * Decode a sequence of characters for a given length. + */ +int decodeStringOnly(bitstream_t* stream, uint16_t len, exi_string_ucs_t* s) { + int errn; + if (len > s->size) { + /* not enough space */ + return EXI_ERROR_OUT_OF_STRING_BUFFER; + } + errn = decodeCharacters(stream, len, s->codepoints); + s->len = len; + return errn; +} + +/** + * Decode a length prefixed sequence of characters. + */ +int decodeString(bitstream_t* stream, exi_string_ucs_t* s) { + int errn = decodeUnsignedInteger16(stream, &s->len); + if (errn < 0) { + return errn; + } + return decodeStringOnly(stream, s->len, s); +} + +/* +int decodeStringASCII(bitstream_t* stream, exi_string_ascii_t* s) { + uint16_t slen; + int errn = decodeUnsignedInteger16(stream, &slen); + if (errn < 0) { + return errn; + } + if (s->size < slen) { + return EXI_ERROR_OUT_OF_ASCII_BUFFER; + } + + return decodeCharactersASCII(stream, slen, s->chars); +} +*/ + + + +static int _readStringValueLocalHit(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, uint32_t* localID) { + int errn; + uint16_t codingLength; + + if(!(state->stringTable.sizeLocalStrings > qnameID)) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + + errn = exiGetCodingLength(state->stringTable.numberOfLocalStrings[qnameID], &codingLength); + if(errn) { + return errn; + } + errn = decodeNBitUnsignedInteger(stream, codingLength, localID); + + return errn; +} + + +static int _readStringValueGlobalHit(bitstream_t* stream, exi_state_t* state, uint32_t* globalID) { + int errn; + uint16_t codingLength; + + errn = exiGetCodingLength(state->stringTable.numberOfGlobalStrings, &codingLength); + if(errn) { + return errn; + } + errn = decodeNBitUnsignedInteger(stream, codingLength, globalID); + + return errn; +} + +int decodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_string_value_t* s) { + uint16_t L; + int errn = decodeUnsignedInteger16(stream, &L); + if (errn < 0) { + return errn; + } + + switch (L) { + case 0: + /* local value partition */ + s->type = EXI_STRING_VALUE_LOCAL_HIT; + errn = _readStringValueLocalHit(stream, state, qnameID, &s->localID); + break; + case 1: + /* found in global value partition */ + s->type = EXI_STRING_VALUE_GLOBAL_HIT; + errn = _readStringValueGlobalHit(stream, state, &s->globalID); + break; + default: + /* not found in global value (and local value) partition + * ==> string literal is encoded as a String with the length + * incremented by two */ + s->type = EXI_STRING_VALUE_MISS; + s->miss.len = L = L - 2; + errn = decodeStringOnly(stream, L, &(s->miss)); + if(errn) { + return errn; + } +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + /* If length L is greater than zero the string S is added */ + if(L > 0) { + /* After encoding the string value, it is added to both the + * associated "local" value string table partition and the global + * value string table partition */ +#if EXI_VALUE_MAX_LENGTH < 0 + errn = exi__IncrementStringValueCount(state, qnameID); +# else /* EXI_VALUE_MAX_LENGTH < 0 */ + if (L <= EXI_VALUE_MAX_LENGTH) { + errn = exi__IncrementStringValueCount(state, qnameID); + } +#endif /* EXI_VALUE_MAX_LENGTH < 0 */ + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + break; + } + + return errn; +} + +int decodeRCSStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* s) { + unsigned int i; + uint32_t cp; + uint16_t L; + int errn = decodeUnsignedInteger16(stream, &L); + if (errn < 0) { + return errn; + } + + switch (L) { + case 0: + /* local value partition */ + s->type = EXI_STRING_VALUE_LOCAL_HIT; + errn = _readStringValueLocalHit(stream, state, qnameID, &s->localID); + break; + case 1: + /* found in global value partition */ + s->type = EXI_STRING_VALUE_GLOBAL_HIT; + errn = _readStringValueGlobalHit(stream, state, &s->globalID); + break; + default: + /* not found in global value (and local value) partition + * ==> string literal is encoded as a String with the length + * incremented by two */ + s->type = EXI_STRING_VALUE_MISS; + s->miss.len = L = L - 2; + + if (L > s->miss.size) { + /* not enough space */ + return EXI_ERROR_OUT_OF_STRING_BUFFER; + } + + for (i = 0; i < L && errn >= 0; i++) { + errn = decodeNBitUnsignedInteger(stream, rcs->codingLength, &cp); + if (errn) { + return errn; + } + s->miss.codepoints[i] = rcs->codepoints[cp]; + } +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + /* If length L is greater than zero the string S is added */ + if(L > 0) { + /* After encoding the string value, it is added to both the + * associated "local" value string table partition and the global + * value string table partition */ +#if EXI_VALUE_MAX_LENGTH < 0 + errn = exi__IncrementStringValueCount(state, qnameID); +# else /* EXI_VALUE_MAX_LENGTH < 0 */ + if (L <= EXI_VALUE_MAX_LENGTH) { + errn = exi__IncrementStringValueCount(state, qnameID); + } +#endif /* EXI_VALUE_MAX_LENGTH < 0 */ + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + break; + } + + return errn; +} + +/** + * Decode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer + */ +int decodeCharacters(bitstream_t* stream, uint16_t len, uint32_t* chars) { + unsigned int i; + int errn = 0; + for (i = 0; i < len && errn >= 0; i++) { + errn = decodeUnsignedInteger32(stream, &chars[i]); + if (errn < 0) { + return errn; + } + } + + return errn; +} + +/* +int decodeCharactersASCII(bitstream_t* stream, uint16_t len, char* chars) { + unsigned int i; + uint32_t c; + int errn = 0; + for (i = 0; i < len && errn >= 0; i++) { + errn = decodeUnsignedInteger32(stream, &c); + if (errn < 0) { + return errn; + } + if (c > 127) { + return EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS; + } + chars[i] = c; + } + chars[i] = '\0'; + + return errn; +} +*/ + + +/** + * Decode a binary value as a length-prefixed sequence of octets. + */ +int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes) { + unsigned int i; + uint8_t b; + int errn = decodeUnsignedInteger16(stream, &bytes->len); + if (errn < 0) { + return errn; + } + if (bytes->len > bytes->size) { + /* not enough space */ + return EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + + for (i = 0; i < bytes->len && errn >= 0; i++) { + errn = decode(stream, &b); + if (errn < 0) { + return errn; + } + bytes->data[i] = (uint8_t)b; + } + + return errn; +} + +/** + * Decode Date-Time as sequence of values representing the individual + * components of the Date-Time. + */ +int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime) { + int errn; + + datetime->type = type; + + datetime->year = 0; + datetime->monthDay = 0; + datetime->time = 0; + datetime->presenceFractionalSecs = 0; + datetime->fractionalSecs = 0; + datetime->presenceTimezone = 0; + datetime->timezone = 0; + + switch (type) { + case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */ + errn = decodeInteger32(stream, &datetime->year); + if (errn < 0) { + return errn; + } + datetime->year += DATETIME_YEAR_OFFSET; + break; + case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */ + case EXI_DATETIME_DATE: + errn = decodeInteger32(stream, &datetime->year); + if (errn < 0) { + return errn; + } + datetime->year += DATETIME_YEAR_OFFSET; + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay); + break; + case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */ + /* e.g. "0001-01-01T00:00:00.111+00:33" */ + errn = decodeInteger32(stream, &datetime->year); + if (errn < 0) { + return errn; + } + datetime->year += DATETIME_YEAR_OFFSET; + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay); + if (errn < 0) { + return errn; + } + /* no break */ + case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */ + /* e.g. "12:34:56.135" */ + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, &datetime->time); + if (errn < 0) { + return errn; + } + errn = decodeBoolean(stream, &datetime->presenceFractionalSecs); + if (errn < 0) { + return errn; + } + if (datetime->presenceFractionalSecs) { + errn = decodeUnsignedInteger32(stream, &datetime->fractionalSecs); + } + break; + case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */ + /* e.g. "--12" */ + case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */ + /* e.g. "--01-28" */ + case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */ + /* "---16" */ + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay ); + break; + default: + return -1; + } + + errn = decodeBoolean(stream, &datetime->presenceTimezone ); + if (errn < 0) { + return errn; + } + if (datetime->presenceTimezone) { + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, &datetime->timezone); + datetime->timezone -= DATETIME_TIMEZONE_OFFSET_IN_MINUTES; + } + + return errn; +} + +#endif + diff --git a/src/codec/AbstractEncoderChannel.c b/src/codec/AbstractEncoderChannel.c new file mode 100644 index 0000000..66234de --- /dev/null +++ b/src/codec/AbstractEncoderChannel.c @@ -0,0 +1,573 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "EncoderChannel.h" +#include "CoderChannel.h" +#include "BitOutputStream.h" +#include "EXIOptions.h" +#include "EXITypes.h" +#include "ErrorCodes.h" +#include "MethodsBag.h" +#include "EXICoder.h" + +#ifndef ABSTRACT_ENCODER_CHANNEL_C +#define ABSTRACT_ENCODER_CHANNEL_C + +int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) { + int errn = 0; + switch (iv->type) { + /* Unsigned Integer */ + case EXI_UNSIGNED_INTEGER_8: + errn = encodeUnsignedInteger32(stream, iv->val.uint8); + break; + case EXI_UNSIGNED_INTEGER_16: + errn = encodeUnsignedInteger32(stream, iv->val.uint16); + break; + case EXI_UNSIGNED_INTEGER_32: + errn = encodeUnsignedInteger32(stream, iv->val.uint32); + break; + case EXI_UNSIGNED_INTEGER_64: + errn = encodeUnsignedInteger64(stream, iv->val.uint64); + break; + /* (Signed) Integer */ + case EXI_INTEGER_8: + if (iv->val.int8 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger32(stream, iv->val.int8); + break; + case EXI_INTEGER_16: + if (iv->val.int16 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger32(stream, iv->val.int16); + break; + case EXI_INTEGER_32: + if (iv->val.int32 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger32(stream, iv->val.int32); + break; + case EXI_INTEGER_64: + if (iv->val.int64 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger64(stream, iv->val.int64); + break; + default: + errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE; + break; + } + + return errn; +} + +/** + * Encode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n) { + int errn = 0; + if (n < 128) { + /* write byte as is */ + errn = encode(stream, (uint8_t) n); + } else { + uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n); + + switch (n7BitBlocks) { + case 5: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn < 0) { + break; + } + /* no break */ + case 4: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn < 0) { + break; + } + /* no break */ + case 3: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn < 0) { + break; + } + /* no break */ + case 2: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn < 0) { + break; + } + /* no break */ + case 1: + /* 0 .. 7 (last byte) */ + errn = encode(stream, (uint8_t) (0 | n)); + /* no break */ + } + } + + return errn; +} + +/** + * Encode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n) { + int errn = 0; + uint8_t lastEncode = (uint8_t) n; + n >>= 7; + + while (n != 0) { + errn = encode(stream, lastEncode | 128); + if (errn < 0) { + return errn; + } + lastEncode = (uint8_t) n; + n >>= 7; + } + + return encode(stream, lastEncode); +} + +int encodeInteger(bitstream_t* stream, exi_integer_t* iv) { + int errn = 0; + switch (iv->type) { + /* Unsigned Integer */ + case EXI_UNSIGNED_INTEGER_8: + errn = encodeInteger32(stream, iv->val.uint8); + break; + case EXI_UNSIGNED_INTEGER_16: + errn = encodeInteger32(stream, iv->val.uint16); + break; + case EXI_UNSIGNED_INTEGER_32: + errn = encodeInteger64(stream, iv->val.uint32); + break; + case EXI_UNSIGNED_INTEGER_64: + errn = encodeInteger64(stream, iv->val.uint64); + break; + /* (Signed) Integer */ + case EXI_INTEGER_8: + errn = encodeInteger32(stream, iv->val.int8); + break; + case EXI_INTEGER_16: + errn = encodeInteger32(stream, iv->val.int16); + break; + case EXI_INTEGER_32: + errn = encodeInteger32(stream, iv->val.int32); + break; + case EXI_INTEGER_64: + errn = encodeInteger64(stream, iv->val.int64); + break; + default: + errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE; + break; + } + + return errn; +} + +/** + * Encode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int encodeInteger32(bitstream_t* stream, int32_t n) { + int errn; + /* signalize sign */ + if (n < 0) { + errn = encodeBoolean(stream, 1); + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + n = (-n) - 1; + } else { + errn = encodeBoolean(stream, 0); + } + if (errn < 0) { + return errn; + } + return encodeUnsignedInteger32(stream, n); +} + +/** + * Encode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int encodeInteger64(bitstream_t* stream, int64_t n) { + int errn; + /* signalize sign */ + if (n < 0) { + errn = encodeBoolean(stream, 1); + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + n = (-n) - 1; + } else { + errn = encodeBoolean(stream, 0); + } + if (errn < 0) { + return errn; + } + return encodeUnsignedInteger64(stream, n); +} + +/** + * The Float datatype representation is two consecutive Integers. + * The first Integer represents the mantissa of the floating point + * number and the second Integer represents the base-10 exponent + * of the floating point number. + */ +int encodeFloat(bitstream_t* stream, exi_float_me_t* f) { + int errn = encodeInteger64(stream, f->mantissa); + if (errn >= 0) { + errn = encodeInteger32(stream, f->exponent); + } + return errn; +} + +/** + * Encode a decimal represented as a Boolean sign followed by two Unsigned + * Integers. A sign value of zero (0) is used to represent positive Decimal + * values and a sign value of one (1) is used to represent negative Decimal + * values The first Integer represents the integral portion of the Decimal + * value. The second positive integer represents the fractional portion of + * the decimal with the digits in reverse order to preserve leading zeros. + */ +int encodeDecimal(bitstream_t* stream, exi_decimal_t* d) { + /* sign, integral, reverse fractional */ + int errn = encodeBoolean(stream, d->negative); + if (errn < 0) { + return errn; + } + errn = encodeUnsignedInteger(stream, &d->integral); + if (errn < 0) { + return errn; + } + errn = encodeUnsignedInteger(stream, &d->reverseFraction); + + return errn; +} + +/** + * Encode a length prefixed sequence of characters. + */ +/*int encodeASCII(bitstream_t* stream, const char* ascii) { + int errn; + uint32_t slen = (uint32_t) strlen(ascii); + errn = encodeUnsignedInteger32(stream, slen); + if (errn >= 0) { + errn = encodeASCIICharacters(stream, ascii, slen); + } + return errn; + }*/ + +int encodeString(bitstream_t* stream, exi_string_ucs_t* string) { + int errn = encodeUnsignedInteger32(stream, string->len); + if (errn >= 0) { + errn = encodeUCSCharacters(stream, string->codepoints, string->len); + } + return errn; +} + +static int _writeStringValueLocalHit(bitstream_t* stream, exi_state_t* state, + uint16_t qnameID, uint32_t localID) { + int errn; + uint16_t codingLength; + + if(!(state->stringTable.sizeLocalStrings > qnameID)) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + + errn = exiGetCodingLength(state->stringTable.numberOfLocalStrings[qnameID], + &codingLength); + if (errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, codingLength, localID); + + return errn; +} + +static int _writeStringValueGlobalHit(bitstream_t* stream, exi_state_t* state, + uint32_t globalID) { + int errn; + uint16_t codingLength; + + errn = exiGetCodingLength(state->stringTable.numberOfGlobalStrings, &codingLength); + if (errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, codingLength, globalID); + + return errn; +} + +int encodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_string_value_t* string) { + int errn; + + switch (string->type) { + case EXI_STRING_VALUE_LOCAL_HIT: + errn = encodeUnsignedInteger32(stream, 0); + if (errn) { + return errn; + } + errn = _writeStringValueLocalHit(stream, state, qnameID, + string->localID); + break; + case EXI_STRING_VALUE_GLOBAL_HIT: + errn = encodeUnsignedInteger32(stream, 1); + if (errn) { + return errn; + } + errn = _writeStringValueGlobalHit(stream, state, string->globalID); + break; + case EXI_STRING_VALUE_MISS: + /* encode string as string table miss */ + errn = encodeUnsignedInteger32(stream, string->miss.len + 2); + if (errn >= 0) { + errn = encodeUCSCharacters(stream, string->miss.codepoints, + string->miss.len); + } +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + /* If length L is greater than zero the string S is added */ + if (string->miss.len > 0) { + /* After encoding the string value, it is added to both the + * associated "local" value string table partition and the global + * value string table partition */ +#if EXI_VALUE_MAX_LENGTH < 0 + errn = exi__IncrementStringValueCount(state, qnameID); +# else /* EXI_VALUE_MAX_LENGTH < 0 */ + if (string->miss.len <= EXI_VALUE_MAX_LENGTH) { + errn = exi__IncrementStringValueCount(state, + qnameID); + } +#endif /* EXI_VALUE_MAX_LENGTH < 0 */ + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + break; + default: + errn = EXI_UNSUPPORTED_STRING_VALUE_TYPE; + break; + } + + return errn; +} + +int encodeRCSStringValue(bitstream_t* stream, exi_state_t* state, + uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* string) { + unsigned int i; + int errn; + uint32_t k; + + switch (string->type) { + case EXI_STRING_VALUE_LOCAL_HIT: + errn = encodeUnsignedInteger32(stream, 0); + if (errn) { + return errn; + } + errn = _writeStringValueLocalHit(stream, state, qnameID, + string->localID); + break; + case EXI_STRING_VALUE_GLOBAL_HIT: + errn = encodeUnsignedInteger32(stream, 1); + if (errn) { + return errn; + } + errn = _writeStringValueGlobalHit(stream, state, string->globalID); + break; + case EXI_STRING_VALUE_MISS: + /* encode string as string table miss */ + errn = encodeUnsignedInteger32(stream, string->miss.len + 2); + if (errn) { + return errn; + } + + for (i = 0; i < string->miss.len; i++) { + for (k = 0; k < rcs->size; k++) { + if (rcs->codepoints[k] == string->miss.codepoints[i]) { + errn = encodeNBitUnsignedInteger(stream, rcs->codingLength, + k); + if (errn) { + return errn; + } + break; /* break inner for loop */ + } + } + } +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + /* If length L is greater than zero the string S is added */ + if (string->miss.len > 0) { + /* After encoding the string value, it is added to both the + * associated "local" value string table partition and the global + * value string table partition */ +#if EXI_VALUE_MAX_LENGTH < 0 + errn = exi__IncrementStringValueCount(state, qnameID); +#else /* EXI_VALUE_MAX_LENGTH < 0 */ + if (string->miss.len <= EXI_VALUE_MAX_LENGTH) { + errn = exi__IncrementStringValueCount(state, + qnameID); + } +#endif /* EXI_VALUE_MAX_LENGTH < 0 */ + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + break; + default: + errn = EXI_UNSUPPORTED_STRING_VALUE_TYPE; + break; + } + + return errn; +} + +/** + * Encode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer + */ +int encodeUCSCharacters(bitstream_t* stream, uint32_t* chars, uint16_t len) { + unsigned int i; + int errn = 0; + for (i = 0; i < len && errn >= 0; i++) { + errn = encodeUnsignedInteger32(stream, chars[i]); + } + return errn; +} + +/*int encodeASCIICharacters(bitstream_t* stream, const char* chars, uint16_t len) { + unsigned int i; + int errn = 0; + for (i = 0; i < len && errn >= 0; i++) { + errn = encode(stream, chars[i]); + } + return errn; + }*/ + +/** + * Encode a binary value as a length-prefixed sequence of octets. + */ +int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes) { + unsigned int i; + int errn = encodeUnsignedInteger32(stream, bytes->len); + + for (i = 0; i < bytes->len && errn >= 0; i++) { + errn = encode(stream, bytes->data[i]); + } + return errn; +} + +/** + * Encode a datetime representation which is a sequence of values + * representing the individual components of the Date-Time + */ +int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime) { + int errn = 0; + switch (datetime->type) { + case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */ + errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET); + break; + case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */ + case EXI_DATETIME_DATE: /* Year, MonthDay, [TimeZone] */ + errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET); + if (errn < 0) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, + datetime->monthDay); + break; + case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */ + errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET); + if (errn < 0) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, + datetime->monthDay); + if (errn < 0) { + return errn; + } + /* no break */ + case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */ + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, + datetime->time); + if (errn < 0) { + return errn; + } + if (datetime->presenceFractionalSecs) { + encodeBoolean(stream, 1); + if (errn < 0) { + return errn; + } + encodeUnsignedInteger32(stream, datetime->fractionalSecs); + } else { + encodeBoolean(stream, 0); + } + break; + case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */ + case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */ + case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */ + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, + datetime->monthDay); + break; + default: + return EXI_UNSUPPORTED_DATETIME_TYPE; + } + if (errn < 0) { + return errn; + } + /* [TimeZone] */ + if (datetime->presenceTimezone) { + errn = encodeBoolean(stream, 1); + if (errn < 0) { + return errn; + } + encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, + datetime->timezone + DATETIME_TIMEZONE_OFFSET_IN_MINUTES); + } else { + encodeBoolean(stream, 0); + } + + return errn; +} + +#endif + diff --git a/src/codec/BitDecoderChannel.c b/src/codec/BitDecoderChannel.c new file mode 100644 index 0000000..b5a7634 --- /dev/null +++ b/src/codec/BitDecoderChannel.c @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "DecoderChannel.h" +#include "BitInputStream.h" +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BIT_DECODER_CHANNEL_C +#define BIT_DECODER_CHANNEL_C + + +#if EXI_ALIGNMENT == BIT_PACKED + +int decode(bitstream_t* stream, uint8_t* b) { + uint32_t bb; + int errn = readBits(stream, 8, &bb); + if (errn < 0) { + return errn; + } + if (bb > 256) { + return EXI_ERROR_UNEXPECTED_BYTE_VALUE; + } else { + *b = (uint8_t)bb; + } + return errn; +} + +int decodeBoolean(bitstream_t* stream, int* b) { + uint32_t ub; + int errn = readBits(stream, 1, &ub); + *b = (ub == 0) ? 0 : 1; + return errn; +} + +int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32) { + if (nbits == 0) { + *uint32 = 0; + return 0; + } else { + return readBits(stream, nbits, uint32); + } +} + +#endif + +#endif + diff --git a/src/codec/BitEncoderChannel.c b/src/codec/BitEncoderChannel.c new file mode 100644 index 0000000..83051d1 --- /dev/null +++ b/src/codec/BitEncoderChannel.c @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "EncoderChannel.h" +#include "CoderChannel.h" +#include "BitOutputStream.h" +#include "EXITypes.h" + +#ifndef BIT_ENCODER_CHANNEL_C +#define BIT_ENCODER_CHANNEL_C + +#if EXI_ALIGNMENT == BIT_PACKED + + +int encode(bitstream_t* stream, uint8_t b) { + return writeBits(stream, 8, b); +} + +/** + * Encode a single boolean value. A false value is encoded as bit 0 and true + * value is encode as bit 1. + */ +int encodeBoolean(bitstream_t* stream, int b) { + uint8_t val = b ? 1 : 0; + return writeBits(stream, 1, val); +} + + +/** + * Encode n-bit unsigned integer. The n least significant bits of parameter + * b starting with the most significant, i.e. from left to right. + */ +int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val) { + if (nbits > 0) { + return writeBits(stream, nbits, val); + } + return 0; +} + +/** + * Flush underlying bit output stream. + */ +int encodeFinish(bitstream_t* stream) { + return flush(stream); +} + + +#endif /* alignment */ + +#endif + + + + + + + + + + + + diff --git a/src/codec/BitInputStream.c b/src/codec/BitInputStream.c new file mode 100644 index 0000000..eefc3a2 --- /dev/null +++ b/src/codec/BitInputStream.c @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "BitInputStream.h" +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BIT_INPUT_STREAM_C +#define BIT_INPUT_STREAM_C + +/* internal method to (re)fill buffer */ +static int readBuffer(bitstream_t* stream) +{ + int errn = 0; + if(stream->capacity==0) + { +#if EXI_STREAM == BYTE_ARRAY + if ( (*stream->pos) < stream->size ) { + stream->buffer = stream->data[(*stream->pos)++]; + stream->capacity = BITS_IN_BYTE; + } else { + errn = EXI_ERROR_INPUT_STREAM_EOF; + } +#endif +#if EXI_STREAM == FILE_STREAM + stream->buffer = (uint8_t)(getc(stream->file)); + /* EOF cannot be used, 0xFF valid value */ + if ( feof(stream->file) || ferror(stream->file) ) { + return EXI_ERROR_INPUT_STREAM_EOF; + } + stream->capacity = BITS_IN_BYTE; +#endif + } + return errn; +} + +int readBits(bitstream_t* stream, uint16_t num_bits, uint32_t* b) +{ + int errn = readBuffer(stream); + if (errn < 0) { + return errn; + } + + /* read the bits in one step */ + if(num_bits <= stream->capacity) + { + stream->capacity -= (uint8_t)num_bits; + *b = (stream->buffer >> stream->capacity) & (0xff >> (BITS_IN_BYTE - num_bits)); + } + else + { + /* read bits as much as possible */ + *b = stream->buffer & (0xff >> (BITS_IN_BYTE - stream->capacity)); + num_bits -= stream->capacity; + stream->capacity = 0; + + /* read whole bytes */ + while(num_bits >= 8) + { + errn = readBuffer(stream); + if (errn < 0) { + return errn; + } + *b = ((*b) << BITS_IN_BYTE) | stream->buffer; + num_bits -= BITS_IN_BYTE; + stream->capacity = 0; + } + + /* read the spare bits in the buffer */ + if(num_bits>0) + { + errn = readBuffer(stream); + if (errn < 0) { + return errn; + } + *b = ((*b) << num_bits) | (stream->buffer >> (BITS_IN_BYTE - num_bits)); + stream->capacity = (uint8_t)(BITS_IN_BYTE - num_bits); + } + + } + + return errn; +} + +#endif diff --git a/src/codec/BitInputStream.h b/src/codec/BitInputStream.h new file mode 100644 index 0000000..f733c8b --- /dev/null +++ b/src/codec/BitInputStream.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file BitInputStream.h + * \brief Bit Input Stream + * + * Read bits and bytes from an underlying input stream. + * + */ + +#include "EXITypes.h" + +#ifndef BIT_INPUT_STREAM_H +#define BIT_INPUT_STREAM_H + +/** + * \brief Read bits + * + * Read the next num_bits bits and returns result an integer. + * + * \param stream Input Stream + * \param num_bits Number of bits + * \param b Integer value (out) + * \return Error-Code <> 0 + * + */ +int readBits(bitstream_t* stream, uint16_t num_bits, uint32_t* b); + + +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/BitOutputStream.c b/src/codec/BitOutputStream.c new file mode 100644 index 0000000..a80560f --- /dev/null +++ b/src/codec/BitOutputStream.c @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "BitOutputStream.h" +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BIT_OUTPUT_STREAM_C +#define BIT_OUTPUT_STREAM_C + +int writeBits(bitstream_t* stream, uint16_t nbits, uint32_t val) { + /* is there enough space in the buffer */ + if (nbits <= stream->capacity) { + /* all bits fit into the current buffer */ + stream->buffer = (stream->buffer << (nbits)) | (val & (0xff + >> (BITS_IN_BYTE - nbits))); + stream->capacity -= (uint8_t)nbits; + /* if the buffer is full write byte */ + if (stream->capacity == 0) { +#if EXI_STREAM == BYTE_ARRAY + if ((*stream->pos) >= stream->size) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } + stream->data[(*stream->pos)++] = stream->buffer; +#endif +#if EXI_STREAM == FILE_STREAM + if ( putc(stream->buffer, stream->file) == EOF ) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif + stream->capacity = BITS_IN_BYTE; + stream->buffer = 0; + } + } else { + /* the buffer is not enough + * fill the buffer */ + stream->buffer = (stream->buffer << stream->capacity) | ((val >> (nbits + - stream->capacity)) & (0xff >> (BITS_IN_BYTE + - stream->capacity))); + + nbits -= stream->capacity; +#if EXI_STREAM == BYTE_ARRAY + if ((*stream->pos) >= stream->size) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } + stream->data[(*stream->pos)++] = stream->buffer; +#endif +#if EXI_STREAM == FILE_STREAM + if ( putc(stream->buffer, stream->file) == EOF ) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif + stream->buffer = 0; + + /* write whole bytes */ + while (nbits >= BITS_IN_BYTE) { + nbits -= BITS_IN_BYTE; +#if EXI_STREAM == BYTE_ARRAY + if ((*stream->pos) >= stream->size) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } + stream->data[(*stream->pos)++] = (val >> (nbits)); +#endif +#if EXI_STREAM == FILE_STREAM + if ( putc((val >> (nbits)), stream->file) == EOF ) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif + } + + /* spared bits are kept in the buffer */ + stream->buffer = (uint8_t)val; /* Note: the high bits will be shifted out during further filling */ + stream->capacity = (uint8_t)(BITS_IN_BYTE - (nbits)); + } + + return 0; +} + +/** + * Flush output + */ +int flush(bitstream_t* stream) { + if (stream->capacity == BITS_IN_BYTE) { + /* nothing to do, no bits in buffer */ + return 0; + } else { + return writeBits(stream, stream->capacity, 0); + } +} + +#endif + diff --git a/src/codec/BitOutputStream.h b/src/codec/BitOutputStream.h new file mode 100644 index 0000000..69046db --- /dev/null +++ b/src/codec/BitOutputStream.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file BitOutputStream.h + * \brief Bit Output Stream + * + * Write bits and bytes to an underlying output stream. + * + */ + +#includeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "DecoderChannel.h" +#include "CoderChannel.h" +#include "BitInputStream.h" +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BYTE_DECODER_CHANNEL_C +#define BYTE_DECODER_CHANNEL_C + + +#if EXI_ALIGNMENT == BYTE_ALIGNMENT + +int decode(bitstream_t* stream, uint8_t* b) { + int errn = 0; +#if EXI_STREAM == BYTE_ARRAY + if ( (*stream->pos) < stream->size ) { + *b = stream->data[(*stream->pos)++]; + } else { + errn = EXI_ERROR_INPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == BYTE_ARRAY */ +#if EXI_STREAM == FILE_STREAM + *b = (uint8_t)(getc(stream->file)); + /* EOF cannot be used, 0xFF valid value */ + if ( feof(stream->file) || ferror(stream->file) ) { + return EXI_ERROR_INPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == FILE_STREAM */ + + return errn; +} + +int decodeBoolean(bitstream_t* stream, int* b) { + uint8_t bb; + int errn = decode(stream, &bb); + *b = (bb == 0) ? 0 : 1; + return errn; +} + +/** + * Decodes and returns an n-bit unsigned integer using the minimum number of + * bytes required for n bits. + */ +int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32) { + uint16_t bitsRead = 0; + uint8_t b; + int errn = 0; + *uint32 = 0; + + while (bitsRead < nbits) { + errn = decode(stream, &b); + if (errn != 0) { + return errn; + } + *uint32 += (b << bitsRead); + bitsRead += 8; + } + + return errn; +} + +#endif + +#endif + diff --git a/src/codec/ByteEncoderChannel.c b/src/codec/ByteEncoderChannel.c new file mode 100644 index 0000000..bf8e730 --- /dev/null +++ b/src/codec/ByteEncoderChannel.c @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "EncoderChannel.h" +#include "CoderChannel.h" +#include "BitOutputStream.h" +#include "EXITypes.h" +#include "MethodsBag.h" +#include "ErrorCodes.h" + +#ifndef BYTE_ENCODER_CHANNEL_C +#define BYTE_ENCODER_CHANNEL_C + +#if EXI_ALIGNMENT == BYTE_ALIGNMENT + + +int encode(bitstream_t* stream, uint8_t b) { +#if EXI_STREAM == BYTE_ARRAY + if ( (*stream->pos) < stream->size ) { + stream->data[(*stream->pos)++] = b; + return 0; + } else { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == BYTE_ARRAY */ +#if EXI_STREAM == FILE_STREAM + if ( putc(b, stream->file) == EOF ) { + return EXI_ERROR_OUTPUT_STREAM_EOF; + } else { + return 0; + } +#endif /* EXI_STREAM == FILE_STREAM */ +} + +/** + * Encode a single boolean value. A false value is encoded as byte 0 and true + * value is encode as byte 1. + */ +int encodeBoolean(bitstream_t* stream, int b) { + uint8_t val = b ? 1 : 0; + return encode(stream, val); +} + + +/** + * Encode n-bit unsigned integer. The n least significant bits of parameter + * b starting with the most significant, i.e. from left to right. + */ +int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val) { + if (nbits > 0) { + if (nbits < 9) { + /* 1 byte */ + encode(stream, val & 0xff); + } else if (nbits < 17) { + /* 2 bytes */ + encode(stream, val & 0x00ff); + encode(stream, (val & 0xff00) >> 8); + } else if (nbits < 25) { + /* 3 bytes */ + encode(stream, val & 0x0000ff); + encode(stream, (val & 0x00ff00) >> 8); + encode(stream, (uint8_t)((val & 0xff0000) >> 16)); + } else if (nbits < 33) { + /* 4 bytes */ + encode(stream, val & 0x000000ff); + encode(stream, (val & 0x0000ff00) >> 8); + encode(stream, (uint8_t)((val & 0x00ff0000) >> 16)); + encode(stream, (uint8_t)((val & 0xff000000) >> 24)); + } else { + /* TODO Currently not more than 4 Bytes allowed for NBitUnsignedInteger */ + return EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH; + } + } + return 0; +} + + +/** + * Flush underlying bit output stream. + */ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +int encodeFinish(bitstream_t* stream) { + /* no pending bits in byte-aligned mode */ + return 0; +} +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ + +#endif /* alignment */ + +#endif + + + + + + + + + + + + diff --git a/src/codec/ByteStream.c b/src/codec/ByteStream.c new file mode 100644 index 0000000..12ea6b5 --- /dev/null +++ b/src/codec/ByteStream.c @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +/* Avoid VS warning, put before your included header files */ +/* warning C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. */ +#define _CRT_SECURE_NO_DEPRECATE + +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BYTE_STREAM_C +#define BYTE_STREAM_C + +int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint32_t pos) { + FILE* f; + int character; + + f = fopen(filename, "rb"); + + if (f == NULL) { + return EXI_ERROR_INPUT_FILE_HANDLE; + } else { + /* read bytes */ + while ((character = getc(f)) != EOF) { + if (pos >= size) { + return EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + data[pos++] = (uint8_t) character; + } + fclose(f); + } + + return pos; +} + +int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename) { + size_t rlen; + FILE* f = fopen(filename, "wb+"); + + if (f == NULL) { + return -1; + } else { + rlen = fwrite(data, sizeof(uint8_t), len, f); + fflush(f); + fclose(f); + if(rlen == len) { + return 0; + } else { + return EXI_ERROR_OUTPUT_FILE; + } + } +} + + +#endif + diff --git a/src/codec/ByteStream.h b/src/codec/ByteStream.h new file mode 100644 index 0000000..65960e7 --- /dev/null +++ b/src/codec/ByteStream.h @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \file ByteStream.h + * \brief Byte Stream utilities + * + */ + +#ifndef BYTE_STREAM_H +#define BYTE_STREAM_H + +/** + * \brief Write bytes to file + * + * \param data byte array + * \param len length + * \param filename File name + * \return Error-Code <> 0 + * + */ +int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename); + + +/** + * \brief Read bytes from file + * + * \param filename File name + * \param data byte array + * \param size byte array size + * \param pos byte array position + * \return Error-Code <> 0 + * + */ +int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint32_t pos); + +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/src/service/v2g_serviceDispatcher.h b/src/codec/CoderChannel.h similarity index 66% rename from src/service/v2g_serviceDispatcher.h rename to src/codec/CoderChannel.h index 754ff29..d24a197 100644 --- a/src/service/v2g_serviceDispatcher.h +++ b/src/codec/CoderChannel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2010 Siemens AG + * Copyright (C) 2007-2012 Siemens AG * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published @@ -10,6 +10,7 @@ * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, seeCode generated by EXIdizer.com
********************************************************************/ + + #ifdef __cplusplus extern "C" { #endif -#ifndef V2GSERVER_H_ -#define V2GSERVER_H_ +#include "EXITypes.h" -#include "v2g_serviceDataTypes.h" +#ifndef CODER_CHANNEL_H +#define CODER_CHANNEL_H +/** EXI alignment mode - Option bit-packed */ +#define BIT_PACKED 1 +/** EXI alignment mode - Option byte-packed */ +#define BYTE_ALIGNMENT 2 +/** EXI alignment mode */ +#define EXI_ALIGNMENT BIT_PACKED -int init_v2gservice(struct EXIService* service,bytes_t bytes, string_ucs_t string, uint16_t transportHeaderOffset); -int messageDispatcher(struct EXIService* service, uint8_t* inStream, uint16_t sizeInStream, uint8_t* outStream, uint16_t sizeOutStream, uint16_t* outPos); - -#endif /* V2GSERVER_H_ */ +#endif #ifdef __cplusplus } #endif + diff --git a/src/codec/DecoderChannel.h b/src/codec/DecoderChannel.h new file mode 100644 index 0000000..956ee64 --- /dev/null +++ b/src/codec/DecoderChannel.h @@ -0,0 +1,356 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file DecoderChannel.h + * \brief EXI Decoder Channel + * + */ + +#include "EXITypes.h" +#include "CoderChannel.h" + +#ifndef DECODER_CHANNEL_H +#define DECODER_CHANNEL_H + + +/** + * \brief Decode byte value + * + * \param stream Input Stream + * \param b byte (out) + * \return Error-Code <> 0 + * + */ +int decode(bitstream_t* stream, uint8_t* b); + + +/** + * \brief Decode boolean + * + * Decode a single boolean value. The value false is + * represented by 0, and the value true is represented by 1. + * + * \param stream Input Stream + * \param b boolean (out) + * \return Error-Code <> 0 + * + */ +int decodeBoolean(bitstream_t* stream, int* b); + + +/** + * \brief Decode n-bit unsigned integer + * + * Decodes and returns an n-bit unsigned integer. + * + * \param stream Input Stream + * \param nbits Number of bits + * \param uint32 Value (out) + * \return Error-Code <> 0 + * + */ +int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param iv Unsigned Integer Value (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param uint16 Unsigned Integer Value 16 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param uint32 Unsigned Integer Value 32 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param uint64 Unsigned Integer Value 64 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param iv Integer Value 64 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param int16 Integer Value 16 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger16(bitstream_t* stream, int16_t* int16); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param int32 Integer Value 32 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger32(bitstream_t* stream, int32_t* int32); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param int64 Integer Value 64 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger64(bitstream_t* stream, int64_t* int64); + + +/** + * \brief Decode float + * + * Decode a Float datatype as two consecutive Integers. The + * first Integer represents the mantissa of the floating point + * number and the second Integer represents the base-10 exponent + * of the floating point number. + * + * \param stream Input Stream + * \param f Float Value (out) + * \return Error-Code <> 0 + * + */ +int decodeFloat(bitstream_t* stream, exi_float_me_t* f); + + +/** + * \brief Decode decimal + * + * Decode a decimal represented as a Boolean sign followed by two + * Unsigned Integers. A sign value of zero (0) is used to represent + * positive Decimal values and a sign value of one (1) is used to + * represent negative Decimal values The first Integer represents + * the integral portion of the Decimal value. The second positive + * integer represents the fractional portion of the decimal with + * the digits in reverse order to preserve leading zeros. + * + * \param stream Input Stream + * \param d Decimal Value (out) + * \return Error-Code <> 0 + * + */ +int decodeDecimal(bitstream_t* stream, exi_decimal_t* d); + + +/** + * \brief Decode String (no length prefix) + * + * Decode a sequence of characters for a given length. + * + * \param stream Input Stream + * \param len Characters length + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeStringOnly(bitstream_t* stream, uint16_t len, exi_string_ucs_t* s); + + +/** + * \brief Decode String + * + * Decode a length prefixed sequence of characters. + * + * \param stream Input Stream + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeString(bitstream_t* stream, exi_string_ucs_t* s); + + + +/** + * \brief Decode String value + * + * Decode a length prefixed sequence of characters in the sense of string tables. + * length == 0: local value partition hit. + * length == 1: global value partition hit. + * length > 1: string literal is encoded as a String with the length incremented by two + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_string_value_t* s); + + +/** + * \brief Decode Restricted characters set string value + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param rcs Restricted character set + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeRCSStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* s); + + +/** + * \brief Decode characters + * + * Decode a sequence of characters according to a given length. + * + * \param stream Input Stream + * \param len Length + * \param chars Characters (out) + * \return Error-Code <> 0 + * + */ +int decodeCharacters(bitstream_t* stream, uint16_t len, uint32_t* chars); + + +/** + * \brief Decode Binary + * + * Decode a binary value as a length-prefixed sequence of octets. + * + * \param stream Input Stream + * \param bytes Bytes (out) + * \return Error-Code <> 0 + * + */ +int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes); + + +/** + * \brief Decode DateTime + * + * Decode Date-Time as sequence of values representing the + * individual components of the Date-Time. + * + * \param stream Input Stream + * \param type Datetime type + * \param datetime Datetime (out) + * \return Error-Code <> 0 + * + */ +int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime); + +#endif + + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/EXICoder.c b/src/codec/EXICoder.c new file mode 100644 index 0000000..3ca3792 --- /dev/null +++ b/src/codec/EXICoder.c @@ -0,0 +1,2962 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI__CODER_C +#define EXI__CODER_C + +#include "EXICoder.h" + +#include "EXITypes.h" +#include "EXIOptions.h" +#include "BitInputStream.h" +#include "DecoderChannel.h" +#include "ErrorCodes.h" + + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'qnameID' */ +#endif /* __GNUC__ */ +int exi__IncrementStringValueCount(exi_state_t* state, uint16_t qnameID) { + int errn = 0; +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + /* increment global string count */ +#if EXI_VALUE_PARTITION_CAPACITY < 0 + state->stringTable.numberOfGlobalStrings++; +#else /* EXI_VALUE_PARTITION_CAPACITY < 0 */ + if (state->stringTable.numberOfGlobalStrings < EXI_VALUE_PARTITION_CAPACITY) { + state->stringTable.numberOfGlobalStrings++; + } +#endif /* EXI_VALUE_PARTITION_CAPACITY < 0 */ + /* increment local string count */ + if (qnameID < state->stringTable.sizeLocalStrings) { + state->stringTable.numberOfLocalStrings[qnameID]++; + /* printf("\tSV %d: lv=%d and gv=%d \n", qnameID, state->numberOfLocalStrings[qnameID], state->numberOfGlobalStrings);*/ + } else { + /* currently we do support a set of qnames only */ + errn = EXI_ERROR_OUT_OF_QNAMES; + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + + return errn; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'qnameID' */ +#endif /* __GNUC__ */ + + +int exi__PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID) { + /* eqname_t* eqn*/ + if ((state->stackIndex + 1) < EXI_ELEMENT_STACK_SIZE) { + state->grammarStack[++state->stackIndex] = newState; + /* qname */ + state->elementStack[state->stackIndex] = qnameID; + + /*if (eqn == NULL) { + // generic SE, UCD profile + } else { + // copy IDs + state->elementStack[state->stackIndex].localPart = eqn->localPart; + state->elementStack[state->stackIndex].namespaceURI = eqn->namespaceURI; + }*/ + return 0; + } else { + return EXI_ERROR_OUT_OF_GRAMMAR_STACK; + } +} + +int exi__PopStack(exi_state_t* state) { + if (state->stackIndex >= 1) { + state->stackIndex--; + return 0; + } else { + return EXI_ERROR_OUT_OF_BOUNDS; + } +} + +int exi__HandleXsiNilTrue(exi_state_t* state) { + switch (state->grammarStack[state->stackIndex]) { + + } + + return EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL; +} + +int exi__HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType) { + switch(xsiType->namespaceURI) { + case 0: + switch(xsiType->localPart) { + } + break; + case 1: + switch(xsiType->localPart) { + } + break; + case 2: + switch(xsiType->localPart) { + } + break; + case 3: + switch(xsiType->localPart) { + case 0: + /* {3}0,ENTITIES */ + state->grammarStack[state->stackIndex] = 701; + break; + case 1: + /* {3}1,ENTITY */ + state->grammarStack[state->stackIndex] = 538; + break; + case 2: + /* {3}2,ID */ + state->grammarStack[state->stackIndex] = 527; + break; + case 3: + /* {3}3,IDREF */ + state->grammarStack[state->stackIndex] = 449; + break; + case 4: + /* {3}4,IDREFS */ + state->grammarStack[state->stackIndex] = 414; + break; + case 5: + /* {3}5,NCName */ + state->grammarStack[state->stackIndex] = 282; + break; + case 6: + /* {3}6,NMTOKEN */ + state->grammarStack[state->stackIndex] = 702; + break; + case 7: + /* {3}7,NMTOKENS */ + state->grammarStack[state->stackIndex] = 698; + break; + case 8: + /* {3}8,NOTATION */ + state->grammarStack[state->stackIndex] = 678; + break; + case 9: + /* {3}9,Name */ + state->grammarStack[state->stackIndex] = 459; + break; + case 10: + /* {3}10,QName */ + state->grammarStack[state->stackIndex] = 503; + break; + case 11: + /* {3}11,anySimpleType */ + state->grammarStack[state->stackIndex] = 375; + break; + case 12: + /* {3}12,anyType */ + state->grammarStack[state->stackIndex] = 52; + break; + case 13: + /* {3}13,anyURI */ + state->grammarStack[state->stackIndex] = 672; + break; + case 14: + /* {3}14,base64Binary */ + state->grammarStack[state->stackIndex] = 706; + break; + case 15: + /* {3}15,boolean */ + state->grammarStack[state->stackIndex] = 74; + break; + case 16: + /* {3}16,byte */ + state->grammarStack[state->stackIndex] = 367; + break; + case 17: + /* {3}17,date */ + state->grammarStack[state->stackIndex] = 255; + break; + case 18: + /* {3}18,dateTime */ + state->grammarStack[state->stackIndex] = 483; + break; + case 19: + /* {3}19,decimal */ + state->grammarStack[state->stackIndex] = 286; + break; + case 20: + /* {3}20,double */ + state->grammarStack[state->stackIndex] = 623; + break; + case 21: + /* {3}21,duration */ + state->grammarStack[state->stackIndex] = 380; + break; + case 22: + /* {3}22,float */ + state->grammarStack[state->stackIndex] = 659; + break; + case 23: + /* {3}23,gDay */ + state->grammarStack[state->stackIndex] = 525; + break; + case 24: + /* {3}24,gMonth */ + state->grammarStack[state->stackIndex] = 439; + break; + case 25: + /* {3}25,gMonthDay */ + state->grammarStack[state->stackIndex] = 270; + break; + case 26: + /* {3}26,gYear */ + state->grammarStack[state->stackIndex] = 546; + break; + case 27: + /* {3}27,gYearMonth */ + state->grammarStack[state->stackIndex] = 374; + break; + case 28: + /* {3}28,hexBinary */ + state->grammarStack[state->stackIndex] = 593; + break; + case 29: + /* {3}29,int */ + state->grammarStack[state->stackIndex] = 272; + break; + case 30: + /* {3}30,integer */ + state->grammarStack[state->stackIndex] = 111; + break; + case 31: + /* {3}31,language */ + state->grammarStack[state->stackIndex] = 32; + break; + case 32: + /* {3}32,long */ + state->grammarStack[state->stackIndex] = 495; + break; + case 33: + /* {3}33,negativeInteger */ + state->grammarStack[state->stackIndex] = 226; + break; + case 34: + /* {3}34,nonNegativeInteger */ + state->grammarStack[state->stackIndex] = 468; + break; + case 35: + /* {3}35,nonPositiveInteger */ + state->grammarStack[state->stackIndex] = 57; + break; + case 36: + /* {3}36,normalizedString */ + state->grammarStack[state->stackIndex] = 555; + break; + case 37: + /* {3}37,positiveInteger */ + state->grammarStack[state->stackIndex] = 648; + break; + case 38: + /* {3}38,short */ + state->grammarStack[state->stackIndex] = 294; + break; + case 39: + /* {3}39,string */ + state->grammarStack[state->stackIndex] = 398; + break; + case 40: + /* {3}40,time */ + state->grammarStack[state->stackIndex] = 695; + break; + case 41: + /* {3}41,token */ + state->grammarStack[state->stackIndex] = 688; + break; + case 42: + /* {3}42,unsignedByte */ + state->grammarStack[state->stackIndex] = 60; + break; + case 43: + /* {3}43,unsignedInt */ + state->grammarStack[state->stackIndex] = 583; + break; + case 44: + /* {3}44,unsignedLong */ + state->grammarStack[state->stackIndex] = 690; + break; + case 45: + /* {3}45,unsignedShort */ + state->grammarStack[state->stackIndex] = 704; + break; + } + break; + case 4: + switch(xsiType->localPart) { + case 1: + /* {4}1,CanonicalizationMethodType */ + state->grammarStack[state->stackIndex] = 108; + break; + case 2: + /* {4}2,CryptoBinary */ + state->grammarStack[state->stackIndex] = 275; + break; + case 4: + /* {4}4,DSAKeyValueType */ + state->grammarStack[state->stackIndex] = 146; + break; + case 6: + /* {4}6,DigestMethodType */ + state->grammarStack[state->stackIndex] = 147; + break; + case 8: + /* {4}8,DigestValueType */ + state->grammarStack[state->stackIndex] = 148; + break; + case 12: + /* {4}12,HMACOutputLengthType */ + state->grammarStack[state->stackIndex] = 266; + break; + case 15: + /* {4}15,KeyInfoType */ + state->grammarStack[state->stackIndex] = 153; + break; + case 18: + /* {4}18,KeyValueType */ + state->grammarStack[state->stackIndex] = 155; + break; + case 20: + /* {4}20,ManifestType */ + state->grammarStack[state->stackIndex] = 156; + break; + case 24: + /* {4}24,ObjectType */ + state->grammarStack[state->stackIndex] = 160; + break; + case 27: + /* {4}27,PGPDataType */ + state->grammarStack[state->stackIndex] = 161; + break; + case 33: + /* {4}33,RSAKeyValueType */ + state->grammarStack[state->stackIndex] = 168; + break; + case 35: + /* {4}35,ReferenceType */ + state->grammarStack[state->stackIndex] = 169; + break; + case 37: + /* {4}37,RetrievalMethodType */ + state->grammarStack[state->stackIndex] = 171; + break; + case 39: + /* {4}39,SPKIDataType */ + state->grammarStack[state->stackIndex] = 174; + break; + case 44: + /* {4}44,SignatureMethodType */ + state->grammarStack[state->stackIndex] = 187; + break; + case 46: + /* {4}46,SignaturePropertiesType */ + state->grammarStack[state->stackIndex] = 188; + break; + case 48: + /* {4}48,SignaturePropertyType */ + state->grammarStack[state->stackIndex] = 189; + break; + case 49: + /* {4}49,SignatureType */ + state->grammarStack[state->stackIndex] = 186; + break; + case 51: + /* {4}51,SignatureValueType */ + state->grammarStack[state->stackIndex] = 190; + break; + case 53: + /* {4}53,SignedInfoType */ + state->grammarStack[state->stackIndex] = 92; + break; + case 55: + /* {4}55,TransformType */ + state->grammarStack[state->stackIndex] = 192; + break; + case 57: + /* {4}57,TransformsType */ + state->grammarStack[state->stackIndex] = 193; + break; + case 61: + /* {4}61,X509DataType */ + state->grammarStack[state->stackIndex] = 196; + break; + case 64: + /* {4}64,X509IssuerSerialType */ + state->grammarStack[state->stackIndex] = 314; + break; + } + break; + case 5: + switch(xsiType->localPart) { + case 3: + /* {5}3,CableCheckReqType */ + state->grammarStack[state->stackIndex] = 130; + break; + case 5: + /* {5}5,CableCheckResType */ + state->grammarStack[state->stackIndex] = 131; + break; + case 7: + /* {5}7,CertificateInstallationReqType */ + state->grammarStack[state->stackIndex] = 132; + break; + case 9: + /* {5}9,CertificateInstallationResType */ + state->grammarStack[state->stackIndex] = 133; + break; + case 11: + /* {5}11,CertificateUpdateReqType */ + state->grammarStack[state->stackIndex] = 134; + break; + case 13: + /* {5}13,CertificateUpdateResType */ + state->grammarStack[state->stackIndex] = 135; + break; + case 15: + /* {5}15,ChargeParameterDiscoveryReqType */ + state->grammarStack[state->stackIndex] = 136; + break; + case 17: + /* {5}17,ChargeParameterDiscoveryResType */ + state->grammarStack[state->stackIndex] = 54; + break; + case 22: + /* {5}22,ChargingStatusReqType */ + state->grammarStack[state->stackIndex] = 137; + break; + case 24: + /* {5}24,ChargingStatusResType */ + state->grammarStack[state->stackIndex] = 138; + break; + case 26: + /* {5}26,ContractAuthenticationReqType */ + state->grammarStack[state->stackIndex] = 139; + break; + case 28: + /* {5}28,ContractAuthenticationResType */ + state->grammarStack[state->stackIndex] = 140; + break; + case 33: + /* {5}33,CurrentDemandReqType */ + state->grammarStack[state->stackIndex] = 141; + break; + case 35: + /* {5}35,CurrentDemandResType */ + state->grammarStack[state->stackIndex] = 142; + break; + case 62: + /* {5}62,MeteringReceiptReqType */ + state->grammarStack[state->stackIndex] = 157; + break; + case 64: + /* {5}64,MeteringReceiptResType */ + state->grammarStack[state->stackIndex] = 158; + break; + case 67: + /* {5}67,PaymentDetailsReqType */ + state->grammarStack[state->stackIndex] = 163; + break; + case 69: + /* {5}69,PaymentDetailsResType */ + state->grammarStack[state->stackIndex] = 164; + break; + case 72: + /* {5}72,PowerDeliveryReqType */ + state->grammarStack[state->stackIndex] = 165; + break; + case 74: + /* {5}74,PowerDeliveryResType */ + state->grammarStack[state->stackIndex] = 166; + break; + case 76: + /* {5}76,PreChargeReqType */ + state->grammarStack[state->stackIndex] = 167; + break; + case 78: + /* {5}78,PreChargeResType */ + state->grammarStack[state->stackIndex] = 86; + break; + case 90: + /* {5}90,ServiceDetailReqType */ + state->grammarStack[state->stackIndex] = 177; + break; + case 92: + /* {5}92,ServiceDetailResType */ + state->grammarStack[state->stackIndex] = 178; + break; + case 94: + /* {5}94,ServiceDiscoveryReqType */ + state->grammarStack[state->stackIndex] = 179; + break; + case 96: + /* {5}96,ServiceDiscoveryResType */ + state->grammarStack[state->stackIndex] = 180; + break; + case 101: + /* {5}101,ServicePaymentSelectionReqType */ + state->grammarStack[state->stackIndex] = 181; + break; + case 103: + /* {5}103,ServicePaymentSelectionResType */ + state->grammarStack[state->stackIndex] = 182; + break; + case 107: + /* {5}107,SessionSetupReqType */ + state->grammarStack[state->stackIndex] = 183; + break; + case 109: + /* {5}109,SessionSetupResType */ + state->grammarStack[state->stackIndex] = 184; + break; + case 112: + /* {5}112,SessionStopResType */ + state->grammarStack[state->stackIndex] = 78; + break; + case 113: + /* {5}113,SessionStopType */ + state->grammarStack[state->stackIndex] = 185; + break; + case 115: + /* {5}115,WeldingDetectionReqType */ + state->grammarStack[state->stackIndex] = 194; + break; + case 117: + /* {5}117,WeldingDetectionResType */ + state->grammarStack[state->stackIndex] = 195; + break; + } + break; + case 6: + switch(xsiType->localPart) { + case 1: + /* {6}1,AC_EVChargeParameterType */ + state->grammarStack[state->stackIndex] = 128; + break; + case 3: + /* {6}3,AC_EVSEChargeParameterType */ + state->grammarStack[state->stackIndex] = 47; + break; + case 5: + /* {6}5,AC_EVSEStatusType */ + state->grammarStack[state->stackIndex] = 49; + break; + case 9: + /* {6}9,CertificateChainType */ + state->grammarStack[state->stackIndex] = 9; + break; + case 13: + /* {6}13,ChargingProfileType */ + state->grammarStack[state->stackIndex] = 35; + break; + case 15: + /* {6}15,ConsumptionCostType */ + state->grammarStack[state->stackIndex] = 347; + break; + case 17: + /* {6}17,CostType */ + state->grammarStack[state->stackIndex] = 1; + break; + case 19: + /* {6}19,DC_EVChargeParameterType */ + state->grammarStack[state->stackIndex] = 143; + break; + case 20: + /* {6}20,DC_EVErrorCodeType */ + state->grammarStack[state->stackIndex] = 114; + break; + case 22: + /* {6}22,DC_EVPowerDeliveryParameterType */ + state->grammarStack[state->stackIndex] = 37; + break; + case 24: + /* {6}24,DC_EVSEChargeParameterType */ + state->grammarStack[state->stackIndex] = 144; + break; + case 26: + /* {6}26,DC_EVSEStatusCodeType */ + state->grammarStack[state->stackIndex] = 119; + break; + case 27: + /* {6}27,DC_EVSEStatusType */ + state->grammarStack[state->stackIndex] = 115; + break; + case 29: + /* {6}29,DC_EVStatusType */ + state->grammarStack[state->stackIndex] = 145; + break; + case 35: + /* {6}35,EVChargeParameterType */ + state->grammarStack[state->stackIndex] = 343; + break; + case 46: + /* {6}46,EVPowerDeliveryParameterType */ + state->grammarStack[state->stackIndex] = 528; + break; + case 50: + /* {6}50,EVRequestedEnergyTransferType */ + state->grammarStack[state->stackIndex] = 214; + break; + case 52: + /* {6}52,EVSEChargeParameterType */ + state->grammarStack[state->stackIndex] = 561; + break; + case 65: + /* {6}65,EVSENotificationType */ + state->grammarStack[state->stackIndex] = 371; + break; + case 67: + /* {6}67,EVSEProcessingType */ + state->grammarStack[state->stackIndex] = 31; + break; + case 70: + /* {6}70,EVSEStatusType */ + state->grammarStack[state->stackIndex] = 46; + break; + case 71: + /* {6}71,EVSESupportedEnergyTransferType */ + state->grammarStack[state->stackIndex] = 469; + break; + case 73: + /* {6}73,EVStatusType */ + state->grammarStack[state->stackIndex] = 432; + break; + case 76: + /* {6}76,EntryType */ + state->grammarStack[state->stackIndex] = 588; + break; + case 81: + /* {6}81,IntervalType */ + state->grammarStack[state->stackIndex] = 639; + break; + case 82: + /* {6}82,ListOfRootCertificateIDsType */ + state->grammarStack[state->stackIndex] = 360; + break; + case 84: + /* {6}84,MeterInfoType */ + state->grammarStack[state->stackIndex] = 355; + break; + case 89: + /* {6}89,NotificationType */ + state->grammarStack[state->stackIndex] = 329; + break; + case 94: + /* {6}94,PMaxScheduleEntryType */ + state->grammarStack[state->stackIndex] = 162; + break; + case 96: + /* {6}96,PMaxScheduleType */ + state->grammarStack[state->stackIndex] = 45; + break; + case 97: + /* {6}97,PMaxType */ + state->grammarStack[state->stackIndex] = 613; + break; + case 101: + /* {6}101,ParameterSetType */ + state->grammarStack[state->stackIndex] = 103; + break; + case 102: + /* {6}102,ParameterType */ + state->grammarStack[state->stackIndex] = 202; + break; + case 104: + /* {6}104,PaymentOptionsType */ + state->grammarStack[state->stackIndex] = 626; + break; + case 105: + /* {6}105,PhysicalValueType */ + state->grammarStack[state->stackIndex] = 26; + break; + case 108: + /* {6}108,ProfileEntryType */ + state->grammarStack[state->stackIndex] = 537; + break; + case 111: + /* {6}111,RelativeTimeIntervalType */ + state->grammarStack[state->stackIndex] = 170; + break; + case 113: + /* {6}113,SAIDType */ + state->grammarStack[state->stackIndex] = 209; + break; + case 115: + /* {6}115,SAScheduleListType */ + state->grammarStack[state->stackIndex] = 172; + break; + case 118: + /* {6}118,SAScheduleTupleType */ + state->grammarStack[state->stackIndex] = 321; + break; + case 120: + /* {6}120,SASchedulesType */ + state->grammarStack[state->stackIndex] = 393; + break; + case 124: + /* {6}124,SalesTariffEntryType */ + state->grammarStack[state->stackIndex] = 175; + break; + case 126: + /* {6}126,SalesTariffType */ + state->grammarStack[state->stackIndex] = 533; + break; + case 128: + /* {6}128,SelectedServiceListType */ + state->grammarStack[state->stackIndex] = 522; + break; + case 129: + /* {6}129,SelectedServiceType */ + state->grammarStack[state->stackIndex] = 524; + break; + case 133: + /* {6}133,ServiceChargeType */ + state->grammarStack[state->stackIndex] = 176; + break; + case 136: + /* {6}136,ServiceParameterListType */ + state->grammarStack[state->stackIndex] = 101; + break; + case 139: + /* {6}139,ServiceTagListType */ + state->grammarStack[state->stackIndex] = 259; + break; + case 140: + /* {6}140,ServiceTagType */ + state->grammarStack[state->stackIndex] = 95; + break; + case 141: + /* {6}141,ServiceType */ + state->grammarStack[state->stackIndex] = 93; + break; + case 144: + /* {6}144,SubCertificatesType */ + state->grammarStack[state->stackIndex] = 110; + break; + case 153: + /* {6}153,certificateType */ + state->grammarStack[state->stackIndex] = 11; + break; + case 154: + /* {6}154,contractIDType */ + state->grammarStack[state->stackIndex] = 357; + break; + case 156: + /* {6}156,costKindType */ + state->grammarStack[state->stackIndex] = 3; + break; + case 157: + /* {6}157,dHParamsType */ + state->grammarStack[state->stackIndex] = 269; + break; + case 159: + /* {6}159,evccIDType */ + state->grammarStack[state->stackIndex] = 223; + break; + case 160: + /* {6}160,evseIDType */ + state->grammarStack[state->stackIndex] = 531; + break; + case 161: + /* {6}161,faultCodeType */ + state->grammarStack[state->stackIndex] = 331; + break; + case 162: + /* {6}162,faultMsgType */ + state->grammarStack[state->stackIndex] = 550; + break; + case 163: + /* {6}163,genChallengeType */ + state->grammarStack[state->stackIndex] = 8; + break; + case 165: + /* {6}165,isolationLevelType */ + state->grammarStack[state->stackIndex] = 117; + break; + case 166: + /* {6}166,meterIDType */ + state->grammarStack[state->stackIndex] = 100; + break; + case 167: + /* {6}167,meterStatusType */ + state->grammarStack[state->stackIndex] = 311; + break; + case 168: + /* {6}168,paymentOptionType */ + state->grammarStack[state->stackIndex] = 245; + break; + case 169: + /* {6}169,percentValueType */ + state->grammarStack[state->stackIndex] = 308; + break; + case 171: + /* {6}171,privateKeyType */ + state->grammarStack[state->stackIndex] = 304; + break; + case 172: + /* {6}172,responseCodeType */ + state->grammarStack[state->stackIndex] = 17; + break; + case 173: + /* {6}173,rootCertificateIDType */ + state->grammarStack[state->stackIndex] = 362; + break; + case 174: + /* {6}174,serviceCategoryType */ + state->grammarStack[state->stackIndex] = 85; + break; + case 175: + /* {6}175,serviceIDType */ + state->grammarStack[state->stackIndex] = 65; + break; + case 176: + /* {6}176,serviceNameType */ + state->grammarStack[state->stackIndex] = 409; + break; + case 177: + /* {6}177,serviceScopeType */ + state->grammarStack[state->stackIndex] = 518; + break; + case 178: + /* {6}178,sessionIDType */ + state->grammarStack[state->stackIndex] = 41; + break; + case 180: + /* {6}180,sigMeterReadingType */ + state->grammarStack[state->stackIndex] = 534; + break; + case 184: + /* {6}184,tariffDescriptionType */ + state->grammarStack[state->stackIndex] = 635; + break; + case 185: + /* {6}185,unitMultiplierType */ + state->grammarStack[state->stackIndex] = 23; + break; + case 186: + /* {6}186,unitSymbolType */ + state->grammarStack[state->stackIndex] = 418; + break; + case 187: + /* {6}187,valueType */ + state->grammarStack[state->stackIndex] = 498; + break; + } + break; + case 7: + switch(xsiType->localPart) { + case 1: + /* {7}1,BodyBaseType */ + state->grammarStack[state->stackIndex] = 691; + break; + case 3: + /* {7}3,BodyType */ + state->grammarStack[state->stackIndex] = 290; + break; + } + break; + case 8: + switch(xsiType->localPart) { + case 0: + /* {8}0,MessageHeaderType */ + state->grammarStack[state->stackIndex] = 71; + break; + } + break; + } + + + return 0; +} + + +int exi__RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID) { + int errn = EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK; + int16_t i; + + /* schema-informed global element --> Stack ID */ + switch(qnameID) { + case 61: + return exi__PushStack(state, 108, 61); + case 64: + return exi__PushStack(state, 146, 64); + case 66: + return exi__PushStack(state, 147, 66); + case 68: + return exi__PushStack(state, 148, 68); + case 75: + return exi__PushStack(state, 153, 75); + case 77: + return exi__PushStack(state, 154, 77); + case 78: + return exi__PushStack(state, 155, 78); + case 80: + return exi__PushStack(state, 156, 80); + case 82: + return exi__PushStack(state, 159, 82); + case 84: + return exi__PushStack(state, 160, 84); + case 87: + return exi__PushStack(state, 161, 87); + case 93: + return exi__PushStack(state, 168, 93); + case 95: + return exi__PushStack(state, 169, 95); + case 97: + return exi__PushStack(state, 171, 97); + case 99: + return exi__PushStack(state, 174, 99); + case 103: + return exi__PushStack(state, 186, 103); + case 104: + return exi__PushStack(state, 187, 104); + case 106: + return exi__PushStack(state, 188, 106); + case 108: + return exi__PushStack(state, 189, 108); + case 111: + return exi__PushStack(state, 190, 111); + case 113: + return exi__PushStack(state, 92, 113); + case 115: + return exi__PushStack(state, 192, 115); + case 117: + return exi__PushStack(state, 193, 117); + case 121: + return exi__PushStack(state, 196, 121); + case 133: + return exi__PushStack(state, 130, 133); + case 135: + return exi__PushStack(state, 131, 135); + case 137: + return exi__PushStack(state, 132, 137); + case 139: + return exi__PushStack(state, 133, 139); + case 141: + return exi__PushStack(state, 134, 141); + case 143: + return exi__PushStack(state, 135, 143); + case 145: + return exi__PushStack(state, 136, 145); + case 147: + return exi__PushStack(state, 54, 147); + case 152: + return exi__PushStack(state, 137, 152); + case 154: + return exi__PushStack(state, 138, 154); + case 156: + return exi__PushStack(state, 139, 156); + case 158: + return exi__PushStack(state, 140, 158); + case 163: + return exi__PushStack(state, 141, 163); + case 165: + return exi__PushStack(state, 142, 165); + case 192: + return exi__PushStack(state, 157, 192); + case 194: + return exi__PushStack(state, 158, 194); + case 197: + return exi__PushStack(state, 163, 197); + case 199: + return exi__PushStack(state, 164, 199); + case 202: + return exi__PushStack(state, 165, 202); + case 204: + return exi__PushStack(state, 166, 204); + case 206: + return exi__PushStack(state, 167, 206); + case 208: + return exi__PushStack(state, 86, 208); + case 220: + return exi__PushStack(state, 177, 220); + case 222: + return exi__PushStack(state, 178, 222); + case 224: + return exi__PushStack(state, 179, 224); + case 226: + return exi__PushStack(state, 180, 226); + case 231: + return exi__PushStack(state, 181, 231); + case 233: + return exi__PushStack(state, 182, 233); + case 237: + return exi__PushStack(state, 183, 237); + case 239: + return exi__PushStack(state, 184, 239); + case 241: + return exi__PushStack(state, 185, 241); + case 242: + return exi__PushStack(state, 78, 242); + case 245: + return exi__PushStack(state, 194, 245); + case 247: + return exi__PushStack(state, 195, 247); + case 249: + return exi__PushStack(state, 128, 249); + case 251: + return exi__PushStack(state, 47, 251); + case 253: + return exi__PushStack(state, 49, 253); + case 267: + return exi__PushStack(state, 143, 267); + case 270: + return exi__PushStack(state, 37, 270); + case 272: + return exi__PushStack(state, 144, 272); + case 274: + return exi__PushStack(state, 115, 274); + case 277: + return exi__PushStack(state, 145, 277); + case 283: + return exi__PushStack(state, 149, 283); + case 294: + return exi__PushStack(state, 38, 294); + case 300: + return exi__PushStack(state, 56, 300); + case 317: + return exi__PushStack(state, 150, 317); + case 321: + return exi__PushStack(state, 151, 321); + case 324: + return exi__PushStack(state, 152, 324); + case 342: + return exi__PushStack(state, 162, 342); + case 359: + return exi__PushStack(state, 170, 359); + case 363: + return exi__PushStack(state, 172, 363); + case 368: + return exi__PushStack(state, 173, 368); + case 372: + return exi__PushStack(state, 175, 372); + case 381: + return exi__PushStack(state, 176, 381); + case 395: + return exi__PushStack(state, 191, 395); + case 439: + return exi__PushStack(state, 129, 439); + case 442: + return exi__PushStack(state, 69, 442); + + } + + + /* retrieve existing grammar for qname if any available */ + for(i=0; iCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI__CODER_H +#define EXI__CODER_H + +#include "EXITypes.h" + +#define DOCUMENT 0 +#define DOC_CONTENT 126 +#define DOC_END 127 +#define UR_TYPE_GRAMMAR_0 227 +#define UR_TYPE_GRAMMAR_1 228 + + +/* increments global and local string count */ +int exi__IncrementStringValueCount(exi_state_t* state, uint16_t qnameID); + +int exi__PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID); + +int exi__PopStack(exi_state_t* state); + +int exi__HandleXsiNilTrue(exi_state_t* state); + +int exi__HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType); + +int exi__RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID); + +int exi__LearnAttribute(exi_state_t* state, uint16_t qnameID, uint16_t uriID, uint16_t localID); + +int exi__IsStartContent(int16_t ruleID); + +int exi__MoveToElementContentRule(exi_state_t* state); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/EXIDecoder.c b/src/codec/EXIDecoder.c new file mode 100644 index 0000000..db4a5c9 --- /dev/null +++ b/src/codec/EXIDecoder.c @@ -0,0 +1,10835 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI__DECODER_C +#define EXI__DECODER_C + + +#include "EXIDecoder.h" + +#include "EXITypes.h" +#include "EXIOptions.h" +#include "BitInputStream.h" +#include "DecoderChannel.h" +#include "CoderChannel.h" + +#include "StringTable.h" +#include "NameTableEntries.h" +#include "MethodsBag.h" + +#include "EXICoder.h" +#include "EXIHeaderDecoder.h" +#include "ErrorCodes.h" + +#include "QNames.h" +#include "QNameDefines.h" + + + +/* local variables */ +static uint32_t xsi; +static uint32_t bits; +static int errn; +static exi_event_t currEvent; + +#define URI_CODEPOINTS_SIZE 35 +#define LOCALNAME_CODEPOINTS_SIZE 25 + +uint32_t codepointsUri[URI_CODEPOINTS_SIZE]; +uint32_t codepointsLocalName[LOCALNAME_CODEPOINTS_SIZE]; + +/*static exi_string_ucs_t stringUri = {URI_CODEPOINTS_SIZE, codepointsUri, 0};*/ +/*static exi_name_entry_t uri = {EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}};*/ +/*static exi_name_entry_t localName = {EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}};*/ +static exi_qname_t _qname = { + {EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}}, + {EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}} +}; + + +static int _decodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) { + int errn; + uint32_t val; + + errn = decodeNBitUnsignedInteger(stream, nbits, &val); + if(errn) { + return errn; + } + + /* TODO map integer value more fine-grained */ + iv->type = EXI_INTEGER_32; + iv->val.int32 = val + lowerBound; + + return errn; +} + + + +static int exiDecodeNext2Event(bitstream_t* stream, exi_state_t* state, + exi_event_t* nextEvent) { + uint32_t eventCode2 = 0; + int16_t ruleID = state->grammarStack[state->stackIndex]; + + switch (ruleID) { + case 399: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + state->eventCode += 0; + return errn; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 92: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + case 202: + /* FirstStartTag[ATTRIBUTE[STRING](Name)] */ + case 192: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 187: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 134: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 135: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + case 133: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + case 108: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 156: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 190: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + case 147: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 157: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + case 533: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + case 186: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + case 188: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + case 132: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + state->eventCode += 0; + return errn; + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 6: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 621: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + state->eventCode += 0; + return errn; + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 189: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Target)] */ + case 169: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + state->eventCode += 0; + return errn; + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 6: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 6: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge)] */ + case 4: + /* Element[CHARACTERS[STRING]] */ + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 24: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 29: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + case 42: + /* Element[CHARACTERS[ENUMERATION]] */ + case 43: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule)] */ + case 51: + /* Element[CHARACTERS[STRING]] */ + case 58: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + case 61: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + case 63: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + case 66: + /* Element[CHARACTERS[STRING]] */ + case 67: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 72: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + case 75: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + case 80: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 84: + /* Element[CHARACTERS[ENUMERATION]] */ + case 88: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + case 90: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + case 25: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 97: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + case 99: + /* Element[CHARACTERS[STRING]] */ + case 104: + /* Element[CHARACTERS[INTEGER]] */ + case 27: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 112: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + case 120: + /* Element[CHARACTERS[ENUMERATION]] */ + case 122: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + case 197: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + case 198: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + case 200: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 207: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + case 210: + /* Element[CHARACTERS[DATETIME]] */ + case 211: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 212: + /* Element[CHARACTERS[INTEGER]] */ + case 216: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 219: + /* Element[CHARACTERS[INTEGER]] */ + case 225: + /* Element[CHARACTERS[BOOLEAN]] */ + case 229: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 230: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 233: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + case 234: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved)] */ + case 236: + /* Element[CHARACTERS[DATETIME]] */ + case 237: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 243: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 253: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + case 201: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 262: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + case 271: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 273: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q)] */ + case 280: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter)] */ + case 284: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 287: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + case 217: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + case 70: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ + case 291: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 293: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 297: + /* Element[CHARACTERS[STRING]] */ + case 298: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 300: + /* Element[CHARACTERS[STRING]] */ + case 303: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + case 113: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC)] */ + case 312: + /* Element[CHARACTERS[INTEGER]] */ + case 319: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + case 322: + /* Element[CHARACTERS[LIST]] */ + case 325: + /* Element[CHARACTERS[DATETIME]] */ + case 332: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter)] */ + case 335: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 341: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules)] */ + case 344: + /* Element[CHARACTERS[LIST]] */ + case 351: + /* Element[CHARACTERS[STRING]] */ + case 40: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + case 359: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 7: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow)] */ + case 285: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 365: + /* Element[CHARACTERS[ENUMERATION]] */ + case 366: + /* Element[CHARACTERS[INTEGER]] */ + case 368: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 369: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + case 68: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + case 373: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + case 376: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + case 378: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 382: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 383: + /* Element[CHARACTERS[INTEGER]] */ + case 384: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 385: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 299: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 386: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 389: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 394: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 397: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + case 403: + /* Element[CHARACTERS[STRING]] */ + case 404: + /* Element[CHARACTERS[STRING]] */ + case 406: + /* Element[CHARACTERS[STRING]] */ + case 116: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + case 292: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 412: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + case 345: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit)] */ + case 419: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + case 422: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 98: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + case 427: + /* Element[CHARACTERS[ENUMERATION]] */ + case 428: + /* Element[CHARACTERS[STRING]] */ + case 429: + /* Element[CHARACTERS[STRING]] */ + case 309: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + case 433: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 435: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + case 436: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + case 59: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry)] */ + case 443: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 441: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit)] */ + case 445: + /* Element[CHARACTERS[ENUMERATION]] */ + case 446: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + case 208: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry)] */ + case 450: + /* Element[CHARACTERS[STRING]] */ + case 451: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 305: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter)] */ + case 452: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 453: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + case 455: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage)] */ + case 461: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID)] */ + case 460: + /* Element[CHARACTERS[STRING]] */ + case 464: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 462: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 465: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + case 466: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 467: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + case 475: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 477: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 478: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + case 274: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 482: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 484: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 493: + /* Element[CHARACTERS[STRING]] */ + case 497: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount)] */ + case 496: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + case 500: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService)] */ + case 499: + /* Element[CHARACTERS[DATETIME]] */ + case 242: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 501: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + case 506: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + case 508: + /* Element[CHARACTERS[DATETIME]] */ + case 91: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue)] */ + case 511: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 512: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 514: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + case 515: + /* Element[CHARACTERS[ENUMERATION]] */ + case 107: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod)] */ + case 520: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 519: + /* Element[CHARACTERS[STRING]] */ + case 94: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + case 526: + /* Element[CHARACTERS[STRING]] */ + case 529: + /* Element[CHARACTERS[DECIMAL]] */ + case 238: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + case 488: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 521: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 540: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + case 542: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit)] */ + case 544: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + case 263: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent)] */ + case 549: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + case 551: + /* Element[CHARACTERS[LIST]] */ + case 55: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + case 481: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 556: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 557: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + case 513: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 239: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + case 559: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 87: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 76: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + case 562: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 254: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList)] */ + case 379: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + case 567: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + case 566: + /* Element[CHARACTERS[INTEGER]] */ + case 571: + /* Element[CHARACTERS[ENUMERATION]] */ + case 486: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 574: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + case 575: + /* Element[CHARACTERS[ENUMERATION]] */ + case 576: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 578: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + case 579: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 582: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + case 260: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + case 586: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + case 589: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 543: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + case 590: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + case 592: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + case 356: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 596: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + case 595: + /* Element[CHARACTERS[FLOAT]] */ + case 281: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 598: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 602: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 600: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + case 603: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + case 199: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + case 604: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 608: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 610: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + case 485: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 611: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 612: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 614: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved)] */ + case 470: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax)] */ + case 615: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + case 434: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + case 617: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + case 619: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + case 618: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 430: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType)] */ + case 620: + /* Element[CHARACTERS[INTEGER]] */ + case 487: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 437: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 624: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + case 628: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions)] */ + case 580: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + case 631: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 632: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + case 633: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 638: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 342: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry)] */ + case 353: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + case 640: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + case 641: + /* Element[CHARACTERS[STRING]] */ + case 642: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 277: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 645: + /* Element[CHARACTERS[FLOAT]] */ + case 463: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus)] */ + case 649: + /* Element[CHARACTERS[ENUMERATION]] */ + case 650: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 652: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 653: + /* Element[CHARACTERS[STRING]] */ + case 568: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber)] */ + case 651: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + case 656: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + case 657: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 658: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 660: + /* Element[CHARACTERS[INTEGER]] */ + case 661: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent)] */ + case 664: + /* Element[CHARACTERS[STRING]] */ + case 665: + /* Element[CHARACTERS[STRING]] */ + case 666: + /* Element[CHARACTERS[DATETIME]] */ + case 667: + /* Element[CHARACTERS[ENUMERATION]] */ + case 668: + /* Element[CHARACTERS[DATETIME]] */ + case 669: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + case 673: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 662: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent)] */ + case 675: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + case 674: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + case 676: + /* Element[CHARACTERS[ENUMERATION]] */ + case 570: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent)] */ + case 677: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 679: + /* Element[CHARACTERS[DATETIME]] */ + case 123: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ + case 213: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter)] */ + case 548: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved)] */ + case 680: + /* Element[CHARACTERS[ENUMERATION]] */ + case 396: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 442: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit)] */ + case 336: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel)] */ + case 541: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ + case 682: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 683: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent)] */ + case 684: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 685: + /* Element[CHARACTERS[ENUMERATION]] */ + case 686: + /* Element[CHARACTERS[STRING]] */ + case 2: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount)] */ + case 364: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + case 687: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 689: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 411: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter)] */ + case 48: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage)] */ + case 692: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + case 118: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + case 694: + /* Element[CHARACTERS[INTEGER]] */ + case 517: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 696: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + case 697: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 416: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + case 699: + /* Element[CHARACTERS[STRING]] */ + case 700: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 703: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + case 456: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent)] */ + case 705: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 278: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue)] */ + case 296: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 2: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + state->eventCode += 0; + return errn; + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 5: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 622: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 203: + /* StartTag[ATTRIBUTE[ENUMERATION](ValueType)] */ + case 457: + /* StartTag[ATTRIBUTE[STRING](Target)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + state->eventCode += 0; + return errn; + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 13: + /* Element[END_ELEMENT] */ + case 18: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + case 21: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + case 50: + /* Element[END_ELEMENT] */ + case 82: + /* Element[END_ELEMENT] */ + case 83: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + case 96: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 109: + /* Element[END_ELEMENT] */ + case 121: + /* Element[END_ELEMENT] */ + case 125: + /* Element[END_ELEMENT] */ + case 30: + /* Element[END_ELEMENT] */ + case 204: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + case 220: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 224: + /* Element[END_ELEMENT] */ + case 232: + /* Element[END_ELEMENT] */ + case 244: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + case 250: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 256: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 257: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + case 261: + /* Element[END_ELEMENT] */ + case 264: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 206: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + case 279: + /* Element[END_ELEMENT] */ + case 283: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 301: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + case 310: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 323: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 326: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + case 327: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + case 337: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + case 340: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + case 346: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + case 352: + /* Element[END_ELEMENT] */ + case 358: + /* Element[END_ELEMENT] */ + case 381: + /* Element[END_ELEMENT] */ + case 388: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 251: + /* Element[END_ELEMENT] */ + case 405: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 407: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + case 408: + /* Element[END_ELEMENT] */ + case 410: + /* Element[END_ELEMENT] */ + case 415: + /* Element[END_ELEMENT] */ + case 420: + /* Element[END_ELEMENT] */ + case 421: + /* Element[END_ELEMENT] */ + case 423: + /* Element[END_ELEMENT] */ + case 431: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + case 440: + /* Element[END_ELEMENT] */ + case 363: + /* Element[END_ELEMENT] */ + case 447: + /* Element[END_ELEMENT] */ + case 22: + /* Element[END_ELEMENT] */ + case 36: + /* Element[END_ELEMENT] */ + case 402: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 377: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + case 328: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + case 265: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 295: + /* Element[END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 471: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 473: + /* Element[END_ELEMENT] */ + case 480: + /* Element[END_ELEMENT] */ + case 324: + /* Element[END_ELEMENT] */ + case 489: + /* Element[END_ELEMENT] */ + case 444: + /* Element[END_ELEMENT] */ + case 494: + /* Element[END_ELEMENT] */ + case 392: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 64: + /* Element[END_ELEMENT] */ + case 349: + /* Element[END_ELEMENT] */ + case 504: + /* Element[END_ELEMENT] */ + case 354: + /* Element[END_ELEMENT] */ + case 505: + /* Element[END_ELEMENT] */ + case 10: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + case 510: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 490: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + case 516: + /* Element[END_ELEMENT] */ + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + case 535: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + case 228: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 267: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 330: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + case 89: + /* Element[END_ELEMENT] */ + case 370: + /* Element[END_ELEMENT] */ + case 530: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + case 523: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + case 558: + /* Element[END_ELEMENT] */ + case 372: + /* Element[END_ELEMENT] */ + case 572: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 5: + /* Element[END_ELEMENT] */ + case 472: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 258: + /* Element[END_ELEMENT] */ + case 565: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + case 581: + /* Element[END_ELEMENT] */ + case 584: + /* Element[END_ELEMENT] */ + case 585: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 587: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + case 53: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 601: + /* Element[END_ELEMENT] */ + case 448: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + case 605: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 609: + /* Element[END_ELEMENT] */ + case 573: + /* Element[END_ELEMENT] */ + case 629: + /* Element[END_ELEMENT] */ + case 16: + /* Element[END_ELEMENT] */ + case 231: + /* Element[END_ELEMENT] */ + case 606: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 644: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 646: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + case 307: + /* Element[END_ELEMENT] */ + case 302: + /* Element[END_ELEMENT] */ + case 655: + /* Element[END_ELEMENT] */ + case 413: + /* Element[END_ELEMENT] */ + case 102: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + case 607: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + case 289: + /* Element[END_ELEMENT] */ + case 507: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + case 663: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 28: + /* Element[END_ELEMENT] */ + case 532: + /* Element[END_ELEMENT] */ + case 438: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + case 479: + /* Element[END_ELEMENT] */ + case 671: + /* Element[END_ELEMENT] */ + case 670: + /* Element[END_ELEMENT] */ + case 333: + /* Element[END_ELEMENT] */ + case 509: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + case 361: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + case 563: + /* Element[END_ELEMENT] */ + case 79: + /* Element[END_ELEMENT] */ + case 654: + /* Element[END_ELEMENT] */ + case 553: + /* Element[END_ELEMENT] */ + case 391: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 320: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + case 387: + /* Element[END_ELEMENT] */ + case 19: + /* Element[END_ELEMENT] */ + case 249: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 681: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 73: + /* Element[END_ELEMENT] */ + case 560: + /* Element[END_ELEMENT] */ + case 594: + /* Element[END_ELEMENT] */ + case 539: + /* Element[END_ELEMENT] */ + case 288: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + case 693: + /* Element[END_ELEMENT] */ + case 221: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 597: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + case 491: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + case 536: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 248: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 313: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + case 241: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 400: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + state->eventCode += 0; + return errn; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 39: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + case 105: + /* StartTag[CHARACTERS[BINARY_BASE64]] */ + case 240: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 276: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 318: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 350: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + case 417: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + case 476: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 458: + /* StartTag[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 564: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 577: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + case 395: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 643: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + case 106: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + case 647: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode); + state->eventCode -= 1; + return errn; + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + state->eventCode += 0; + return errn; + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 5: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 1: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + case 9: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 12: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 32: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 47: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + case 54: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 57: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 69: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + case 77: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 78: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 85: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 86: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 60: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 93: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 100: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 101: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + case 110: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 111: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 115: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + case 136: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + case 223: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 226: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 141: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 214: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 246: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 181: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + case 255: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 138: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 268: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 269: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 270: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 182: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 272: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 131: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 282: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 286: + /* FirstStartTag[CHARACTERS[DECIMAL]] */ + case 155: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 294: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 103: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + case 176: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 196: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + case 329: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + case 334: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 35: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 143: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 163: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 360: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + case 130: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 331: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 117: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 367: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 259: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + case 374: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 375: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 380: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 174: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + case 114: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 398: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 8: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 23: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 409: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 414: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 418: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 424: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 439: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 449: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 209: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 454: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 459: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 142: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 468: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 469: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 162: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 165: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + case 222: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 338: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 3: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 483: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 161: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + case 495: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 357: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 498: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 503: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 177: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + case 65: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 311: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 518: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 195: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 522: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + case 525: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 527: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 95: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 534: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 537: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + case 538: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 154: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 128: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + case 546: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 170: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + case 172: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + case 492: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 552: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 555: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 146: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 158: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 168: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + case 583: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 49: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + case 588: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 26: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + case 593: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 166: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 524: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 317: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 315: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 308: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 252: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 616: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 347: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + case 623: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 625: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 145: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + case 626: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + case 627: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 550: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 630: + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 71: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + case 175: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 11: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 636: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 314: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + case 554: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 148: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 648: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 591: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 183: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + case 502: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 205: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 167: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 194: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 31: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 20: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 659: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 178: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 362: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 17: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 545: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 316: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 37: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 164: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 124: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 672: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 119: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 637: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 193: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + case 74: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + case 306: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 184: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 266: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 45: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + case 678: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 613: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 140: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 569: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 41: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 635: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 275: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 531: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 321: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 688: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 690: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 245: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 152: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 695: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 180: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 304: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 698: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 159: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 701: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 144: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + case 702: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 547: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 355: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + case 704: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 634: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 706: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 371: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode); + state->eventCode -= 1; + return errn; + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 6: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 46: + /* FirstStartTag[END_ELEMENT] */ + case 52: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 56: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 137: + /* FirstStartTag[END_ELEMENT] */ + case 38: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 227: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 185: + /* FirstStartTag[END_ELEMENT] */ + case 343: + /* FirstStartTag[END_ELEMENT] */ + case 129: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 290: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + case 393: + /* FirstStartTag[END_ELEMENT] */ + case 173: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 432: + /* FirstStartTag[END_ELEMENT] */ + case 150: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 528: + /* FirstStartTag[END_ELEMENT] */ + case 561: + /* FirstStartTag[END_ELEMENT] */ + case 191: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 149: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 639: + /* FirstStartTag[END_ELEMENT] */ + case 179: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 151: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 691: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode); + state->eventCode -= 1; + return errn; + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 5: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 247: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 339: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 390: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 474: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 348: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 215: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 401: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode); + state->eventCode -= 1; + return errn; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + + default: + if (ruleID < 0) { + /* built-in element grammar */ + if ( exi__IsStartContent(ruleID) ) { + /* TODO generate 2nd level productions */ + + /* StartTagContent grammar */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + if(errn) { + return errn; + } + switch(eventCode2) { + case 0: + /* 0: EE */ + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + break; + case 1: + /* 1: AT(*) */ + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + break; + case 2: + /* 2: SE(*) */ + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + break; + case 3: + /* 3: CH */ + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + break; + default: + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; + break; + } + return errn; + } else { + /* TODO generate 2nd level productions */ + + /* ElementContent grammar */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2); + if(errn) { + return errn; + } + switch(eventCode2) { + case 0: + /* 0: SE(*) */ + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + break; + case 1: + /* 1: CH */ + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + break; + default: + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; + break; + } + + + + } + + } else { + *nextEvent = EXI_EVENT_ERROR; + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; + } + break; + } + + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; +} + + + +static int _exiDecodeNamespaceUri(bitstream_t* stream, exi_state_t* state, + exi_name_entry_t* uri) { +/* exi_string_ascii_t* namespaceURI, uint32_t* uriID) {*/ + uint16_t uriSize, uriCodingLength; + uint32_t uriID; + int errn; + + errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize); + if (errn) { + return errn; + } + /* URI Entries + 1 */ + errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); + if (errn) { + return errn; + } + + errn = decodeNBitUnsignedInteger(stream, uriCodingLength, &uriID); + if (errn) { + return errn; + } + + if (uriID == 0) { + /* uri string value was not found */ + /* ==> zero (0) as an n-nit unsigned integer */ + /* followed by uri encoded as string */ + uri->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID; + errn = decodeString(stream, &uri->str); + if (errn) { + return errn; + } + /* after encoding string value is added to table */ + errn = exiAddUri(&state->nameTablePrepopulated, &state->nameTableRuntime); /*, namespaceURI->chars); */ + if (errn) { + return errn; + } + uri->id = uriSize; + /* uriID = uriSize; */ + } else { + /* uri string value found */ + /* ==> value(i+1) is encoded as n-bit unsigned integer */ + uri->type = EXI_NAME_ENTRY_TYPE_ID; + uri->id = (uint16_t)(uriID - 1); + /* *uriID = *uriID - 1; */ + } + + return 0; +} + +static int _exiDecodeLocalName(bitstream_t* stream, exi_state_t* state, + uint16_t uriID, exi_name_entry_t* localName) { +/* exi_string_ascii_t* localName, + uint32_t* localNameID, uint32_t uriID) { */ + uint32_t localNameID; + uint16_t slen; + uint16_t localNameSize; + uint16_t localNameCodingLength; + + + int errn = decodeUnsignedInteger16(stream, &slen); + if (errn) { + return errn; + } + + if (slen > 0) { + /* string value was not found in local partition */ + /* ==> string literal is encoded as a String */ + /* with the length of the string incremented by one */ + localName->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID; + if (slen-- >= (localName->str.size) ) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + localName->str.len = slen; + errn = decodeCharacters(stream, slen, localName->str.codepoints); + + /*if (slen-- >= localName->size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + errn = decodeCharactersASCII(stream, slen, localName->chars); */ + + if (errn) { + return errn; + } + /* After encoding the string value, it is added to the string table */ + /* partition and assigned the next available compact identifier */ + errn = exiAddLocalName(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localName->id); /* uriID); *//*, localName->chars); */ + + /*if (errn) { + return errn; + }*/ + /* TODO UCD Profile */ + /* qname = addLocalName(localName, uriID); */ + } else { + /* string value found in local partition */ + /* ==> string value is represented as zero (0) encoded as an */ + /* Unsigned Integer */ + /* followed by an the compact identifier of the string value as an */ + /* n-bit unsigned integer */ + /* n is log2 m and m is the number of entries in the string table */ + /* partition */ + localName->type = EXI_NAME_ENTRY_TYPE_ID; + errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize); /* uriID, &localNameSize); */ + if (errn) { + return errn; + } + errn = exiGetCodingLength(localNameSize, &localNameCodingLength); + if (errn) { + return errn; + } + errn = decodeNBitUnsignedInteger(stream, localNameCodingLength, &localNameID); /* localNameID);*/ + localName->id = (uint16_t)(localNameID); + /*if (errn) { + return errn; + }*/ + } + + return errn; +} + +static int _exiDecodeQName(bitstream_t* stream, exi_state_t* state, + uint16_t* qnameID, exi_qname_t* qname) { + + /*uint32_t uriID; + uint32_t localNameID;*/ + /* const char * clocalName; */ + + /* uri */ + int errn =_exiDecodeNamespaceUri(stream, state, &qname->uri); /* &qname->namespaceURI, &uriID); */ + if (errn) { + return errn; + } + /* localName */ + errn = _exiDecodeLocalName(stream, state, qname->uri.id, &qname->localName); /* &qname->localName, &localNameID, uriID); */ + if (errn) { + return errn; + } + + /* + errn = exiGetLocalName(nameTable, runtimeTable, uriID, localNameID, &clocalName); + if (errn) { + return errn; + } + strcpy ( qname->localName.chars, clocalName ); + */ + + if (_qname.localName.type == EXI_NAME_ENTRY_TYPE_STRING_AND_ID) { + errn = exiAddEQName(state, qnameID, qname->uri.id, qname->localName.id); + } else { + /* IDs known --> retrieve qnameID */ + errn = exiGetQNameID(state, qname->uri.id, qname->localName.id, qnameID); + } + + + return errn; +} + + +static int _exiDecodeStartElement(exi_state_t* state, uint16_t qnameID, + uint16_t stackId, uint16_t newState) { + /*uint16_t ns, uint16_t ln, uint16_t qn, */ + /*se->namespaceURI = ns; + se->localPart = ln; + se->qname = qn;*/ + /* move on */ + state->grammarStack[state->stackIndex] = stackId; + /* push element on stack */ + return exi__PushStack(state, newState, qnameID); /* se);*/ +} + + +int exiGetLastQName(exi_qname_t** qname) { + *qname = &_qname; + return 0; +} + + +int exiDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) { + uint32_t uint32; + + val->type = lt.type; + + switch(lt.type) { + case EXI_DATATYPE_BINARY_BASE64: + case EXI_DATATYPE_BINARY_HEX: + errn = decodeBinary(stream, &val->binary); + break; + case EXI_DATATYPE_BOOLEAN: + errn = decodeBoolean(stream, &val->boolean); + break; + case EXI_DATATYPE_BOOLEAN_FACET: + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + val->boolean = uint32 > 1; + break; + case EXI_DATATYPE_DECIMAL: + errn = decodeDecimal(stream, &val->decimal); + break; + case EXI_DATATYPE_FLOAT: + errn = decodeFloat(stream, &val->float_me); + break; + case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER: + errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE; + break; + case EXI_DATATYPE_UNSIGNED_INTEGER: + errn = decodeUnsignedInteger(stream, &val->integer); + break; + case EXI_DATATYPE_INTEGER: + errn = decodeInteger(stream, &val->integer); + break; + case EXI_DATATYPE_DATETIME: + errn = decodeDateTime(stream,lt.datetimeType, &val->datetime); + break; + case EXI_DATATYPE_STRING: + errn = decodeStringValue(stream, state, qnameID, &val->str); + break; + default: + return EXI_UNSUPPORTED_LIST_VALUE_TYPE; + } + + return errn; +} + + + + +int exiInitDecoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable) { +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + int i; +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + /* init grammar state */ + state->stackIndex = 0; + state->grammarStack[0] = DOCUMENT; + /* name table */ + state->nameTablePrepopulated = exiNameTablePrepopulated; + state->nameTableRuntime = runtimeTable; + /* next qname ID */ + state->nextQNameID = EXI_NUMBER_OF_PREPOPULATED_QNAMES; + /* string table */ + state->stringTable = stringTable; + state->stringTable.numberOfGlobalStrings = 0; +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + for(i=0; i<(state->stringTable.sizeLocalStrings); i++) { + state->stringTable.numberOfLocalStrings[i] = 0; + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + + /* runtime grammars */ + state->numberOfRuntimeGrammars = 0; + + /* Avoid warning: Unused declaration of variable 'name' */ + xsi = 0; + bits = 0; + + /* decode header */ + return readEXIHeader(stream); +} + +int exiDecodeNextEvent(bitstream_t* stream, exi_state_t* state, + exi_event_t* nextEvent) { + uint16_t codingLength; + uint16_t numberOfProductions; + uint32_t eventCode1; + int16_t ruleID = state->grammarStack[state->stackIndex]; + state->eventCode = 0; + errn = 0; + + switch (ruleID) { + case 83: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + case 491: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 1: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 155: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 576: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 296: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 200: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 201: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 458: + /* StartTag[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 1: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 204: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + case 490: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 647: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + case 692: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 6: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 622: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 126: + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT_GENERIC] */ + errn = decodeNBitUnsignedInteger(stream, 7, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 69: + case 70: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 81: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + case 472: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 536: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 3: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 92: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + case 134: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 156: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 157: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + case 186: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + case 188: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + case 132: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 169: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 3: + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 5: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 24: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 332: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter)] */ + case 98: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + case 446: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + case 146: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 486: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 589: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 463: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus)] */ + case 213: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 8: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 9: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 10: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 4: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 5: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 6: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 313: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 6: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 7: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 3: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 18: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + case 21: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + case 244: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + case 250: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 256: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 257: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + case 206: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + case 323: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 326: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + case 337: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + case 340: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + case 346: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + case 407: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + case 431: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + case 377: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + case 328: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + case 474: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 10: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + case 330: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + case 530: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + case 523: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + case 572: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 565: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + case 587: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + case 448: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + case 348: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 606: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 646: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + case 102: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + case 607: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + case 663: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 438: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + case 361: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + case 320: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + case 288: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + case 597: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 1: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 202: + /* FirstStartTag[ATTRIBUTE[STRING](Name)] */ + case 192: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 187: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 135: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + case 133: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + case 108: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 147: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + case 533: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + case 203: + /* StartTag[ATTRIBUTE[ENUMERATION](ValueType)] */ + case 457: + /* StartTag[ATTRIBUTE[STRING](Target)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 310: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 327: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + case 388: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 585: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 605: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 507: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + case 509: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + case 179: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 1: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + case 6: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge)] */ + case 9: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 29: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + case 39: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + case 43: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule)] */ + case 47: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + case 54: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 58: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + case 61: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + case 63: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + case 67: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 69: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + case 72: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + case 75: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + case 78: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 80: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 86: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 88: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + case 90: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + case 93: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 97: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + case 101: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + case 27: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 110: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 112: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + case 122: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + case 198: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + case 207: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + case 136: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + case 216: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 230: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 233: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + case 234: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved)] */ + case 141: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 237: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 243: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + case 253: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + case 181: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + case 138: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 262: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + case 271: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 182: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 273: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q)] */ + case 280: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter)] */ + case 131: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 284: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 287: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + case 217: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + case 70: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ + case 291: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 298: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 303: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + case 103: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + case 113: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC)] */ + case 176: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 318: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 319: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + case 329: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + case 35: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 143: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 350: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + case 163: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 360: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + case 130: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 7: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow)] */ + case 285: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 259: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + case 369: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + case 68: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + case 376: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + case 378: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 382: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 174: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + case 299: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 386: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 394: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 116: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + case 292: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 412: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + case 417: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + case 345: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit)] */ + case 419: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + case 422: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 309: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + case 433: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 435: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + case 436: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + case 59: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry)] */ + case 441: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit)] */ + case 208: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry)] */ + case 305: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter)] */ + case 453: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + case 455: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage)] */ + case 461: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID)] */ + case 462: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 142: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 466: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 467: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + case 165: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + case 476: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 338: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 477: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 478: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + case 482: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 497: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount)] */ + case 496: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + case 500: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService)] */ + case 501: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + case 177: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + case 506: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + case 91: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue)] */ + case 512: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 514: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + case 107: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod)] */ + case 520: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 195: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 94: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + case 522: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + case 95: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 238: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + case 537: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + case 488: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 521: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 540: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + case 542: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit)] */ + case 128: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + case 170: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + case 172: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + case 263: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent)] */ + case 55: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + case 481: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 556: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 557: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + case 513: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 239: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + case 87: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 158: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 76: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + case 254: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList)] */ + case 564: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 379: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + case 567: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + case 168: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + case 574: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + case 577: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + case 578: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + case 579: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 582: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + case 395: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 260: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + case 586: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + case 49: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + case 590: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + case 592: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + case 26: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + case 356: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + case 596: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + case 166: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 281: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + case 598: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 600: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + case 603: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + case 199: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + case 604: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 524: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 608: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 610: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + case 612: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 614: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved)] */ + case 470: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax)] */ + case 617: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + case 619: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + case 618: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 430: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType)] */ + case 347: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + case 437: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + case 624: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + case 145: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + case 626: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + case 628: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions)] */ + case 71: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + case 632: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + case 638: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + case 342: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry)] */ + case 353: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + case 314: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + case 640: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + case 642: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 277: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 183: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + case 643: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + case 568: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber)] */ + case 167: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 194: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + case 656: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + case 658: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 178: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 661: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent)] */ + case 106: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + case 37: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + case 164: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 669: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + case 662: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent)] */ + case 675: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + case 674: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + case 570: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent)] */ + case 193: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + case 184: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 45: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + case 123: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ + case 548: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved)] */ + case 140: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 396: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + case 442: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit)] */ + case 336: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel)] */ + case 541: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ + case 682: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 683: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent)] */ + case 684: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 2: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount)] */ + case 364: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + case 321: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + case 687: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + case 689: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 411: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter)] */ + case 48: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage)] */ + case 118: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + case 180: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 517: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 696: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + case 700: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + case 144: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + case 703: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + case 355: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + case 456: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent)] */ + case 705: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + case 278: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 0: + /* Document[START_DOCUMENT] */ + case 425: + /* Fragment[START_DOCUMENT] */ + *nextEvent = EXI_EVENT_START_DOCUMENT; + break; + case 621: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 2: + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 127: + /* DocEnd[END_DOCUMENT] */ + *nextEvent = EXI_EVENT_END_DOCUMENT; + break; + case 295: + /* Element[END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 1: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 220: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 264: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 339: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 510: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 267: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 215: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 221: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 190: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + *nextEvent = EXI_EVENT_CHARACTERS; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 4: + /* Element[CHARACTERS[STRING]] */ + case 12: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 32: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 42: + /* Element[CHARACTERS[ENUMERATION]] */ + case 51: + /* Element[CHARACTERS[STRING]] */ + case 57: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 66: + /* Element[CHARACTERS[STRING]] */ + case 77: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 84: + /* Element[CHARACTERS[ENUMERATION]] */ + case 85: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 60: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 100: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 99: + /* Element[CHARACTERS[STRING]] */ + case 104: + /* Element[CHARACTERS[INTEGER]] */ + case 105: + /* StartTag[CHARACTERS[BINARY_BASE64]] */ + case 111: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 120: + /* Element[CHARACTERS[ENUMERATION]] */ + case 210: + /* Element[CHARACTERS[DATETIME]] */ + case 211: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 212: + /* Element[CHARACTERS[INTEGER]] */ + case 219: + /* Element[CHARACTERS[INTEGER]] */ + case 223: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 225: + /* Element[CHARACTERS[BOOLEAN]] */ + case 226: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 229: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 236: + /* Element[CHARACTERS[DATETIME]] */ + case 214: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 246: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 255: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 268: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 269: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 270: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 272: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 282: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 286: + /* FirstStartTag[CHARACTERS[DECIMAL]] */ + case 293: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 294: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 297: + /* Element[CHARACTERS[STRING]] */ + case 300: + /* Element[CHARACTERS[STRING]] */ + case 312: + /* Element[CHARACTERS[INTEGER]] */ + case 322: + /* Element[CHARACTERS[LIST]] */ + case 325: + /* Element[CHARACTERS[DATETIME]] */ + case 334: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 344: + /* Element[CHARACTERS[LIST]] */ + case 351: + /* Element[CHARACTERS[STRING]] */ + case 359: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 331: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 117: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 365: + /* Element[CHARACTERS[ENUMERATION]] */ + case 366: + /* Element[CHARACTERS[INTEGER]] */ + case 367: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 368: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 374: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 375: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 380: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 383: + /* Element[CHARACTERS[INTEGER]] */ + case 384: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 385: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 389: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 114: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 398: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 8: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 403: + /* Element[CHARACTERS[STRING]] */ + case 404: + /* Element[CHARACTERS[STRING]] */ + case 406: + /* Element[CHARACTERS[STRING]] */ + case 23: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 409: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 414: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 418: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 424: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 427: + /* Element[CHARACTERS[ENUMERATION]] */ + case 428: + /* Element[CHARACTERS[STRING]] */ + case 429: + /* Element[CHARACTERS[STRING]] */ + case 439: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 445: + /* Element[CHARACTERS[ENUMERATION]] */ + case 449: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 450: + /* Element[CHARACTERS[STRING]] */ + case 209: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 452: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 454: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 460: + /* Element[CHARACTERS[STRING]] */ + case 459: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 468: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 469: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 475: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 222: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 3: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 483: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 493: + /* Element[CHARACTERS[STRING]] */ + case 495: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 357: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 499: + /* Element[CHARACTERS[DATETIME]] */ + case 498: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 503: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 508: + /* Element[CHARACTERS[DATETIME]] */ + case 65: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 511: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 311: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 515: + /* Element[CHARACTERS[ENUMERATION]] */ + case 518: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 519: + /* Element[CHARACTERS[STRING]] */ + case 525: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 526: + /* Element[CHARACTERS[STRING]] */ + case 527: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 529: + /* Element[CHARACTERS[DECIMAL]] */ + case 534: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 538: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 154: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 546: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 492: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 551: + /* Element[CHARACTERS[LIST]] */ + case 552: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 555: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 559: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 562: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 566: + /* Element[CHARACTERS[INTEGER]] */ + case 571: + /* Element[CHARACTERS[ENUMERATION]] */ + case 575: + /* Element[CHARACTERS[ENUMERATION]] */ + case 583: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 593: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 595: + /* Element[CHARACTERS[FLOAT]] */ + case 611: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 317: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 315: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 308: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 252: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 616: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 620: + /* Element[CHARACTERS[INTEGER]] */ + case 623: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 625: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 627: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 550: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 631: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 630: + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 633: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 11: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 636: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 554: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 641: + /* Element[CHARACTERS[STRING]] */ + case 645: + /* Element[CHARACTERS[FLOAT]] */ + case 148: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 648: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 649: + /* Element[CHARACTERS[ENUMERATION]] */ + case 650: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 591: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 652: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 653: + /* Element[CHARACTERS[STRING]] */ + case 502: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 205: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 31: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 657: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 20: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 659: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 660: + /* Element[CHARACTERS[INTEGER]] */ + case 362: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 17: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 664: + /* Element[CHARACTERS[STRING]] */ + case 665: + /* Element[CHARACTERS[STRING]] */ + case 666: + /* Element[CHARACTERS[DATETIME]] */ + case 667: + /* Element[CHARACTERS[ENUMERATION]] */ + case 545: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 316: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + case 668: + /* Element[CHARACTERS[DATETIME]] */ + case 124: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 672: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 673: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 119: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 637: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 676: + /* Element[CHARACTERS[ENUMERATION]] */ + case 74: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + case 306: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 677: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 266: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 678: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 613: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 679: + /* Element[CHARACTERS[DATETIME]] */ + case 680: + /* Element[CHARACTERS[ENUMERATION]] */ + case 569: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 41: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 635: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 275: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 685: + /* Element[CHARACTERS[ENUMERATION]] */ + case 686: + /* Element[CHARACTERS[STRING]] */ + case 531: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 688: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 690: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 245: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 694: + /* Element[CHARACTERS[INTEGER]] */ + case 695: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 697: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 304: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 698: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 699: + /* Element[CHARACTERS[STRING]] */ + case 159: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + case 701: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 702: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 547: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 704: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 634: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + case 706: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 371: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_CHARACTERS; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 240: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 464: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + case 242: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 7: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 8: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 9: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 241: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 7: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 8: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 9: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 10: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 96: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 247: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 283: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 390: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 405: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 402: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 265: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 392: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 228: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 53: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 644: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 391: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 249: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 681: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 401: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 248: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 1: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 2: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 400: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 399: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 3: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 4: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 5: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 25: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + case 115: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + case 197: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + case 276: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 335: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 341: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules)] */ + case 40: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + case 373: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + case 397: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + case 443: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 451: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + case 465: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + case 162: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 274: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + case 161: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + case 544: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + case 588: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 543: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + case 602: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 615: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + case 434: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + case 487: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + case 580: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + case 175: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 651: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + case 152: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + case 416: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 471: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 535: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 4: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 5: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 426: + /* FragmentContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue), START_ELEMENT_GENERIC, END_DOCUMENT] */ + errn = decodeNBitUnsignedInteger(stream, 8, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + case 35: + case 36: + case 37: + case 38: + case 39: + case 40: + case 41: + case 42: + case 43: + case 44: + case 45: + case 46: + case 47: + case 48: + case 49: + case 50: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 65: + case 66: + case 67: + case 68: + case 69: + case 70: + case 71: + case 72: + case 73: + case 74: + case 75: + case 76: + case 77: + case 78: + case 79: + case 80: + case 81: + case 82: + case 83: + case 84: + case 85: + case 86: + case 87: + case 88: + case 89: + case 90: + case 91: + case 92: + case 93: + case 94: + case 95: + case 96: + case 97: + case 98: + case 99: + case 100: + case 101: + case 102: + case 103: + case 104: + case 105: + case 106: + case 107: + case 108: + case 109: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 138: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: + case 145: + case 146: + case 147: + case 148: + case 149: + case 150: + case 151: + case 152: + case 153: + case 154: + case 155: + case 156: + case 157: + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + case 175: + case 176: + case 177: + case 178: + case 179: + case 180: + case 181: + case 182: + case 183: + case 184: + case 185: + case 186: + case 187: + case 188: + case 189: + case 190: + case 191: + case 192: + case 193: + case 194: + case 195: + case 196: + case 197: + case 198: + case 199: + case 200: + case 201: + case 202: + case 203: + case 204: + case 205: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 212: + case 213: + case 214: + case 215: + case 216: + case 217: + case 218: + case 219: + case 220: + case 221: + case 222: + case 223: + case 224: + case 225: + case 226: + case 227: + case 228: + case 229: + case 230: + case 231: + case 232: + case 233: + case 234: + case 235: + case 236: + case 237: + case 238: + case 239: + case 240: + case 241: + case 242: + case 243: + case 244: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 245: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 246: + *nextEvent = EXI_EVENT_END_DOCUMENT; + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 52: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 227: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 484: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 5: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 196: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + case 549: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 6: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 13: + /* Element[END_ELEMENT] */ + case 46: + /* FirstStartTag[END_ELEMENT] */ + case 50: + /* Element[END_ELEMENT] */ + case 56: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 82: + /* Element[END_ELEMENT] */ + case 109: + /* Element[END_ELEMENT] */ + case 121: + /* Element[END_ELEMENT] */ + case 125: + /* Element[END_ELEMENT] */ + case 137: + /* FirstStartTag[END_ELEMENT] */ + case 30: + /* Element[END_ELEMENT] */ + case 38: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 224: + /* Element[END_ELEMENT] */ + case 185: + /* FirstStartTag[END_ELEMENT] */ + case 232: + /* Element[END_ELEMENT] */ + case 261: + /* Element[END_ELEMENT] */ + case 279: + /* Element[END_ELEMENT] */ + case 343: + /* FirstStartTag[END_ELEMENT] */ + case 129: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 352: + /* Element[END_ELEMENT] */ + case 358: + /* Element[END_ELEMENT] */ + case 381: + /* Element[END_ELEMENT] */ + case 393: + /* FirstStartTag[END_ELEMENT] */ + case 251: + /* Element[END_ELEMENT] */ + case 408: + /* Element[END_ELEMENT] */ + case 410: + /* Element[END_ELEMENT] */ + case 173: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 415: + /* Element[END_ELEMENT] */ + case 420: + /* Element[END_ELEMENT] */ + case 421: + /* Element[END_ELEMENT] */ + case 423: + /* Element[END_ELEMENT] */ + case 432: + /* FirstStartTag[END_ELEMENT] */ + case 440: + /* Element[END_ELEMENT] */ + case 363: + /* Element[END_ELEMENT] */ + case 447: + /* Element[END_ELEMENT] */ + case 22: + /* Element[END_ELEMENT] */ + case 36: + /* Element[END_ELEMENT] */ + case 473: + /* Element[END_ELEMENT] */ + case 480: + /* Element[END_ELEMENT] */ + case 324: + /* Element[END_ELEMENT] */ + case 489: + /* Element[END_ELEMENT] */ + case 444: + /* Element[END_ELEMENT] */ + case 494: + /* Element[END_ELEMENT] */ + case 64: + /* Element[END_ELEMENT] */ + case 150: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 349: + /* Element[END_ELEMENT] */ + case 504: + /* Element[END_ELEMENT] */ + case 354: + /* Element[END_ELEMENT] */ + case 505: + /* Element[END_ELEMENT] */ + case 516: + /* Element[END_ELEMENT] */ + case 528: + /* FirstStartTag[END_ELEMENT] */ + case 89: + /* Element[END_ELEMENT] */ + case 370: + /* Element[END_ELEMENT] */ + case 558: + /* Element[END_ELEMENT] */ + case 372: + /* Element[END_ELEMENT] */ + case 561: + /* FirstStartTag[END_ELEMENT] */ + case 5: + /* Element[END_ELEMENT] */ + case 258: + /* Element[END_ELEMENT] */ + case 581: + /* Element[END_ELEMENT] */ + case 584: + /* Element[END_ELEMENT] */ + case 601: + /* Element[END_ELEMENT] */ + case 609: + /* Element[END_ELEMENT] */ + case 191: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 573: + /* Element[END_ELEMENT] */ + case 149: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 629: + /* Element[END_ELEMENT] */ + case 16: + /* Element[END_ELEMENT] */ + case 231: + /* Element[END_ELEMENT] */ + case 639: + /* FirstStartTag[END_ELEMENT] */ + case 307: + /* Element[END_ELEMENT] */ + case 302: + /* Element[END_ELEMENT] */ + case 655: + /* Element[END_ELEMENT] */ + case 413: + /* Element[END_ELEMENT] */ + case 289: + /* Element[END_ELEMENT] */ + case 28: + /* Element[END_ELEMENT] */ + case 532: + /* Element[END_ELEMENT] */ + case 479: + /* Element[END_ELEMENT] */ + case 671: + /* Element[END_ELEMENT] */ + case 670: + /* Element[END_ELEMENT] */ + case 333: + /* Element[END_ELEMENT] */ + case 563: + /* Element[END_ELEMENT] */ + case 79: + /* Element[END_ELEMENT] */ + case 151: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 654: + /* Element[END_ELEMENT] */ + case 553: + /* Element[END_ELEMENT] */ + case 387: + /* Element[END_ELEMENT] */ + case 19: + /* Element[END_ELEMENT] */ + case 73: + /* Element[END_ELEMENT] */ + case 560: + /* Element[END_ELEMENT] */ + case 691: + /* FirstStartTag[END_ELEMENT] */ + case 594: + /* Element[END_ELEMENT] */ + case 539: + /* Element[END_ELEMENT] */ + case 693: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 301: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + case 290: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 6, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + case 24: + case 25: + case 26: + case 27: + case 28: + case 29: + case 30: + case 31: + case 32: + case 33: + case 34: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 35: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 36: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 485: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 189: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Target)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + + default: + if(ruleID < 0) { + /* built-in element grammar */ + numberOfProductions = state->runtimeGrammars[(ruleID + 1)*(-1)].numberOfProductions; + if(numberOfProductions > 0) { + /* decode 1st level event code */ + errn = exiGetCodingLength(numberOfProductions + 1, &codingLength); + if(errn) { + return errn; + } + errn = decodeNBitUnsignedInteger(stream, codingLength, &eventCode1); + if(errn) { + return errn; + } + + if(eventCode1 == numberOfProductions) { + /* 2nd level */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + } else { + /* 1st level event not supported in profile */ + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + } + } else { + errn = exiDecodeNext2Event(stream, state, nextEvent); + } + } else { + *nextEvent = EXI_EVENT_ERROR; + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + } + break; + } + + currEvent = *nextEvent; + return errn; +} + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiDecodeStartDocument(bitstream_t* stream, exi_state_t* state) { + if ( state->grammarStack[state->stackIndex] == 0 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 126; + return 0; + } + if ( state->grammarStack[state->stackIndex] == 425 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 426; + return 0; + } + + return EXI_ERROR_UNEXPECTED_START_DOCUMENT; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiDecodeEndDocument(bitstream_t* stream, exi_state_t* state) { + if ( state->grammarStack[state->stackIndex] == 127) { + return 0; + } + if ( state->grammarStack[state->stackIndex] == 426) { + return 0; + } + + return EXI_ERROR_UNEXPECTED_END_DOCUMENT; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + + +int exiDecodeStartElement(bitstream_t* stream, exi_state_t* state, + uint16_t* qnameID) { + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + + switch(currEvent) { + case EXI_EVENT_START_ELEMENT: + switch (state->grammarStack[state->stackIndex]) { + case 1: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 404, 2, 3); + break; + } + break; + case 2: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 398, 21, 627); + break; + } + break; + case 6: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 189, 7, 8); + break; + } + break; + case 7: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 170, 232, 334); + break; + } + break; + case 9: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 257, 10, 11); + break; + } + break; + case 10: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 392, 421, 110); + break; + } + break; + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 16, 17); + break; + } + break; + case 18: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 407, 19, 20); + break; + } + break; + case 21: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 399, 22, 23); + break; + } + break; + case 24: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 213, 25, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 212, 27, 26); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 188, 28, 26); + break; + } + break; + case 25: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 212, 27, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 188, 28, 26); + break; + } + break; + case 26: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 336, 544, 23); + break; + } + break; + case 27: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 188, 28, 26); + break; + } + break; + case 29: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 185, 30, 31); + break; + } + break; + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 151, 34, 35); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 270, 36, 37); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 294, 36, 38); + break; + } + break; + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 270, 36, 37); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 294, 36, 38); + break; + } + break; + case 35: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 366, 342, 209); + break; + } + break; + case 37: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 277, 580, 145); + break; + } + break; + case 39: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 236, 40, 41); + break; + } + break; + case 40: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 216, 353, 209); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 191, 354, 355); + break; + } + break; + case 43: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 341, 44, 45); + break; + } + break; + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 370, 532, 533); + break; + } + break; + case 45: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 344, 208, 209); + break; + } + break; + case 47: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 253, 48, 49); + break; + } + break; + case 48: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 306, 661, 26); + break; + } + break; + case 49: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 355, 541, 74); + break; + } + break; + case 54: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 55, 17); + break; + } + break; + case 55: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 185, 341, 31); + break; + } + break; + case 58: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 339, 59, 60); + break; + } + break; + case 59: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 372, 438, 175); + break; + } + break; + case 61: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 315, 62, 26); + break; + } + break; + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 303, 539, 26); + break; + } + break; + case 63: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 228, 64, 65); + break; + } + break; + case 67: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 188, 68, 26); + break; + } + break; + case 68: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 187, 372, 26); + break; + } + break; + case 69: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 441, 70, 71); + break; + } + break; + case 70: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 437, 289, 290); + break; + } + break; + case 71: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 445, 507, 41); + break; + } + break; + case 72: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 259, 73, 74); + break; + } + break; + case 75: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 211, 76, 74); + break; + } + break; + case 76: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 131, 560, 49); + break; + } + break; + case 78: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 79, 17); + break; + } + break; + case 80: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 257, 81, 11); + break; + } + break; + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 257, 81, 11); + break; + } + break; + case 86: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 87, 17); + break; + } + break; + case 87: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 167, 412, 115); + break; + } + break; + case 88: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 184, 89, 26); + break; + } + break; + case 90: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 113, 91, 92); + break; + } + break; + case 91: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 111, 509, 190); + break; + } + break; + case 92: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 61, 107, 108); + break; + } + break; + case 93: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 387, 94, 95); + break; + } + break; + case 94: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 328, 505, 74); + break; + } + break; + case 95: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 383, 434, 65); + break; + } + break; + case 97: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 298, 98, 74); + break; + } + break; + case 98: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 282, 197, 74); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 296, 112, 74); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 287, 113, 114); + break; + } + break; + case 101: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 348, 102, 103); + break; + } + break; + case 102: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 348, 102, 103); + break; + } + break; + case 103: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 349, 305, 306); + break; + } + break; + case 106: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 61, 107, 108); + break; + } + break; + case 107: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 104, 517, 187); + break; + } + break; + case 110: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 257, 81, 11); + break; + } + break; + case 112: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 287, 113, 114); + break; + } + break; + case 113: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 297, 307, 308); + break; + } + break; + case 115: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 304, 116, 117); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 318, 118, 119); + break; + } + break; + case 116: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 318, 118, 119); + break; + } + break; + case 118: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 337, 478, 12); + break; + } + break; + case 122: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 261, 123, 124); + break; + } + break; + case 123: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 260, 224, 613); + break; + } + break; + case 126: + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT_GENERIC] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 249, 127, 128); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 251, 127, 47); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 253, 127, 49); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 439, 127, 129); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 133, 127, 130); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 135, 127, 131); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 61, 127, 108); + break; + case 7: + errn = _exiDecodeStartElement(state, *qnameID = 137, 127, 132); + break; + case 8: + errn = _exiDecodeStartElement(state, *qnameID = 139, 127, 133); + break; + case 9: + errn = _exiDecodeStartElement(state, *qnameID = 141, 127, 134); + break; + case 10: + errn = _exiDecodeStartElement(state, *qnameID = 143, 127, 135); + break; + case 11: + errn = _exiDecodeStartElement(state, *qnameID = 145, 127, 136); + break; + case 12: + errn = _exiDecodeStartElement(state, *qnameID = 147, 127, 54); + break; + case 13: + errn = _exiDecodeStartElement(state, *qnameID = 152, 127, 137); + break; + case 14: + errn = _exiDecodeStartElement(state, *qnameID = 154, 127, 138); + break; + case 15: + errn = _exiDecodeStartElement(state, *qnameID = 156, 127, 139); + break; + case 16: + errn = _exiDecodeStartElement(state, *qnameID = 158, 127, 140); + break; + case 17: + errn = _exiDecodeStartElement(state, *qnameID = 163, 127, 141); + break; + case 18: + errn = _exiDecodeStartElement(state, *qnameID = 165, 127, 142); + break; + case 19: + errn = _exiDecodeStartElement(state, *qnameID = 267, 127, 143); + break; + case 20: + errn = _exiDecodeStartElement(state, *qnameID = 270, 127, 37); + break; + case 21: + errn = _exiDecodeStartElement(state, *qnameID = 272, 127, 144); + break; + case 22: + errn = _exiDecodeStartElement(state, *qnameID = 274, 127, 115); + break; + case 23: + errn = _exiDecodeStartElement(state, *qnameID = 277, 127, 145); + break; + case 24: + errn = _exiDecodeStartElement(state, *qnameID = 64, 127, 146); + break; + case 25: + errn = _exiDecodeStartElement(state, *qnameID = 66, 127, 147); + break; + case 26: + errn = _exiDecodeStartElement(state, *qnameID = 68, 127, 148); + break; + case 27: + errn = _exiDecodeStartElement(state, *qnameID = 283, 127, 149); + break; + case 28: + errn = _exiDecodeStartElement(state, *qnameID = 294, 127, 38); + break; + case 29: + errn = _exiDecodeStartElement(state, *qnameID = 300, 127, 56); + break; + case 30: + errn = _exiDecodeStartElement(state, *qnameID = 317, 127, 150); + break; + case 31: + errn = _exiDecodeStartElement(state, *qnameID = 321, 127, 151); + break; + case 32: + errn = _exiDecodeStartElement(state, *qnameID = 324, 127, 152); + break; + case 33: + errn = _exiDecodeStartElement(state, *qnameID = 75, 127, 153); + break; + case 34: + errn = _exiDecodeStartElement(state, *qnameID = 77, 127, 154); + break; + case 35: + errn = _exiDecodeStartElement(state, *qnameID = 78, 127, 155); + break; + case 36: + errn = _exiDecodeStartElement(state, *qnameID = 80, 127, 156); + break; + case 37: + errn = _exiDecodeStartElement(state, *qnameID = 192, 127, 157); + break; + case 38: + errn = _exiDecodeStartElement(state, *qnameID = 194, 127, 158); + break; + case 39: + errn = _exiDecodeStartElement(state, *qnameID = 82, 127, 159); + break; + case 40: + errn = _exiDecodeStartElement(state, *qnameID = 84, 127, 160); + break; + case 41: + errn = _exiDecodeStartElement(state, *qnameID = 87, 127, 161); + break; + case 42: + errn = _exiDecodeStartElement(state, *qnameID = 342, 127, 162); + break; + case 43: + errn = _exiDecodeStartElement(state, *qnameID = 197, 127, 163); + break; + case 44: + errn = _exiDecodeStartElement(state, *qnameID = 199, 127, 164); + break; + case 45: + errn = _exiDecodeStartElement(state, *qnameID = 202, 127, 165); + break; + case 46: + errn = _exiDecodeStartElement(state, *qnameID = 204, 127, 166); + break; + case 47: + errn = _exiDecodeStartElement(state, *qnameID = 206, 127, 167); + break; + case 48: + errn = _exiDecodeStartElement(state, *qnameID = 208, 127, 86); + break; + case 49: + errn = _exiDecodeStartElement(state, *qnameID = 93, 127, 168); + break; + case 50: + errn = _exiDecodeStartElement(state, *qnameID = 95, 127, 169); + break; + case 51: + errn = _exiDecodeStartElement(state, *qnameID = 359, 127, 170); + break; + case 52: + errn = _exiDecodeStartElement(state, *qnameID = 97, 127, 171); + break; + case 53: + errn = _exiDecodeStartElement(state, *qnameID = 363, 127, 172); + break; + case 54: + errn = _exiDecodeStartElement(state, *qnameID = 368, 127, 173); + break; + case 55: + errn = _exiDecodeStartElement(state, *qnameID = 99, 127, 174); + break; + case 56: + errn = _exiDecodeStartElement(state, *qnameID = 372, 127, 175); + break; + case 57: + errn = _exiDecodeStartElement(state, *qnameID = 381, 127, 176); + break; + case 58: + errn = _exiDecodeStartElement(state, *qnameID = 220, 127, 177); + break; + case 59: + errn = _exiDecodeStartElement(state, *qnameID = 222, 127, 178); + break; + case 60: + errn = _exiDecodeStartElement(state, *qnameID = 224, 127, 179); + break; + case 61: + errn = _exiDecodeStartElement(state, *qnameID = 226, 127, 180); + break; + case 62: + errn = _exiDecodeStartElement(state, *qnameID = 231, 127, 181); + break; + case 63: + errn = _exiDecodeStartElement(state, *qnameID = 233, 127, 182); + break; + case 64: + errn = _exiDecodeStartElement(state, *qnameID = 237, 127, 183); + break; + case 65: + errn = _exiDecodeStartElement(state, *qnameID = 239, 127, 184); + break; + case 66: + errn = _exiDecodeStartElement(state, *qnameID = 241, 127, 185); + break; + case 67: + errn = _exiDecodeStartElement(state, *qnameID = 242, 127, 78); + break; + case 68: + errn = _exiDecodeStartElement(state, *qnameID = 103, 127, 186); + break; + case 69: + errn = _exiDecodeStartElement(state, *qnameID = 104, 127, 187); + break; + case 70: + errn = _exiDecodeStartElement(state, *qnameID = 106, 127, 188); + break; + case 71: + errn = _exiDecodeStartElement(state, *qnameID = 108, 127, 189); + break; + case 72: + errn = _exiDecodeStartElement(state, *qnameID = 111, 127, 190); + break; + case 73: + errn = _exiDecodeStartElement(state, *qnameID = 113, 127, 92); + break; + case 74: + errn = _exiDecodeStartElement(state, *qnameID = 395, 127, 191); + break; + case 75: + errn = _exiDecodeStartElement(state, *qnameID = 115, 127, 192); + break; + case 76: + errn = _exiDecodeStartElement(state, *qnameID = 117, 127, 193); + break; + case 77: + errn = _exiDecodeStartElement(state, *qnameID = 442, 127, 69); + break; + case 78: + errn = _exiDecodeStartElement(state, *qnameID = 245, 127, 194); + break; + case 79: + errn = _exiDecodeStartElement(state, *qnameID = 247, 127, 195); + break; + case 80: + errn = _exiDecodeStartElement(state, *qnameID = 121, 127, 196); + break; + } + break; + case 128: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 279, 497, 545); + break; + } + break; + case 130: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 363, 145); + break; + } + break; + case 131: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 281, 17); + break; + } + break; + case 132: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 196, 199, 11); + break; + } + break; + case 134: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 161, 396, 9); + break; + } + break; + case 136: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 175, 213, 214); + break; + } + break; + case 138: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 260, 17); + break; + } + break; + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 189, 349, 8); + break; + } + break; + case 140: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 379, 17); + break; + } + break; + case 141: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 239, 145); + break; + } + break; + case 142: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 271, 17); + break; + } + break; + case 143: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 277, 345, 145); + break; + } + break; + case 144: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 274, 542, 115); + break; + } + break; + case 145: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 298, 98, 74); + break; + } + break; + case 146: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 86, 273, 275); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 71, 481, 275); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 130, 327, 275); + break; + } + break; + case 152: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 444, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 444, 191); + break; + } + break; + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 77, 241, 154); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 78, 241, 155); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 97, 241, 171); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 121, 241, 196); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 87, 241, 161); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 99, 241, 174); + break; + case 7: + errn = _exiDecodeStartElement(state, *qnameID = 82, 241, 159); + break; + } + break; + case 155: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 64, 295, 146); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 93, 295, 168); + break; + } + break; + case 156: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 95, 565, 169); + break; + } + break; + case 157: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 236, 40, 41); + break; + } + break; + case 158: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 419, 17); + break; + } + break; + case 161: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 89, 490, 246); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 90, 491, 492); + break; + } + break; + case 162: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 470, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 470, 191); + break; + } + break; + case 163: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 160, 356, 357); + break; + } + break; + case 164: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 6, 17); + break; + } + break; + case 165: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 210, 33, 74); + break; + } + break; + case 166: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 463, 17); + break; + } + break; + case 167: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 67, 145); + break; + } + break; + case 168: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 83, 570, 275); + break; + } + break; + case 169: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 117, 277, 193); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 66, 278, 147); + break; + } + break; + case 170: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 430, 18, 547); + break; + } + break; + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(state->eventCode) { + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 117, 82, 193); + break; + } + break; + case 172: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 365, 320, 321); + break; + } + break; + case 174: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 101, 204, 205); + break; + } + break; + case 175: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 336, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 336, 191); + break; + } + break; + case 176: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 387, 309, 95); + break; + } + break; + case 177: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 228, 64, 65); + break; + } + break; + case 178: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 217, 17); + break; + } + break; + case 179: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 235, 572, 518); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 219, 573, 85); + break; + } + break; + case 180: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 628, 17); + break; + } + break; + case 181: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 217, 254, 245); + break; + } + break; + case 182: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 16, 17); + break; + } + break; + case 183: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 171, 629, 223); + break; + } + break; + case 184: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 238, 17); + break; + } + break; + case 186: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 113, 91, 92); + break; + } + break; + case 188: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 108, 377, 189); + break; + } + break; + case 193: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 115, 431, 192); + break; + } + break; + case 194: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 231, 145); + break; + } + break; + case 195: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 521, 17); + break; + } + break; + case 196: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 124, 313, 314); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 126, 313, 77); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 128, 313, 315); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 120, 313, 316); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 119, 313, 317); + break; + } + break; + case 197: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 296, 112, 74); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 287, 113, 114); + break; + } + break; + case 198: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 196, 199, 11); + break; + } + break; + case 199: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 190, 386, 360); + break; + } + break; + case 204: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 101, 204, 205); + break; + } + break; + case 206: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 101, 204, 205); + break; + } + break; + case 207: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 344, 208, 209); + break; + } + break; + case 208: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 342, 448, 162); + break; + } + break; + case 213: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 249, 670, 128); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 267, 670, 143); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 283, 670, 149); + break; + } + break; + case 215: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 129, 221, 222); + break; + } + break; + case 216: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 217, 17); + break; + } + break; + case 217: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 228, 288, 65); + break; + } + break; + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 265, 218, 1); + break; + } + break; + case 220: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 129, 221, 222); + break; + } + break; + case 221: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 129, 221, 222); + break; + } + break; + case 230: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 231, 145); + break; + } + break; + case 233: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 175, 213, 214); + break; + } + break; + case 234: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 182, 235, 74); + break; + } + break; + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 181, 605, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 179, 606, 26); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 180, 516, 26); + break; + } + break; + case 237: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 238, 17); + break; + } + break; + case 238: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 177, 530, 531); + break; + } + break; + case 239: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 187, 484, 26); + break; + } + break; + case 240: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 77, 241, 154); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 78, 241, 155); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 97, 241, 171); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 121, 241, 196); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 87, 241, 161); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 99, 241, 174); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 82, 241, 159); + break; + } + break; + case 241: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 77, 241, 154); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 78, 241, 155); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 97, 241, 171); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 121, 241, 196); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 87, 241, 161); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 99, 241, 174); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 82, 241, 159); + break; + } + break; + case 242: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 77, 241, 154); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 78, 241, 155); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 97, 241, 171); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 121, 241, 196); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 87, 241, 161); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 99, 241, 174); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 82, 241, 159); + break; + } + break; + case 243: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 257, 10, 11); + break; + } + break; + case 244: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 352, 244, 245); + break; + } + break; + case 250: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 394, 251, 252); + break; + } + break; + case 253: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 352, 244, 245); + break; + } + break; + case 254: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 218, 494, 522); + break; + } + break; + case 256: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 117, 82, 193); + break; + } + break; + case 257: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 229, 258, 259); + break; + } + break; + case 259: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 379, 337, 338); + break; + } + break; + case 260: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 177, 461, 531); + break; + } + break; + case 262: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 184, 263, 26); + break; + } + break; + case 263: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 183, 548, 26); + break; + } + break; + case 264: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 72, 265, 266); + break; + } + break; + case 267: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 72, 265, 266); + break; + } + break; + case 271: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 167, 262, 115); + break; + } + break; + case 273: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 92, 274, 275); + break; + } + break; + case 274: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 71, 481, 275); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 130, 327, 275); + break; + } + break; + case 276: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 117, 277, 193); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 66, 278, 147); + break; + } + break; + case 277: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 66, 278, 147); + break; + } + break; + case 278: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 68, 601, 148); + break; + } + break; + case 280: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 91, 125, 275); + break; + } + break; + case 281: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 167, 29, 115); + break; + } + break; + case 284: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 285, 17); + break; + } + break; + case 285: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 161, 364, 9); + break; + } + break; + case 287: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 253, 48, 49); + break; + } + break; + case 288: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 230, 558, 101); + break; + } + break; + case 290: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 439, 302, 129); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 133, 302, 130); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 135, 302, 131); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 137, 302, 132); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 139, 302, 133); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 141, 302, 134); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 143, 302, 135); + break; + case 7: + errn = _exiDecodeStartElement(state, *qnameID = 145, 302, 136); + break; + case 8: + errn = _exiDecodeStartElement(state, *qnameID = 147, 302, 54); + break; + case 9: + errn = _exiDecodeStartElement(state, *qnameID = 152, 302, 137); + break; + case 10: + errn = _exiDecodeStartElement(state, *qnameID = 154, 302, 138); + break; + case 11: + errn = _exiDecodeStartElement(state, *qnameID = 156, 302, 139); + break; + case 12: + errn = _exiDecodeStartElement(state, *qnameID = 158, 302, 140); + break; + case 13: + errn = _exiDecodeStartElement(state, *qnameID = 163, 302, 141); + break; + case 14: + errn = _exiDecodeStartElement(state, *qnameID = 165, 302, 142); + break; + case 15: + errn = _exiDecodeStartElement(state, *qnameID = 192, 302, 157); + break; + case 16: + errn = _exiDecodeStartElement(state, *qnameID = 194, 302, 158); + break; + case 17: + errn = _exiDecodeStartElement(state, *qnameID = 197, 302, 163); + break; + case 18: + errn = _exiDecodeStartElement(state, *qnameID = 199, 302, 164); + break; + case 19: + errn = _exiDecodeStartElement(state, *qnameID = 202, 302, 165); + break; + case 20: + errn = _exiDecodeStartElement(state, *qnameID = 204, 302, 166); + break; + case 21: + errn = _exiDecodeStartElement(state, *qnameID = 206, 302, 167); + break; + case 22: + errn = _exiDecodeStartElement(state, *qnameID = 208, 302, 86); + break; + case 23: + errn = _exiDecodeStartElement(state, *qnameID = 220, 302, 177); + break; + case 24: + errn = _exiDecodeStartElement(state, *qnameID = 222, 302, 178); + break; + case 25: + errn = _exiDecodeStartElement(state, *qnameID = 224, 302, 179); + break; + case 26: + errn = _exiDecodeStartElement(state, *qnameID = 226, 302, 180); + break; + case 27: + errn = _exiDecodeStartElement(state, *qnameID = 231, 302, 181); + break; + case 28: + errn = _exiDecodeStartElement(state, *qnameID = 233, 302, 182); + break; + case 29: + errn = _exiDecodeStartElement(state, *qnameID = 237, 302, 183); + break; + case 30: + errn = _exiDecodeStartElement(state, *qnameID = 239, 302, 184); + break; + case 31: + errn = _exiDecodeStartElement(state, *qnameID = 241, 302, 185); + break; + case 32: + errn = _exiDecodeStartElement(state, *qnameID = 242, 302, 78); + break; + case 33: + errn = _exiDecodeStartElement(state, *qnameID = 245, 302, 194); + break; + case 34: + errn = _exiDecodeStartElement(state, *qnameID = 247, 302, 195); + break; + } + break; + case 291: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 169, 292, 269); + break; + } + break; + case 292: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 160, 411, 357); + break; + } + break; + case 296: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 64, 295, 146); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 93, 295, 168); + break; + } + break; + case 298: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 299, 17); + break; + } + break; + case 299: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 161, 303, 9); + break; + } + break; + case 301: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 439, 302, 129); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 133, 302, 130); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 135, 302, 131); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 137, 302, 132); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 139, 302, 133); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 141, 302, 134); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 143, 302, 135); + break; + case 7: + errn = _exiDecodeStartElement(state, *qnameID = 145, 302, 136); + break; + case 8: + errn = _exiDecodeStartElement(state, *qnameID = 147, 302, 54); + break; + case 9: + errn = _exiDecodeStartElement(state, *qnameID = 152, 302, 137); + break; + case 10: + errn = _exiDecodeStartElement(state, *qnameID = 154, 302, 138); + break; + case 11: + errn = _exiDecodeStartElement(state, *qnameID = 156, 302, 139); + break; + case 12: + errn = _exiDecodeStartElement(state, *qnameID = 158, 302, 140); + break; + case 13: + errn = _exiDecodeStartElement(state, *qnameID = 163, 302, 141); + break; + case 14: + errn = _exiDecodeStartElement(state, *qnameID = 165, 302, 142); + break; + case 15: + errn = _exiDecodeStartElement(state, *qnameID = 192, 302, 157); + break; + case 16: + errn = _exiDecodeStartElement(state, *qnameID = 194, 302, 158); + break; + case 17: + errn = _exiDecodeStartElement(state, *qnameID = 197, 302, 163); + break; + case 18: + errn = _exiDecodeStartElement(state, *qnameID = 199, 302, 164); + break; + case 19: + errn = _exiDecodeStartElement(state, *qnameID = 202, 302, 165); + break; + case 20: + errn = _exiDecodeStartElement(state, *qnameID = 204, 302, 166); + break; + case 21: + errn = _exiDecodeStartElement(state, *qnameID = 206, 302, 167); + break; + case 22: + errn = _exiDecodeStartElement(state, *qnameID = 208, 302, 86); + break; + case 23: + errn = _exiDecodeStartElement(state, *qnameID = 220, 302, 177); + break; + case 24: + errn = _exiDecodeStartElement(state, *qnameID = 222, 302, 178); + break; + case 25: + errn = _exiDecodeStartElement(state, *qnameID = 224, 302, 179); + break; + case 26: + errn = _exiDecodeStartElement(state, *qnameID = 226, 302, 180); + break; + case 27: + errn = _exiDecodeStartElement(state, *qnameID = 231, 302, 181); + break; + case 28: + errn = _exiDecodeStartElement(state, *qnameID = 233, 302, 182); + break; + case 29: + errn = _exiDecodeStartElement(state, *qnameID = 237, 302, 183); + break; + case 30: + errn = _exiDecodeStartElement(state, *qnameID = 239, 302, 184); + break; + case 31: + errn = _exiDecodeStartElement(state, *qnameID = 241, 302, 185); + break; + case 32: + errn = _exiDecodeStartElement(state, *qnameID = 242, 302, 78); + break; + case 33: + errn = _exiDecodeStartElement(state, *qnameID = 245, 302, 194); + break; + case 34: + errn = _exiDecodeStartElement(state, *qnameID = 247, 302, 195); + break; + } + break; + case 303: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 162, 291, 304); + break; + } + break; + case 305: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 347, 340, 202); + break; + } + break; + case 309: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 328, 430, 74); + break; + } + break; + case 310: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 335, 250, 311); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 394, 251, 252); + break; + } + break; + case 313: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 124, 313, 314); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 126, 313, 77); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 128, 313, 315); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 120, 313, 316); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 119, 313, 317); + break; + } + break; + case 314: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 123, 568, 569); + break; + } + break; + case 318: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 299, 17); + break; + } + break; + case 319: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 365, 320, 321); + break; + } + break; + case 320: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 365, 320, 321); + break; + } + break; + case 321: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 366, 43, 209); + break; + } + break; + case 323: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 256, 324, 308); + break; + } + break; + case 326: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 84, 326, 160); + break; + } + break; + case 327: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 74, 328, 275); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 102, 280, 275); + break; + } + break; + case 328: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 102, 280, 275); + break; + } + break; + case 329: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 326, 330, 331); + break; + } + break; + case 330: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 327, 420, 550); + break; + } + break; + case 332: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 251, 333, 47); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 272, 333, 144); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 300, 333, 56); + break; + } + break; + case 335: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 336, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 336, 191); + break; + } + break; + case 336: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 281, 346, 60); + break; + } + break; + case 337: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 379, 337, 338); + break; + } + break; + case 338: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 387, 94, 95); + break; + } + break; + case 339: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 72, 265, 266); + break; + } + break; + case 340: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 347, 340, 202); + break; + } + break; + case 341: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 363, 332, 172); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 368, 332, 173); + break; + } + break; + case 342: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 356, 587, 537); + break; + } + break; + case 345: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 290, 416, 26); + break; + } + break; + case 346: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 263, 346, 347); + break; + } + break; + case 347: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 431, 218, 552); + break; + } + break; + case 348: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 189, 349, 8); + break; + } + break; + case 350: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 113, 91, 92); + break; + } + break; + case 353: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 191, 354, 355); + break; + } + break; + case 355: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 332, 535, 100); + break; + } + break; + case 356: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 161, 594, 9); + break; + } + break; + case 360: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 361, 361, 362); + break; + } + break; + case 361: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 361, 361, 362); + break; + } + break; + case 364: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 162, 512, 304); + break; + } + break; + case 369: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 313, 370, 371); + break; + } + break; + case 373: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 191, 75, 355); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 211, 76, 74); + break; + } + break; + case 376: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 108, 377, 189); + break; + } + break; + case 377: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 108, 377, 189); + break; + } + break; + case 378: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 379, 17); + break; + } + break; + case 379: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 185, 563, 31); + break; + } + break; + case 382: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 387, 94, 95); + break; + } + break; + case 386: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 169, 387, 269); + break; + } + break; + case 388: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 329, 323, 308); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 256, 324, 308); + break; + } + break; + case 394: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 239, 145); + break; + } + break; + case 395: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 161, 396, 9); + break; + } + break; + case 396: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 160, 436, 357); + break; + } + break; + case 397: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 302, 61, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 315, 62, 26); + break; + } + break; + case 407: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 95, 407, 169); + break; + } + break; + case 411: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 215, 671, 616); + break; + } + break; + case 412: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 184, 413, 26); + break; + } + break; + case 416: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 291, 578, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 292, 471, 26); + break; + } + break; + case 417: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 196, 199, 11); + break; + } + break; + case 419: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 131, 109, 49); + break; + } + break; + case 422: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 363, 145); + break; + } + break; + case 426: + /* FragmentContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue), START_ELEMENT_GENERIC, END_DOCUMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 249, 426, 128); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 251, 426, 47); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 131, 426, 49); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 253, 426, 49); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 437, 426, 290); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 439, 426, 129); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 132, 426, 74); + break; + case 7: + errn = _exiDecodeStartElement(state, *qnameID = 255, 426, 74); + break; + case 8: + errn = _exiDecodeStartElement(state, *qnameID = 256, 426, 308); + break; + case 9: + errn = _exiDecodeStartElement(state, *qnameID = 133, 426, 130); + break; + case 10: + errn = _exiDecodeStartElement(state, *qnameID = 135, 426, 131); + break; + case 11: + errn = _exiDecodeStartElement(state, *qnameID = 61, 426, 108); + break; + case 12: + errn = _exiDecodeStartElement(state, *qnameID = 257, 426, 11); + break; + case 13: + errn = _exiDecodeStartElement(state, *qnameID = 137, 426, 132); + break; + case 14: + errn = _exiDecodeStartElement(state, *qnameID = 139, 426, 133); + break; + case 15: + errn = _exiDecodeStartElement(state, *qnameID = 141, 426, 134); + break; + case 16: + errn = _exiDecodeStartElement(state, *qnameID = 143, 426, 135); + break; + case 17: + errn = _exiDecodeStartElement(state, *qnameID = 145, 426, 136); + break; + case 18: + errn = _exiDecodeStartElement(state, *qnameID = 147, 426, 54); + break; + case 19: + errn = _exiDecodeStartElement(state, *qnameID = 149, 426, 176); + break; + case 20: + errn = _exiDecodeStartElement(state, *qnameID = 150, 426, 74); + break; + case 21: + errn = _exiDecodeStartElement(state, *qnameID = 259, 426, 74); + break; + case 22: + errn = _exiDecodeStartElement(state, *qnameID = 151, 426, 35); + break; + case 23: + errn = _exiDecodeStartElement(state, *qnameID = 260, 426, 613); + break; + case 24: + errn = _exiDecodeStartElement(state, *qnameID = 261, 426, 124); + break; + case 25: + errn = _exiDecodeStartElement(state, *qnameID = 152, 426, 137); + break; + case 26: + errn = _exiDecodeStartElement(state, *qnameID = 154, 426, 138); + break; + case 27: + errn = _exiDecodeStartElement(state, *qnameID = 263, 426, 347); + break; + case 28: + errn = _exiDecodeStartElement(state, *qnameID = 156, 426, 139); + break; + case 29: + errn = _exiDecodeStartElement(state, *qnameID = 158, 426, 140); + break; + case 30: + errn = _exiDecodeStartElement(state, *qnameID = 160, 426, 357); + break; + case 31: + errn = _exiDecodeStartElement(state, *qnameID = 161, 426, 9); + break; + case 32: + errn = _exiDecodeStartElement(state, *qnameID = 162, 426, 304); + break; + case 33: + errn = _exiDecodeStartElement(state, *qnameID = 265, 426, 1); + break; + case 34: + errn = _exiDecodeStartElement(state, *qnameID = 163, 426, 141); + break; + case 35: + errn = _exiDecodeStartElement(state, *qnameID = 165, 426, 142); + break; + case 36: + errn = _exiDecodeStartElement(state, *qnameID = 267, 426, 143); + break; + case 37: + errn = _exiDecodeStartElement(state, *qnameID = 270, 426, 37); + break; + case 38: + errn = _exiDecodeStartElement(state, *qnameID = 272, 426, 144); + break; + case 39: + errn = _exiDecodeStartElement(state, *qnameID = 167, 426, 115); + break; + case 40: + errn = _exiDecodeStartElement(state, *qnameID = 274, 426, 115); + break; + case 41: + errn = _exiDecodeStartElement(state, *qnameID = 168, 426, 145); + break; + case 42: + errn = _exiDecodeStartElement(state, *qnameID = 277, 426, 145); + break; + case 43: + errn = _exiDecodeStartElement(state, *qnameID = 169, 426, 269); + break; + case 44: + errn = _exiDecodeStartElement(state, *qnameID = 64, 426, 146); + break; + case 45: + errn = _exiDecodeStartElement(state, *qnameID = 170, 426, 554); + break; + case 46: + errn = _exiDecodeStartElement(state, *qnameID = 279, 426, 545); + break; + case 47: + errn = _exiDecodeStartElement(state, *qnameID = 66, 426, 147); + break; + case 48: + errn = _exiDecodeStartElement(state, *qnameID = 68, 426, 148); + break; + case 49: + errn = _exiDecodeStartElement(state, *qnameID = 280, 426, 26); + break; + case 50: + errn = _exiDecodeStartElement(state, *qnameID = 281, 426, 60); + break; + case 51: + errn = _exiDecodeStartElement(state, *qnameID = 171, 426, 223); + break; + case 52: + errn = _exiDecodeStartElement(state, *qnameID = 282, 426, 74); + break; + case 53: + errn = _exiDecodeStartElement(state, *qnameID = 283, 426, 149); + break; + case 54: + errn = _exiDecodeStartElement(state, *qnameID = 285, 426, 26); + break; + case 55: + errn = _exiDecodeStartElement(state, *qnameID = 286, 426, 26); + break; + case 56: + errn = _exiDecodeStartElement(state, *qnameID = 287, 426, 114); + break; + case 57: + errn = _exiDecodeStartElement(state, *qnameID = 288, 426, 26); + break; + case 58: + errn = _exiDecodeStartElement(state, *qnameID = 289, 426, 26); + break; + case 59: + errn = _exiDecodeStartElement(state, *qnameID = 172, 426, 26); + break; + case 60: + errn = _exiDecodeStartElement(state, *qnameID = 290, 426, 26); + break; + case 61: + errn = _exiDecodeStartElement(state, *qnameID = 173, 426, 26); + break; + case 62: + errn = _exiDecodeStartElement(state, *qnameID = 291, 426, 26); + break; + case 63: + errn = _exiDecodeStartElement(state, *qnameID = 174, 426, 26); + break; + case 64: + errn = _exiDecodeStartElement(state, *qnameID = 292, 426, 26); + break; + case 65: + errn = _exiDecodeStartElement(state, *qnameID = 293, 426, 26); + break; + case 66: + errn = _exiDecodeStartElement(state, *qnameID = 294, 426, 38); + break; + case 67: + errn = _exiDecodeStartElement(state, *qnameID = 296, 426, 74); + break; + case 68: + errn = _exiDecodeStartElement(state, *qnameID = 297, 426, 308); + break; + case 69: + errn = _exiDecodeStartElement(state, *qnameID = 298, 426, 74); + break; + case 70: + errn = _exiDecodeStartElement(state, *qnameID = 175, 426, 214); + break; + case 71: + errn = _exiDecodeStartElement(state, *qnameID = 300, 426, 56); + break; + case 72: + errn = _exiDecodeStartElement(state, *qnameID = 176, 426, 74); + break; + case 73: + errn = _exiDecodeStartElement(state, *qnameID = 302, 426, 26); + break; + case 74: + errn = _exiDecodeStartElement(state, *qnameID = 303, 426, 26); + break; + case 75: + errn = _exiDecodeStartElement(state, *qnameID = 177, 426, 531); + break; + case 76: + errn = _exiDecodeStartElement(state, *qnameID = 304, 426, 117); + break; + case 77: + errn = _exiDecodeStartElement(state, *qnameID = 178, 426, 26); + break; + case 78: + errn = _exiDecodeStartElement(state, *qnameID = 305, 426, 26); + break; + case 79: + errn = _exiDecodeStartElement(state, *qnameID = 306, 426, 26); + break; + case 80: + errn = _exiDecodeStartElement(state, *qnameID = 179, 426, 26); + break; + case 81: + errn = _exiDecodeStartElement(state, *qnameID = 307, 426, 26); + break; + case 82: + errn = _exiDecodeStartElement(state, *qnameID = 180, 426, 26); + break; + case 83: + errn = _exiDecodeStartElement(state, *qnameID = 308, 426, 26); + break; + case 84: + errn = _exiDecodeStartElement(state, *qnameID = 181, 426, 26); + break; + case 85: + errn = _exiDecodeStartElement(state, *qnameID = 309, 426, 26); + break; + case 86: + errn = _exiDecodeStartElement(state, *qnameID = 310, 426, 26); + break; + case 87: + errn = _exiDecodeStartElement(state, *qnameID = 311, 426, 26); + break; + case 88: + errn = _exiDecodeStartElement(state, *qnameID = 312, 426, 26); + break; + case 89: + errn = _exiDecodeStartElement(state, *qnameID = 313, 426, 371); + break; + case 90: + errn = _exiDecodeStartElement(state, *qnameID = 315, 426, 26); + break; + case 91: + errn = _exiDecodeStartElement(state, *qnameID = 182, 426, 74); + break; + case 92: + errn = _exiDecodeStartElement(state, *qnameID = 183, 426, 26); + break; + case 93: + errn = _exiDecodeStartElement(state, *qnameID = 184, 426, 26); + break; + case 94: + errn = _exiDecodeStartElement(state, *qnameID = 185, 426, 31); + break; + case 95: + errn = _exiDecodeStartElement(state, *qnameID = 317, 426, 150); + break; + case 96: + errn = _exiDecodeStartElement(state, *qnameID = 318, 426, 119); + break; + case 97: + errn = _exiDecodeStartElement(state, *qnameID = 186, 426, 74); + break; + case 98: + errn = _exiDecodeStartElement(state, *qnameID = 321, 426, 151); + break; + case 99: + errn = _exiDecodeStartElement(state, *qnameID = 187, 426, 26); + break; + case 100: + errn = _exiDecodeStartElement(state, *qnameID = 188, 426, 26); + break; + case 101: + errn = _exiDecodeStartElement(state, *qnameID = 323, 426, 469); + break; + case 102: + errn = _exiDecodeStartElement(state, *qnameID = 324, 426, 152); + break; + case 103: + errn = _exiDecodeStartElement(state, *qnameID = 70, 426, 275); + break; + case 104: + errn = _exiDecodeStartElement(state, *qnameID = 326, 426, 331); + break; + case 105: + errn = _exiDecodeStartElement(state, *qnameID = 327, 426, 550); + break; + case 106: + errn = _exiDecodeStartElement(state, *qnameID = 328, 426, 74); + break; + case 107: + errn = _exiDecodeStartElement(state, *qnameID = 329, 426, 308); + break; + case 108: + errn = _exiDecodeStartElement(state, *qnameID = 71, 426, 275); + break; + case 109: + errn = _exiDecodeStartElement(state, *qnameID = 189, 426, 8); + break; + case 110: + errn = _exiDecodeStartElement(state, *qnameID = 72, 426, 266); + break; + case 111: + errn = _exiDecodeStartElement(state, *qnameID = 441, 426, 71); + break; + case 112: + errn = _exiDecodeStartElement(state, *qnameID = 74, 426, 275); + break; + case 113: + errn = _exiDecodeStartElement(state, *qnameID = 75, 426, 153); + break; + case 114: + errn = _exiDecodeStartElement(state, *qnameID = 77, 426, 154); + break; + case 115: + errn = _exiDecodeStartElement(state, *qnameID = 78, 426, 155); + break; + case 116: + errn = _exiDecodeStartElement(state, *qnameID = 190, 426, 360); + break; + case 117: + errn = _exiDecodeStartElement(state, *qnameID = 80, 426, 156); + break; + case 118: + errn = _exiDecodeStartElement(state, *qnameID = 332, 426, 100); + break; + case 119: + errn = _exiDecodeStartElement(state, *qnameID = 191, 426, 355); + break; + case 120: + errn = _exiDecodeStartElement(state, *qnameID = 334, 426, 26); + break; + case 121: + errn = _exiDecodeStartElement(state, *qnameID = 335, 426, 311); + break; + case 122: + errn = _exiDecodeStartElement(state, *qnameID = 192, 426, 157); + break; + case 123: + errn = _exiDecodeStartElement(state, *qnameID = 194, 426, 158); + break; + case 124: + errn = _exiDecodeStartElement(state, *qnameID = 82, 426, 159); + break; + case 125: + errn = _exiDecodeStartElement(state, *qnameID = 83, 426, 275); + break; + case 126: + errn = _exiDecodeStartElement(state, *qnameID = 336, 426, 23); + break; + case 127: + errn = _exiDecodeStartElement(state, *qnameID = 444, 426, 329); + break; + case 128: + errn = _exiDecodeStartElement(state, *qnameID = 337, 426, 12); + break; + case 129: + errn = _exiDecodeStartElement(state, *qnameID = 339, 426, 60); + break; + case 130: + errn = _exiDecodeStartElement(state, *qnameID = 196, 426, 11); + break; + case 131: + errn = _exiDecodeStartElement(state, *qnameID = 84, 426, 160); + break; + case 132: + errn = _exiDecodeStartElement(state, *qnameID = 86, 426, 275); + break; + case 133: + errn = _exiDecodeStartElement(state, *qnameID = 87, 426, 161); + break; + case 134: + errn = _exiDecodeStartElement(state, *qnameID = 89, 426, 246); + break; + case 135: + errn = _exiDecodeStartElement(state, *qnameID = 90, 426, 424); + break; + case 136: + errn = _exiDecodeStartElement(state, *qnameID = 340, 426, 613); + break; + case 137: + errn = _exiDecodeStartElement(state, *qnameID = 341, 426, 45); + break; + case 138: + errn = _exiDecodeStartElement(state, *qnameID = 342, 426, 162); + break; + case 139: + errn = _exiDecodeStartElement(state, *qnameID = 344, 426, 209); + break; + case 140: + errn = _exiDecodeStartElement(state, *qnameID = 347, 426, 202); + break; + case 141: + errn = _exiDecodeStartElement(state, *qnameID = 348, 426, 103); + break; + case 142: + errn = _exiDecodeStartElement(state, *qnameID = 349, 426, 634); + break; + case 143: + errn = _exiDecodeStartElement(state, *qnameID = 197, 426, 163); + break; + case 144: + errn = _exiDecodeStartElement(state, *qnameID = 199, 426, 164); + break; + case 145: + errn = _exiDecodeStartElement(state, *qnameID = 352, 426, 245); + break; + case 146: + errn = _exiDecodeStartElement(state, *qnameID = 201, 426, 626); + break; + case 147: + errn = _exiDecodeStartElement(state, *qnameID = 91, 426, 275); + break; + case 148: + errn = _exiDecodeStartElement(state, *qnameID = 202, 426, 165); + break; + case 149: + errn = _exiDecodeStartElement(state, *qnameID = 204, 426, 166); + break; + case 150: + errn = _exiDecodeStartElement(state, *qnameID = 355, 426, 74); + break; + case 151: + errn = _exiDecodeStartElement(state, *qnameID = 206, 426, 167); + break; + case 152: + errn = _exiDecodeStartElement(state, *qnameID = 208, 426, 86); + break; + case 153: + errn = _exiDecodeStartElement(state, *qnameID = 356, 426, 537); + break; + case 154: + errn = _exiDecodeStartElement(state, *qnameID = 92, 426, 275); + break; + case 155: + errn = _exiDecodeStartElement(state, *qnameID = 358, 426, 74); + break; + case 156: + errn = _exiDecodeStartElement(state, *qnameID = 93, 426, 168); + break; + case 157: + errn = _exiDecodeStartElement(state, *qnameID = 210, 426, 74); + break; + case 158: + errn = _exiDecodeStartElement(state, *qnameID = 211, 426, 74); + break; + case 159: + errn = _exiDecodeStartElement(state, *qnameID = 95, 426, 169); + break; + case 160: + errn = _exiDecodeStartElement(state, *qnameID = 359, 426, 170); + break; + case 161: + errn = _exiDecodeStartElement(state, *qnameID = 212, 426, 26); + break; + case 162: + errn = _exiDecodeStartElement(state, *qnameID = 213, 426, 26); + break; + case 163: + errn = _exiDecodeStartElement(state, *qnameID = 214, 426, 17); + break; + case 164: + errn = _exiDecodeStartElement(state, *qnameID = 97, 426, 171); + break; + case 165: + errn = _exiDecodeStartElement(state, *qnameID = 215, 426, 616); + break; + case 166: + errn = _exiDecodeStartElement(state, *qnameID = 361, 426, 362); + break; + case 167: + errn = _exiDecodeStartElement(state, *qnameID = 363, 426, 172); + break; + case 168: + errn = _exiDecodeStartElement(state, *qnameID = 365, 426, 321); + break; + case 169: + errn = _exiDecodeStartElement(state, *qnameID = 216, 426, 209); + break; + case 170: + errn = _exiDecodeStartElement(state, *qnameID = 366, 426, 209); + break; + case 171: + errn = _exiDecodeStartElement(state, *qnameID = 368, 426, 173); + break; + case 172: + errn = _exiDecodeStartElement(state, *qnameID = 99, 426, 174); + break; + case 173: + errn = _exiDecodeStartElement(state, *qnameID = 101, 426, 205); + break; + case 174: + errn = _exiDecodeStartElement(state, *qnameID = 370, 426, 533); + break; + case 175: + errn = _exiDecodeStartElement(state, *qnameID = 371, 426, 635); + break; + case 176: + errn = _exiDecodeStartElement(state, *qnameID = 372, 426, 175); + break; + case 177: + errn = _exiDecodeStartElement(state, *qnameID = 374, 426, 209); + break; + case 178: + errn = _exiDecodeStartElement(state, *qnameID = 102, 426, 275); + break; + case 179: + errn = _exiDecodeStartElement(state, *qnameID = 217, 426, 245); + break; + case 180: + errn = _exiDecodeStartElement(state, *qnameID = 376, 426, 524); + break; + case 181: + errn = _exiDecodeStartElement(state, *qnameID = 218, 426, 522); + break; + case 182: + errn = _exiDecodeStartElement(state, *qnameID = 379, 426, 338); + break; + case 183: + errn = _exiDecodeStartElement(state, *qnameID = 219, 426, 85); + break; + case 184: + errn = _exiDecodeStartElement(state, *qnameID = 380, 426, 85); + break; + case 185: + errn = _exiDecodeStartElement(state, *qnameID = 381, 426, 176); + break; + case 186: + errn = _exiDecodeStartElement(state, *qnameID = 220, 426, 177); + break; + case 187: + errn = _exiDecodeStartElement(state, *qnameID = 222, 426, 178); + break; + case 188: + errn = _exiDecodeStartElement(state, *qnameID = 224, 426, 179); + break; + case 189: + errn = _exiDecodeStartElement(state, *qnameID = 226, 426, 180); + break; + case 190: + errn = _exiDecodeStartElement(state, *qnameID = 228, 426, 65); + break; + case 191: + errn = _exiDecodeStartElement(state, *qnameID = 383, 426, 65); + break; + case 192: + errn = _exiDecodeStartElement(state, *qnameID = 229, 426, 259); + break; + case 193: + errn = _exiDecodeStartElement(state, *qnameID = 384, 426, 409); + break; + case 194: + errn = _exiDecodeStartElement(state, *qnameID = 230, 426, 101); + break; + case 195: + errn = _exiDecodeStartElement(state, *qnameID = 231, 426, 181); + break; + case 196: + errn = _exiDecodeStartElement(state, *qnameID = 233, 426, 182); + break; + case 197: + errn = _exiDecodeStartElement(state, *qnameID = 235, 426, 518); + break; + case 198: + errn = _exiDecodeStartElement(state, *qnameID = 386, 426, 518); + break; + case 199: + errn = _exiDecodeStartElement(state, *qnameID = 387, 426, 95); + break; + case 200: + errn = _exiDecodeStartElement(state, *qnameID = 236, 426, 41); + break; + case 201: + errn = _exiDecodeStartElement(state, *qnameID = 445, 426, 41); + break; + case 202: + errn = _exiDecodeStartElement(state, *qnameID = 237, 426, 183); + break; + case 203: + errn = _exiDecodeStartElement(state, *qnameID = 239, 426, 184); + break; + case 204: + errn = _exiDecodeStartElement(state, *qnameID = 241, 426, 185); + break; + case 205: + errn = _exiDecodeStartElement(state, *qnameID = 242, 426, 78); + break; + case 206: + errn = _exiDecodeStartElement(state, *qnameID = 391, 426, 534); + break; + case 207: + errn = _exiDecodeStartElement(state, *qnameID = 103, 426, 186); + break; + case 208: + errn = _exiDecodeStartElement(state, *qnameID = 104, 426, 187); + break; + case 209: + errn = _exiDecodeStartElement(state, *qnameID = 106, 426, 188); + break; + case 210: + errn = _exiDecodeStartElement(state, *qnameID = 108, 426, 189); + break; + case 211: + errn = _exiDecodeStartElement(state, *qnameID = 111, 426, 190); + break; + case 212: + errn = _exiDecodeStartElement(state, *qnameID = 113, 426, 92); + break; + case 213: + errn = _exiDecodeStartElement(state, *qnameID = 392, 426, 110); + break; + case 214: + errn = _exiDecodeStartElement(state, *qnameID = 394, 426, 252); + break; + case 215: + errn = _exiDecodeStartElement(state, *qnameID = 395, 426, 191); + break; + case 216: + errn = _exiDecodeStartElement(state, *qnameID = 115, 426, 192); + break; + case 217: + errn = _exiDecodeStartElement(state, *qnameID = 117, 426, 193); + break; + case 218: + errn = _exiDecodeStartElement(state, *qnameID = 396, 426, 418); + break; + case 219: + errn = _exiDecodeStartElement(state, *qnameID = 442, 426, 69); + break; + case 220: + errn = _exiDecodeStartElement(state, *qnameID = 397, 426, 502); + break; + case 221: + errn = _exiDecodeStartElement(state, *qnameID = 245, 426, 194); + break; + case 222: + errn = _exiDecodeStartElement(state, *qnameID = 247, 426, 195); + break; + case 223: + errn = _exiDecodeStartElement(state, *qnameID = 119, 426, 317); + break; + case 224: + errn = _exiDecodeStartElement(state, *qnameID = 120, 426, 316); + break; + case 225: + errn = _exiDecodeStartElement(state, *qnameID = 121, 426, 196); + break; + case 226: + errn = _exiDecodeStartElement(state, *qnameID = 123, 426, 569); + break; + case 227: + errn = _exiDecodeStartElement(state, *qnameID = 124, 426, 314); + break; + case 228: + errn = _exiDecodeStartElement(state, *qnameID = 126, 426, 77); + break; + case 229: + errn = _exiDecodeStartElement(state, *qnameID = 127, 426, 625); + break; + case 230: + errn = _exiDecodeStartElement(state, *qnameID = 128, 426, 315); + break; + case 231: + errn = _exiDecodeStartElement(state, *qnameID = 129, 426, 222); + break; + case 232: + errn = _exiDecodeStartElement(state, *qnameID = 130, 426, 275); + break; + case 233: + errn = _exiDecodeStartElement(state, *qnameID = 398, 426, 627); + break; + case 234: + errn = _exiDecodeStartElement(state, *qnameID = 399, 426, 23); + break; + case 235: + errn = _exiDecodeStartElement(state, *qnameID = 400, 426, 74); + break; + case 236: + errn = _exiDecodeStartElement(state, *qnameID = 401, 426, 630); + break; + case 237: + errn = _exiDecodeStartElement(state, *qnameID = 404, 426, 3); + break; + case 238: + errn = _exiDecodeStartElement(state, *qnameID = 407, 426, 20); + break; + case 239: + errn = _exiDecodeStartElement(state, *qnameID = 413, 426, 454); + break; + case 240: + errn = _exiDecodeStartElement(state, *qnameID = 419, 426, 26); + break; + case 241: + errn = _exiDecodeStartElement(state, *qnameID = 428, 426, 636); + break; + case 242: + errn = _exiDecodeStartElement(state, *qnameID = 430, 426, 547); + break; + case 243: + errn = _exiDecodeStartElement(state, *qnameID = 431, 426, 552); + break; + case 244: + errn = _exiDecodeStartElement(state, *qnameID = 432, 426, 637); + break; + } + break; + case 430: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 323, 279, 469); + break; + } + break; + case 431: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 115, 431, 192); + break; + } + break; + case 433: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 383, 434, 65); + break; + } + break; + case 434: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 384, 596, 409); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 380, 597, 85); + break; + } + break; + case 435: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 326, 330, 331); + break; + } + break; + case 436: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 190, 437, 360); + break; + } + break; + case 437: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 169, 489, 269); + break; + } + break; + case 438: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 372, 438, 175); + break; + } + break; + case 441: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 311, 442, 26); + break; + } + break; + case 442: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 312, 397, 26); + break; + } + break; + case 443: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 444, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 444, 191); + break; + } + break; + case 446: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 178, 373, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 191, 75, 355); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 211, 76, 74); + break; + } + break; + case 448: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 342, 448, 162); + break; + } + break; + case 451: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 117, 277, 193); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 66, 278, 147); + break; + } + break; + case 453: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 379, 337, 338); + break; + } + break; + case 455: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 289, 456, 26); + break; + } + break; + case 456: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 288, 683, 26); + break; + } + break; + case 461: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 216, 446, 209); + break; + } + break; + case 462: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 463, 17); + break; + } + break; + case 463: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 253, 352, 49); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 274, 352, 115); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 317, 352, 150); + break; + } + break; + case 464: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 77, 241, 154); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 78, 241, 155); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 97, 241, 171); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 121, 241, 196); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 87, 241, 161); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 99, 241, 174); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 82, 241, 159); + break; + } + break; + case 465: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 304, 116, 117); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 318, 118, 119); + break; + } + break; + case 466: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 55, 17); + break; + } + break; + case 467: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 115, 431, 192); + break; + } + break; + case 470: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 340, 584, 613); + break; + } + break; + case 471: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 285, 472, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 286, 388, 26); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 329, 323, 308); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 256, 324, 308); + break; + } + break; + case 472: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 286, 388, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 329, 323, 308); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 256, 324, 308); + break; + } + break; + case 474: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 117, 82, 193); + break; + } + break; + case 476: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 285, 17); + break; + } + break; + case 477: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 79, 17); + break; + } + break; + case 478: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 313, 479, 371); + break; + } + break; + case 481: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 130, 327, 275); + break; + } + break; + case 482: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 161, 396, 9); + break; + } + break; + case 484: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 174, 485, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 172, 486, 26); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 173, 487, 26); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 132, 488, 74); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 150, 24, 74); + break; + } + break; + case 485: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 172, 486, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 173, 487, 26); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 132, 488, 74); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 150, 24, 74); + break; + } + break; + case 486: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 173, 487, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 132, 488, 74); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 150, 24, 74); + break; + } + break; + case 487: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 132, 488, 74); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 150, 24, 74); + break; + } + break; + case 488: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 150, 24, 74); + break; + } + break; + case 490: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 90, 83, 424); + break; + } + break; + case 496: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 349, 305, 306); + break; + } + break; + case 497: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 280, 455, 26); + break; + } + break; + case 500: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 149, 257, 176); + break; + } + break; + case 501: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 397, 423, 502); + break; + } + break; + case 506: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 445, 507, 41); + break; + } + break; + case 507: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 444, 646, 329); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 103, 408, 186); + break; + } + break; + case 509: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 75, 326, 153); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 84, 326, 160); + break; + } + break; + case 510: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 129, 221, 222); + break; + } + break; + case 512: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 169, 513, 269); + break; + } + break; + case 513: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 160, 440, 357); + break; + } + break; + case 514: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 309, 441, 26); + break; + } + break; + case 517: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 95, 407, 169); + break; + } + break; + case 520: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 260, 17); + break; + } + break; + case 521: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 167, 88, 115); + break; + } + break; + case 522: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 376, 523, 524); + break; + } + break; + case 523: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 376, 523, 524); + break; + } + break; + case 524: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 383, 607, 65); + break; + } + break; + case 530: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 170, 553, 554); + break; + } + break; + case 535: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 334, 536, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 391, 310, 534); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 335, 250, 311); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 394, 251, 252); + break; + } + break; + case 536: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 391, 310, 534); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 335, 250, 311); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 394, 251, 252); + break; + } + break; + case 537: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 261, 123, 124); + break; + } + break; + case 540: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 355, 541, 74); + break; + } + break; + case 541: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 358, 590, 74); + break; + } + break; + case 542: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 307, 543, 26); + break; + } + break; + case 543: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 308, 514, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 309, 441, 26); + break; + } + break; + case 544: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 396, 501, 418); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 397, 423, 502); + break; + } + break; + case 548: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 176, 614, 74); + break; + } + break; + case 549: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 124, 313, 314); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 126, 313, 77); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 128, 313, 315); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 120, 313, 316); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 119, 313, 317); + break; + } + break; + case 556: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 366, 342, 209); + break; + } + break; + case 557: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 431, 218, 552); + break; + } + break; + case 564: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 95, 565, 169); + break; + } + break; + case 565: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 95, 565, 169); + break; + } + break; + case 567: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 123, 568, 569); + break; + } + break; + case 568: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 127, 654, 625); + break; + } + break; + case 570: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 70, 410, 275); + break; + } + break; + case 572: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 219, 573, 85); + break; + } + break; + case 574: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 101, 204, 205); + break; + } + break; + case 576: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 64, 295, 146); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 93, 295, 168); + break; + } + break; + case 577: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 108, 377, 189); + break; + } + break; + case 578: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 292, 471, 26); + break; + } + break; + case 579: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 277, 580, 145); + break; + } + break; + case 580: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 255, 72, 74); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 259, 73, 74); + break; + } + break; + case 582: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 210, 33, 74); + break; + } + break; + case 585: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 235, 572, 518); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 219, 573, 85); + break; + } + break; + case 586: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 348, 102, 103); + break; + } + break; + case 587: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 356, 587, 537); + break; + } + break; + case 588: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 444, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 444, 191); + break; + } + break; + case 589: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 86, 273, 275); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 71, 481, 275); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 130, 327, 275); + break; + } + break; + case 590: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 337, 369, 591); + break; + } + break; + case 592: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 441, 70, 71); + break; + } + break; + case 596: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 380, 597, 85); + break; + } + break; + case 597: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 386, 504, 518); + break; + } + break; + case 598: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 419, 17); + break; + } + break; + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 117, 82, 193); + break; + } + break; + case 600: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 217, 254, 245); + break; + } + break; + case 602: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 359, 470, 170); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 395, 470, 191); + break; + } + break; + case 603: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 430, 18, 547); + break; + } + break; + case 604: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 168, 67, 145); + break; + } + break; + case 605: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 179, 606, 26); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 180, 516, 26); + break; + } + break; + case 606: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 180, 516, 26); + break; + } + break; + case 607: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 349, 447, 634); + break; + } + break; + case 608: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 277, 345, 145); + break; + } + break; + case 610: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 332, 535, 100); + break; + } + break; + case 612: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 366, 43, 209); + break; + } + break; + case 614: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 186, 234, 74); + break; + } + break; + case 615: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 89, 490, 246); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 90, 491, 492); + break; + } + break; + case 617: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 376, 523, 524); + break; + } + break; + case 618: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 6, 17); + break; + } + break; + case 619: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 274, 542, 115); + break; + } + break; + case 621: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 117, 277, 193); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 66, 278, 147); + break; + } + break; + case 622: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 117, 277, 193); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 66, 278, 147); + break; + } + break; + case 624: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 336, 544, 23); + break; + } + break; + case 626: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 352, 244, 245); + break; + } + break; + case 628: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 201, 500, 626); + break; + } + break; + case 632: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 361, 361, 362); + break; + } + break; + case 638: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 387, 309, 95); + break; + } + break; + case 640: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 279, 497, 545); + break; + } + break; + case 642: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 271, 17); + break; + } + break; + case 643: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 374, 651, 209); + break; + } + break; + case 646: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 103, 408, 186); + break; + } + break; + case 647: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 400, 13, 74); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 401, 13, 630); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 428, 13, 636); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 413, 13, 454); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 419, 13, 26); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 432, 13, 637); + break; + } + break; + case 651: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 371, 58, 635); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 339, 59, 60); + break; + } + break; + case 656: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 61, 107, 108); + break; + } + break; + case 658: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 160, 356, 357); + break; + } + break; + case 661: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 305, 662, 26); + break; + } + break; + case 662: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 310, 415, 26); + break; + } + break; + case 663: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 189, 349, 8); + break; + } + break; + case 669: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 404, 2, 3); + break; + } + break; + case 674: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 171, 629, 223); + break; + } + break; + case 675: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 374, 651, 209); + break; + } + break; + case 682: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 281, 17); + break; + } + break; + case 683: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 293, 50, 26); + break; + } + break; + case 684: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 87, 17); + break; + } + break; + case 687: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 383, 607, 65); + break; + } + break; + case 689: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 628, 17); + break; + } + break; + case 692: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 400, 13, 74); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 401, 13, 630); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 428, 13, 636); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 413, 13, 454); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 419, 13, 26); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 432, 13, 637); + break; + } + break; + case 696: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 236, 40, 41); + break; + } + break; + case 700: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 214, 521, 17); + break; + } + break; + case 703: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 83, 570, 275); + break; + } + break; + case 705: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 95, 565, 169); + break; + } + break; + + } + break; + case EXI_EVENT_START_ELEMENT_NS: + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + break; + case EXI_EVENT_START_ELEMENT_GENERIC: + case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED: + errn = _exiDecodeQName(stream, state, qnameID, + &_qname); + if (errn) { + return errn; + } + + /* update current rule --> element content rule (if not already) */ + errn = exi__MoveToElementContentRule(state); + if (errn) { + return errn; + } + + /* retrieve global grammar(existing OR runtime) and push it stack */ + errn = exi__RetrieveAndPushGlobalGrammar(state, *qnameID); + break; + default: + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + break; + } + + return errn; +} + + + +/*int exiDecodeStartElementGeneric(bitstream_t* stream, exi_state_t* state, + qname_t* qname) { + // decode qname + int errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), qname); + if (errn) { + return errn; + } + + switch (state->grammarStack[state->stackIndex]) { + // $EXI_DECODE_START_ELEMENT_GENERIC$ + case DOC_CONTENT: + // move on to DocEnd + state->grammarStack[state->stackIndex] = DOC_END; + // push new ur-type grammar on stack + return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); + break; + case UR_TYPE_GRAMMAR_0: + // move on to UR_TYPE_GRAMMAR_1 + state->grammarStack[state->stackIndex] = UR_TYPE_GRAMMAR_1; + // push new ur-type grammar on stack + return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); + break; + case UR_TYPE_GRAMMAR_1: + // remain in UR_TYPE_GRAMMAR_1 + // push new ur-type grammar on stack + return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); + break; + default: + return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; + } + + return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; +}*/ + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiDecodeEndElement(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID) { + int16_t currentID; + switch(currEvent) { + case EXI_EVENT_END_ELEMENT_UNDECLARED: + currentID = state->grammarStack[state->stackIndex]; + if (currentID < 0) { + /* runtime grammars do have IDs smaller than 0 */ + /* TODO learn EE event */ + return -1; + } + /* Note: no break statement */ + default: + /* copy IDs */ + *qnameID = state->elementStack[state->stackIndex]; + /*ee->localPart = state->elementStack[state->stackIndex].localPart; + ee->namespaceURI = state->elementStack[state->stackIndex].namespaceURI;*/ + + return exi__PopStack(state); + } +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + +/*int exiDecodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state, eqname_t* ee) { + int16_t currentID = state->grammarStack[state->stackIndex]; + if (currentID < 0) { + // runtime grammars do have IDs smaller than 0 + // TODO learn EE event + return -1; + } + + return exiDecodeEndElement(stream, state, ee); +}*/ + +int exiDecodeCharacters(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + int16_t moveOnID = 0; + errn = EXI_ERROR_UNEXPECTED_CHARACTERS; + + switch(currEvent) { + case EXI_EVENT_CHARACTERS: + case EXI_EVENT_CHARACTERS_GENERIC: + switch (state->grammarStack[state->stackIndex]) { + case 483: + /* DATETIME */ + case 668: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_DATETIME, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 221: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 221; /* move on ID */ + break; + case 679: + /* DATETIME */ + case 695: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_TIME, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 42: + /* ENUMERATION */ + case 114: + /* ENUMERATION */ + case 418: + /* ENUMERATION */ + case 469: + /* ENUMERATION */ + case 515: + /* ENUMERATION */ + case 667: + /* ENUMERATION */ + case 119: + /* ENUMERATION */ + case 685: + /* ENUMERATION */ + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 4, &val->enumeration); + moveOnID = 5; /* move on ID */ + break; + case 223: + /* BINARY_HEX */ + case 475: + /* BINARY_HEX */ + case 593: + /* BINARY_HEX */ + case 633: + /* BINARY_HEX */ + case 652: + /* BINARY_HEX */ + case 677: + /* BINARY_HEX */ + case 41: + /* BINARY_HEX */ + case 531: + /* BINARY_HEX */ + val->type = EXI_DATATYPE_BINARY_HEX; + errn = decodeBinary(stream, &val->binary); + moveOnID = 5; /* move on ID */ + break; + case 160: + /* STRING */ + case 402: + /* STRING */ + case 400: + /* STRING */ + case 399: + /* STRING */ + case 681: + /* STRING */ + case 401: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 402; /* move on ID */ + break; + case 225: + /* BOOLEAN */ + case 74: + /* BOOLEAN */ + val->type = EXI_DATATYPE_BOOLEAN; + errn = decodeBoolean(stream, &val->boolean); + moveOnID = 5; /* move on ID */ + break; + case 236: + /* DATETIME */ + case 525: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GDAY, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 367: + /* NBIT_UNSIGNED_INTEGER */ + case 611: + /* NBIT_UNSIGNED_INTEGER */ + case 630: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 8, -128); + moveOnID = 5; /* move on ID */ + break; + case 391: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 391; /* move on ID */ + break; + case 227: + /* STRING */ + case 228: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 228; /* move on ID */ + break; + case 220: + /* STRING */ + case 510: + /* STRING */ + case 215: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 220; /* move on ID */ + break; + case 390: + /* STRING */ + case 392: + /* STRING */ + case 644: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 392; /* move on ID */ + break; + case 295: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 295; /* move on ID */ + break; + case 384: + /* NBIT_UNSIGNED_INTEGER */ + case 23: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 3, -3); + moveOnID = 5; /* move on ID */ + break; + case 210: + /* DATETIME */ + case 439: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GMONTH, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 595: + /* FLOAT */ + case 623: + /* FLOAT */ + case 645: + /* FLOAT */ + case 659: + /* FLOAT */ + val->type = EXI_DATATYPE_FLOAT; + errn = decodeFloat(stream, &val->float_me); + moveOnID = 5; /* move on ID */ + break; + case 322: + /* LIST */ + case 344: + /* LIST */ + case 414: + /* LIST */ + case 551: + /* LIST */ + case 698: + /* LIST */ + case 701: + /* LIST */ + val->type = EXI_DATATYPE_LIST; + val->list.type = EXI_DATATYPE_STRING; + errn = decodeUnsignedInteger16(stream, &val->list.len); + moveOnID = 5; /* move on ID */ + break; + case 649: + /* ENUMERATION */ + case 31: + /* ENUMERATION */ + case 680: + /* ENUMERATION */ + case 245: + /* ENUMERATION */ + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 1, &val->enumeration); + moveOnID = 5; /* move on ID */ + break; + case 84: + /* ENUMERATION */ + case 214: + /* ENUMERATION */ + case 498: + /* ENUMERATION */ + case 571: + /* ENUMERATION */ + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 3, &val->enumeration); + moveOnID = 5; /* move on ID */ + break; + case 286: + /* DECIMAL */ + case 529: + /* DECIMAL */ + val->type = EXI_DATATYPE_DECIMAL; + errn = decodeDecimal(stream, &val->decimal); + moveOnID = 5; /* move on ID */ + break; + case 57: + /* INTEGER */ + case 104: + /* INTEGER */ + case 111: + /* INTEGER */ + case 212: + /* INTEGER */ + case 219: + /* INTEGER */ + case 226: + /* INTEGER */ + case 272: + /* INTEGER */ + case 294: + /* INTEGER */ + case 312: + /* INTEGER */ + case 334: + /* INTEGER */ + case 366: + /* INTEGER */ + case 383: + /* INTEGER */ + case 209: + /* INTEGER */ + case 454: + /* INTEGER */ + case 495: + /* INTEGER */ + case 311: + /* INTEGER */ + case 566: + /* INTEGER */ + case 252: + /* INTEGER */ + case 616: + /* INTEGER */ + case 620: + /* INTEGER */ + case 625: + /* INTEGER */ + case 636: + /* INTEGER */ + case 554: + /* INTEGER */ + case 502: + /* INTEGER */ + case 660: + /* INTEGER */ + case 306: + /* INTEGER */ + case 266: + /* INTEGER */ + case 613: + /* INTEGER */ + case 694: + /* INTEGER */ + case 634: + /* INTEGER */ + val->type = EXI_DATATYPE_INTEGER; + errn = decodeInteger(stream, &val->integer); + moveOnID = 5; /* move on ID */ + break; + case 240: + /* STRING */ + case 153: + /* STRING */ + case 464: + /* STRING */ + case 242: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 242; /* move on ID */ + break; + case 508: + /* DATETIME */ + case 546: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GYEAR, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 374: + /* DATETIME */ + case 499: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GYEARMONTH, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 241: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 241; /* move on ID */ + break; + case 255: + /* DATETIME */ + case 325: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_DATE, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 427: + /* ENUMERATION */ + case 17: + /* ENUMERATION */ + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 5, &val->enumeration); + moveOnID = 5; /* move on ID */ + break; + case 200: + /* STRING */ + case 201: + /* STRING */ + case 458: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 201; /* move on ID */ + break; + case 96: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 96; /* move on ID */ + break; + case 283: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 283; /* move on ID */ + break; + case 12: + /* UNSIGNED_INTEGER */ + case 211: + /* UNSIGNED_INTEGER */ + case 229: + /* UNSIGNED_INTEGER */ + case 359: + /* UNSIGNED_INTEGER */ + case 385: + /* UNSIGNED_INTEGER */ + case 468: + /* UNSIGNED_INTEGER */ + case 65: + /* UNSIGNED_INTEGER */ + case 511: + /* UNSIGNED_INTEGER */ + case 552: + /* UNSIGNED_INTEGER */ + case 583: + /* UNSIGNED_INTEGER */ + case 627: + /* UNSIGNED_INTEGER */ + case 648: + /* UNSIGNED_INTEGER */ + case 591: + /* UNSIGNED_INTEGER */ + case 20: + /* UNSIGNED_INTEGER */ + case 545: + /* UNSIGNED_INTEGER */ + case 124: + /* UNSIGNED_INTEGER */ + case 673: + /* UNSIGNED_INTEGER */ + case 690: + /* UNSIGNED_INTEGER */ + case 547: + /* UNSIGNED_INTEGER */ + case 704: + /* UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_UNSIGNED_INTEGER; + errn = decodeUnsignedInteger(stream, &val->integer); + moveOnID = 5; /* move on ID */ + break; + case 308: + /* NBIT_UNSIGNED_INTEGER */ + case 650: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 7, 0); + moveOnID = 5; /* move on ID */ + break; + case 265: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 265; /* move on ID */ + break; + case 77: + /* BINARY_BASE64 */ + case 105: + /* BINARY_BASE64 */ + case 246: + /* BINARY_BASE64 */ + case 268: + /* BINARY_BASE64 */ + case 269: + /* BINARY_BASE64 */ + case 293: + /* BINARY_BASE64 */ + case 368: + /* BINARY_BASE64 */ + case 424: + /* BINARY_BASE64 */ + case 452: + /* BINARY_BASE64 */ + case 534: + /* BINARY_BASE64 */ + case 492: + /* BINARY_BASE64 */ + case 559: + /* BINARY_BASE64 */ + case 562: + /* BINARY_BASE64 */ + case 317: + /* BINARY_BASE64 */ + case 190: + /* BINARY_BASE64 */ + case 631: + /* BINARY_BASE64 */ + case 11: + /* BINARY_BASE64 */ + case 148: + /* BINARY_BASE64 */ + case 205: + /* BINARY_BASE64 */ + case 657: + /* BINARY_BASE64 */ + case 316: + /* BINARY_BASE64 */ + case 275: + /* BINARY_BASE64 */ + case 697: + /* BINARY_BASE64 */ + case 304: + /* BINARY_BASE64 */ + case 706: + /* BINARY_BASE64 */ + val->type = EXI_DATATYPE_BINARY_BASE64; + errn = decodeBinary(stream, &val->binary); + moveOnID = 5; /* move on ID */ + break; + case 264: + /* STRING */ + case 339: + /* STRING */ + case 267: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 267; /* move on ID */ + break; + case 85: + /* ENUMERATION */ + case 120: + /* ENUMERATION */ + case 331: + /* ENUMERATION */ + case 117: + /* ENUMERATION */ + case 365: + /* ENUMERATION */ + case 445: + /* ENUMERATION */ + case 3: + /* ENUMERATION */ + case 575: + /* ENUMERATION */ + case 676: + /* ENUMERATION */ + case 371: + /* ENUMERATION */ + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 2, &val->enumeration); + moveOnID = 5; /* move on ID */ + break; + case 270: + /* DATETIME */ + case 666: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GMONTHDAY, &val->datetime); + moveOnID = 5; /* move on ID */ + break; + case 155: + /* STRING */ + case 576: + /* STRING */ + case 296: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 296; /* move on ID */ + break; + case 60: + /* NBIT_UNSIGNED_INTEGER */ + case 389: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 8, 0); + moveOnID = 5; /* move on ID */ + break; + case 52: + /* STRING */ + case 53: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 53; /* move on ID */ + break; + case 248: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 248; /* move on ID */ + break; + case 4: + /* STRING */ + case 32: + /* STRING */ + case 51: + /* STRING */ + case 66: + /* STRING */ + case 99: + /* STRING */ + case 100: + /* STRING */ + case 282: + /* STRING */ + case 297: + /* STRING */ + case 300: + /* STRING */ + case 351: + /* STRING */ + case 375: + /* STRING */ + case 380: + /* STRING */ + case 398: + /* STRING */ + case 8: + /* STRING */ + case 403: + /* STRING */ + case 404: + /* STRING */ + case 406: + /* STRING */ + case 409: + /* STRING */ + case 428: + /* STRING */ + case 429: + /* STRING */ + case 449: + /* STRING */ + case 450: + /* STRING */ + case 459: + /* STRING */ + case 460: + /* STRING */ + case 222: + /* STRING */ + case 493: + /* STRING */ + case 357: + /* STRING */ + case 503: + /* STRING */ + case 518: + /* STRING */ + case 519: + /* STRING */ + case 526: + /* STRING */ + case 527: + /* STRING */ + case 538: + /* STRING */ + case 154: + /* STRING */ + case 555: + /* STRING */ + case 315: + /* STRING */ + case 550: + /* STRING */ + case 641: + /* STRING */ + case 653: + /* STRING */ + case 362: + /* STRING */ + case 664: + /* STRING */ + case 665: + /* STRING */ + case 672: + /* STRING */ + case 637: + /* STRING */ + case 678: + /* STRING */ + case 569: + /* STRING */ + case 635: + /* STRING */ + case 686: + /* STRING */ + case 688: + /* STRING */ + case 699: + /* STRING */ + case 159: + /* STRING */ + case 702: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 5; /* move on ID */ + break; + case 247: + /* STRING */ + case 405: + /* STRING */ + case 249: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 249; /* move on ID */ + break; + + } + if (errn) { + /* error */ + } else { + /* move on */ + state->grammarStack[state->stackIndex] = moveOnID; + } + break; + case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED: + if (state->grammarStack[state->stackIndex] < 0) { + /* runtime grammars do have IDs smaller than 0 */ + return EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH; + } + + /* update current rule --> element content rule (if not already) */ + errn = exi__MoveToElementContentRule(state); + if (errn) { + return errn; + } + + /* read content value as STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + break; + default: + errn = EXI_ERROR_UNEXPECTED_CHARACTERS; + break; + } + + return errn; +} + +/*int exiDecodeCharactersGeneric(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + return exiDecodeCharacters(stream, state, val); +}*/ + +/*int exiDecodeCharactersGenericUndeclared(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + int errn = 0; + if (state->grammarStack[state->stackIndex] < 0) { + // runtime grammars do have IDs smaller than 0 + // TODO learn CH event + return -1; + } + + // update current rule --> element content rule (if not already) + errn = exiMoveToElementContentRule(state); + if (errn) { + return errn; + } + + // read content value + // STRING + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, &val->string); + return errn; +}*/ + +int exiDecodeAttributeGenericValue(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID, exi_value_t* val) { + int16_t currentID; + + if (_qname.uri.id == 2 && _qname.localName.id == 1 ) { + /* xsi:type --> QName type */ + errn = exiDecodeAttributeXsiType(stream, state, val); + } else { + currentID = state->grammarStack[state->stackIndex]; + if (currentID >= 0) { + /* if schema-informed value type according global attribute */ + switch(*qnameID) { + + default: + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + break; + } + + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + } + + return errn; +} + +int exiDecodeAttribute(bitstream_t* stream, exi_state_t* state, + uint16_t* qnameID, exi_value_t* val) { + int16_t moveOnID = 0; + int16_t currentID = state->grammarStack[state->stackIndex]; + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; + + switch(currEvent) { + case EXI_EVENT_ATTRIBUTE: + case EXI_EVENT_ATTRIBUTE_INVALID_VALUE: + switch (currentID) { + case 92: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 106; /* move on ID */ + break; + } + break; + case 108: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(state->eventCode) { + case 0: + *qnameID = 0; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 247; /* move on ID */ + break; + } + break; + case 132: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 417; /* move on ID */ + break; + } + break; + case 133: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 476; /* move on ID */ + break; + } + break; + case 134: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 395; /* move on ID */ + break; + } + break; + case 135: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 318; /* move on ID */ + break; + } + break; + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 348; /* move on ID */ + break; + } + break; + case 147: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(state->eventCode) { + case 0: + *qnameID = 0; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 390; /* move on ID */ + break; + } + break; + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 240; /* move on ID */ + break; + } + break; + case 156: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 564; /* move on ID */ + break; + } + break; + case 157: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 39; /* move on ID */ + break; + } + break; + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + *qnameID = 1; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 399; /* move on ID */ + break; + case 1: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 400; /* move on ID */ + break; + case 2: + *qnameID = 3; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 401; /* move on ID */ + break; + } + break; + case 169: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 621; /* move on ID */ + break; + case 1: + *qnameID = 6; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 622; /* move on ID */ + break; + case 2: + *qnameID = 7; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 276; /* move on ID */ + break; + } + break; + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + *qnameID = 6; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 599; /* move on ID */ + break; + case 1: + *qnameID = 7; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 474; /* move on ID */ + break; + } + break; + case 186: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 350; /* move on ID */ + break; + } + break; + case 187: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(state->eventCode) { + case 0: + *qnameID = 0; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 339; /* move on ID */ + break; + } + break; + case 188: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 577; /* move on ID */ + break; + } + break; + case 189: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Target)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 457; /* move on ID */ + break; + case 1: + *qnameID = 5; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 458; /* move on ID */ + break; + } + break; + case 190: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 105; /* move on ID */ + break; + } + break; + case 192: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(state->eventCode) { + case 0: + *qnameID = 0; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 215; /* move on ID */ + break; + } + break; + case 202: + /* FirstStartTag[ATTRIBUTE[STRING](Name)] */ + switch(state->eventCode) { + case 0: + *qnameID = 4; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 203; /* move on ID */ + break; + } + break; + case 203: + /* StartTag[ATTRIBUTE[ENUMERATION](ValueType)] */ + switch(state->eventCode) { + case 0: + *qnameID = 8; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 3, &val->enumeration); + } + moveOnID = 647; /* move on ID */ + break; + } + break; + case 399: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 400; /* move on ID */ + break; + case 1: + *qnameID = 3; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 401; /* move on ID */ + break; + } + break; + case 400: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(state->eventCode) { + case 0: + *qnameID = 3; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 401; /* move on ID */ + break; + } + break; + case 457: + /* StartTag[ATTRIBUTE[STRING](Target)] */ + switch(state->eventCode) { + case 0: + *qnameID = 5; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 458; /* move on ID */ + break; + } + break; + case 533: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + switch(state->eventCode) { + case 0: + *qnameID = 2; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 643; /* move on ID */ + break; + } + break; + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + *qnameID = 7; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 474; /* move on ID */ + break; + } + break; + case 621: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 0: + *qnameID = 6; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 622; /* move on ID */ + break; + case 1: + *qnameID = 7; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 276; /* move on ID */ + break; + } + break; + case 622: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(state->eventCode) { + case 0: + *qnameID = 7; + if(currEvent == EXI_EVENT_ATTRIBUTE_INVALID_VALUE) { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + moveOnID = 276; /* move on ID */ + break; + } + break; + + } + + if (errn) { + /* error */ + } else { + /* move on */ + state->grammarStack[state->stackIndex] = moveOnID; + } + break; + case EXI_EVENT_ATTRIBUTE_GENERIC: + case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED: + errn = _exiDecodeQName(stream, state, qnameID, &_qname); + if (errn) { + return errn; + } + /* learn attribute ? */ + errn = exi__LearnAttribute(state, *qnameID, _qname.uri.id, _qname.localName.id); + if (errn) { + return errn; + } + /* decode attribute value */ + errn = exiDecodeAttributeGenericValue(stream, state, qnameID, val); + break; + default: + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; + break; + } + + return errn; +} + + + +/*int exiDecodeAttributeGenericUndeclared(bitstream_t* stream, exi_state_t* state, + qname_t* at, exi_value_t* val) { + int errn; + int16_t currentID = state->grammarStack[state->stackIndex]; + + if (currentID < 0) { + // TODO runtime elements + return -1; + } else { + // decode qname + errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), at); + if (errn) { + return errn; + } + } + + + if (currentID < 0) { + // TODO learn AT event + return -1; + } + + decode attribute value + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, &val->string); + + // we do not move forward in grammars + + return errn; +}*/ + + + +int exiDecodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + errn = decodeBoolean(stream, &val->boolean); + if (errn >= 0 && val->boolean) { + /* handle xsi:nil == true */ + errn = exi__HandleXsiNilTrue(state); + } + return errn; +} + + +int exiDecodeAttributeXsiType(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + /*uint32_t uriID; + uint32_t localNameID; */ + /* uri */ + errn =_exiDecodeNamespaceUri(stream, state, &_qname.uri); /* NULL, &uriID); */ + if (errn) { + return errn; + } + /* localName */ + errn = _exiDecodeLocalName(stream, state, _qname.uri.id, &_qname.localName); /* NULL, &localNameID, uriID);*/ + if (errn) { + return errn; + } + + val->type = EXI_DATATYPE_QNAME; + val->eqname.namespaceURI = _qname.uri.id; /* uriID; */ + val->eqname.localPart = _qname.localName.id; /* localNameID; */ + + /* handle xsi type cast */ + errn = exi__HandleXsiType(state, &val->eqname); + + return errn; +} + + + +#endif + diff --git a/src/codec/EXIDecoder.h b/src/codec/EXIDecoder.h new file mode 100644 index 0000000..babadc7 --- /dev/null +++ b/src/codec/EXIDecoder.h @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI__DECODER_H +#define EXI__DECODER_H + +/** +* \file EXIDecoder.h +* \brief EXI Decoder +* +*/ + +#include "EXITypes.h" + +/** + * \brief Initialize EXI decoder + * + * Resets & initializes the EXI decoder. + * + * \param stream Input Stream + * \param state Codec state + * \param runtimeTable Runtime name-tables + * \param stringTable String table + * \return Error-Code <> 0 + * + */ +int exiInitDecoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable); + + +/** + * \brief Reports last decoded qualified name + * + * Note: Qualified name only available for previously unknown qname. Otherwise make use of name table entries. + * + * \param qname Qualified name + * \return Error-Code <> 0 + * + */ +int exiGetLastQName(exi_qname_t** qname); + + +/** + * \brief Decodes next event + * + * Inspects EXI stream and decodes next EXI event. + * + * \param stream Input Stream + * \param state Codec state + * \param nextEvent Next event + * \return Error-Code <> 0 + * + */ +int exiDecodeNextEvent(bitstream_t* stream, + exi_state_t* state, exi_event_t* nextEvent); + + +/** + * \brief Decodes StartDocument (SD) event + * + * \param stream Input Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiDecodeStartDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Decodes EndDocument (ED) event + * + * \param stream Input Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiDecodeEndDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Decodes StartElemnt (SE) event + * + * Note: The first time a qnameID is larger than schema-informed NUMBER_OF_QNAMES it is possible to retrieve the qname by calling GetLastQName(...). + * It is up to the caller to track qnames. + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \return Error-Code <> 0 + * + */ +int +exiDecodeStartElement(bitstream_t* stream, + exi_state_t* state, uint16_t* qnameID); + + +/** + * \brief Decodes EndElement (EE) event + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \return Error-Code <> 0 + * + */ +int exiDecodeEndElement(bitstream_t* stream, + exi_state_t* state, uint16_t* qnameID); + + +/** + * \brief Decodes Characters (CH) event. + * + * Reports characters value. + * + * \param stream Input Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiDecodeCharacters(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + + +/** + * \brief Decodes Attribute (AT) event. + * + * Reports attribute qname and value. + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiDecodeAttribute(bitstream_t* stream, + exi_state_t* state, uint16_t* qnameID, exi_value_t* val); + + +/** + * \brief Decodes attribute xsi:nil + * + * Reports value. + * + * \param stream Input Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiDecodeAttributeXsiNil(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + + +/** + * \brief Decodes attribute xsi:type + * + * Reports value. + * + * \param stream Input Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiDecodeAttributeXsiType(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + + +/** + * \brief Decodes attribute/characters list value + * + * List values are special and are processed one by one. + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param val List value + * \param lt List type + * \return Error-Code <> 0 + * + */ +int exiDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_value_t* val, exi_list_t lt); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/EXIEncoder.c b/src/codec/EXIEncoder.c new file mode 100644 index 0000000..df48752 --- /dev/null +++ b/src/codec/EXIEncoder.c @@ -0,0 +1,8463 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI__ENCODER_C +#define EXI__ENCODER_C + +#include "EXITypes.h" +#include "EXIOptions.h" +#include "BitOutputStream.h" +#include "EncoderChannel.h" + +#include "StringTable.h" +#include "NameTableEntries.h" +#include "MethodsBag.h" + +#include "EXIOptions.h" + +#include "EXICoder.h" +#include "EXIHeaderEncoder.h" +#include "ErrorCodes.h" +#include "QNames.h" +#include "QNameDefines.h" + + + + +/* local variables */ +static uint32_t bits; +static int errn; + +/* ==================================== */ + +static int _encodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) { + int errn; + uint32_t val; + switch(iv->type) { + /* Unsigned Integer */ + case EXI_UNSIGNED_INTEGER_8: + val = iv->val.int8 - lowerBound; + break; + case EXI_UNSIGNED_INTEGER_16: + val = iv->val.int16 - lowerBound; + break; + case EXI_UNSIGNED_INTEGER_32: + val = (uint32_t)(iv->val.int32 - lowerBound); + break; + case EXI_UNSIGNED_INTEGER_64: + val = (uint32_t)(iv->val.int64 - lowerBound); + break; + /* (Signed) Integer */ + case EXI_INTEGER_8: + val = iv->val.uint8 - lowerBound; + break; + case EXI_INTEGER_16: + val = iv->val.uint16 - lowerBound; + break; + case EXI_INTEGER_32: + val = iv->val.uint32 - lowerBound; + break; + case EXI_INTEGER_64: + val = (uint32_t)(iv->val.uint64 - lowerBound); + break; + default: + return EXI_UNSUPPORTED_INTEGER_VALUE_TYPE; + break; + } + + errn = encodeNBitUnsignedInteger(stream, nbits, val); + return errn; +} + + + +static int _exiValueToString(exi_value_t* val) { + if (val->type == EXI_DATATYPE_STRING) { + return 0; + } else { + /* TODO convert typed value to string */ + return EXI_ERROR_CONVERSION_TYPE_TO_STRING; + } +} + + + +static int _exiEncodeEventCode2(bitstream_t* stream, exi_state_t* state, exi_event_t event2) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +static int _exiEncodeNamespaceUriHit(bitstream_t* stream, exi_state_t* state, uint16_t uriID) { + int errn; + uint16_t uriCodingLength; + uint16_t uriSize; + + errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize); + if (errn) { + return errn; + } + /* URI Entries + 1 */ + errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); + if (errn) { + return errn; + } + + /* uri string value found */ + /* ==> value(i+1) is encoded as n-bit unsigned integer */ + errn = encodeNBitUnsignedInteger(stream, uriCodingLength, uriID+1); + + return errn; +} + + +static int _exiEncodeNamespaceMiss(bitstream_t* stream, exi_state_t* state, + exi_string_ucs_t* uri, uint16_t* uriID) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + + +static int _exiEncodeLocalNameHit(bitstream_t* stream, exi_state_t* state, + uint16_t uriID, uint16_t localNameID) { + int errn; + uint16_t localNameSize; + uint16_t localNameCodingLength; + + /* string value found in local partition */ + /* ==> string value is represented as zero (0) encoded as an */ + errn = encodeUnsignedInteger32(stream, 0 ); + if (errn < 0) { + return errn; + } + /* Unsigned Integer followed by an the compact identifier of the */ + /* string value as an n-bit unsigned integer n is log2 m and m is */ + /* the number of entries in the string table partition */ + errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize); + if (errn < 0) { + return errn; + } + errn = exiGetCodingLength(localNameSize, &localNameCodingLength); + if (errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, localNameCodingLength, localNameID); + return errn; + +} + + +static int _exiEncodeLocalNameMiss(bitstream_t* stream, exi_state_t* state, + exi_string_ucs_t* localName, uint16_t uriID, uint16_t* localNameID) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +static int _encodeAttributeXsiTypeContent(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + + /* encode qname */ + errn = _exiEncodeNamespaceUriHit(stream, state, val->eqname.namespaceURI); + if (errn < 0) { + return errn; + } + errn = _exiEncodeLocalNameHit(stream, state, val->eqname.namespaceURI, val->eqname.localPart); + if (errn < 0) { + return errn; + } + + /* handle xsi type cast */ + errn = exi__HandleXsiType(state, &val->eqname); + + return errn; +} + + +static int _exiEncodeStartElement(bitstream_t* stream, uint16_t nbits, + uint32_t val, exi_state_t* state, uint16_t qnameID, uint16_t stackId, + uint16_t newState) { + /* event-code */ + int errn = encodeNBitUnsignedInteger(stream, nbits, val); + if (errn) { + return errn; + } + /* move on */ + state->grammarStack[state->stackIndex] = stackId; + /* push element on stack */ + return exi__PushStack(state, newState, qnameID); +} + + +static int _exiEncodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + +static int _encode2ndLevelAttribute(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_value_t* val) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +int exiEncodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) { + + switch(lt.type) { + case EXI_DATATYPE_BINARY_BASE64: + case EXI_DATATYPE_BINARY_HEX: + errn = encodeBinary(stream, &val->binary); + break; + case EXI_DATATYPE_BOOLEAN: + errn = encodeBoolean(stream, val->boolean); + break; + case EXI_DATATYPE_BOOLEAN_FACET: + errn = encodeNBitUnsignedInteger(stream, 2, val->boolean ? 2 : 0); + break; + case EXI_DATATYPE_DECIMAL: + errn = encodeDecimal(stream, &val->decimal); + break; + case EXI_DATATYPE_FLOAT: + errn = encodeFloat(stream, &val->float_me); + break; + case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER: + errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE; + break; + case EXI_DATATYPE_UNSIGNED_INTEGER: + errn = encodeUnsignedInteger(stream, &val->integer); + break; + case EXI_DATATYPE_INTEGER: + errn = encodeInteger(stream, &val->integer); + break; + case EXI_DATATYPE_DATETIME: + errn = encodeDateTime(stream, &val->datetime); + break; + case EXI_DATATYPE_STRING: + errn = encodeStringValue(stream, state, qnameID, &val->str); + break; + default: + return EXI_UNSUPPORTED_LIST_VALUE_TYPE; + } + + return errn; +} + + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiEncodeStartDocument(bitstream_t* stream, exi_state_t* state) { + if ( state->grammarStack[state->stackIndex] == 0 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 126; + return 0; + } + if ( state->grammarStack[state->stackIndex] == 0 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 126; + return 0; + } + if ( state->grammarStack[state->stackIndex] == 425 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 426; + return 0; + } + + return EXI_ERROR_UNEXPECTED_START_DOCUMENT; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiEncodeEndDocument(bitstream_t* stream, exi_state_t* state) { + if ( state->grammarStack[state->stackIndex] == 127) { + encodeFinish(stream); + return 0; + } + if ( state->grammarStack[state->stackIndex] == 426) { + encodeFinish(stream); + return 0; + } + + return EXI_ERROR_UNEXPECTED_END_DOCUMENT; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + + +int exiInitEncoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable) { +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + int i; +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + /* init grammar state */ + state->stackIndex = 0; + state->grammarStack[0] = DOCUMENT; + /* name tables */ + state->nameTablePrepopulated = exiNameTablePrepopulated; + state->nameTableRuntime = runtimeTable; + /* next qname ID */ + state->nextQNameID = EXI_NUMBER_OF_PREPOPULATED_QNAMES; + /* string tables */ + state->stringTable = stringTable; + state->stringTable.numberOfGlobalStrings = 0; +#if EXI_VALUE_PARTITION_CAPACITY != 0 +#if EXI_VALUE_MAX_LENGTH != 0 + for(i=0; i<(state->stringTable.sizeLocalStrings); i++) { + state->stringTable.numberOfLocalStrings[i] = 0; + } +#endif /* EXI_VALUE_MAX_LENGTH != 0 */ +#endif /* EXI_VALUE_PARTITION_CAPACITY != 0 */ + + /* runtime grammars */ + state->numberOfRuntimeGrammars = 0; + + /* Avoid warning: Unused declaration of variable 'name' */ + bits = 0; + + /* encode header */ + return writeEXIHeader(stream); +} + + +int exiEncodeStartElement(bitstream_t* stream, exi_state_t* state, uint16_t qnameID) { + uint16_t namespaceUriID, localNameID; + int16_t currentID = state->grammarStack[state->stackIndex]; + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + + switch (currentID) { + case 1: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + switch(qnameID) { + case 404: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}costKind ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 2, 3); + break; + } + break; + case 2: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount)] */ + switch(qnameID) { + case 398: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}amount ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 21, 627); + break; + } + break; + case 6: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge)] */ + switch(qnameID) { + case 189: + /* SE( {urn:iso:15118:2:2010:MsgBody}GenChallenge ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 7, 8); + break; + } + break; + case 7: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow)] */ + switch(qnameID) { + case 170: + /* SE( {urn:iso:15118:2:2010:MsgBody}DateTimeNow ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 232, 334); + break; + } + break; + case 9: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(qnameID) { + case 257: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Certificate ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 10, 11); + break; + } + break; + case 10: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + switch(qnameID) { + case 392: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SubCertificates ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 421, 110); + break; + } + break; + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 16, 17); + break; + } + break; + case 18: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + switch(qnameID) { + case 407: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}duration ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 19, 20); + break; + } + break; + case 21: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + switch(qnameID) { + case 399: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 22, 23); + break; + } + break; + case 24: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(qnameID) { + case 213: + /* SE( {urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 25, 26); + break; + case 212: + /* SE( {urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 27, 26); + break; + case 188: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetVoltage ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 28, 26); + break; + } + break; + case 25: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(qnameID) { + case 212: + /* SE( {urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 27, 26); + break; + case 188: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetVoltage ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 28, 26); + break; + } + break; + case 26: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + switch(qnameID) { + case 336: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Multiplier ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 544, 23); + break; + } + break; + case 27: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(qnameID) { + case 188: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 28, 26); + break; + } + break; + case 29: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + switch(qnameID) { + case 185: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEProcessing ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 30, 31); + break; + } + break; + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + switch(qnameID) { + case 151: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingProfile ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 34, 35); + break; + case 270: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 36, 37); + break; + case 294: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 36, 38); + break; + } + break; + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + switch(qnameID) { + case 270: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 36, 37); + break; + case 294: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 36, 38); + break; + } + break; + case 35: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(qnameID) { + case 366: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 342, 209); + break; + } + break; + case 37: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(qnameID) { + case 277: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 580, 145); + break; + } + break; + case 39: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(qnameID) { + case 236: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 40, 41); + break; + } + break; + case 40: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + switch(qnameID) { + case 216: + /* SE( {urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 353, 209); + break; + case 191: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeterInfo ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 354, 355); + break; + } + break; + case 43: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule)] */ + switch(qnameID) { + case 341: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 44, 45); + break; + } + break; + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + switch(qnameID) { + case 370: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariff ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 532, 533); + break; + } + break; + case 45: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + switch(qnameID) { + case 344: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 208, 209); + break; + } + break; + case 47: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + switch(qnameID) { + case 253: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 48, 49); + break; + } + break; + case 48: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage)] */ + switch(qnameID) { + case 306: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 661, 26); + break; + } + break; + case 49: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + switch(qnameID) { + case 355: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 541, 74); + break; + } + break; + case 54: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 55, 17); + break; + } + break; + case 55: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + switch(qnameID) { + case 185: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEProcessing ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 341, 31); + break; + } + break; + case 58: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + switch(qnameID) { + case 339: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 59, 60); + break; + } + break; + case 59: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry)] */ + switch(qnameID) { + case 372: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 438, 175); + break; + } + break; + case 61: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + switch(qnameID) { + case 315: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 62, 26); + break; + } + break; + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + switch(qnameID) { + case 303: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 539, 26); + break; + } + break; + case 63: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + switch(qnameID) { + case 228: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 64, 65); + break; + } + break; + case 67: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + switch(qnameID) { + case 188: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 68, 26); + break; + } + break; + case 68: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + switch(qnameID) { + case 187: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 372, 26); + break; + } + break; + case 69: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + switch(qnameID) { + case 441: + /* SE( {urn:iso:15118:2:2010:MsgDef}Header ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 70, 71); + break; + } + break; + case 70: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ + switch(qnameID) { + case 437: + /* SE( {urn:iso:15118:2:2010:MsgDef}Body ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 289, 290); + break; + } + break; + case 71: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + switch(qnameID) { + case 445: + /* SE( {urn:iso:15118:2:2010:MsgHeader}SessionID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 507, 41); + break; + } + break; + case 72: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + switch(qnameID) { + case 259: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 73, 74); + break; + } + break; + case 75: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + switch(qnameID) { + case 211: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReceiptRequired ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 76, 74); + break; + } + break; + case 76: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + switch(qnameID) { + case 131: + /* SE( {urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 560, 49); + break; + } + break; + case 78: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 79, 17); + break; + } + break; + case 80: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(qnameID) { + case 257: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Certificate ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 81, 11); + break; + } + break; + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + switch(qnameID) { + case 257: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Certificate ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 81, 11); + break; + } + break; + case 86: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 87, 17); + break; + } + break; + case 87: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(qnameID) { + case 167: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 412, 115); + break; + } + break; + case 88: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + switch(qnameID) { + case 184: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 89, 26); + break; + } + break; + case 90: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(qnameID) { + case 113: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignedInfo ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 91, 92); + break; + } + break; + case 91: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue)] */ + switch(qnameID) { + case 111: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureValue ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 509, 190); + break; + } + break; + case 92: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(qnameID) { + case 61: + /* SE( {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 107, 108); + break; + } + break; + case 93: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(qnameID) { + case 387: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 94, 95); + break; + } + break; + case 94: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + switch(qnameID) { + case 328: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FreeService ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 505, 74); + break; + } + break; + case 95: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(qnameID) { + case 383: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 434, 65); + break; + } + break; + case 97: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + switch(qnameID) { + case 298: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVReady ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 98, 74); + break; + } + break; + case 98: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + switch(qnameID) { + case 282: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 197, 74); + break; + case 296: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 112, 74); + break; + case 287: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 113, 114); + break; + } + break; + case 101: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + switch(qnameID) { + case 348: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSet ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 102, 103); + break; + } + break; + case 102: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + switch(qnameID) { + case 348: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSet ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 102, 103); + break; + } + break; + case 103: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + switch(qnameID) { + case 349: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 305, 306); + break; + } + break; + case 106: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(qnameID) { + case 61: + /* SE( {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 107, 108); + break; + } + break; + case 107: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod)] */ + switch(qnameID) { + case 104: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureMethod ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 517, 187); + break; + } + break; + case 110: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(qnameID) { + case 257: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Certificate ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 81, 11); + break; + } + break; + case 112: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + switch(qnameID) { + case 287: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 113, 114); + break; + } + break; + case 113: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC)] */ + switch(qnameID) { + case 297: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 307, 308); + break; + } + break; + case 115: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + switch(qnameID) { + case 304: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 116, 117); + break; + case 318: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 118, 119); + break; + } + break; + case 116: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + switch(qnameID) { + case 318: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 118, 119); + break; + } + break; + case 118: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + switch(qnameID) { + case 337: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 478, 12); + break; + } + break; + case 122: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + switch(qnameID) { + case 261: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 123, 124); + break; + } + break; + case 123: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ + switch(qnameID) { + case 260: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 224, 613); + break; + } + break; + case 126: + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT_GENERIC] */ + switch(qnameID) { + case 249: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 0, state, qnameID, 127, 128); + break; + case 251: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 1, state, qnameID, 127, 47); + break; + case 253: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 7, 2, state, qnameID, 127, 49); + break; + case 439: + /* SE( {urn:iso:15118:2:2010:MsgDef}BodyElement ) */ + errn = _exiEncodeStartElement(stream, 7, 3, state, qnameID, 127, 129); + break; + case 133: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckReq ) */ + errn = _exiEncodeStartElement(stream, 7, 4, state, qnameID, 127, 130); + break; + case 135: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckRes ) */ + errn = _exiEncodeStartElement(stream, 7, 5, state, qnameID, 127, 131); + break; + case 61: + /* SE( {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod ) */ + errn = _exiEncodeStartElement(stream, 7, 6, state, qnameID, 127, 108); + break; + case 137: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq ) */ + errn = _exiEncodeStartElement(stream, 7, 7, state, qnameID, 127, 132); + break; + case 139: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes ) */ + errn = _exiEncodeStartElement(stream, 7, 8, state, qnameID, 127, 133); + break; + case 141: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq ) */ + errn = _exiEncodeStartElement(stream, 7, 9, state, qnameID, 127, 134); + break; + case 143: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes ) */ + errn = _exiEncodeStartElement(stream, 7, 10, state, qnameID, 127, 135); + break; + case 145: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 7, 11, state, qnameID, 127, 136); + break; + case 147: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 7, 12, state, qnameID, 127, 54); + break; + case 152: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusReq ) */ + errn = _exiEncodeStartElement(stream, 7, 13, state, qnameID, 127, 137); + break; + case 154: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusRes ) */ + errn = _exiEncodeStartElement(stream, 7, 14, state, qnameID, 127, 138); + break; + case 156: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq ) */ + errn = _exiEncodeStartElement(stream, 7, 15, state, qnameID, 127, 139); + break; + case 158: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes ) */ + errn = _exiEncodeStartElement(stream, 7, 16, state, qnameID, 127, 140); + break; + case 163: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandReq ) */ + errn = _exiEncodeStartElement(stream, 7, 17, state, qnameID, 127, 141); + break; + case 165: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandRes ) */ + errn = _exiEncodeStartElement(stream, 7, 18, state, qnameID, 127, 142); + break; + case 267: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 19, state, qnameID, 127, 143); + break; + case 270: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 20, state, qnameID, 127, 37); + break; + case 272: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 21, state, qnameID, 127, 144); + break; + case 274: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 7, 22, state, qnameID, 127, 115); + break; + case 277: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 7, 23, state, qnameID, 127, 145); + break; + case 64: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 7, 24, state, qnameID, 127, 146); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 7, 25, state, qnameID, 127, 147); + break; + case 68: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestValue ) */ + errn = _exiEncodeStartElement(stream, 7, 26, state, qnameID, 127, 148); + break; + case 283: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 27, state, qnameID, 127, 149); + break; + case 294: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 28, state, qnameID, 127, 38); + break; + case 300: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 7, 29, state, qnameID, 127, 56); + break; + case 317: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 7, 30, state, qnameID, 127, 150); + break; + case 321: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVStatus ) */ + errn = _exiEncodeStartElement(stream, 7, 31, state, qnameID, 127, 151); + break; + case 324: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Entry ) */ + errn = _exiEncodeStartElement(stream, 7, 32, state, qnameID, 127, 152); + break; + case 75: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyInfo ) */ + errn = _exiEncodeStartElement(stream, 7, 33, state, qnameID, 127, 153); + break; + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 7, 34, state, qnameID, 127, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 7, 35, state, qnameID, 127, 155); + break; + case 80: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Manifest ) */ + errn = _exiEncodeStartElement(stream, 7, 36, state, qnameID, 127, 156); + break; + case 192: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq ) */ + errn = _exiEncodeStartElement(stream, 7, 37, state, qnameID, 127, 157); + break; + case 194: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes ) */ + errn = _exiEncodeStartElement(stream, 7, 38, state, qnameID, 127, 158); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 7, 39, state, qnameID, 127, 159); + break; + case 84: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Object ) */ + errn = _exiEncodeStartElement(stream, 7, 40, state, qnameID, 127, 160); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 7, 41, state, qnameID, 127, 161); + break; + case 342: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry ) */ + errn = _exiEncodeStartElement(stream, 7, 42, state, qnameID, 127, 162); + break; + case 197: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq ) */ + errn = _exiEncodeStartElement(stream, 7, 43, state, qnameID, 127, 163); + break; + case 199: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes ) */ + errn = _exiEncodeStartElement(stream, 7, 44, state, qnameID, 127, 164); + break; + case 202: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq ) */ + errn = _exiEncodeStartElement(stream, 7, 45, state, qnameID, 127, 165); + break; + case 204: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes ) */ + errn = _exiEncodeStartElement(stream, 7, 46, state, qnameID, 127, 166); + break; + case 206: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeReq ) */ + errn = _exiEncodeStartElement(stream, 7, 47, state, qnameID, 127, 167); + break; + case 208: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeRes ) */ + errn = _exiEncodeStartElement(stream, 7, 48, state, qnameID, 127, 86); + break; + case 93: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 7, 49, state, qnameID, 127, 168); + break; + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 7, 50, state, qnameID, 127, 169); + break; + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 7, 51, state, qnameID, 127, 170); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 7, 52, state, qnameID, 127, 171); + break; + case 363: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList ) */ + errn = _exiEncodeStartElement(stream, 7, 53, state, qnameID, 127, 172); + break; + case 368: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SASchedules ) */ + errn = _exiEncodeStartElement(stream, 7, 54, state, qnameID, 127, 173); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 7, 55, state, qnameID, 127, 174); + break; + case 372: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry ) */ + errn = _exiEncodeStartElement(stream, 7, 56, state, qnameID, 127, 175); + break; + case 381: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge ) */ + errn = _exiEncodeStartElement(stream, 7, 57, state, qnameID, 127, 176); + break; + case 220: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailReq ) */ + errn = _exiEncodeStartElement(stream, 7, 58, state, qnameID, 127, 177); + break; + case 222: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailRes ) */ + errn = _exiEncodeStartElement(stream, 7, 59, state, qnameID, 127, 178); + break; + case 224: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 7, 60, state, qnameID, 127, 179); + break; + case 226: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 7, 61, state, qnameID, 127, 180); + break; + case 231: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq ) */ + errn = _exiEncodeStartElement(stream, 7, 62, state, qnameID, 127, 181); + break; + case 233: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes ) */ + errn = _exiEncodeStartElement(stream, 7, 63, state, qnameID, 127, 182); + break; + case 237: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupReq ) */ + errn = _exiEncodeStartElement(stream, 7, 64, state, qnameID, 127, 183); + break; + case 239: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupRes ) */ + errn = _exiEncodeStartElement(stream, 7, 65, state, qnameID, 127, 184); + break; + case 241: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopReq ) */ + errn = _exiEncodeStartElement(stream, 7, 66, state, qnameID, 127, 185); + break; + case 242: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopRes ) */ + errn = _exiEncodeStartElement(stream, 7, 67, state, qnameID, 127, 78); + break; + case 103: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Signature ) */ + errn = _exiEncodeStartElement(stream, 7, 68, state, qnameID, 127, 186); + break; + case 104: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureMethod ) */ + errn = _exiEncodeStartElement(stream, 7, 69, state, qnameID, 127, 187); + break; + case 106: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperties ) */ + errn = _exiEncodeStartElement(stream, 7, 70, state, qnameID, 127, 188); + break; + case 108: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperty ) */ + errn = _exiEncodeStartElement(stream, 7, 71, state, qnameID, 127, 189); + break; + case 111: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureValue ) */ + errn = _exiEncodeStartElement(stream, 7, 72, state, qnameID, 127, 190); + break; + case 113: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignedInfo ) */ + errn = _exiEncodeStartElement(stream, 7, 73, state, qnameID, 127, 92); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 7, 74, state, qnameID, 127, 191); + break; + case 115: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transform ) */ + errn = _exiEncodeStartElement(stream, 7, 75, state, qnameID, 127, 192); + break; + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 7, 76, state, qnameID, 127, 193); + break; + case 442: + /* SE( {urn:iso:15118:2:2010:MsgDef}V2G_Message ) */ + errn = _exiEncodeStartElement(stream, 7, 77, state, qnameID, 127, 69); + break; + case 245: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq ) */ + errn = _exiEncodeStartElement(stream, 7, 78, state, qnameID, 127, 194); + break; + case 247: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes ) */ + errn = _exiEncodeStartElement(stream, 7, 79, state, qnameID, 127, 195); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 7, 80, state, qnameID, 127, 196); + break; + } + break; + case 128: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + switch(qnameID) { + case 279: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DepartureTime ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 497, 545); + break; + } + break; + case 130: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 363, 145); + break; + } + break; + case 131: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 281, 17); + break; + } + break; + case 132: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(qnameID) { + case 196: + /* SE( {urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 199, 11); + break; + } + break; + case 134: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 396, 9); + break; + } + break; + case 136: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + switch(qnameID) { + case 175: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 213, 214); + break; + } + break; + case 138: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 260, 17); + break; + } + break; + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(qnameID) { + case 189: + /* SE( {urn:iso:15118:2:2010:MsgBody}GenChallenge ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 349, 8); + break; + } + break; + case 140: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 379, 17); + break; + } + break; + case 141: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 239, 145); + break; + } + break; + case 142: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 271, 17); + break; + } + break; + case 143: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(qnameID) { + case 277: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 345, 145); + break; + } + break; + case 144: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + switch(qnameID) { + case 274: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 542, 115); + break; + } + break; + case 145: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + switch(qnameID) { + case 298: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVReady ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 98, 74); + break; + } + break; + case 146: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(qnameID) { + case 86: + /* SE( {http://www.w3.org/2000/09/xmldsig#}P ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 273, 275); + break; + case 71: + /* SE( {http://www.w3.org/2000/09/xmldsig#}G ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 481, 275); + break; + case 130: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Y ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 327, 275); + break; + } + break; + case 152: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 444, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 444, 191); + break; + } + break; + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 241, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 241, 155); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 241, 171); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 241, 196); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 241, 161); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 241, 174); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 4, 7, state, qnameID, 241, 159); + break; + } + break; + case 155: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 64: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 295, 146); + break; + case 93: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 295, 168); + break; + } + break; + case 156: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(qnameID) { + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 565, 169); + break; + } + break; + case 157: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(qnameID) { + case 236: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionID ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 40, 41); + break; + } + break; + case 158: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 419, 17); + break; + } + break; + case 161: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + switch(qnameID) { + case 89: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyID ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 490, 246); + break; + case 90: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 491, 492); + break; + } + break; + case 162: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 470, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 470, 191); + break; + } + break; + case 163: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(qnameID) { + case 160: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 356, 357); + break; + } + break; + case 164: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 6, 17); + break; + } + break; + case 165: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + switch(qnameID) { + case 210: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReadyToChargeState ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 33, 74); + break; + } + break; + case 166: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 463, 17); + break; + } + break; + case 167: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 67, 145); + break; + } + break; + case 168: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + switch(qnameID) { + case 83: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Modulus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 570, 275); + break; + } + break; + case 169: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 277, 193); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 278, 147); + break; + } + break; + case 170: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + switch(qnameID) { + case 430: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}start ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 18, 547); + break; + } + break; + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 82, 193); + break; + } + break; + case 172: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + switch(qnameID) { + case 365: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 320, 321); + break; + } + break; + case 174: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + switch(qnameID) { + case 101: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKISexp ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 204, 205); + break; + } + break; + case 175: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 336, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 336, 191); + break; + } + break; + case 176: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(qnameID) { + case 387: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 309, 95); + break; + } + break; + case 177: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + switch(qnameID) { + case 228: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 64, 65); + break; + } + break; + case 178: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 217, 17); + break; + } + break; + case 179: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + switch(qnameID) { + case 235: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceScope ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 572, 518); + break; + case 219: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 573, 85); + break; + } + break; + case 180: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 628, 17); + break; + } + break; + case 181: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + switch(qnameID) { + case 217: + /* SE( {urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 254, 245); + break; + } + break; + case 182: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 16, 17); + break; + } + break; + case 183: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + switch(qnameID) { + case 171: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVCCID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 629, 223); + break; + } + break; + case 184: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 238, 17); + break; + } + break; + case 186: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(qnameID) { + case 113: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignedInfo ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 91, 92); + break; + } + break; + case 188: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(qnameID) { + case 108: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperty ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 377, 189); + break; + } + break; + case 193: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + switch(qnameID) { + case 115: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transform ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 431, 192); + break; + } + break; + case 194: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 231, 145); + break; + } + break; + case 195: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 521, 17); + break; + } + break; + case 196: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + switch(qnameID) { + case 124: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 313, 314); + break; + case 126: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SKI ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 313, 77); + break; + case 128: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SubjectName ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 313, 315); + break; + case 120: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Certificate ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 313, 316); + break; + case 119: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509CRL ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 313, 317); + break; + } + break; + case 197: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + switch(qnameID) { + case 296: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 112, 74); + break; + case 287: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 113, 114); + break; + } + break; + case 198: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(qnameID) { + case 196: + /* SE( {urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 199, 11); + break; + } + break; + case 199: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + switch(qnameID) { + case 190: + /* SE( {urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 386, 360); + break; + } + break; + case 204: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + switch(qnameID) { + case 101: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKISexp ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 204, 205); + break; + } + break; + case 206: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + switch(qnameID) { + case 101: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKISexp ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 204, 205); + break; + } + break; + case 207: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + switch(qnameID) { + case 344: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 208, 209); + break; + } + break; + case 208: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry)] */ + switch(qnameID) { + case 342: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 448, 162); + break; + } + break; + case 213: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter)] */ + switch(qnameID) { + case 249: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 670, 128); + break; + case 267: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 670, 143); + break; + case 283: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 670, 149); + break; + } + break; + case 215: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 129: + /* SE( {http://www.w3.org/2000/09/xmldsig#}XPath ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 221, 222); + break; + } + break; + case 216: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 217, 17); + break; + } + break; + case 217: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + switch(qnameID) { + case 228: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 288, 65); + break; + } + break; + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + switch(qnameID) { + case 265: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Cost ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 218, 1); + break; + } + break; + case 220: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 129: + /* SE( {http://www.w3.org/2000/09/xmldsig#}XPath ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 221, 222); + break; + } + break; + case 221: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 129: + /* SE( {http://www.w3.org/2000/09/xmldsig#}XPath ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 221, 222); + break; + } + break; + case 230: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 231, 145); + break; + } + break; + case 233: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + switch(qnameID) { + case 175: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 213, 214); + break; + } + break; + case 234: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved)] */ + switch(qnameID) { + case 182: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 235, 74); + break; + } + break; + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + switch(qnameID) { + case 181: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 605, 26); + break; + case 179: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 606, 26); + break; + case 180: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 516, 26); + break; + } + break; + case 237: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 238, 17); + break; + } + break; + case 238: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + switch(qnameID) { + case 177: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 530, 531); + break; + } + break; + case 239: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + switch(qnameID) { + case 187: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 484, 26); + break; + } + break; + case 240: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 4, 0, state, qnameID, 241, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 241, 155); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 241, 171); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 241, 196); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 241, 161); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 241, 174); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 241, 159); + break; + } + break; + case 241: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 4, 0, state, qnameID, 241, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 241, 155); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 241, 171); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 241, 196); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 241, 161); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 241, 174); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 241, 159); + break; + } + break; + case 242: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 4, 0, state, qnameID, 241, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 241, 155); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 241, 171); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 241, 196); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 241, 161); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 241, 174); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 241, 159); + break; + } + break; + case 243: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + switch(qnameID) { + case 257: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Certificate ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 10, 11); + break; + } + break; + case 244: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + switch(qnameID) { + case 352: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PaymentOption ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 244, 245); + break; + } + break; + case 250: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(qnameID) { + case 394: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TMeter ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 251, 252); + break; + } + break; + case 253: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + switch(qnameID) { + case 352: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PaymentOption ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 244, 245); + break; + } + break; + case 254: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList)] */ + switch(qnameID) { + case 218: + /* SE( {urn:iso:15118:2:2010:MsgBody}SelectedServiceList ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 494, 522); + break; + } + break; + case 256: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 82, 193); + break; + } + break; + case 257: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + switch(qnameID) { + case 229: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceList ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 258, 259); + break; + } + break; + case 259: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + switch(qnameID) { + case 379: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Service ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 337, 338); + break; + } + break; + case 260: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + switch(qnameID) { + case 177: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 461, 531); + break; + } + break; + case 262: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + switch(qnameID) { + case 184: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 263, 26); + break; + } + break; + case 263: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent)] */ + switch(qnameID) { + case 183: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 548, 26); + break; + } + break; + case 264: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 72: + /* SE( {http://www.w3.org/2000/09/xmldsig#}HMACOutputLength ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 265, 266); + break; + } + break; + case 267: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 72: + /* SE( {http://www.w3.org/2000/09/xmldsig#}HMACOutputLength ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 265, 266); + break; + } + break; + case 271: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(qnameID) { + case 167: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 262, 115); + break; + } + break; + case 273: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q)] */ + switch(qnameID) { + case 92: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Q ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 274, 275); + break; + } + break; + case 274: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(qnameID) { + case 71: + /* SE( {http://www.w3.org/2000/09/xmldsig#}G ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 481, 275); + break; + case 130: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Y ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 327, 275); + break; + } + break; + case 276: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 277, 193); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 278, 147); + break; + } + break; + case 277: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 278, 147); + break; + } + break; + case 278: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue)] */ + switch(qnameID) { + case 68: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestValue ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 601, 148); + break; + } + break; + case 280: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter)] */ + switch(qnameID) { + case 91: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PgenCounter ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 125, 275); + break; + } + break; + case 281: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(qnameID) { + case 167: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 29, 115); + break; + } + break; + case 284: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 285, 17); + break; + } + break; + case 285: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 364, 9); + break; + } + break; + case 287: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + switch(qnameID) { + case 253: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 48, 49); + break; + } + break; + case 288: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + switch(qnameID) { + case 230: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceParameterList ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 558, 101); + break; + } + break; + case 290: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + switch(qnameID) { + case 439: + /* SE( {urn:iso:15118:2:2010:MsgDef}BodyElement ) */ + errn = _exiEncodeStartElement(stream, 6, 0, state, qnameID, 302, 129); + break; + case 133: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckReq ) */ + errn = _exiEncodeStartElement(stream, 6, 1, state, qnameID, 302, 130); + break; + case 135: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckRes ) */ + errn = _exiEncodeStartElement(stream, 6, 2, state, qnameID, 302, 131); + break; + case 137: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq ) */ + errn = _exiEncodeStartElement(stream, 6, 3, state, qnameID, 302, 132); + break; + case 139: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes ) */ + errn = _exiEncodeStartElement(stream, 6, 4, state, qnameID, 302, 133); + break; + case 141: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq ) */ + errn = _exiEncodeStartElement(stream, 6, 5, state, qnameID, 302, 134); + break; + case 143: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes ) */ + errn = _exiEncodeStartElement(stream, 6, 6, state, qnameID, 302, 135); + break; + case 145: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 6, 7, state, qnameID, 302, 136); + break; + case 147: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 6, 8, state, qnameID, 302, 54); + break; + case 152: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusReq ) */ + errn = _exiEncodeStartElement(stream, 6, 9, state, qnameID, 302, 137); + break; + case 154: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusRes ) */ + errn = _exiEncodeStartElement(stream, 6, 10, state, qnameID, 302, 138); + break; + case 156: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq ) */ + errn = _exiEncodeStartElement(stream, 6, 11, state, qnameID, 302, 139); + break; + case 158: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes ) */ + errn = _exiEncodeStartElement(stream, 6, 12, state, qnameID, 302, 140); + break; + case 163: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandReq ) */ + errn = _exiEncodeStartElement(stream, 6, 13, state, qnameID, 302, 141); + break; + case 165: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandRes ) */ + errn = _exiEncodeStartElement(stream, 6, 14, state, qnameID, 302, 142); + break; + case 192: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq ) */ + errn = _exiEncodeStartElement(stream, 6, 15, state, qnameID, 302, 157); + break; + case 194: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes ) */ + errn = _exiEncodeStartElement(stream, 6, 16, state, qnameID, 302, 158); + break; + case 197: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq ) */ + errn = _exiEncodeStartElement(stream, 6, 17, state, qnameID, 302, 163); + break; + case 199: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes ) */ + errn = _exiEncodeStartElement(stream, 6, 18, state, qnameID, 302, 164); + break; + case 202: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq ) */ + errn = _exiEncodeStartElement(stream, 6, 19, state, qnameID, 302, 165); + break; + case 204: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes ) */ + errn = _exiEncodeStartElement(stream, 6, 20, state, qnameID, 302, 166); + break; + case 206: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeReq ) */ + errn = _exiEncodeStartElement(stream, 6, 21, state, qnameID, 302, 167); + break; + case 208: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeRes ) */ + errn = _exiEncodeStartElement(stream, 6, 22, state, qnameID, 302, 86); + break; + case 220: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailReq ) */ + errn = _exiEncodeStartElement(stream, 6, 23, state, qnameID, 302, 177); + break; + case 222: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailRes ) */ + errn = _exiEncodeStartElement(stream, 6, 24, state, qnameID, 302, 178); + break; + case 224: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 6, 25, state, qnameID, 302, 179); + break; + case 226: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 6, 26, state, qnameID, 302, 180); + break; + case 231: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq ) */ + errn = _exiEncodeStartElement(stream, 6, 27, state, qnameID, 302, 181); + break; + case 233: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes ) */ + errn = _exiEncodeStartElement(stream, 6, 28, state, qnameID, 302, 182); + break; + case 237: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupReq ) */ + errn = _exiEncodeStartElement(stream, 6, 29, state, qnameID, 302, 183); + break; + case 239: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupRes ) */ + errn = _exiEncodeStartElement(stream, 6, 30, state, qnameID, 302, 184); + break; + case 241: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopReq ) */ + errn = _exiEncodeStartElement(stream, 6, 31, state, qnameID, 302, 185); + break; + case 242: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopRes ) */ + errn = _exiEncodeStartElement(stream, 6, 32, state, qnameID, 302, 78); + break; + case 245: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq ) */ + errn = _exiEncodeStartElement(stream, 6, 33, state, qnameID, 302, 194); + break; + case 247: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes ) */ + errn = _exiEncodeStartElement(stream, 6, 34, state, qnameID, 302, 195); + break; + } + break; + case 291: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(qnameID) { + case 169: + /* SE( {urn:iso:15118:2:2010:MsgBody}DHParams ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 292, 269); + break; + } + break; + case 292: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(qnameID) { + case 160: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 411, 357); + break; + } + break; + case 296: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 64: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 295, 146); + break; + case 93: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 295, 168); + break; + } + break; + case 298: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 299, 17); + break; + } + break; + case 299: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 303, 9); + break; + } + break; + case 301: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + switch(qnameID) { + case 439: + /* SE( {urn:iso:15118:2:2010:MsgDef}BodyElement ) */ + errn = _exiEncodeStartElement(stream, 6, 0, state, qnameID, 302, 129); + break; + case 133: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckReq ) */ + errn = _exiEncodeStartElement(stream, 6, 1, state, qnameID, 302, 130); + break; + case 135: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckRes ) */ + errn = _exiEncodeStartElement(stream, 6, 2, state, qnameID, 302, 131); + break; + case 137: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq ) */ + errn = _exiEncodeStartElement(stream, 6, 3, state, qnameID, 302, 132); + break; + case 139: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes ) */ + errn = _exiEncodeStartElement(stream, 6, 4, state, qnameID, 302, 133); + break; + case 141: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq ) */ + errn = _exiEncodeStartElement(stream, 6, 5, state, qnameID, 302, 134); + break; + case 143: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes ) */ + errn = _exiEncodeStartElement(stream, 6, 6, state, qnameID, 302, 135); + break; + case 145: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 6, 7, state, qnameID, 302, 136); + break; + case 147: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 6, 8, state, qnameID, 302, 54); + break; + case 152: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusReq ) */ + errn = _exiEncodeStartElement(stream, 6, 9, state, qnameID, 302, 137); + break; + case 154: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusRes ) */ + errn = _exiEncodeStartElement(stream, 6, 10, state, qnameID, 302, 138); + break; + case 156: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq ) */ + errn = _exiEncodeStartElement(stream, 6, 11, state, qnameID, 302, 139); + break; + case 158: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes ) */ + errn = _exiEncodeStartElement(stream, 6, 12, state, qnameID, 302, 140); + break; + case 163: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandReq ) */ + errn = _exiEncodeStartElement(stream, 6, 13, state, qnameID, 302, 141); + break; + case 165: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandRes ) */ + errn = _exiEncodeStartElement(stream, 6, 14, state, qnameID, 302, 142); + break; + case 192: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq ) */ + errn = _exiEncodeStartElement(stream, 6, 15, state, qnameID, 302, 157); + break; + case 194: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes ) */ + errn = _exiEncodeStartElement(stream, 6, 16, state, qnameID, 302, 158); + break; + case 197: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq ) */ + errn = _exiEncodeStartElement(stream, 6, 17, state, qnameID, 302, 163); + break; + case 199: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes ) */ + errn = _exiEncodeStartElement(stream, 6, 18, state, qnameID, 302, 164); + break; + case 202: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq ) */ + errn = _exiEncodeStartElement(stream, 6, 19, state, qnameID, 302, 165); + break; + case 204: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes ) */ + errn = _exiEncodeStartElement(stream, 6, 20, state, qnameID, 302, 166); + break; + case 206: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeReq ) */ + errn = _exiEncodeStartElement(stream, 6, 21, state, qnameID, 302, 167); + break; + case 208: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeRes ) */ + errn = _exiEncodeStartElement(stream, 6, 22, state, qnameID, 302, 86); + break; + case 220: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailReq ) */ + errn = _exiEncodeStartElement(stream, 6, 23, state, qnameID, 302, 177); + break; + case 222: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailRes ) */ + errn = _exiEncodeStartElement(stream, 6, 24, state, qnameID, 302, 178); + break; + case 224: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 6, 25, state, qnameID, 302, 179); + break; + case 226: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 6, 26, state, qnameID, 302, 180); + break; + case 231: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq ) */ + errn = _exiEncodeStartElement(stream, 6, 27, state, qnameID, 302, 181); + break; + case 233: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes ) */ + errn = _exiEncodeStartElement(stream, 6, 28, state, qnameID, 302, 182); + break; + case 237: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupReq ) */ + errn = _exiEncodeStartElement(stream, 6, 29, state, qnameID, 302, 183); + break; + case 239: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupRes ) */ + errn = _exiEncodeStartElement(stream, 6, 30, state, qnameID, 302, 184); + break; + case 241: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopReq ) */ + errn = _exiEncodeStartElement(stream, 6, 31, state, qnameID, 302, 185); + break; + case 242: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopRes ) */ + errn = _exiEncodeStartElement(stream, 6, 32, state, qnameID, 302, 78); + break; + case 245: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq ) */ + errn = _exiEncodeStartElement(stream, 6, 33, state, qnameID, 302, 194); + break; + case 247: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes ) */ + errn = _exiEncodeStartElement(stream, 6, 34, state, qnameID, 302, 195); + break; + } + break; + case 303: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + switch(qnameID) { + case 162: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 291, 304); + break; + } + break; + case 305: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter)] */ + switch(qnameID) { + case 347: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Parameter ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 340, 202); + break; + } + break; + case 309: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + switch(qnameID) { + case 328: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FreeService ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 430, 74); + break; + } + break; + case 310: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(qnameID) { + case 335: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterStatus ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 250, 311); + break; + case 394: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TMeter ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 251, 252); + break; + } + break; + case 313: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + switch(qnameID) { + case 124: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 313, 314); + break; + case 126: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SKI ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 313, 77); + break; + case 128: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SubjectName ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 313, 315); + break; + case 120: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Certificate ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 313, 316); + break; + case 119: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509CRL ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 313, 317); + break; + } + break; + case 314: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + switch(qnameID) { + case 123: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerName ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 568, 569); + break; + } + break; + case 318: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 299, 17); + break; + } + break; + case 319: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + switch(qnameID) { + case 365: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 320, 321); + break; + } + break; + case 320: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + switch(qnameID) { + case 365: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 320, 321); + break; + } + break; + case 321: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(qnameID) { + case 366: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 43, 209); + break; + } + break; + case 323: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(qnameID) { + case 256: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkSOC ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 324, 308); + break; + } + break; + case 326: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + switch(qnameID) { + case 84: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Object ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 326, 160); + break; + } + break; + case 327: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + switch(qnameID) { + case 74: + /* SE( {http://www.w3.org/2000/09/xmldsig#}J ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 328, 275); + break; + case 102: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Seed ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 280, 275); + break; + } + break; + case 328: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + switch(qnameID) { + case 102: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Seed ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 280, 275); + break; + } + break; + case 329: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + switch(qnameID) { + case 326: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FaultCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 330, 331); + break; + } + break; + case 330: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + switch(qnameID) { + case 327: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FaultMsg ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 420, 550); + break; + } + break; + case 332: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter)] */ + switch(qnameID) { + case 251: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 333, 47); + break; + case 272: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 333, 144); + break; + case 300: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 333, 56); + break; + } + break; + case 335: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 336, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 336, 191); + break; + } + break; + case 336: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel)] */ + switch(qnameID) { + case 281: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 346, 60); + break; + } + break; + case 337: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + switch(qnameID) { + case 379: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Service ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 337, 338); + break; + } + break; + case 338: + /* First(xsi:type)StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(qnameID) { + case 387: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 94, 95); + break; + } + break; + case 339: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 72: + /* SE( {http://www.w3.org/2000/09/xmldsig#}HMACOutputLength ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 265, 266); + break; + } + break; + case 340: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + switch(qnameID) { + case 347: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Parameter ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 340, 202); + break; + } + break; + case 341: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules)] */ + switch(qnameID) { + case 363: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 332, 172); + break; + case 368: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SASchedules ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 332, 173); + break; + } + break; + case 342: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry)] */ + switch(qnameID) { + case 356: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 587, 537); + break; + } + break; + case 345: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit)] */ + switch(qnameID) { + case 290: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 416, 26); + break; + } + break; + case 346: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + switch(qnameID) { + case 263: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 346, 347); + break; + } + break; + case 347: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + switch(qnameID) { + case 431: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}startValue ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 218, 552); + break; + } + break; + case 348: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(qnameID) { + case 189: + /* SE( {urn:iso:15118:2:2010:MsgBody}GenChallenge ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 349, 8); + break; + } + break; + case 350: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(qnameID) { + case 113: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignedInfo ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 91, 92); + break; + } + break; + case 353: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + switch(qnameID) { + case 191: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeterInfo ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 354, 355); + break; + } + break; + case 355: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + switch(qnameID) { + case 332: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 535, 100); + break; + } + break; + case 356: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 594, 9); + break; + } + break; + case 360: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + switch(qnameID) { + case 361: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 361, 362); + break; + } + break; + case 361: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + switch(qnameID) { + case 361: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 361, 362); + break; + } + break; + case 364: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + switch(qnameID) { + case 162: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 512, 304); + break; + } + break; + case 369: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + switch(qnameID) { + case 313: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSENotification ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 370, 371); + break; + } + break; + case 373: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + switch(qnameID) { + case 191: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeterInfo ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 75, 355); + break; + case 211: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReceiptRequired ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 76, 74); + break; + } + break; + case 376: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(qnameID) { + case 108: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperty ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 377, 189); + break; + } + break; + case 377: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + switch(qnameID) { + case 108: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperty ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 377, 189); + break; + } + break; + case 378: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 379, 17); + break; + } + break; + case 379: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + switch(qnameID) { + case 185: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEProcessing ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 563, 31); + break; + } + break; + case 382: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(qnameID) { + case 387: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 94, 95); + break; + } + break; + case 386: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(qnameID) { + case 169: + /* SE( {urn:iso:15118:2:2010:MsgBody}DHParams ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 387, 269); + break; + } + break; + case 388: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(qnameID) { + case 329: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FullSOC ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 323, 308); + break; + case 256: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkSOC ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 324, 308); + break; + } + break; + case 394: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 239, 145); + break; + } + break; + case 395: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 396, 9); + break; + } + break; + case 396: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(qnameID) { + case 160: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 436, 357); + break; + } + break; + case 397: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + switch(qnameID) { + case 302: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 61, 26); + break; + case 315: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 62, 26); + break; + } + break; + case 407: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + switch(qnameID) { + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 407, 169); + break; + } + break; + case 411: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter)] */ + switch(qnameID) { + case 215: + /* SE( {urn:iso:15118:2:2010:MsgBody}RetryCounter ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 671, 616); + break; + } + break; + case 412: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + switch(qnameID) { + case 184: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 413, 26); + break; + } + break; + case 416: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + switch(qnameID) { + case 291: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 578, 26); + break; + case 292: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 471, 26); + break; + } + break; + case 417: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(qnameID) { + case 196: + /* SE( {urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 199, 11); + break; + } + break; + case 419: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + switch(qnameID) { + case 131: + /* SE( {urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 109, 49); + break; + } + break; + case 422: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 363, 145); + break; + } + break; + case 426: + /* FragmentContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue), START_ELEMENT_GENERIC, END_DOCUMENT] */ + switch(qnameID) { + case 249: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 0, state, qnameID, 426, 128); + break; + case 251: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 1, state, qnameID, 426, 47); + break; + case 131: + /* SE( {urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 2, state, qnameID, 426, 49); + break; + case 253: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 3, state, qnameID, 426, 49); + break; + case 437: + /* SE( {urn:iso:15118:2:2010:MsgDef}Body ) */ + errn = _exiEncodeStartElement(stream, 8, 4, state, qnameID, 426, 290); + break; + case 439: + /* SE( {urn:iso:15118:2:2010:MsgDef}BodyElement ) */ + errn = _exiEncodeStartElement(stream, 8, 5, state, qnameID, 426, 129); + break; + case 132: + /* SE( {urn:iso:15118:2:2010:MsgBody}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 8, 6, state, qnameID, 426, 74); + break; + case 255: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 8, 7, state, qnameID, 426, 74); + break; + case 256: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkSOC ) */ + errn = _exiEncodeStartElement(stream, 8, 8, state, qnameID, 426, 308); + break; + case 133: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckReq ) */ + errn = _exiEncodeStartElement(stream, 8, 9, state, qnameID, 426, 130); + break; + case 135: + /* SE( {urn:iso:15118:2:2010:MsgBody}CableCheckRes ) */ + errn = _exiEncodeStartElement(stream, 8, 10, state, qnameID, 426, 131); + break; + case 61: + /* SE( {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod ) */ + errn = _exiEncodeStartElement(stream, 8, 11, state, qnameID, 426, 108); + break; + case 257: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Certificate ) */ + errn = _exiEncodeStartElement(stream, 8, 12, state, qnameID, 426, 11); + break; + case 137: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq ) */ + errn = _exiEncodeStartElement(stream, 8, 13, state, qnameID, 426, 132); + break; + case 139: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes ) */ + errn = _exiEncodeStartElement(stream, 8, 14, state, qnameID, 426, 133); + break; + case 141: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq ) */ + errn = _exiEncodeStartElement(stream, 8, 15, state, qnameID, 426, 134); + break; + case 143: + /* SE( {urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes ) */ + errn = _exiEncodeStartElement(stream, 8, 16, state, qnameID, 426, 135); + break; + case 145: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 8, 17, state, qnameID, 426, 136); + break; + case 147: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 8, 18, state, qnameID, 426, 54); + break; + case 149: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeService ) */ + errn = _exiEncodeStartElement(stream, 8, 19, state, qnameID, 426, 176); + break; + case 150: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 8, 20, state, qnameID, 426, 74); + break; + case 259: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 8, 21, state, qnameID, 426, 74); + break; + case 151: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingProfile ) */ + errn = _exiEncodeStartElement(stream, 8, 22, state, qnameID, 426, 35); + break; + case 260: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower ) */ + errn = _exiEncodeStartElement(stream, 8, 23, state, qnameID, 426, 613); + break; + case 261: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart ) */ + errn = _exiEncodeStartElement(stream, 8, 24, state, qnameID, 426, 124); + break; + case 152: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusReq ) */ + errn = _exiEncodeStartElement(stream, 8, 25, state, qnameID, 426, 137); + break; + case 154: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingStatusRes ) */ + errn = _exiEncodeStartElement(stream, 8, 26, state, qnameID, 426, 138); + break; + case 263: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost ) */ + errn = _exiEncodeStartElement(stream, 8, 27, state, qnameID, 426, 347); + break; + case 156: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq ) */ + errn = _exiEncodeStartElement(stream, 8, 28, state, qnameID, 426, 139); + break; + case 158: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes ) */ + errn = _exiEncodeStartElement(stream, 8, 29, state, qnameID, 426, 140); + break; + case 160: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractID ) */ + errn = _exiEncodeStartElement(stream, 8, 30, state, qnameID, 426, 357); + break; + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 8, 31, state, qnameID, 426, 9); + break; + case 162: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey ) */ + errn = _exiEncodeStartElement(stream, 8, 32, state, qnameID, 426, 304); + break; + case 265: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Cost ) */ + errn = _exiEncodeStartElement(stream, 8, 33, state, qnameID, 426, 1); + break; + case 163: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandReq ) */ + errn = _exiEncodeStartElement(stream, 8, 34, state, qnameID, 426, 141); + break; + case 165: + /* SE( {urn:iso:15118:2:2010:MsgBody}CurrentDemandRes ) */ + errn = _exiEncodeStartElement(stream, 8, 35, state, qnameID, 426, 142); + break; + case 267: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 36, state, qnameID, 426, 143); + break; + case 270: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 37, state, qnameID, 426, 37); + break; + case 272: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 38, state, qnameID, 426, 144); + break; + case 167: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 39, state, qnameID, 426, 115); + break; + case 274: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 40, state, qnameID, 426, 115); + break; + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 41, state, qnameID, 426, 145); + break; + case 277: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 42, state, qnameID, 426, 145); + break; + case 169: + /* SE( {urn:iso:15118:2:2010:MsgBody}DHParams ) */ + errn = _exiEncodeStartElement(stream, 8, 43, state, qnameID, 426, 269); + break; + case 64: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 8, 44, state, qnameID, 426, 146); + break; + case 170: + /* SE( {urn:iso:15118:2:2010:MsgBody}DateTimeNow ) */ + errn = _exiEncodeStartElement(stream, 8, 45, state, qnameID, 426, 554); + break; + case 279: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DepartureTime ) */ + errn = _exiEncodeStartElement(stream, 8, 46, state, qnameID, 426, 545); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 8, 47, state, qnameID, 426, 147); + break; + case 68: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestValue ) */ + errn = _exiEncodeStartElement(stream, 8, 48, state, qnameID, 426, 148); + break; + case 280: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EAmount ) */ + errn = _exiEncodeStartElement(stream, 8, 49, state, qnameID, 426, 26); + break; + case 281: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel ) */ + errn = _exiEncodeStartElement(stream, 8, 50, state, qnameID, 426, 60); + break; + case 171: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVCCID ) */ + errn = _exiEncodeStartElement(stream, 8, 51, state, qnameID, 426, 223); + break; + case 282: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning ) */ + errn = _exiEncodeStartElement(stream, 8, 52, state, qnameID, 426, 74); + break; + case 283: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 53, state, qnameID, 426, 149); + break; + case 285: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity ) */ + errn = _exiEncodeStartElement(stream, 8, 54, state, qnameID, 426, 26); + break; + case 286: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest ) */ + errn = _exiEncodeStartElement(stream, 8, 55, state, qnameID, 426, 26); + break; + case 287: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode ) */ + errn = _exiEncodeStartElement(stream, 8, 56, state, qnameID, 426, 114); + break; + case 288: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 57, state, qnameID, 426, 26); + break; + case 289: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage ) */ + errn = _exiEncodeStartElement(stream, 8, 58, state, qnameID, 426, 26); + break; + case 172: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 59, state, qnameID, 426, 26); + break; + case 290: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 60, state, qnameID, 426, 26); + break; + case 173: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 61, state, qnameID, 426, 26); + break; + case 291: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 62, state, qnameID, 426, 26); + break; + case 174: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 63, state, qnameID, 426, 26); + break; + case 292: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 64, state, qnameID, 426, 26); + break; + case 293: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 65, state, qnameID, 426, 26); + break; + case 294: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 66, state, qnameID, 426, 38); + break; + case 296: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning ) */ + errn = _exiEncodeStartElement(stream, 8, 67, state, qnameID, 426, 74); + break; + case 297: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC ) */ + errn = _exiEncodeStartElement(stream, 8, 68, state, qnameID, 426, 308); + break; + case 298: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVReady ) */ + errn = _exiEncodeStartElement(stream, 8, 69, state, qnameID, 426, 74); + break; + case 175: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType ) */ + errn = _exiEncodeStartElement(stream, 8, 70, state, qnameID, 426, 214); + break; + case 300: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter ) */ + errn = _exiEncodeStartElement(stream, 8, 71, state, qnameID, 426, 56); + break; + case 176: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved ) */ + errn = _exiEncodeStartElement(stream, 8, 72, state, qnameID, 426, 74); + break; + case 302: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance ) */ + errn = _exiEncodeStartElement(stream, 8, 73, state, qnameID, 426, 26); + break; + case 303: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered ) */ + errn = _exiEncodeStartElement(stream, 8, 74, state, qnameID, 426, 26); + break; + case 177: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEID ) */ + errn = _exiEncodeStartElement(stream, 8, 75, state, qnameID, 426, 531); + break; + case 304: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 76, state, qnameID, 426, 117); + break; + case 178: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 77, state, qnameID, 426, 26); + break; + case 305: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 78, state, qnameID, 426, 26); + break; + case 306: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage ) */ + errn = _exiEncodeStartElement(stream, 8, 79, state, qnameID, 426, 26); + break; + case 179: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 80, state, qnameID, 426, 26); + break; + case 307: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 81, state, qnameID, 426, 26); + break; + case 180: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 82, state, qnameID, 426, 26); + break; + case 308: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 83, state, qnameID, 426, 26); + break; + case 181: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 84, state, qnameID, 426, 26); + break; + case 309: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 85, state, qnameID, 426, 26); + break; + case 310: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 86, state, qnameID, 426, 26); + break; + case 311: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 87, state, qnameID, 426, 26); + break; + case 312: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 8, 88, state, qnameID, 426, 26); + break; + case 313: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSENotification ) */ + errn = _exiEncodeStartElement(stream, 8, 89, state, qnameID, 426, 371); + break; + case 315: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple ) */ + errn = _exiEncodeStartElement(stream, 8, 90, state, qnameID, 426, 26); + break; + case 182: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved ) */ + errn = _exiEncodeStartElement(stream, 8, 91, state, qnameID, 426, 74); + break; + case 183: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 92, state, qnameID, 426, 26); + break; + case 184: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage ) */ + errn = _exiEncodeStartElement(stream, 8, 93, state, qnameID, 426, 26); + break; + case 185: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEProcessing ) */ + errn = _exiEncodeStartElement(stream, 8, 94, state, qnameID, 426, 31); + break; + case 317: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 95, state, qnameID, 426, 150); + break; + case 318: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode ) */ + errn = _exiEncodeStartElement(stream, 8, 96, state, qnameID, 426, 119); + break; + case 186: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved ) */ + errn = _exiEncodeStartElement(stream, 8, 97, state, qnameID, 426, 74); + break; + case 321: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 98, state, qnameID, 426, 151); + break; + case 187: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetCurrent ) */ + errn = _exiEncodeStartElement(stream, 8, 99, state, qnameID, 426, 26); + break; + case 188: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVTargetVoltage ) */ + errn = _exiEncodeStartElement(stream, 8, 100, state, qnameID, 426, 26); + break; + case 323: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType ) */ + errn = _exiEncodeStartElement(stream, 8, 101, state, qnameID, 426, 469); + break; + case 324: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Entry ) */ + errn = _exiEncodeStartElement(stream, 8, 102, state, qnameID, 426, 152); + break; + case 70: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Exponent ) */ + errn = _exiEncodeStartElement(stream, 8, 103, state, qnameID, 426, 275); + break; + case 326: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FaultCode ) */ + errn = _exiEncodeStartElement(stream, 8, 104, state, qnameID, 426, 331); + break; + case 327: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FaultMsg ) */ + errn = _exiEncodeStartElement(stream, 8, 105, state, qnameID, 426, 550); + break; + case 328: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FreeService ) */ + errn = _exiEncodeStartElement(stream, 8, 106, state, qnameID, 426, 74); + break; + case 329: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FullSOC ) */ + errn = _exiEncodeStartElement(stream, 8, 107, state, qnameID, 426, 308); + break; + case 71: + /* SE( {http://www.w3.org/2000/09/xmldsig#}G ) */ + errn = _exiEncodeStartElement(stream, 8, 108, state, qnameID, 426, 275); + break; + case 189: + /* SE( {urn:iso:15118:2:2010:MsgBody}GenChallenge ) */ + errn = _exiEncodeStartElement(stream, 8, 109, state, qnameID, 426, 8); + break; + case 72: + /* SE( {http://www.w3.org/2000/09/xmldsig#}HMACOutputLength ) */ + errn = _exiEncodeStartElement(stream, 8, 110, state, qnameID, 426, 266); + break; + case 441: + /* SE( {urn:iso:15118:2:2010:MsgDef}Header ) */ + errn = _exiEncodeStartElement(stream, 8, 111, state, qnameID, 426, 71); + break; + case 74: + /* SE( {http://www.w3.org/2000/09/xmldsig#}J ) */ + errn = _exiEncodeStartElement(stream, 8, 112, state, qnameID, 426, 275); + break; + case 75: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyInfo ) */ + errn = _exiEncodeStartElement(stream, 8, 113, state, qnameID, 426, 153); + break; + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 8, 114, state, qnameID, 426, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 8, 115, state, qnameID, 426, 155); + break; + case 190: + /* SE( {urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs ) */ + errn = _exiEncodeStartElement(stream, 8, 116, state, qnameID, 426, 360); + break; + case 80: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Manifest ) */ + errn = _exiEncodeStartElement(stream, 8, 117, state, qnameID, 426, 156); + break; + case 332: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterID ) */ + errn = _exiEncodeStartElement(stream, 8, 118, state, qnameID, 426, 100); + break; + case 191: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeterInfo ) */ + errn = _exiEncodeStartElement(stream, 8, 119, state, qnameID, 426, 355); + break; + case 334: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterReading ) */ + errn = _exiEncodeStartElement(stream, 8, 120, state, qnameID, 426, 26); + break; + case 335: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterStatus ) */ + errn = _exiEncodeStartElement(stream, 8, 121, state, qnameID, 426, 311); + break; + case 192: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq ) */ + errn = _exiEncodeStartElement(stream, 8, 122, state, qnameID, 426, 157); + break; + case 194: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes ) */ + errn = _exiEncodeStartElement(stream, 8, 123, state, qnameID, 426, 158); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 8, 124, state, qnameID, 426, 159); + break; + case 83: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Modulus ) */ + errn = _exiEncodeStartElement(stream, 8, 125, state, qnameID, 426, 275); + break; + case 336: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Multiplier ) */ + errn = _exiEncodeStartElement(stream, 8, 126, state, qnameID, 426, 23); + break; + case 444: + /* SE( {urn:iso:15118:2:2010:MsgHeader}Notification ) */ + errn = _exiEncodeStartElement(stream, 8, 127, state, qnameID, 426, 329); + break; + case 337: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay ) */ + errn = _exiEncodeStartElement(stream, 8, 128, state, qnameID, 426, 12); + break; + case 339: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels ) */ + errn = _exiEncodeStartElement(stream, 8, 129, state, qnameID, 426, 60); + break; + case 196: + /* SE( {urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert ) */ + errn = _exiEncodeStartElement(stream, 8, 130, state, qnameID, 426, 11); + break; + case 84: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Object ) */ + errn = _exiEncodeStartElement(stream, 8, 131, state, qnameID, 426, 160); + break; + case 86: + /* SE( {http://www.w3.org/2000/09/xmldsig#}P ) */ + errn = _exiEncodeStartElement(stream, 8, 132, state, qnameID, 426, 275); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 8, 133, state, qnameID, 426, 161); + break; + case 89: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyID ) */ + errn = _exiEncodeStartElement(stream, 8, 134, state, qnameID, 426, 246); + break; + case 90: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket ) */ + errn = _exiEncodeStartElement(stream, 8, 135, state, qnameID, 426, 424); + break; + case 340: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMax ) */ + errn = _exiEncodeStartElement(stream, 8, 136, state, qnameID, 426, 613); + break; + case 341: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule ) */ + errn = _exiEncodeStartElement(stream, 8, 137, state, qnameID, 426, 45); + break; + case 342: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry ) */ + errn = _exiEncodeStartElement(stream, 8, 138, state, qnameID, 426, 162); + break; + case 344: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID ) */ + errn = _exiEncodeStartElement(stream, 8, 139, state, qnameID, 426, 209); + break; + case 347: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Parameter ) */ + errn = _exiEncodeStartElement(stream, 8, 140, state, qnameID, 426, 202); + break; + case 348: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSet ) */ + errn = _exiEncodeStartElement(stream, 8, 141, state, qnameID, 426, 103); + break; + case 349: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID ) */ + errn = _exiEncodeStartElement(stream, 8, 142, state, qnameID, 426, 634); + break; + case 197: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq ) */ + errn = _exiEncodeStartElement(stream, 8, 143, state, qnameID, 426, 163); + break; + case 199: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes ) */ + errn = _exiEncodeStartElement(stream, 8, 144, state, qnameID, 426, 164); + break; + case 352: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PaymentOption ) */ + errn = _exiEncodeStartElement(stream, 8, 145, state, qnameID, 426, 245); + break; + case 201: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentOptions ) */ + errn = _exiEncodeStartElement(stream, 8, 146, state, qnameID, 426, 626); + break; + case 91: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PgenCounter ) */ + errn = _exiEncodeStartElement(stream, 8, 147, state, qnameID, 426, 275); + break; + case 202: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq ) */ + errn = _exiEncodeStartElement(stream, 8, 148, state, qnameID, 426, 165); + break; + case 204: + /* SE( {urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes ) */ + errn = _exiEncodeStartElement(stream, 8, 149, state, qnameID, 426, 166); + break; + case 355: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed ) */ + errn = _exiEncodeStartElement(stream, 8, 150, state, qnameID, 426, 74); + break; + case 206: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeReq ) */ + errn = _exiEncodeStartElement(stream, 8, 151, state, qnameID, 426, 167); + break; + case 208: + /* SE( {urn:iso:15118:2:2010:MsgBody}PreChargeRes ) */ + errn = _exiEncodeStartElement(stream, 8, 152, state, qnameID, 426, 86); + break; + case 356: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry ) */ + errn = _exiEncodeStartElement(stream, 8, 153, state, qnameID, 426, 537); + break; + case 92: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Q ) */ + errn = _exiEncodeStartElement(stream, 8, 154, state, qnameID, 426, 275); + break; + case 358: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RCD ) */ + errn = _exiEncodeStartElement(stream, 8, 155, state, qnameID, 426, 74); + break; + case 93: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 8, 156, state, qnameID, 426, 168); + break; + case 210: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReadyToChargeState ) */ + errn = _exiEncodeStartElement(stream, 8, 157, state, qnameID, 426, 74); + break; + case 211: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReceiptRequired ) */ + errn = _exiEncodeStartElement(stream, 8, 158, state, qnameID, 426, 74); + break; + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 8, 159, state, qnameID, 426, 169); + break; + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 8, 160, state, qnameID, 426, 170); + break; + case 212: + /* SE( {urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC ) */ + errn = _exiEncodeStartElement(stream, 8, 161, state, qnameID, 426, 26); + break; + case 213: + /* SE( {urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC ) */ + errn = _exiEncodeStartElement(stream, 8, 162, state, qnameID, 426, 26); + break; + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 8, 163, state, qnameID, 426, 17); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 8, 164, state, qnameID, 426, 171); + break; + case 215: + /* SE( {urn:iso:15118:2:2010:MsgBody}RetryCounter ) */ + errn = _exiEncodeStartElement(stream, 8, 165, state, qnameID, 426, 616); + break; + case 361: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID ) */ + errn = _exiEncodeStartElement(stream, 8, 166, state, qnameID, 426, 362); + break; + case 363: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList ) */ + errn = _exiEncodeStartElement(stream, 8, 167, state, qnameID, 426, 172); + break; + case 365: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple ) */ + errn = _exiEncodeStartElement(stream, 8, 168, state, qnameID, 426, 321); + break; + case 216: + /* SE( {urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 8, 169, state, qnameID, 426, 209); + break; + case 366: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 8, 170, state, qnameID, 426, 209); + break; + case 368: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SASchedules ) */ + errn = _exiEncodeStartElement(stream, 8, 171, state, qnameID, 426, 173); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 8, 172, state, qnameID, 426, 174); + break; + case 101: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKISexp ) */ + errn = _exiEncodeStartElement(stream, 8, 173, state, qnameID, 426, 205); + break; + case 370: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariff ) */ + errn = _exiEncodeStartElement(stream, 8, 174, state, qnameID, 426, 533); + break; + case 371: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription ) */ + errn = _exiEncodeStartElement(stream, 8, 175, state, qnameID, 426, 635); + break; + case 372: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry ) */ + errn = _exiEncodeStartElement(stream, 8, 176, state, qnameID, 426, 175); + break; + case 374: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID ) */ + errn = _exiEncodeStartElement(stream, 8, 177, state, qnameID, 426, 209); + break; + case 102: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Seed ) */ + errn = _exiEncodeStartElement(stream, 8, 178, state, qnameID, 426, 275); + break; + case 217: + /* SE( {urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption ) */ + errn = _exiEncodeStartElement(stream, 8, 179, state, qnameID, 426, 245); + break; + case 376: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SelectedService ) */ + errn = _exiEncodeStartElement(stream, 8, 180, state, qnameID, 426, 524); + break; + case 218: + /* SE( {urn:iso:15118:2:2010:MsgBody}SelectedServiceList ) */ + errn = _exiEncodeStartElement(stream, 8, 181, state, qnameID, 426, 522); + break; + case 379: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Service ) */ + errn = _exiEncodeStartElement(stream, 8, 182, state, qnameID, 426, 338); + break; + case 219: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 8, 183, state, qnameID, 426, 85); + break; + case 380: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 8, 184, state, qnameID, 426, 85); + break; + case 381: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge ) */ + errn = _exiEncodeStartElement(stream, 8, 185, state, qnameID, 426, 176); + break; + case 220: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailReq ) */ + errn = _exiEncodeStartElement(stream, 8, 186, state, qnameID, 426, 177); + break; + case 222: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDetailRes ) */ + errn = _exiEncodeStartElement(stream, 8, 187, state, qnameID, 426, 178); + break; + case 224: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq ) */ + errn = _exiEncodeStartElement(stream, 8, 188, state, qnameID, 426, 179); + break; + case 226: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes ) */ + errn = _exiEncodeStartElement(stream, 8, 189, state, qnameID, 426, 180); + break; + case 228: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 8, 190, state, qnameID, 426, 65); + break; + case 383: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 8, 191, state, qnameID, 426, 65); + break; + case 229: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceList ) */ + errn = _exiEncodeStartElement(stream, 8, 192, state, qnameID, 426, 259); + break; + case 384: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceName ) */ + errn = _exiEncodeStartElement(stream, 8, 193, state, qnameID, 426, 409); + break; + case 230: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceParameterList ) */ + errn = _exiEncodeStartElement(stream, 8, 194, state, qnameID, 426, 101); + break; + case 231: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq ) */ + errn = _exiEncodeStartElement(stream, 8, 195, state, qnameID, 426, 181); + break; + case 233: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes ) */ + errn = _exiEncodeStartElement(stream, 8, 196, state, qnameID, 426, 182); + break; + case 235: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceScope ) */ + errn = _exiEncodeStartElement(stream, 8, 197, state, qnameID, 426, 518); + break; + case 386: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceScope ) */ + errn = _exiEncodeStartElement(stream, 8, 198, state, qnameID, 426, 518); + break; + case 387: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag ) */ + errn = _exiEncodeStartElement(stream, 8, 199, state, qnameID, 426, 95); + break; + case 236: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionID ) */ + errn = _exiEncodeStartElement(stream, 8, 200, state, qnameID, 426, 41); + break; + case 445: + /* SE( {urn:iso:15118:2:2010:MsgHeader}SessionID ) */ + errn = _exiEncodeStartElement(stream, 8, 201, state, qnameID, 426, 41); + break; + case 237: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupReq ) */ + errn = _exiEncodeStartElement(stream, 8, 202, state, qnameID, 426, 183); + break; + case 239: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionSetupRes ) */ + errn = _exiEncodeStartElement(stream, 8, 203, state, qnameID, 426, 184); + break; + case 241: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopReq ) */ + errn = _exiEncodeStartElement(stream, 8, 204, state, qnameID, 426, 185); + break; + case 242: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionStopRes ) */ + errn = _exiEncodeStartElement(stream, 8, 205, state, qnameID, 426, 78); + break; + case 391: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading ) */ + errn = _exiEncodeStartElement(stream, 8, 206, state, qnameID, 426, 534); + break; + case 103: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Signature ) */ + errn = _exiEncodeStartElement(stream, 8, 207, state, qnameID, 426, 186); + break; + case 104: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureMethod ) */ + errn = _exiEncodeStartElement(stream, 8, 208, state, qnameID, 426, 187); + break; + case 106: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperties ) */ + errn = _exiEncodeStartElement(stream, 8, 209, state, qnameID, 426, 188); + break; + case 108: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperty ) */ + errn = _exiEncodeStartElement(stream, 8, 210, state, qnameID, 426, 189); + break; + case 111: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureValue ) */ + errn = _exiEncodeStartElement(stream, 8, 211, state, qnameID, 426, 190); + break; + case 113: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignedInfo ) */ + errn = _exiEncodeStartElement(stream, 8, 212, state, qnameID, 426, 92); + break; + case 392: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SubCertificates ) */ + errn = _exiEncodeStartElement(stream, 8, 213, state, qnameID, 426, 110); + break; + case 394: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TMeter ) */ + errn = _exiEncodeStartElement(stream, 8, 214, state, qnameID, 426, 252); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 8, 215, state, qnameID, 426, 191); + break; + case 115: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transform ) */ + errn = _exiEncodeStartElement(stream, 8, 216, state, qnameID, 426, 192); + break; + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 8, 217, state, qnameID, 426, 193); + break; + case 396: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Unit ) */ + errn = _exiEncodeStartElement(stream, 8, 218, state, qnameID, 426, 418); + break; + case 442: + /* SE( {urn:iso:15118:2:2010:MsgDef}V2G_Message ) */ + errn = _exiEncodeStartElement(stream, 8, 219, state, qnameID, 426, 69); + break; + case 397: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Value ) */ + errn = _exiEncodeStartElement(stream, 8, 220, state, qnameID, 426, 502); + break; + case 245: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq ) */ + errn = _exiEncodeStartElement(stream, 8, 221, state, qnameID, 426, 194); + break; + case 247: + /* SE( {urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes ) */ + errn = _exiEncodeStartElement(stream, 8, 222, state, qnameID, 426, 195); + break; + case 119: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509CRL ) */ + errn = _exiEncodeStartElement(stream, 8, 223, state, qnameID, 426, 317); + break; + case 120: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Certificate ) */ + errn = _exiEncodeStartElement(stream, 8, 224, state, qnameID, 426, 316); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 8, 225, state, qnameID, 426, 196); + break; + case 123: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerName ) */ + errn = _exiEncodeStartElement(stream, 8, 226, state, qnameID, 426, 569); + break; + case 124: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial ) */ + errn = _exiEncodeStartElement(stream, 8, 227, state, qnameID, 426, 314); + break; + case 126: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SKI ) */ + errn = _exiEncodeStartElement(stream, 8, 228, state, qnameID, 426, 77); + break; + case 127: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SerialNumber ) */ + errn = _exiEncodeStartElement(stream, 8, 229, state, qnameID, 426, 625); + break; + case 128: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SubjectName ) */ + errn = _exiEncodeStartElement(stream, 8, 230, state, qnameID, 426, 315); + break; + case 129: + /* SE( {http://www.w3.org/2000/09/xmldsig#}XPath ) */ + errn = _exiEncodeStartElement(stream, 8, 231, state, qnameID, 426, 222); + break; + case 130: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Y ) */ + errn = _exiEncodeStartElement(stream, 8, 232, state, qnameID, 426, 275); + break; + case 398: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}amount ) */ + errn = _exiEncodeStartElement(stream, 8, 233, state, qnameID, 426, 627); + break; + case 399: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier ) */ + errn = _exiEncodeStartElement(stream, 8, 234, state, qnameID, 426, 23); + break; + case 400: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}boolValue ) */ + errn = _exiEncodeStartElement(stream, 8, 235, state, qnameID, 426, 74); + break; + case 401: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}byteValue ) */ + errn = _exiEncodeStartElement(stream, 8, 236, state, qnameID, 426, 630); + break; + case 404: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}costKind ) */ + errn = _exiEncodeStartElement(stream, 8, 237, state, qnameID, 426, 3); + break; + case 407: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}duration ) */ + errn = _exiEncodeStartElement(stream, 8, 238, state, qnameID, 426, 20); + break; + case 413: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}intValue ) */ + errn = _exiEncodeStartElement(stream, 8, 239, state, qnameID, 426, 454); + break; + case 419: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}physicalValue ) */ + errn = _exiEncodeStartElement(stream, 8, 240, state, qnameID, 426, 26); + break; + case 428: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}shortValue ) */ + errn = _exiEncodeStartElement(stream, 8, 241, state, qnameID, 426, 636); + break; + case 430: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}start ) */ + errn = _exiEncodeStartElement(stream, 8, 242, state, qnameID, 426, 547); + break; + case 431: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}startValue ) */ + errn = _exiEncodeStartElement(stream, 8, 243, state, qnameID, 426, 552); + break; + case 432: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}stringValue ) */ + errn = _exiEncodeStartElement(stream, 8, 244, state, qnameID, 426, 637); + break; + } + break; + case 430: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType)] */ + switch(qnameID) { + case 323: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 279, 469); + break; + } + break; + case 431: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + switch(qnameID) { + case 115: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transform ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 431, 192); + break; + } + break; + case 433: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(qnameID) { + case 383: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 434, 65); + break; + } + break; + case 434: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + switch(qnameID) { + case 384: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceName ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 596, 409); + break; + case 380: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 597, 85); + break; + } + break; + case 435: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + switch(qnameID) { + case 326: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FaultCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 330, 331); + break; + } + break; + case 436: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + switch(qnameID) { + case 190: + /* SE( {urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 437, 360); + break; + } + break; + case 437: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(qnameID) { + case 169: + /* SE( {urn:iso:15118:2:2010:MsgBody}DHParams ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 489, 269); + break; + } + break; + case 438: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + switch(qnameID) { + case 372: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 438, 175); + break; + } + break; + case 441: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit)] */ + switch(qnameID) { + case 311: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 442, 26); + break; + } + break; + case 442: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit)] */ + switch(qnameID) { + case 312: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 397, 26); + break; + } + break; + case 443: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 444, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 444, 191); + break; + } + break; + case 446: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + switch(qnameID) { + case 178: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 373, 26); + break; + case 191: + /* SE( {urn:iso:15118:2:2010:MsgBody}MeterInfo ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 75, 355); + break; + case 211: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReceiptRequired ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 76, 74); + break; + } + break; + case 448: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + switch(qnameID) { + case 342: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 448, 162); + break; + } + break; + case 451: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 277, 193); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 278, 147); + break; + } + break; + case 453: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + switch(qnameID) { + case 379: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Service ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 337, 338); + break; + } + break; + case 455: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage)] */ + switch(qnameID) { + case 289: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 456, 26); + break; + } + break; + case 456: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent)] */ + switch(qnameID) { + case 288: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 683, 26); + break; + } + break; + case 461: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID)] */ + switch(qnameID) { + case 216: + /* SE( {urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 446, 209); + break; + } + break; + case 462: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 463, 17); + break; + } + break; + case 463: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus)] */ + switch(qnameID) { + case 253: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 352, 49); + break; + case 274: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 352, 115); + break; + case 317: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 352, 150); + break; + } + break; + case 464: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 77: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyName ) */ + errn = _exiEncodeStartElement(stream, 4, 0, state, qnameID, 241, 154); + break; + case 78: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyValue ) */ + errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 241, 155); + break; + case 97: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod ) */ + errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 241, 171); + break; + case 121: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Data ) */ + errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 241, 196); + break; + case 87: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPData ) */ + errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 241, 161); + break; + case 99: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKIData ) */ + errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 241, 174); + break; + case 82: + /* SE( {http://www.w3.org/2000/09/xmldsig#}MgmtData ) */ + errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 241, 159); + break; + } + break; + case 465: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + switch(qnameID) { + case 304: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 116, 117); + break; + case 318: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 118, 119); + break; + } + break; + case 466: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 55, 17); + break; + } + break; + case 467: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + switch(qnameID) { + case 115: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transform ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 431, 192); + break; + } + break; + case 470: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax)] */ + switch(qnameID) { + case 340: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PMax ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 584, 613); + break; + } + break; + case 471: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(qnameID) { + case 285: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 472, 26); + break; + case 286: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 388, 26); + break; + case 329: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FullSOC ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 323, 308); + break; + case 256: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkSOC ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 324, 308); + break; + } + break; + case 472: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + switch(qnameID) { + case 286: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 388, 26); + break; + case 329: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}FullSOC ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 323, 308); + break; + case 256: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkSOC ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 324, 308); + break; + } + break; + case 474: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 82, 193); + break; + } + break; + case 476: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 285, 17); + break; + } + break; + case 477: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 79, 17); + break; + } + break; + case 478: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + switch(qnameID) { + case 313: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSENotification ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 479, 371); + break; + } + break; + case 481: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(qnameID) { + case 130: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Y ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 327, 275); + break; + } + break; + case 482: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 161: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 396, 9); + break; + } + break; + case 484: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(qnameID) { + case 174: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 485, 26); + break; + case 172: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 486, 26); + break; + case 173: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 487, 26); + break; + case 132: + /* SE( {urn:iso:15118:2:2010:MsgBody}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 488, 74); + break; + case 150: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 24, 74); + break; + } + break; + case 485: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(qnameID) { + case 172: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 486, 26); + break; + case 173: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 487, 26); + break; + case 132: + /* SE( {urn:iso:15118:2:2010:MsgBody}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 488, 74); + break; + case 150: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 24, 74); + break; + } + break; + case 486: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(qnameID) { + case 173: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 487, 26); + break; + case 132: + /* SE( {urn:iso:15118:2:2010:MsgBody}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 488, 74); + break; + case 150: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 24, 74); + break; + } + break; + case 487: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(qnameID) { + case 132: + /* SE( {urn:iso:15118:2:2010:MsgBody}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 488, 74); + break; + case 150: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 24, 74); + break; + } + break; + case 488: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + switch(qnameID) { + case 150: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 24, 74); + break; + } + break; + case 490: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + switch(qnameID) { + case 90: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 83, 424); + break; + } + break; + case 496: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + switch(qnameID) { + case 349: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 305, 306); + break; + } + break; + case 497: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount)] */ + switch(qnameID) { + case 280: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EAmount ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 455, 26); + break; + } + break; + case 500: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService)] */ + switch(qnameID) { + case 149: + /* SE( {urn:iso:15118:2:2010:MsgBody}ChargeService ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 257, 176); + break; + } + break; + case 501: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + switch(qnameID) { + case 397: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Value ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 423, 502); + break; + } + break; + case 506: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + switch(qnameID) { + case 445: + /* SE( {urn:iso:15118:2:2010:MsgHeader}SessionID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 507, 41); + break; + } + break; + case 507: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + switch(qnameID) { + case 444: + /* SE( {urn:iso:15118:2:2010:MsgHeader}Notification ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 646, 329); + break; + case 103: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Signature ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 408, 186); + break; + } + break; + case 509: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + switch(qnameID) { + case 75: + /* SE( {http://www.w3.org/2000/09/xmldsig#}KeyInfo ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 326, 153); + break; + case 84: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Object ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 326, 160); + break; + } + break; + case 510: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 129: + /* SE( {http://www.w3.org/2000/09/xmldsig#}XPath ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 221, 222); + break; + } + break; + case 512: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + switch(qnameID) { + case 169: + /* SE( {urn:iso:15118:2:2010:MsgBody}DHParams ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 513, 269); + break; + } + break; + case 513: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(qnameID) { + case 160: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 440, 357); + break; + } + break; + case 514: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + switch(qnameID) { + case 309: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 441, 26); + break; + } + break; + case 517: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(qnameID) { + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 407, 169); + break; + } + break; + case 520: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 260, 17); + break; + } + break; + case 521: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + switch(qnameID) { + case 167: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 88, 115); + break; + } + break; + case 522: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + switch(qnameID) { + case 376: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SelectedService ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 523, 524); + break; + } + break; + case 523: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + switch(qnameID) { + case 376: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SelectedService ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 523, 524); + break; + } + break; + case 524: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(qnameID) { + case 383: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 607, 65); + break; + } + break; + case 530: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + switch(qnameID) { + case 170: + /* SE( {urn:iso:15118:2:2010:MsgBody}DateTimeNow ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 553, 554); + break; + } + break; + case 535: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(qnameID) { + case 334: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterReading ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 536, 26); + break; + case 391: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 310, 534); + break; + case 335: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterStatus ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 250, 311); + break; + case 394: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TMeter ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 251, 252); + break; + } + break; + case 536: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + switch(qnameID) { + case 391: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 310, 534); + break; + case 335: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterStatus ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 250, 311); + break; + case 394: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TMeter ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 251, 252); + break; + } + break; + case 537: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + switch(qnameID) { + case 261: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 123, 124); + break; + } + break; + case 540: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + switch(qnameID) { + case 355: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 541, 74); + break; + } + break; + case 541: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ + switch(qnameID) { + case 358: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RCD ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 590, 74); + break; + } + break; + case 542: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit)] */ + switch(qnameID) { + case 307: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 543, 26); + break; + } + break; + case 543: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + switch(qnameID) { + case 308: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 514, 26); + break; + case 309: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 441, 26); + break; + } + break; + case 544: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + switch(qnameID) { + case 396: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Unit ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 501, 418); + break; + case 397: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Value ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 423, 502); + break; + } + break; + case 548: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved)] */ + switch(qnameID) { + case 176: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 614, 74); + break; + } + break; + case 549: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + switch(qnameID) { + case 124: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 313, 314); + break; + case 126: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SKI ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 313, 77); + break; + case 128: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SubjectName ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 313, 315); + break; + case 120: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509Certificate ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 313, 316); + break; + case 119: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509CRL ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 313, 317); + break; + } + break; + case 556: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(qnameID) { + case 366: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 342, 209); + break; + } + break; + case 557: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + switch(qnameID) { + case 431: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}startValue ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 218, 552); + break; + } + break; + case 564: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(qnameID) { + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 565, 169); + break; + } + break; + case 565: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + switch(qnameID) { + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 565, 169); + break; + } + break; + case 567: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + switch(qnameID) { + case 123: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509IssuerName ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 568, 569); + break; + } + break; + case 568: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber)] */ + switch(qnameID) { + case 127: + /* SE( {http://www.w3.org/2000/09/xmldsig#}X509SerialNumber ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 654, 625); + break; + } + break; + case 570: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent)] */ + switch(qnameID) { + case 70: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Exponent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 410, 275); + break; + } + break; + case 572: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + switch(qnameID) { + case 219: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 573, 85); + break; + } + break; + case 574: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + switch(qnameID) { + case 101: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SPKISexp ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 204, 205); + break; + } + break; + case 576: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 64: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 295, 146); + break; + case 93: + /* SE( {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 295, 168); + break; + } + break; + case 577: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(qnameID) { + case 108: + /* SE( {http://www.w3.org/2000/09/xmldsig#}SignatureProperty ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 377, 189); + break; + } + break; + case 578: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + switch(qnameID) { + case 292: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 471, 26); + break; + } + break; + case 579: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(qnameID) { + case 277: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 580, 145); + break; + } + break; + case 580: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + switch(qnameID) { + case 255: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 72, 74); + break; + case 259: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 73, 74); + break; + } + break; + case 582: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + switch(qnameID) { + case 210: + /* SE( {urn:iso:15118:2:2010:MsgBody}ReadyToChargeState ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 33, 74); + break; + } + break; + case 585: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + switch(qnameID) { + case 235: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceScope ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 572, 518); + break; + case 219: + /* SE( {urn:iso:15118:2:2010:MsgBody}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 573, 85); + break; + } + break; + case 586: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + switch(qnameID) { + case 348: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSet ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 102, 103); + break; + } + break; + case 587: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + switch(qnameID) { + case 356: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 587, 537); + break; + } + break; + case 588: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 444, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 444, 191); + break; + } + break; + case 589: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + switch(qnameID) { + case 86: + /* SE( {http://www.w3.org/2000/09/xmldsig#}P ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 273, 275); + break; + case 71: + /* SE( {http://www.w3.org/2000/09/xmldsig#}G ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 481, 275); + break; + case 130: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Y ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 327, 275); + break; + } + break; + case 590: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + switch(qnameID) { + case 337: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 369, 591); + break; + } + break; + case 592: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + switch(qnameID) { + case 441: + /* SE( {urn:iso:15118:2:2010:MsgDef}Header ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 70, 71); + break; + } + break; + case 596: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + switch(qnameID) { + case 380: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 597, 85); + break; + } + break; + case 597: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + switch(qnameID) { + case 386: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceScope ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 504, 518); + break; + } + break; + case 598: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 419, 17); + break; + } + break; + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 82, 193); + break; + } + break; + case 600: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + switch(qnameID) { + case 217: + /* SE( {urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 254, 245); + break; + } + break; + case 602: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + switch(qnameID) { + case 359: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 470, 170); + break; + case 395: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 470, 191); + break; + } + break; + case 603: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + switch(qnameID) { + case 430: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}start ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 18, 547); + break; + } + break; + case 604: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + switch(qnameID) { + case 168: + /* SE( {urn:iso:15118:2:2010:MsgBody}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 67, 145); + break; + } + break; + case 605: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + switch(qnameID) { + case 179: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 606, 26); + break; + case 180: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 516, 26); + break; + } + break; + case 606: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + switch(qnameID) { + case 180: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 516, 26); + break; + } + break; + case 607: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + switch(qnameID) { + case 349: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 447, 634); + break; + } + break; + case 608: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + switch(qnameID) { + case 277: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 345, 145); + break; + } + break; + case 610: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + switch(qnameID) { + case 332: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}MeterID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 535, 100); + break; + } + break; + case 612: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + switch(qnameID) { + case 366: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 43, 209); + break; + } + break; + case 614: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved)] */ + switch(qnameID) { + case 186: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 234, 74); + break; + } + break; + case 615: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + switch(qnameID) { + case 89: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyID ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 490, 246); + break; + case 90: + /* SE( {http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 491, 492); + break; + } + break; + case 617: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + switch(qnameID) { + case 376: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SelectedService ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 523, 524); + break; + } + break; + case 618: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 6, 17); + break; + } + break; + case 619: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + switch(qnameID) { + case 274: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 542, 115); + break; + } + break; + case 621: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 277, 193); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 278, 147); + break; + } + break; + case 622: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 117: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Transforms ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 277, 193); + break; + case 66: + /* SE( {http://www.w3.org/2000/09/xmldsig#}DigestMethod ) */ + errn = _exiEncodeStartElement(stream, 2, 2, state, qnameID, 278, 147); + break; + } + break; + case 624: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + switch(qnameID) { + case 336: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}Multiplier ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 544, 23); + break; + } + break; + case 626: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + switch(qnameID) { + case 352: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}PaymentOption ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 244, 245); + break; + } + break; + case 628: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions)] */ + switch(qnameID) { + case 201: + /* SE( {urn:iso:15118:2:2010:MsgBody}PaymentOptions ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 500, 626); + break; + } + break; + case 632: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + switch(qnameID) { + case 361: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 361, 362); + break; + } + break; + case 638: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + switch(qnameID) { + case 387: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 309, 95); + break; + } + break; + case 640: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + switch(qnameID) { + case 279: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}DepartureTime ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 497, 545); + break; + } + break; + case 642: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 271, 17); + break; + } + break; + case 643: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + switch(qnameID) { + case 374: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 651, 209); + break; + } + break; + case 646: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + switch(qnameID) { + case 103: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Signature ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 408, 186); + break; + } + break; + case 647: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + switch(qnameID) { + case 400: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}boolValue ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 13, 74); + break; + case 401: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}byteValue ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 13, 630); + break; + case 428: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}shortValue ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 13, 636); + break; + case 413: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}intValue ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 13, 454); + break; + case 419: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}physicalValue ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 13, 26); + break; + case 432: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}stringValue ) */ + errn = _exiEncodeStartElement(stream, 3, 5, state, qnameID, 13, 637); + break; + } + break; + case 651: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + switch(qnameID) { + case 371: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 58, 635); + break; + case 339: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 59, 60); + break; + } + break; + case 656: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(qnameID) { + case 61: + /* SE( {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 107, 108); + break; + } + break; + case 658: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + switch(qnameID) { + case 160: + /* SE( {urn:iso:15118:2:2010:MsgBody}ContractID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 356, 357); + break; + } + break; + case 661: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent)] */ + switch(qnameID) { + case 305: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 662, 26); + break; + } + break; + case 662: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent)] */ + switch(qnameID) { + case 310: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 415, 26); + break; + } + break; + case 663: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(qnameID) { + case 189: + /* SE( {urn:iso:15118:2:2010:MsgBody}GenChallenge ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 349, 8); + break; + } + break; + case 669: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + switch(qnameID) { + case 404: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}costKind ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 2, 3); + break; + } + break; + case 674: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + switch(qnameID) { + case 171: + /* SE( {urn:iso:15118:2:2010:MsgBody}EVCCID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 629, 223); + break; + } + break; + case 675: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + switch(qnameID) { + case 374: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 651, 209); + break; + } + break; + case 682: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 281, 17); + break; + } + break; + case 683: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent)] */ + switch(qnameID) { + case 293: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 50, 26); + break; + } + break; + case 684: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 87, 17); + break; + } + break; + case 687: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + switch(qnameID) { + case 383: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}ServiceID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 607, 65); + break; + } + break; + case 689: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 628, 17); + break; + } + break; + case 692: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + switch(qnameID) { + case 400: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}boolValue ) */ + errn = _exiEncodeStartElement(stream, 3, 0, state, qnameID, 13, 74); + break; + case 401: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}byteValue ) */ + errn = _exiEncodeStartElement(stream, 3, 1, state, qnameID, 13, 630); + break; + case 428: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}shortValue ) */ + errn = _exiEncodeStartElement(stream, 3, 2, state, qnameID, 13, 636); + break; + case 413: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}intValue ) */ + errn = _exiEncodeStartElement(stream, 3, 3, state, qnameID, 13, 454); + break; + case 419: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}physicalValue ) */ + errn = _exiEncodeStartElement(stream, 3, 4, state, qnameID, 13, 26); + break; + case 432: + /* SE( {urn:iso:15118:2:2010:MsgDataTypes}stringValue ) */ + errn = _exiEncodeStartElement(stream, 3, 5, state, qnameID, 13, 637); + break; + } + break; + case 696: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(qnameID) { + case 236: + /* SE( {urn:iso:15118:2:2010:MsgBody}SessionID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 40, 41); + break; + } + break; + case 700: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + switch(qnameID) { + case 214: + /* SE( {urn:iso:15118:2:2010:MsgBody}ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 521, 17); + break; + } + break; + case 703: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + switch(qnameID) { + case 83: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Modulus ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 570, 275); + break; + } + break; + case 705: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(qnameID) { + case 95: + /* SE( {http://www.w3.org/2000/09/xmldsig#}Reference ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 565, 169); + break; + } + break; + + default: + /* element qname not expected */ + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; + } + + return errn; +} + + + +int exiEncodeStartElementNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +int exiEncodeStartElementGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + + +int exiEncodeEndElement(bitstream_t* stream, exi_state_t* state) { + int errn = 0; + int16_t currentID = state->grammarStack[state->stackIndex]; + switch (currentID) { + case 241: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 4, 8); + break; + case 313: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 3, 6); + break; + case 52: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 220: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 227: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 264: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 339: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 510: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 267: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 400: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 215: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 221: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 3, 2); + break; + case 18: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + case 21: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + case 83: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + case 96: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + case 244: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + case 247: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 250: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 256: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 257: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + case 206: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + case 283: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 323: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 326: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + case 337: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + case 340: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + case 346: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + case 390: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 405: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 407: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + case 431: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + case 402: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 377: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + case 328: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + case 265: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 474: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 392: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 10: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + case 228: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 330: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + case 530: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + case 523: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + case 572: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 565: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + case 587: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + case 53: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 448: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + case 348: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 606: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 644: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 646: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + case 102: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + case 607: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + case 663: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 438: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + case 361: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + case 320: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + case 391: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 249: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 681: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 288: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + case 597: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + case 491: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + case 401: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 248: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 2, 1); + break; + case 13: + /* Element[END_ELEMENT] */ + case 46: + /* FirstStartTag[END_ELEMENT] */ + case 50: + /* Element[END_ELEMENT] */ + case 56: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 82: + /* Element[END_ELEMENT] */ + case 109: + /* Element[END_ELEMENT] */ + case 121: + /* Element[END_ELEMENT] */ + case 125: + /* Element[END_ELEMENT] */ + case 30: + /* Element[END_ELEMENT] */ + case 137: + /* FirstStartTag[END_ELEMENT] */ + case 38: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 224: + /* Element[END_ELEMENT] */ + case 185: + /* FirstStartTag[END_ELEMENT] */ + case 232: + /* Element[END_ELEMENT] */ + case 261: + /* Element[END_ELEMENT] */ + case 279: + /* Element[END_ELEMENT] */ + case 343: + /* FirstStartTag[END_ELEMENT] */ + case 129: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 352: + /* Element[END_ELEMENT] */ + case 358: + /* Element[END_ELEMENT] */ + case 381: + /* Element[END_ELEMENT] */ + case 393: + /* FirstStartTag[END_ELEMENT] */ + case 251: + /* Element[END_ELEMENT] */ + case 408: + /* Element[END_ELEMENT] */ + case 410: + /* Element[END_ELEMENT] */ + case 173: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 415: + /* Element[END_ELEMENT] */ + case 420: + /* Element[END_ELEMENT] */ + case 421: + /* Element[END_ELEMENT] */ + case 423: + /* Element[END_ELEMENT] */ + case 432: + /* FirstStartTag[END_ELEMENT] */ + case 440: + /* Element[END_ELEMENT] */ + case 363: + /* Element[END_ELEMENT] */ + case 447: + /* Element[END_ELEMENT] */ + case 22: + /* Element[END_ELEMENT] */ + case 36: + /* Element[END_ELEMENT] */ + case 473: + /* Element[END_ELEMENT] */ + case 480: + /* Element[END_ELEMENT] */ + case 324: + /* Element[END_ELEMENT] */ + case 489: + /* Element[END_ELEMENT] */ + case 444: + /* Element[END_ELEMENT] */ + case 494: + /* Element[END_ELEMENT] */ + case 64: + /* Element[END_ELEMENT] */ + case 150: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 349: + /* Element[END_ELEMENT] */ + case 504: + /* Element[END_ELEMENT] */ + case 354: + /* Element[END_ELEMENT] */ + case 505: + /* Element[END_ELEMENT] */ + case 516: + /* Element[END_ELEMENT] */ + case 528: + /* FirstStartTag[END_ELEMENT] */ + case 89: + /* Element[END_ELEMENT] */ + case 370: + /* Element[END_ELEMENT] */ + case 558: + /* Element[END_ELEMENT] */ + case 372: + /* Element[END_ELEMENT] */ + case 561: + /* FirstStartTag[END_ELEMENT] */ + case 5: + /* Element[END_ELEMENT] */ + case 258: + /* Element[END_ELEMENT] */ + case 581: + /* Element[END_ELEMENT] */ + case 584: + /* Element[END_ELEMENT] */ + case 601: + /* Element[END_ELEMENT] */ + case 609: + /* Element[END_ELEMENT] */ + case 191: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 573: + /* Element[END_ELEMENT] */ + case 149: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 629: + /* Element[END_ELEMENT] */ + case 16: + /* Element[END_ELEMENT] */ + case 231: + /* Element[END_ELEMENT] */ + case 639: + /* FirstStartTag[END_ELEMENT] */ + case 307: + /* Element[END_ELEMENT] */ + case 302: + /* Element[END_ELEMENT] */ + case 655: + /* Element[END_ELEMENT] */ + case 413: + /* Element[END_ELEMENT] */ + case 289: + /* Element[END_ELEMENT] */ + case 28: + /* Element[END_ELEMENT] */ + case 532: + /* Element[END_ELEMENT] */ + case 479: + /* Element[END_ELEMENT] */ + case 670: + /* Element[END_ELEMENT] */ + case 671: + /* Element[END_ELEMENT] */ + case 333: + /* Element[END_ELEMENT] */ + case 563: + /* Element[END_ELEMENT] */ + case 79: + /* Element[END_ELEMENT] */ + case 151: + /* First(xsi:type)StartTag[END_ELEMENT] */ + case 553: + /* Element[END_ELEMENT] */ + case 654: + /* Element[END_ELEMENT] */ + case 387: + /* Element[END_ELEMENT] */ + case 19: + /* Element[END_ELEMENT] */ + case 73: + /* Element[END_ELEMENT] */ + case 560: + /* Element[END_ELEMENT] */ + case 691: + /* FirstStartTag[END_ELEMENT] */ + case 594: + /* Element[END_ELEMENT] */ + case 539: + /* Element[END_ELEMENT] */ + case 693: + /* Element[END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + break; + case 301: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + case 290: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 6, 35); + break; + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + case 472: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 399: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 536: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 3, 3); + break; + case 295: + /* Element[END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 2, 0); + break; + case 204: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + case 310: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + case 327: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + case 388: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 490: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + case 585: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 605: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + case 507: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + case 509: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + case 179: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 2, 2); + break; + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 471: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + case 535: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 3, 4); + break; + + default: + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; + } + + if (errn < 0) { + return errn; + } + + /* pop item */ + return exi__PopStack(state); +} + + + +int exiEncodeCharacters(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + int16_t moveOnID = 0; + int deviantChars = 0; + + int16_t currentID = state->grammarStack[state->stackIndex]; + switch (currentID) { + case 84: + case 571: + /* Element[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 3, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 247: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 249; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 57: + case 111: + case 226: + case 272: + case 294: + case 209: + case 495: + case 311: + case 266: + case 613: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + if (val->type == EXI_DATATYPE_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeInteger(stream, &val->integer); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 52: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 53; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 3, 5); + deviantChars = 1; + } + break; + case 53: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 53; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 255: + case 270: + case 374: + case 439: + case 483: + case 525: + case 546: + case 695: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + if (val->type == EXI_DATATYPE_DATETIME) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDateTime(stream, &val->datetime); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 391: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 391; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 611: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 458: + /* StartTag[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 201; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 2); + encodeNBitUnsignedInteger(stream, 3, 4); + deviantChars = 1; + } + break; + case 367: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 392: + case 644: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 392; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 221: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 221; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 225: + /* Element[CHARACTERS[BOOLEAN]] */ + if (val->type == EXI_DATATYPE_BOOLEAN) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBoolean(stream, val->boolean); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 120: + case 365: + case 445: + case 575: + case 676: + /* Element[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 248: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 248; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 215: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 220; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 295: + /* Element[END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 295; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 2); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 464: + case 242: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 4, 8); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 242; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 4, 9); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 630: + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 4: + case 51: + case 66: + case 99: + case 297: + case 300: + case 351: + case 403: + case 404: + case 406: + case 428: + case 429: + case 450: + case 460: + case 493: + case 519: + case 526: + case 641: + case 653: + case 664: + case 665: + case 686: + case 699: + /* Element[CHARACTERS[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 293: + case 368: + case 452: + case 559: + case 562: + case 631: + case 657: + case 697: + /* Element[CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 85: + case 331: + case 117: + case 3: + case 371: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 223: + case 593: + case 41: + case 531: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + if (val->type == EXI_DATATYPE_BINARY_HEX) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 227: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 228; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 3, 5); + deviantChars = 1; + } + break; + case 104: + case 212: + case 219: + case 312: + case 366: + case 383: + case 566: + case 620: + case 660: + case 694: + /* Element[CHARACTERS[INTEGER]] */ + if (val->type == EXI_DATATYPE_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeInteger(stream, &val->integer); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 265: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 265; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 222: + case 154: + case 315: + case 637: + case 569: + case 159: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 200: + case 201: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 201; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 2); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 190: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 2); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 649: + case 680: + /* Element[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 1, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 31: + case 245: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 1, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 322: + case 344: + case 551: + /* Element[CHARACTERS[LIST]] */ + if (val->type == EXI_DATATYPE_LIST) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger32(stream, val->list.len); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 5); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 402; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 6); + encodeNBitUnsignedInteger(stream, 3, 5); + deviantChars = 1; + } + break; + case 220: + case 510: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 220; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 427: + /* Element[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 5, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 468: + case 65: + case 583: + case 648: + case 690: + case 704: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger(stream, &val->integer); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 286: + /* FirstStartTag[CHARACTERS[DECIMAL]] */ + if (val->type == EXI_DATATYPE_DECIMAL) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDecimal(stream, &val->decimal); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 402: + case 681: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 402; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 384: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 3, -3); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 401: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 402; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 595: + case 645: + /* Element[CHARACTERS[FLOAT]] */ + if (val->type == EXI_DATATYPE_FLOAT) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeFloat(stream, &val->float_me); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 399: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 402; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 5); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 400: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 402; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 308: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 7, 0); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 339: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 267; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 60: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 17: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 5, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 4, 9); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 242; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 4, 10); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 623: + case 659: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + if (val->type == EXI_DATATYPE_FLOAT) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeFloat(stream, &val->float_me); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 77: + case 246: + case 424: + case 492: + case 317: + case 205: + case 316: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 240: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 4, 8); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 242; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 4, 9); + encodeNBitUnsignedInteger(stream, 3, 4); + deviantChars = 1; + } + break; + case 264: + case 267: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 267; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 576: + case 296: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 296; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 210: + case 236: + case 325: + case 499: + case 508: + case 666: + case 668: + case 679: + /* Element[CHARACTERS[DATETIME]] */ + if (val->type == EXI_DATATYPE_DATETIME) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDateTime(stream, &val->datetime); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 390: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 392; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 2, 3); + deviantChars = 1; + } + break; + case 414: + case 698: + case 701: + /* FirstStartTag[CHARACTERS[LIST]] */ + if (val->type == EXI_DATATYPE_LIST) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger32(stream, val->list.len); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 211: + case 229: + case 359: + case 385: + case 511: + case 673: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger(stream, &val->integer); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 228: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 228; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 105: + /* StartTag[CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 4); + deviantChars = 1; + } + break; + case 334: + case 454: + case 252: + case 616: + case 625: + case 636: + case 554: + case 502: + case 306: + case 634: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + if (val->type == EXI_DATATYPE_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeInteger(stream, &val->integer); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 23: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 3, -3); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 42: + case 515: + case 667: + case 685: + /* Element[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 4, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 96: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 96; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 155: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 296; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 405: + case 249: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 249; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 475: + case 633: + case 652: + case 677: + /* Element[CHARACTERS[BINARY_HEX]] */ + if (val->type == EXI_DATATYPE_BINARY_HEX) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 268: + case 269: + case 534: + case 11: + case 148: + case 275: + case 304: + case 706: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 114: + case 418: + case 469: + case 119: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 4, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 12: + case 552: + case 627: + case 591: + case 20: + case 545: + case 124: + case 547: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger(stream, &val->integer); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 32: + case 100: + case 282: + case 375: + case 380: + case 398: + case 8: + case 409: + case 449: + case 459: + case 357: + case 503: + case 518: + case 527: + case 538: + case 555: + case 550: + case 362: + case 672: + case 678: + case 635: + case 688: + case 702: + /* FirstStartTag[CHARACTERS[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 214: + case 498: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 3, val->enumeration); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 650: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 7, 0); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 241: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 4, 9); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 241; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 4, 10); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 283: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 283; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 74: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + if (val->type == EXI_DATATYPE_BOOLEAN) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBoolean(stream, val->boolean); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 389: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 529: + /* Element[CHARACTERS[DECIMAL]] */ + if (val->type == EXI_DATATYPE_DECIMAL) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDecimal(stream, &val->decimal); + moveOnID = 5; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + + default: + return EXI_ERROR_UNEXPECTED_CHARACTERS; + } + + if (currentID < 0) { + /* TODO runtime rules */ + errn = EXI_ERROR_UNEXPECTED_CHARACTERS; + } else if (deviantChars) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; + } else { + /* move on */ + state->grammarStack[state->stackIndex] = moveOnID; + } + + return errn; +} + + +int exiEncodeAttribute(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_value_t* val) { + int16_t moveOnID = 0; + int16_t currentID = state->grammarStack[state->stackIndex]; + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; + + switch (currentID) { + case 92: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + switch(qnameID) { + case 2: + moveOnID = 106; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 108: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(qnameID) { + case 0: + moveOnID = 247; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 132: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + switch(qnameID) { + case 2: + moveOnID = 417; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 133: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + switch(qnameID) { + case 2: + moveOnID = 476; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 134: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + switch(qnameID) { + case 2: + moveOnID = 395; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 135: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + switch(qnameID) { + case 2: + moveOnID = 318; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 139: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + switch(qnameID) { + case 2: + moveOnID = 348; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 3); + errn = encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 147: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(qnameID) { + case 0: + moveOnID = 390; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 153: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 2: + moveOnID = 240; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 4, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 4, 10); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 156: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + switch(qnameID) { + case 2: + moveOnID = 564; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 157: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + switch(qnameID) { + case 2: + moveOnID = 39; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 1: + moveOnID = 399; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 6); + errn = encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 2: + moveOnID = 400; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 6); + errn = encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 3: + moveOnID = 401; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 6); + errn = encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 169: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 2: + moveOnID = 621; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 5); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 6: + moveOnID = 622; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 5); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 7: + moveOnID = 276; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 5); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 171: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(qnameID) { + case 6: + moveOnID = 599; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 7: + moveOnID = 474; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 186: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + switch(qnameID) { + case 2: + moveOnID = 350; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 187: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(qnameID) { + case 0: + moveOnID = 339; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 188: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + switch(qnameID) { + case 2: + moveOnID = 577; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 189: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Target)] */ + switch(qnameID) { + case 2: + moveOnID = 457; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 5: + moveOnID = 458; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 190: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + switch(qnameID) { + case 2: + moveOnID = 105; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 192: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + switch(qnameID) { + case 0: + moveOnID = 215; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 202: + /* FirstStartTag[ATTRIBUTE[STRING](Name)] */ + switch(qnameID) { + case 4: + moveOnID = 203; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 203: + /* StartTag[ATTRIBUTE[ENUMERATION](ValueType)] */ + switch(qnameID) { + case 8: + moveOnID = 647; + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 3, val->enumeration); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 399: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 2: + moveOnID = 400; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 5); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 3: + moveOnID = 401; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 5); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 400: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + switch(qnameID) { + case 3: + moveOnID = 401; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 457: + /* StartTag[ATTRIBUTE[STRING](Target)] */ + switch(qnameID) { + case 5: + moveOnID = 458; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 533: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + switch(qnameID) { + case 2: + moveOnID = 643; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 1, 1); + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 599: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + switch(qnameID) { + case 7: + moveOnID = 474; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 3); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 621: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 6: + moveOnID = 622; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + case 7: + moveOnID = 276; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 3, 4); + errn = encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeNBitUnsignedInteger(stream, 2, 1); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + case 622: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + switch(qnameID) { + case 7: + moveOnID = 276; + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } else { + errn = _exiValueToString(val); + if(errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, 2, 3); + errn = encodeNBitUnsignedInteger(stream, 3, 2); + errn = encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, qnameID, &val->str); + } + break; + } + break; + + } + + /* no expected attribute */ + if (currentID < 0) { + /* runtime element */ + errn = _encode2ndLevelAttribute(stream, state, qnameID, val); + } else { + if(moveOnID == 0) { + /* no action yet */ +#if EXI_STRICT != 0 + /* no 2nd level events in strict mode for schema-informed grammars */ + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; +#else /* EXI_STRICT != 0 */ + errn = _encode2ndLevelAttribute(stream, state, qnameID, val); +#endif /* EXI_STRICT != 0 */ + } else { + state->grammarStack[state->stackIndex] = moveOnID; + } + } + + return errn; +} + + +int exiEncodeAttributeNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName, exi_value_t* val) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + +int exiEncodeAttributeGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName, exi_value_t* val) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +int exiEncodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + + switch (state->grammarStack[state->stackIndex]) { + + } + + if (errn < 0) { + return errn; + } + + errn = encodeBoolean(stream, val->boolean); + if (!errn && val->boolean) { + /* handle xsi:nil == true */ + errn = exi__HandleXsiNilTrue(state); + } + return errn; +} + + + +int exiEncodeAttributeXsiType(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + /* encode xsi:type event code */ + switch (state->grammarStack[state->stackIndex]) { + case 12: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 56: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 77: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 38: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 246: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 334: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 129: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 173: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 424: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 454: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 338: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 222: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 150: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 154: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 492: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 552: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 191: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 317: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 315: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 252: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 616: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 149: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 625: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 627: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 630: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 636: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 554: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 591: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 502: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 205: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 20: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 545: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 316: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 124: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 637: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 306: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 151: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 0); + break; + case 569: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 152: + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 159: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 547: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + case 634: + errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; + errn = encodeNBitUnsignedInteger(stream, 3, 1); + break; + + default: + return EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE; + } + if (errn) { + return errn; + } + + /* encode qname */ + errn = _encodeAttributeXsiTypeContent(stream, state, val); + + return errn; +} + + + + +#endif + diff --git a/src/codec/EXIEncoder.h b/src/codec/EXIEncoder.h new file mode 100644 index 0000000..09ee1a5 --- /dev/null +++ b/src/codec/EXIEncoder.h @@ -0,0 +1,271 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI__ENCODER_H +#define EXI__ENCODER_H + +/** +* \file EXIEncoder.h +* \brief EXI Encoder +* +*/ + +#include "EXITypes.h" +#include "EXIEncoder.h" + +/** + * \brief Initialize EXI encoder + * + * Resets & initializes the EXI encoder. + * + * \param stream Output Stream + * \param state Codec state + * \param runtimeTable Runtime name-tables + * \param stringTable String table + * \return Error-Code <> 0 + * + */ +int exiInitEncoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable); + +/** + * \brief Reports the beginning of a set of XML events + * + * see EXI StartDocument (SD) event + * + * \param stream Output Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiEncodeStartDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Reports the end of a set of XML events + * + * see EXI EndDocument (ED) event + * + * \param stream Output Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiEncodeEndDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Supplies the start of a known element + * + * Provides access to the namespace URI and local name of the start tag by providing qnameID. + * Note: Both, namespace URI and local name are known (schema-informed) or have been encoded before. + * see EXI StartElement (SE) event + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID qualified name ID + * \return Error-Code <> 0 + * + */ +int +exiEncodeStartElement(bitstream_t* stream, + exi_state_t* state, uint16_t qnameID); + +/** + * \brief Supplies the start of an element where the namespace is known + * + * Note: Namespace URI is known (schema-informed) or has been encoded before while local name is unknown. + * see EXI StartElement (SE) event + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUriID namespace URI ID + * \param localName local name as string + * \return Error-Code <> 0 + * + */ +int exiEncodeStartElementNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName); + +/** + * \brief Supplies the start of an element where the namespace and the local name is unknown + * + * Note: Neither namespace URI nor local name is known. + * see EXI StartElement (SE) event + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUri namespace URI as string + * \param localName local name as string + * \return Error-Code <> 0 + * + */ +int exiEncodeStartElementGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName); + +/** + * \brief Supplies the end tag of an element + * + * see EXI EndElement (EE) event + * + * \param stream Output Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiEncodeEndElement(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Supplies characters value + * + * Note: Special handling for list value. + * see EXI Characters (CH) event + * + * \param stream Output Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiEncodeCharacters(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + +/** + * \brief Supplies an attribute qname and value + * + * Note: Special handling for list value. + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID qualified name ID + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiEncodeAttribute(bitstream_t* stream, + exi_state_t* state, uint16_t qnameID, exi_value_t* val); + + + + +/** + * \brief Supplies an attribute qname and value where the namespace is known + * + * Note: Special handling for list value. + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUriID Qualified namespace URI ID + * \param localName Qualified localname as String + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiEncodeAttributeNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName, exi_value_t* val); + + +/** + * \brief Supplies an attribute qname and value where the namespace and the local name is unknown + * + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUri namespace URI as string + * \param localName local name as string + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiEncodeAttributeGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName, exi_value_t* val); + + + +/** + * \brief Supplies an xsi:nil attribute + * + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiEncodeAttributeXsiNil(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + +/** + * \brief Supplies an xsi:type attribute + * + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiEncodeAttributeXsiType(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + +/** + * \brief Supplies list value for characters and attribute event + * + * List values are special given that first the number and type of entry needs to be passed (element/attribute event) and then one by one the actual values. + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID qualified name ID + * \param val one list value + * \param lt list type + * \return Error-Code <> 0 + * + */ +int exiEncodeListValue(bitstream_t* stream, + exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/EXIHeaderDecoder.c b/src/codec/EXIHeaderDecoder.c new file mode 100644 index 0000000..5a72761 --- /dev/null +++ b/src/codec/EXIHeaderDecoder.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "EXIHeaderDecoder.h" +#include "BitInputStream.h" +#include "DecoderChannel.h" +#include "ErrorCodes.h" + +#ifndef EXI_HEADER_DECODER_C +#define EXI_HEADER_DECODER_C + +int readEXIHeader(bitstream_t* stream) { + uint32_t header = 0; + int errn = readBits(stream, 8, &header); + if (errn < 0) { + return errn; + } + if(header == '$') { + /* we do not support "EXI Cookie" */ + errn = EXI_UNSUPPORTED_HEADER_COOKIE; + } else if ( header & 0x20 ) { + /* we do not support "Presence Bit for EXI Options" */ + errn = EXI_UNSUPPORTED_HEADER_OPTIONS; + } else { + /* Yes, a *simple* header */ + errn = 0; + } + return errn; +} + + +#endif + + diff --git a/src/codec/EXIHeaderDecoder.h b/src/codec/EXIHeaderDecoder.h new file mode 100644 index 0000000..1c20091 --- /dev/null +++ b/src/codec/EXIHeaderDecoder.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \file EXIHeaderDecoder.h + * \brief EXI Header Decoder + * + */ + +#ifndef EXI_HEADER_DECODER_H +#define EXI_HEADER_DECODER_H + +/** + * \brief Reads EXI header + * + * \param stream Input Stream + * \return Error-Code <> 0 + * + */ +int readEXIHeader(bitstream_t* stream); + +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/EXIHeaderEncoder.c b/src/codec/EXIHeaderEncoder.c new file mode 100644 index 0000000..f33688c --- /dev/null +++ b/src/codec/EXIHeaderEncoder.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#include "EXIHeaderEncoder.h" +#include "BitOutputStream.h" +#include "EncoderChannel.h" + +#ifndef EXI_HEADER_ENCODER_C +#define EXI_HEADER_ENCODER_C + +int writeEXIHeader(bitstream_t* stream) { + return writeBits(stream, 8, 128); +} + + +#endif + + diff --git a/src/transport/v2gtp.h b/src/codec/EXIHeaderEncoder.h similarity index 60% rename from src/transport/v2gtp.h rename to src/codec/EXIHeaderEncoder.h index f253bfe..606817d 100644 --- a/src/transport/v2gtp.h +++ b/src/codec/EXIHeaderEncoder.h @@ -1,53 +1,59 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + -/* - * Copyright (C) 2007-2011 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file EXIOptions.h + * \brief EXI Options + * + */ + +#ifndef EXI__OPTIONS_H +#define EXI__OPTIONS_H + + +/** + * \brief Option 'strict' + * + * Strict interpretation of schemas is used to achieve better compactness. + * Default Value: false + */ +#define EXI_STRICT 0 + + +/** + * \brief Option 'valueMaxLength' + * + * Specifies the maximum string length of value content items to be + * considered for addition to the string table. + * Default Value: unbounded (-1) + */ +#define EXI_VALUE_MAX_LENGTH -1 + + +/** + * \brief Option 'valuePartitionCapacity' + * + * Specifies the total capacity of value partitions in a string table. + * Default Value: unbounded (-1) + */ +#define EXI_VALUE_PARTITION_CAPACITY 0 + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/EXITypes.h b/src/codec/EXITypes.h new file mode 100644 index 0000000..e62706a --- /dev/null +++ b/src/codec/EXITypes.h @@ -0,0 +1,535 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file EXITypes.h + * \brief Basic type definitions and structs + * + */ + +#includeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \file EncoderChannel.h + * \brief EXI Encoder Channel + * + */ + +#ifndef ENCODER_CHANNEL_H +#define ENCODER_CHANNEL_H + +/** + * \brief Encode byte value + * + * \param stream Output Stream + * \param b byte + * \return Error-Code <> 0 + * + */ +int encode(bitstream_t* stream, uint8_t b); + + +/** + * \brief Encode a single boolean value + * + * A false value is encoded as 0 and true value is encode as 1. + * + * \param stream Output Stream + * \param b boolean + * \return Error-Code <> 0 + * + */ +int encodeBoolean(bitstream_t* stream, int b); + + +/** + * \brief Encode n-bit unsigned integer + * + * The n least significant bits of parameter b starting with the + * most significant, i.e. from left to right. + * + * \param stream Output Stream + * \param nbits number of bits + * \param val value + * \return Error-Code <> 0 + * + */ +int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val); + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param iv Unsigned integer value + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Unsigned integer value 32 bits + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n); + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Unsigned integer value 64 bits + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n); + + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param iv Integer value + * \return Error-Code <> 0 + * + */ +int encodeInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Integer value 32 bits + * \return Error-Code <> 0 + * + */ +int encodeInteger32(bitstream_t* stream, int32_t n); + + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Integer value 64 bits + * \return Error-Code <> 0 + * + */ +int encodeInteger64(bitstream_t* stream, int64_t n); + + +/** + * \brief Encode float + * + * Encode a Float datatype as two consecutive Integers. The first + * Integer represents the mantissa of the floating point number + * and the second Integer represents the base-10 exponent of the + * floating point number. + * + * \param stream Output Stream + * \param f Float value + * \return Error-Code <> 0 + * + */ +int encodeFloat(bitstream_t* stream, exi_float_me_t* f); + + +/** + * \brief Encode decimal + * + * Encode a decimal represented as a Boolean sign followed by two + * Unsigned Integers. A sign value of zero (0) is used to represent + * positive Decimal values and a sign value of one (1) is used to + * represent negative Decimal values The first Integer represents + * the integral portion of the Decimal value. The second positive + * integer represents the fractional portion of the decimal with + * the digits in reverse order to preserve leading zeros. + * + * \param stream Output Stream + * \param d Decimal value + * \return Error-Code <> 0 + * + */ +int encodeDecimal(bitstream_t* stream, exi_decimal_t* d); + + +/** + * \brief Encode string + * + * Encode a length prefixed sequence of characters. + * + * \param stream Output Stream + * \param string String + * \return Error-Code <> 0 + * + */ +int encodeString(bitstream_t* stream, exi_string_ucs_t* string); + + +/** + * \brief Encode string value + * + * Encode a length prefixed sequence of characters + * in the sense of string tables + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param string String value + * \return Error-Code <> 0 + * + */ +int encodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_string_value_t* string); + + +/** + * \brief Encode restricted character set value + * + * Encode a length prefixed sequence of characters + * in the sense of string tables + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param rcs Restricted character set + * \param string String value + * \return Error-Code <> 0 + * + */ +int encodeRCSStringValue(bitstream_t* stream, exi_state_t* state, + uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* string); + + +/** + * \brief Encode characters + * + * Encode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer. + * + * \param stream Output Stream + * \param chars Characters + * \param len Numbr of characters + * \return Error-Code <> 0 + * + */ +int encodeUCSCharacters(bitstream_t* stream, uint32_t* chars, uint16_t len); + + +/** + * \brief Encode binary + * + * Encode a binary value as a length-prefixed sequence of octets. + * + * \param stream Output Stream + * \param bytes Byte values + * \return Error-Code <> 0 + * + */ +int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes); + + +/** + * \brief Encode datetime + * + * Encode a datetime representation which is a sequence of values + * representing the individual components of the Date-Time. + * + * \param stream Output Stream + * \param datetime Datetime values + * \return Error-Code <> 0 + * + */ +int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime); + + +/** + * \brief Flush underlying bit output stream + * + * \param stream Output Stream + * \return Error-Code <> 0 + * + */ +int encodeFinish(bitstream_t* stream); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/ErrorCodes.h b/src/codec/ErrorCodes.h new file mode 100644 index 0000000..4a0b5e9 --- /dev/null +++ b/src/codec/ErrorCodes.h @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file ErrorCodes.h + * \brief Error Codes descriptions + * + */ + +#ifndef EXI_ERROR_CODES_H +#define EXI_ERROR_CODES_H + + +#define EXI_ERROR_INPUT_STREAM_EOF -10 +#define EXI_ERROR_OUTPUT_STREAM_EOF -11 +#define EXI_ERROR_INPUT_FILE_HANDLE -12 +#define EXI_ERROR_OUTPUT_FILE -13 + +#define EXI_ERROR_OUT_OF_BOUNDS -100 +#define EXI_ERROR_OUT_OF_STRING_BUFFER -101 +#define EXI_ERROR_OUT_OF_ASCII_BUFFER -102 +#define EXI_ERROR_OUT_OF_BYTE_BUFFER -103 +#define EXI_ERROR_OUT_OF_GRAMMAR_STACK -104 +#define EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK -105 +#define EXI_ERROR_OUT_OF_QNAMES -106 + +#define EXI_ERROR_UNKOWN_EVENT -109 +#define EXI_ERROR_UNKOWN_EVENT_CODE -110 +#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL1 -111 +#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL2 -112 + +#define EXI_ERROR_UNEXPECTED_START_DOCUMENT -113 +#define EXI_ERROR_UNEXPECTED_END_DOCUMENT -114 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT -115 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT_NS -116 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC -117 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC_UNDECLARED -118 +#define EXI_ERROR_UNEXPECTED_END_ELEMENT -119 +#define EXI_ERROR_UNEXPECTED_CHARACTERS -120 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE -121 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS -122 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC -123 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED -124 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE -125 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL -126 +#define EXI_ERROR_UNEXPECTED_GRAMMAR_ID -127 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE -128 + +#define EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH -132 +#define EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS -133 +#define EXI_UNSUPPORTED_INTEGER_VALUE -134 +#define EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE -135 +#define EXI_UNSUPPORTED_LIST_VALUE_TYPE -136 +#define EXI_UNSUPPORTED_HEADER_COOKIE -137 +#define EXI_UNSUPPORTED_HEADER_OPTIONS -138 + +#define EXI_UNSUPPORTED_GLOBAL_ATTRIBUTE_VALUE_TYPE -139 +#define EXI_UNSUPPORTED_STRING_VALUE_TYPE -140 +#define EXI_UNSUPPORTED_INTEGER_VALUE_TYPE -141 +#define EXI_UNSUPPORTED_DATETIME_TYPE -142 + +#define EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH -150 + +#define EXI_ERROR_UNEXPECTED_BYTE_VALUE -200 + + +#define EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS -300 +#define EXI_ERROR_CONVERSION_TYPE_TO_STRING -301 + + +#define EXI_DEVIANT_SUPPORT_NOT_DEPLOYED -500 + + +#endif /* EXI_ERROR_CODES_H */ + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/MethodsBag.c b/src/codec/MethodsBag.c new file mode 100644 index 0000000..0cbe484 --- /dev/null +++ b/src/codec/MethodsBag.c @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef METHODS_BAG_C +#define METHODS_BAG_C + +#include "MethodsBag.h" +#include "ErrorCodes.h" + +static const uint16_t smallLengths[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, + 4, 4, 4 }; + +int exiGetCodingLength(uint32_t characteristics, uint16_t* codingLength) { + /* Note: we could use range expressions in switch statements but those are non-standard */ + /* e.g., case 1 ... 5: */ + + if (characteristics < 17) { + *codingLength = smallLengths[characteristics]; + return 0; + } else if (characteristics < 33) { + /* 17 .. 32 */ + *codingLength = 5; + return 0; + } else if (characteristics < 65) { + /* 33 .. 64 */ + *codingLength = 6; + return 0; + } else if (characteristics < 129) { + /* 65 .. 128 */ + *codingLength = 7; + return 0; + } else if (characteristics < 257) { + /* 129 .. 256 */ + *codingLength = 8; + return 0; + } else if (characteristics < 513) { + /* 257 .. 512 */ + *codingLength = 9; + return 0; + } else if (characteristics < 1025) { + /* 513 .. 1024 */ + *codingLength = 10; + return 0; + } else if (characteristics < 2049) { + /* 1025 .. 2048 */ + *codingLength = 11; + return 0; + } else if (characteristics < 4097) { + /* 2049 .. 4096 */ + *codingLength = 12; + return 0; + } else if (characteristics < 8193) { + /* 4097 .. 8192 */ + *codingLength = 13; + return 0; + } else if (characteristics < 16385) { + /* 8193 .. 16384 */ + *codingLength = 14; + return 0; + } else if (characteristics < 32769) { + /* 16385 .. 32768 */ + *codingLength = 15; + return 0; + } else if (characteristics < 65537) { + /* 32769 .. 65536 */ + *codingLength = 16; + return 0; + } else { + /* + return (int) Math.ceil(Math.log((double) (characteristics)) + / Math.log(2.0)); */ + return EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + +} + + +uint8_t numberOf7BitBlocksToRepresent(uint32_t n) { + /* assert (n >= 0); */ + + /* 7 bits */ + if (n < 128) { + return 1; + } + /* 14 bits */ + else if (n < 16384) { + return 2; + } + /* 21 bits */ + else if (n < 2097152) { + return 3; + } + /* 28 bits */ + else if (n < 268435456) { + return 4; + } + /* 35 bits */ + else { + /* int, 32 bits */ + return 5; + } +} + + + +#endif + diff --git a/src/codec/MethodsBag.h b/src/codec/MethodsBag.h new file mode 100644 index 0000000..76a89aa --- /dev/null +++ b/src/codec/MethodsBag.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef METHODS_BAG_H +#define METHODS_BAG_H + +/** +* \file MethodsBag.h +* \brief Method bag for bit and octet functions +* +*/ + + +#includeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI__NAME_TABLE_ENTRIES_C +#define EXI__NAME_TABLE_ENTRIES_C + +#include "NameTableEntries.h" + + + +/* ==================================== */ +/* String Table Population */ + +/* localName entries for URI '', id = 0 */ +/* + "Algorithm", "Encoding", "Id", "MimeType", "Name", + "Target", "Type", "URI", "ValueType" + */ + +/* localName entries for URI 'http://www.w3.org/XML/1998/namespace', id = 1 */ +/* + "base", "id", "lang", "space" + */ + +/* localName entries for URI 'http://www.w3.org/2001/XMLSchema-instance', id = 2 */ +/* + "nil", "type" + */ + +/* localName entries for URI 'http://www.w3.org/2001/XMLSchema', id = 3 */ +/* + "ENTITIES", "ENTITY", "ID", "IDREF", "IDREFS", + "NCName", "NMTOKEN", "NMTOKENS", "NOTATION", "Name", + "QName", "anySimpleType", "anyType", "anyURI", "base64Binary", + "boolean", "byte", "date", "dateTime", "decimal", + "double", "duration", "float", "gDay", "gMonth", + "gMonthDay", "gYear", "gYearMonth", "hexBinary", "int", + "integer", "language", "long", "negativeInteger", "nonNegativeInteger", + "nonPositiveInteger", "normalizedString", "positiveInteger", "short", "string", + "time", "token", "unsignedByte", "unsignedInt", "unsignedLong", + "unsignedShort" + */ + +/* localName entries for URI 'http://www.w3.org/2000/09/xmldsig#', id = 4 */ +/* + "CanonicalizationMethod", "CanonicalizationMethodType", "CryptoBinary", "DSAKeyValue", "DSAKeyValueType", + "DigestMethod", "DigestMethodType", "DigestValue", "DigestValueType", "Exponent", + "G", "HMACOutputLength", "HMACOutputLengthType", "J", "KeyInfo", + "KeyInfoType", "KeyName", "KeyValue", "KeyValueType", "Manifest", + "ManifestType", "MgmtData", "Modulus", "Object", "ObjectType", + "P", "PGPData", "PGPDataType", "PGPKeyID", "PGPKeyPacket", + "PgenCounter", "Q", "RSAKeyValue", "RSAKeyValueType", "Reference", + "ReferenceType", "RetrievalMethod", "RetrievalMethodType", "SPKIData", "SPKIDataType", + "SPKISexp", "Seed", "Signature", "SignatureMethod", "SignatureMethodType", + "SignatureProperties", "SignaturePropertiesType", "SignatureProperty", "SignaturePropertyType", "SignatureType", + "SignatureValue", "SignatureValueType", "SignedInfo", "SignedInfoType", "Transform", + "TransformType", "Transforms", "TransformsType", "X509CRL", "X509Certificate", + "X509Data", "X509DataType", "X509IssuerName", "X509IssuerSerial", "X509IssuerSerialType", + "X509SKI", "X509SerialNumber", "X509SubjectName", "XPath", "Y" + + */ + +/* localName entries for URI 'urn:iso:15118:2:2010:MsgBody', id = 5 */ +/* + "AC_EVSEStatus", "BulkChargingComplete", "CableCheckReq", "CableCheckReqType", "CableCheckRes", + "CableCheckResType", "CertificateInstallationReq", "CertificateInstallationReqType", "CertificateInstallationRes", "CertificateInstallationResType", + "CertificateUpdateReq", "CertificateUpdateReqType", "CertificateUpdateRes", "CertificateUpdateResType", "ChargeParameterDiscoveryReq", + "ChargeParameterDiscoveryReqType", "ChargeParameterDiscoveryRes", "ChargeParameterDiscoveryResType", "ChargeService", "ChargingComplete", + "ChargingProfile", "ChargingStatusReq", "ChargingStatusReqType", "ChargingStatusRes", "ChargingStatusResType", + "ContractAuthenticationReq", "ContractAuthenticationReqType", "ContractAuthenticationRes", "ContractAuthenticationResType", "ContractID", + "ContractSignatureCertChain", "ContractSignatureEncryptedPrivateKey", "CurrentDemandReq", "CurrentDemandReqType", "CurrentDemandRes", + "CurrentDemandResType", "DC_EVSEStatus", "DC_EVStatus", "DHParams", "DateTimeNow", + "EVCCID", "EVMaximumCurrentLimit", "EVMaximumPowerLimit", "EVMaximumVoltageLimit", "EVRequestedEnergyTransferType", + "EVSECurrentLimitAchieved", "EVSEID", "EVSEMaxCurrent", "EVSEMaximumCurrentLimit", "EVSEMaximumPowerLimit", + "EVSEMaximumVoltageLimit", "EVSEPowerLimitAchieved", "EVSEPresentCurrent", "EVSEPresentVoltage", "EVSEProcessing", + "EVSEVoltageLimitAchieved", "EVTargetCurrent", "EVTargetVoltage", "GenChallenge", "ListOfRootCertificateIDs", + "MeterInfo", "MeteringReceiptReq", "MeteringReceiptReqType", "MeteringReceiptRes", "MeteringReceiptResType", + "OEMProvisioningCert", "PaymentDetailsReq", "PaymentDetailsReqType", "PaymentDetailsRes", "PaymentDetailsResType", + "PaymentOptions", "PowerDeliveryReq", "PowerDeliveryReqType", "PowerDeliveryRes", "PowerDeliveryResType", + "PreChargeReq", "PreChargeReqType", "PreChargeRes", "PreChargeResType", "ReadyToChargeState", + "ReceiptRequired", "RemainingTimeToBulkSoC", "RemainingTimeToFullSoC", "ResponseCode", "RetryCounter", + "SAScheduleTupleID", "SelectedPaymentOption", "SelectedServiceList", "ServiceCategory", "ServiceDetailReq", + "ServiceDetailReqType", "ServiceDetailRes", "ServiceDetailResType", "ServiceDiscoveryReq", "ServiceDiscoveryReqType", + "ServiceDiscoveryRes", "ServiceDiscoveryResType", "ServiceID", "ServiceList", "ServiceParameterList", + "ServicePaymentSelectionReq", "ServicePaymentSelectionReqType", "ServicePaymentSelectionRes", "ServicePaymentSelectionResType", "ServiceScope", + "SessionID", "SessionSetupReq", "SessionSetupReqType", "SessionSetupRes", "SessionSetupResType", + "SessionStopReq", "SessionStopRes", "SessionStopResType", "SessionStopType", "WeldingDetectionReq", + "WeldingDetectionReqType", "WeldingDetectionRes", "WeldingDetectionResType" + */ + +/* localName entries for URI 'urn:iso:15118:2:2010:MsgDataTypes', id = 6 */ +/* + "AC_EVChargeParameter", "AC_EVChargeParameterType", "AC_EVSEChargeParameter", "AC_EVSEChargeParameterType", "AC_EVSEStatus", + "AC_EVSEStatusType", "BulkChargingComplete", "BulkSOC", "Certificate", "CertificateChainType", + "ChargingComplete", "ChargingProfileEntryMaxPower", "ChargingProfileEntryStart", "ChargingProfileType", "ConsumptionCost", + "ConsumptionCostType", "Cost", "CostType", "DC_EVChargeParameter", "DC_EVChargeParameterType", + "DC_EVErrorCodeType", "DC_EVPowerDeliveryParameter", "DC_EVPowerDeliveryParameterType", "DC_EVSEChargeParameter", "DC_EVSEChargeParameterType", + "DC_EVSEStatus", "DC_EVSEStatusCodeType", "DC_EVSEStatusType", "DC_EVStatus", "DC_EVStatusType", + "DepartureTime", "EAmount", "EPriceLevel", "EVCabinConditioning", "EVChargeParameter", + "EVChargeParameterType", "EVEnergyCapacity", "EVEnergyRequest", "EVErrorCode", "EVMaxCurrent", + "EVMaxVoltage", "EVMaximumCurrentLimit", "EVMaximumPowerLimit", "EVMaximumVoltageLimit", "EVMinCurrent", + "EVPowerDeliveryParameter", "EVPowerDeliveryParameterType", "EVRESSConditioning", "EVRESSSOC", "EVReady", + "EVRequestedEnergyTransferType", "EVSEChargeParameter", "EVSEChargeParameterType", "EVSECurrentRegulationTolerance", "EVSEEnergyToBeDelivered", + "EVSEIsolationStatus", "EVSEMaxCurrent", "EVSEMaxVoltage", "EVSEMaximumCurrentLimit", "EVSEMaximumPowerLimit", + "EVSEMaximumVoltageLimit", "EVSEMinCurrent", "EVSEMinimumCurrentLimit", "EVSEMinimumVoltageLimit", "EVSENotification", + "EVSENotificationType", "EVSEPeakCurrentRipple", "EVSEProcessingType", "EVSEStatus", "EVSEStatusCode", + "EVSEStatusType", "EVSESupportedEnergyTransferType", "EVStatus", "EVStatusType", "EnergyTransferType", + "Entry", "EntryType", "FaultCode", "FaultMsg", "FreeService", + "FullSOC", "IntervalType", "ListOfRootCertificateIDsType", "MeterID", "MeterInfoType", + "MeterReading", "MeterStatus", "Multiplier", "NotificationMaxDelay", "NotificationType", + "NumEPriceLevels", "PMax", "PMaxSchedule", "PMaxScheduleEntry", "PMaxScheduleEntryType", + "PMaxScheduleID", "PMaxScheduleType", "PMaxType", "Parameter", "ParameterSet", + "ParameterSetID", "ParameterSetType", "ParameterType", "PaymentOption", "PaymentOptionsType", + "PhysicalValueType", "PowerSwitchClosed", "ProfileEntry", "ProfileEntryType", "RCD", + "RelativeTimeInterval", "RelativeTimeIntervalType", "RootCertificateID", "SAIDType", "SAScheduleList", + "SAScheduleListType", "SAScheduleTuple", "SAScheduleTupleID", "SAScheduleTupleType", "SASchedules", + "SASchedulesType", "SalesTariff", "SalesTariffDescription", "SalesTariffEntry", "SalesTariffEntryType", + "SalesTariffID", "SalesTariffType", "SelectedService", "SelectedServiceListType", "SelectedServiceType", + "Service", "ServiceCategory", "ServiceCharge", "ServiceChargeType", "ServiceID", + "ServiceName", "ServiceParameterListType", "ServiceScope", "ServiceTag", "ServiceTagListType", + "ServiceTagType", "ServiceType", "SigMeterReading", "SubCertificates", "SubCertificatesType", + "TMeter", "TimeInterval", "Unit", "Value", "amount", + "amountMultiplier", "boolValue", "byteValue", "certificateType", "contractIDType", + "costKind", "costKindType", "dHParamsType", "duration", "evccIDType", + "evseIDType", "faultCodeType", "faultMsgType", "genChallengeType", "intValue", + "isolationLevelType", "meterIDType", "meterStatusType", "paymentOptionType", "percentValueType", + "physicalValue", "privateKeyType", "responseCodeType", "rootCertificateIDType", "serviceCategoryType", + "serviceIDType", "serviceNameType", "serviceScopeType", "sessionIDType", "shortValue", + "sigMeterReadingType", "start", "startValue", "stringValue", "tariffDescriptionType", + "unitMultiplierType", "unitSymbolType", "valueType" + */ + +/* localName entries for URI 'urn:iso:15118:2:2010:MsgDef', id = 7 */ +/* + "Body", "BodyBaseType", "BodyElement", "BodyType", "Header", + "V2G_Message" + */ + +/* localName entries for URI 'urn:iso:15118:2:2010:MsgHeader', id = 8 */ +/* + "MessageHeaderType", "Notification", "SessionID" + */ + + +/* number of local-name entries per URI */ +static uint16_t localNames[9] = { + /* '' */ + 9, + /* 'http://www.w3.org/XML/1998/namespace' */ + 4, + /* 'http://www.w3.org/2001/XMLSchema-instance' */ + 2, + /* 'http://www.w3.org/2001/XMLSchema' */ + 46, + /* 'http://www.w3.org/2000/09/xmldsig#' */ + 70, + /* 'urn:iso:15118:2:2010:MsgBody' */ + 118, + /* 'urn:iso:15118:2:2010:MsgDataTypes' */ + 188, + /* 'urn:iso:15118:2:2010:MsgDef' */ + 6, + /* 'urn:iso:15118:2:2010:MsgHeader' */ + 3 +}; + + +exi_name_table_prepopulated_t exiNameTablePrepopulated = { 9, localNames }; + + + + +#endif + diff --git a/src/codec/appHandCodec/appHand_NameTableEntries.c b/src/codec/NameTableEntries.h similarity index 69% rename from src/codec/appHandCodec/appHand_NameTableEntries.c rename to src/codec/NameTableEntries.h index 28cb282..01110fa 100644 --- a/src/codec/appHandCodec/appHand_NameTableEntries.c +++ b/src/codec/NameTableEntries.h @@ -19,42 +19,23 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.6 + * @version 0.7 * @contact Joerg.Heuer@siemens.com * - *Code generated by EXIdizer
+ *Code generated by EXIdizer.com
********************************************************************/ -#ifndef EXI_appHand_NAME_TABLE_ENTRIES_C -#define EXI_appHand_NAME_TABLE_ENTRIES_C - -#include "appHand_NameTableEntries.h" - +#ifndef EXI__NAME_TABLE_ENTRIES_H +#define EXI__NAME_TABLE_ENTRIES_H +#include "EXITypes.h" /* ==================================== */ /* String Table Population */ - -#if EXI_DEBUG == EXI_DEBUG_OFF -static struct exiNamePartition localNamePartitions[5] = { - { 7 }, - { 4 }, - { 2 }, - { 46 }, - { 8 } -}; -#endif /*EXI_DEBUG*/ - - -#if EXI_DEBUG == EXI_DEBUG_OFF -exi_name_table_prepopulated_t exiappHandNameTablePrepopulated = { 5, localNamePartitions }; -#endif /*EXI_DEBUG*/ - - - +extern exi_name_table_prepopulated_t exiNameTablePrepopulated; #endif diff --git a/src/codec/QNameDefines.h b/src/codec/QNameDefines.h new file mode 100644 index 0000000..543dc19 --- /dev/null +++ b/src/codec/QNameDefines.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI__QNAME_DEFINES_H +#define EXI__QNAME_DEFINES_H + +/** Number of pre-populated qnames */ +#define EXI_NUMBER_OF_PREPOPULATED_QNAMES 446 + +/** Number of runtime qnames */ +#define EXI_MAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES 100 + +/** Number of overall qnames (pre-populated from schema and runtime qnames) */ +#define EXI_MAX_NUMBER_OF_QNAMES (EXI_NUMBER_OF_PREPOPULATED_QNAMES + EXI_MAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES) + + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/QNames.c b/src/codec/QNames.c new file mode 100644 index 0000000..7f369f2 --- /dev/null +++ b/src/codec/QNames.c @@ -0,0 +1,981 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI__QNAMES_C +#define EXI__QNAMES_C + +#include "EXITypes.h" +#include "ErrorCodes.h" +#include "QNameDefines.h" + +/* qname is a composition of namespaceURI(ID) and localPart(ID) */ +static exi_eqname_t qnames[EXI_MAX_NUMBER_OF_QNAMES] = { + /* qnameID == 0: Algorithm */ + {0, 0}, + /* qnameID == 1: Encoding */ + {0, 1}, + /* qnameID == 2: Id */ + {0, 2}, + /* qnameID == 3: MimeType */ + {0, 3}, + /* qnameID == 4: Name */ + {0, 4}, + /* qnameID == 5: Target */ + {0, 5}, + /* qnameID == 6: Type */ + {0, 6}, + /* qnameID == 7: URI */ + {0, 7}, + /* qnameID == 8: ValueType */ + {0, 8}, + /* qnameID == 9: {http://www.w3.org/XML/1998/namespace}base */ + {1, 0}, + /* qnameID == 10: {http://www.w3.org/XML/1998/namespace}id */ + {1, 1}, + /* qnameID == 11: {http://www.w3.org/XML/1998/namespace}lang */ + {1, 2}, + /* qnameID == 12: {http://www.w3.org/XML/1998/namespace}space */ + {1, 3}, + /* qnameID == 13: {http://www.w3.org/2001/XMLSchema-instance}nil */ + {2, 0}, + /* qnameID == 14: {http://www.w3.org/2001/XMLSchema-instance}type */ + {2, 1}, + /* qnameID == 15: {http://www.w3.org/2001/XMLSchema}ENTITIES */ + {3, 0}, + /* qnameID == 16: {http://www.w3.org/2001/XMLSchema}ENTITY */ + {3, 1}, + /* qnameID == 17: {http://www.w3.org/2001/XMLSchema}ID */ + {3, 2}, + /* qnameID == 18: {http://www.w3.org/2001/XMLSchema}IDREF */ + {3, 3}, + /* qnameID == 19: {http://www.w3.org/2001/XMLSchema}IDREFS */ + {3, 4}, + /* qnameID == 20: {http://www.w3.org/2001/XMLSchema}NCName */ + {3, 5}, + /* qnameID == 21: {http://www.w3.org/2001/XMLSchema}NMTOKEN */ + {3, 6}, + /* qnameID == 22: {http://www.w3.org/2001/XMLSchema}NMTOKENS */ + {3, 7}, + /* qnameID == 23: {http://www.w3.org/2001/XMLSchema}NOTATION */ + {3, 8}, + /* qnameID == 24: {http://www.w3.org/2001/XMLSchema}Name */ + {3, 9}, + /* qnameID == 25: {http://www.w3.org/2001/XMLSchema}QName */ + {3, 10}, + /* qnameID == 26: {http://www.w3.org/2001/XMLSchema}anySimpleType */ + {3, 11}, + /* qnameID == 27: {http://www.w3.org/2001/XMLSchema}anyType */ + {3, 12}, + /* qnameID == 28: {http://www.w3.org/2001/XMLSchema}anyURI */ + {3, 13}, + /* qnameID == 29: {http://www.w3.org/2001/XMLSchema}base64Binary */ + {3, 14}, + /* qnameID == 30: {http://www.w3.org/2001/XMLSchema}boolean */ + {3, 15}, + /* qnameID == 31: {http://www.w3.org/2001/XMLSchema}byte */ + {3, 16}, + /* qnameID == 32: {http://www.w3.org/2001/XMLSchema}date */ + {3, 17}, + /* qnameID == 33: {http://www.w3.org/2001/XMLSchema}dateTime */ + {3, 18}, + /* qnameID == 34: {http://www.w3.org/2001/XMLSchema}decimal */ + {3, 19}, + /* qnameID == 35: {http://www.w3.org/2001/XMLSchema}double */ + {3, 20}, + /* qnameID == 36: {http://www.w3.org/2001/XMLSchema}duration */ + {3, 21}, + /* qnameID == 37: {http://www.w3.org/2001/XMLSchema}float */ + {3, 22}, + /* qnameID == 38: {http://www.w3.org/2001/XMLSchema}gDay */ + {3, 23}, + /* qnameID == 39: {http://www.w3.org/2001/XMLSchema}gMonth */ + {3, 24}, + /* qnameID == 40: {http://www.w3.org/2001/XMLSchema}gMonthDay */ + {3, 25}, + /* qnameID == 41: {http://www.w3.org/2001/XMLSchema}gYear */ + {3, 26}, + /* qnameID == 42: {http://www.w3.org/2001/XMLSchema}gYearMonth */ + {3, 27}, + /* qnameID == 43: {http://www.w3.org/2001/XMLSchema}hexBinary */ + {3, 28}, + /* qnameID == 44: {http://www.w3.org/2001/XMLSchema}int */ + {3, 29}, + /* qnameID == 45: {http://www.w3.org/2001/XMLSchema}integer */ + {3, 30}, + /* qnameID == 46: {http://www.w3.org/2001/XMLSchema}language */ + {3, 31}, + /* qnameID == 47: {http://www.w3.org/2001/XMLSchema}long */ + {3, 32}, + /* qnameID == 48: {http://www.w3.org/2001/XMLSchema}negativeInteger */ + {3, 33}, + /* qnameID == 49: {http://www.w3.org/2001/XMLSchema}nonNegativeInteger */ + {3, 34}, + /* qnameID == 50: {http://www.w3.org/2001/XMLSchema}nonPositiveInteger */ + {3, 35}, + /* qnameID == 51: {http://www.w3.org/2001/XMLSchema}normalizedString */ + {3, 36}, + /* qnameID == 52: {http://www.w3.org/2001/XMLSchema}positiveInteger */ + {3, 37}, + /* qnameID == 53: {http://www.w3.org/2001/XMLSchema}short */ + {3, 38}, + /* qnameID == 54: {http://www.w3.org/2001/XMLSchema}string */ + {3, 39}, + /* qnameID == 55: {http://www.w3.org/2001/XMLSchema}time */ + {3, 40}, + /* qnameID == 56: {http://www.w3.org/2001/XMLSchema}token */ + {3, 41}, + /* qnameID == 57: {http://www.w3.org/2001/XMLSchema}unsignedByte */ + {3, 42}, + /* qnameID == 58: {http://www.w3.org/2001/XMLSchema}unsignedInt */ + {3, 43}, + /* qnameID == 59: {http://www.w3.org/2001/XMLSchema}unsignedLong */ + {3, 44}, + /* qnameID == 60: {http://www.w3.org/2001/XMLSchema}unsignedShort */ + {3, 45}, + /* qnameID == 61: {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod */ + {4, 0}, + /* qnameID == 62: {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethodType */ + {4, 1}, + /* qnameID == 63: {http://www.w3.org/2000/09/xmldsig#}CryptoBinary */ + {4, 2}, + /* qnameID == 64: {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue */ + {4, 3}, + /* qnameID == 65: {http://www.w3.org/2000/09/xmldsig#}DSAKeyValueType */ + {4, 4}, + /* qnameID == 66: {http://www.w3.org/2000/09/xmldsig#}DigestMethod */ + {4, 5}, + /* qnameID == 67: {http://www.w3.org/2000/09/xmldsig#}DigestMethodType */ + {4, 6}, + /* qnameID == 68: {http://www.w3.org/2000/09/xmldsig#}DigestValue */ + {4, 7}, + /* qnameID == 69: {http://www.w3.org/2000/09/xmldsig#}DigestValueType */ + {4, 8}, + /* qnameID == 70: {http://www.w3.org/2000/09/xmldsig#}Exponent */ + {4, 9}, + /* qnameID == 71: {http://www.w3.org/2000/09/xmldsig#}G */ + {4, 10}, + /* qnameID == 72: {http://www.w3.org/2000/09/xmldsig#}HMACOutputLength */ + {4, 11}, + /* qnameID == 73: {http://www.w3.org/2000/09/xmldsig#}HMACOutputLengthType */ + {4, 12}, + /* qnameID == 74: {http://www.w3.org/2000/09/xmldsig#}J */ + {4, 13}, + /* qnameID == 75: {http://www.w3.org/2000/09/xmldsig#}KeyInfo */ + {4, 14}, + /* qnameID == 76: {http://www.w3.org/2000/09/xmldsig#}KeyInfoType */ + {4, 15}, + /* qnameID == 77: {http://www.w3.org/2000/09/xmldsig#}KeyName */ + {4, 16}, + /* qnameID == 78: {http://www.w3.org/2000/09/xmldsig#}KeyValue */ + {4, 17}, + /* qnameID == 79: {http://www.w3.org/2000/09/xmldsig#}KeyValueType */ + {4, 18}, + /* qnameID == 80: {http://www.w3.org/2000/09/xmldsig#}Manifest */ + {4, 19}, + /* qnameID == 81: {http://www.w3.org/2000/09/xmldsig#}ManifestType */ + {4, 20}, + /* qnameID == 82: {http://www.w3.org/2000/09/xmldsig#}MgmtData */ + {4, 21}, + /* qnameID == 83: {http://www.w3.org/2000/09/xmldsig#}Modulus */ + {4, 22}, + /* qnameID == 84: {http://www.w3.org/2000/09/xmldsig#}Object */ + {4, 23}, + /* qnameID == 85: {http://www.w3.org/2000/09/xmldsig#}ObjectType */ + {4, 24}, + /* qnameID == 86: {http://www.w3.org/2000/09/xmldsig#}P */ + {4, 25}, + /* qnameID == 87: {http://www.w3.org/2000/09/xmldsig#}PGPData */ + {4, 26}, + /* qnameID == 88: {http://www.w3.org/2000/09/xmldsig#}PGPDataType */ + {4, 27}, + /* qnameID == 89: {http://www.w3.org/2000/09/xmldsig#}PGPKeyID */ + {4, 28}, + /* qnameID == 90: {http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket */ + {4, 29}, + /* qnameID == 91: {http://www.w3.org/2000/09/xmldsig#}PgenCounter */ + {4, 30}, + /* qnameID == 92: {http://www.w3.org/2000/09/xmldsig#}Q */ + {4, 31}, + /* qnameID == 93: {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue */ + {4, 32}, + /* qnameID == 94: {http://www.w3.org/2000/09/xmldsig#}RSAKeyValueType */ + {4, 33}, + /* qnameID == 95: {http://www.w3.org/2000/09/xmldsig#}Reference */ + {4, 34}, + /* qnameID == 96: {http://www.w3.org/2000/09/xmldsig#}ReferenceType */ + {4, 35}, + /* qnameID == 97: {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod */ + {4, 36}, + /* qnameID == 98: {http://www.w3.org/2000/09/xmldsig#}RetrievalMethodType */ + {4, 37}, + /* qnameID == 99: {http://www.w3.org/2000/09/xmldsig#}SPKIData */ + {4, 38}, + /* qnameID == 100: {http://www.w3.org/2000/09/xmldsig#}SPKIDataType */ + {4, 39}, + /* qnameID == 101: {http://www.w3.org/2000/09/xmldsig#}SPKISexp */ + {4, 40}, + /* qnameID == 102: {http://www.w3.org/2000/09/xmldsig#}Seed */ + {4, 41}, + /* qnameID == 103: {http://www.w3.org/2000/09/xmldsig#}Signature */ + {4, 42}, + /* qnameID == 104: {http://www.w3.org/2000/09/xmldsig#}SignatureMethod */ + {4, 43}, + /* qnameID == 105: {http://www.w3.org/2000/09/xmldsig#}SignatureMethodType */ + {4, 44}, + /* qnameID == 106: {http://www.w3.org/2000/09/xmldsig#}SignatureProperties */ + {4, 45}, + /* qnameID == 107: {http://www.w3.org/2000/09/xmldsig#}SignaturePropertiesType */ + {4, 46}, + /* qnameID == 108: {http://www.w3.org/2000/09/xmldsig#}SignatureProperty */ + {4, 47}, + /* qnameID == 109: {http://www.w3.org/2000/09/xmldsig#}SignaturePropertyType */ + {4, 48}, + /* qnameID == 110: {http://www.w3.org/2000/09/xmldsig#}SignatureType */ + {4, 49}, + /* qnameID == 111: {http://www.w3.org/2000/09/xmldsig#}SignatureValue */ + {4, 50}, + /* qnameID == 112: {http://www.w3.org/2000/09/xmldsig#}SignatureValueType */ + {4, 51}, + /* qnameID == 113: {http://www.w3.org/2000/09/xmldsig#}SignedInfo */ + {4, 52}, + /* qnameID == 114: {http://www.w3.org/2000/09/xmldsig#}SignedInfoType */ + {4, 53}, + /* qnameID == 115: {http://www.w3.org/2000/09/xmldsig#}Transform */ + {4, 54}, + /* qnameID == 116: {http://www.w3.org/2000/09/xmldsig#}TransformType */ + {4, 55}, + /* qnameID == 117: {http://www.w3.org/2000/09/xmldsig#}Transforms */ + {4, 56}, + /* qnameID == 118: {http://www.w3.org/2000/09/xmldsig#}TransformsType */ + {4, 57}, + /* qnameID == 119: {http://www.w3.org/2000/09/xmldsig#}X509CRL */ + {4, 58}, + /* qnameID == 120: {http://www.w3.org/2000/09/xmldsig#}X509Certificate */ + {4, 59}, + /* qnameID == 121: {http://www.w3.org/2000/09/xmldsig#}X509Data */ + {4, 60}, + /* qnameID == 122: {http://www.w3.org/2000/09/xmldsig#}X509DataType */ + {4, 61}, + /* qnameID == 123: {http://www.w3.org/2000/09/xmldsig#}X509IssuerName */ + {4, 62}, + /* qnameID == 124: {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial */ + {4, 63}, + /* qnameID == 125: {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerialType */ + {4, 64}, + /* qnameID == 126: {http://www.w3.org/2000/09/xmldsig#}X509SKI */ + {4, 65}, + /* qnameID == 127: {http://www.w3.org/2000/09/xmldsig#}X509SerialNumber */ + {4, 66}, + /* qnameID == 128: {http://www.w3.org/2000/09/xmldsig#}X509SubjectName */ + {4, 67}, + /* qnameID == 129: {http://www.w3.org/2000/09/xmldsig#}XPath */ + {4, 68}, + /* qnameID == 130: {http://www.w3.org/2000/09/xmldsig#}Y */ + {4, 69}, + /* qnameID == 131: {urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus */ + {5, 0}, + /* qnameID == 132: {urn:iso:15118:2:2010:MsgBody}BulkChargingComplete */ + {5, 1}, + /* qnameID == 133: {urn:iso:15118:2:2010:MsgBody}CableCheckReq */ + {5, 2}, + /* qnameID == 134: {urn:iso:15118:2:2010:MsgBody}CableCheckReqType */ + {5, 3}, + /* qnameID == 135: {urn:iso:15118:2:2010:MsgBody}CableCheckRes */ + {5, 4}, + /* qnameID == 136: {urn:iso:15118:2:2010:MsgBody}CableCheckResType */ + {5, 5}, + /* qnameID == 137: {urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq */ + {5, 6}, + /* qnameID == 138: {urn:iso:15118:2:2010:MsgBody}CertificateInstallationReqType */ + {5, 7}, + /* qnameID == 139: {urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes */ + {5, 8}, + /* qnameID == 140: {urn:iso:15118:2:2010:MsgBody}CertificateInstallationResType */ + {5, 9}, + /* qnameID == 141: {urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq */ + {5, 10}, + /* qnameID == 142: {urn:iso:15118:2:2010:MsgBody}CertificateUpdateReqType */ + {5, 11}, + /* qnameID == 143: {urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes */ + {5, 12}, + /* qnameID == 144: {urn:iso:15118:2:2010:MsgBody}CertificateUpdateResType */ + {5, 13}, + /* qnameID == 145: {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq */ + {5, 14}, + /* qnameID == 146: {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReqType */ + {5, 15}, + /* qnameID == 147: {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes */ + {5, 16}, + /* qnameID == 148: {urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryResType */ + {5, 17}, + /* qnameID == 149: {urn:iso:15118:2:2010:MsgBody}ChargeService */ + {5, 18}, + /* qnameID == 150: {urn:iso:15118:2:2010:MsgBody}ChargingComplete */ + {5, 19}, + /* qnameID == 151: {urn:iso:15118:2:2010:MsgBody}ChargingProfile */ + {5, 20}, + /* qnameID == 152: {urn:iso:15118:2:2010:MsgBody}ChargingStatusReq */ + {5, 21}, + /* qnameID == 153: {urn:iso:15118:2:2010:MsgBody}ChargingStatusReqType */ + {5, 22}, + /* qnameID == 154: {urn:iso:15118:2:2010:MsgBody}ChargingStatusRes */ + {5, 23}, + /* qnameID == 155: {urn:iso:15118:2:2010:MsgBody}ChargingStatusResType */ + {5, 24}, + /* qnameID == 156: {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq */ + {5, 25}, + /* qnameID == 157: {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReqType */ + {5, 26}, + /* qnameID == 158: {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes */ + {5, 27}, + /* qnameID == 159: {urn:iso:15118:2:2010:MsgBody}ContractAuthenticationResType */ + {5, 28}, + /* qnameID == 160: {urn:iso:15118:2:2010:MsgBody}ContractID */ + {5, 29}, + /* qnameID == 161: {urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain */ + {5, 30}, + /* qnameID == 162: {urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey */ + {5, 31}, + /* qnameID == 163: {urn:iso:15118:2:2010:MsgBody}CurrentDemandReq */ + {5, 32}, + /* qnameID == 164: {urn:iso:15118:2:2010:MsgBody}CurrentDemandReqType */ + {5, 33}, + /* qnameID == 165: {urn:iso:15118:2:2010:MsgBody}CurrentDemandRes */ + {5, 34}, + /* qnameID == 166: {urn:iso:15118:2:2010:MsgBody}CurrentDemandResType */ + {5, 35}, + /* qnameID == 167: {urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus */ + {5, 36}, + /* qnameID == 168: {urn:iso:15118:2:2010:MsgBody}DC_EVStatus */ + {5, 37}, + /* qnameID == 169: {urn:iso:15118:2:2010:MsgBody}DHParams */ + {5, 38}, + /* qnameID == 170: {urn:iso:15118:2:2010:MsgBody}DateTimeNow */ + {5, 39}, + /* qnameID == 171: {urn:iso:15118:2:2010:MsgBody}EVCCID */ + {5, 40}, + /* qnameID == 172: {urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit */ + {5, 41}, + /* qnameID == 173: {urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit */ + {5, 42}, + /* qnameID == 174: {urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit */ + {5, 43}, + /* qnameID == 175: {urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType */ + {5, 44}, + /* qnameID == 176: {urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved */ + {5, 45}, + /* qnameID == 177: {urn:iso:15118:2:2010:MsgBody}EVSEID */ + {5, 46}, + /* qnameID == 178: {urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent */ + {5, 47}, + /* qnameID == 179: {urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit */ + {5, 48}, + /* qnameID == 180: {urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit */ + {5, 49}, + /* qnameID == 181: {urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit */ + {5, 50}, + /* qnameID == 182: {urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved */ + {5, 51}, + /* qnameID == 183: {urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent */ + {5, 52}, + /* qnameID == 184: {urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage */ + {5, 53}, + /* qnameID == 185: {urn:iso:15118:2:2010:MsgBody}EVSEProcessing */ + {5, 54}, + /* qnameID == 186: {urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved */ + {5, 55}, + /* qnameID == 187: {urn:iso:15118:2:2010:MsgBody}EVTargetCurrent */ + {5, 56}, + /* qnameID == 188: {urn:iso:15118:2:2010:MsgBody}EVTargetVoltage */ + {5, 57}, + /* qnameID == 189: {urn:iso:15118:2:2010:MsgBody}GenChallenge */ + {5, 58}, + /* qnameID == 190: {urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs */ + {5, 59}, + /* qnameID == 191: {urn:iso:15118:2:2010:MsgBody}MeterInfo */ + {5, 60}, + /* qnameID == 192: {urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq */ + {5, 61}, + /* qnameID == 193: {urn:iso:15118:2:2010:MsgBody}MeteringReceiptReqType */ + {5, 62}, + /* qnameID == 194: {urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes */ + {5, 63}, + /* qnameID == 195: {urn:iso:15118:2:2010:MsgBody}MeteringReceiptResType */ + {5, 64}, + /* qnameID == 196: {urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert */ + {5, 65}, + /* qnameID == 197: {urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq */ + {5, 66}, + /* qnameID == 198: {urn:iso:15118:2:2010:MsgBody}PaymentDetailsReqType */ + {5, 67}, + /* qnameID == 199: {urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes */ + {5, 68}, + /* qnameID == 200: {urn:iso:15118:2:2010:MsgBody}PaymentDetailsResType */ + {5, 69}, + /* qnameID == 201: {urn:iso:15118:2:2010:MsgBody}PaymentOptions */ + {5, 70}, + /* qnameID == 202: {urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq */ + {5, 71}, + /* qnameID == 203: {urn:iso:15118:2:2010:MsgBody}PowerDeliveryReqType */ + {5, 72}, + /* qnameID == 204: {urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes */ + {5, 73}, + /* qnameID == 205: {urn:iso:15118:2:2010:MsgBody}PowerDeliveryResType */ + {5, 74}, + /* qnameID == 206: {urn:iso:15118:2:2010:MsgBody}PreChargeReq */ + {5, 75}, + /* qnameID == 207: {urn:iso:15118:2:2010:MsgBody}PreChargeReqType */ + {5, 76}, + /* qnameID == 208: {urn:iso:15118:2:2010:MsgBody}PreChargeRes */ + {5, 77}, + /* qnameID == 209: {urn:iso:15118:2:2010:MsgBody}PreChargeResType */ + {5, 78}, + /* qnameID == 210: {urn:iso:15118:2:2010:MsgBody}ReadyToChargeState */ + {5, 79}, + /* qnameID == 211: {urn:iso:15118:2:2010:MsgBody}ReceiptRequired */ + {5, 80}, + /* qnameID == 212: {urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC */ + {5, 81}, + /* qnameID == 213: {urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC */ + {5, 82}, + /* qnameID == 214: {urn:iso:15118:2:2010:MsgBody}ResponseCode */ + {5, 83}, + /* qnameID == 215: {urn:iso:15118:2:2010:MsgBody}RetryCounter */ + {5, 84}, + /* qnameID == 216: {urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID */ + {5, 85}, + /* qnameID == 217: {urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption */ + {5, 86}, + /* qnameID == 218: {urn:iso:15118:2:2010:MsgBody}SelectedServiceList */ + {5, 87}, + /* qnameID == 219: {urn:iso:15118:2:2010:MsgBody}ServiceCategory */ + {5, 88}, + /* qnameID == 220: {urn:iso:15118:2:2010:MsgBody}ServiceDetailReq */ + {5, 89}, + /* qnameID == 221: {urn:iso:15118:2:2010:MsgBody}ServiceDetailReqType */ + {5, 90}, + /* qnameID == 222: {urn:iso:15118:2:2010:MsgBody}ServiceDetailRes */ + {5, 91}, + /* qnameID == 223: {urn:iso:15118:2:2010:MsgBody}ServiceDetailResType */ + {5, 92}, + /* qnameID == 224: {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq */ + {5, 93}, + /* qnameID == 225: {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReqType */ + {5, 94}, + /* qnameID == 226: {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes */ + {5, 95}, + /* qnameID == 227: {urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryResType */ + {5, 96}, + /* qnameID == 228: {urn:iso:15118:2:2010:MsgBody}ServiceID */ + {5, 97}, + /* qnameID == 229: {urn:iso:15118:2:2010:MsgBody}ServiceList */ + {5, 98}, + /* qnameID == 230: {urn:iso:15118:2:2010:MsgBody}ServiceParameterList */ + {5, 99}, + /* qnameID == 231: {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq */ + {5, 100}, + /* qnameID == 232: {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReqType */ + {5, 101}, + /* qnameID == 233: {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes */ + {5, 102}, + /* qnameID == 234: {urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionResType */ + {5, 103}, + /* qnameID == 235: {urn:iso:15118:2:2010:MsgBody}ServiceScope */ + {5, 104}, + /* qnameID == 236: {urn:iso:15118:2:2010:MsgBody}SessionID */ + {5, 105}, + /* qnameID == 237: {urn:iso:15118:2:2010:MsgBody}SessionSetupReq */ + {5, 106}, + /* qnameID == 238: {urn:iso:15118:2:2010:MsgBody}SessionSetupReqType */ + {5, 107}, + /* qnameID == 239: {urn:iso:15118:2:2010:MsgBody}SessionSetupRes */ + {5, 108}, + /* qnameID == 240: {urn:iso:15118:2:2010:MsgBody}SessionSetupResType */ + {5, 109}, + /* qnameID == 241: {urn:iso:15118:2:2010:MsgBody}SessionStopReq */ + {5, 110}, + /* qnameID == 242: {urn:iso:15118:2:2010:MsgBody}SessionStopRes */ + {5, 111}, + /* qnameID == 243: {urn:iso:15118:2:2010:MsgBody}SessionStopResType */ + {5, 112}, + /* qnameID == 244: {urn:iso:15118:2:2010:MsgBody}SessionStopType */ + {5, 113}, + /* qnameID == 245: {urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq */ + {5, 114}, + /* qnameID == 246: {urn:iso:15118:2:2010:MsgBody}WeldingDetectionReqType */ + {5, 115}, + /* qnameID == 247: {urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes */ + {5, 116}, + /* qnameID == 248: {urn:iso:15118:2:2010:MsgBody}WeldingDetectionResType */ + {5, 117}, + /* qnameID == 249: {urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter */ + {6, 0}, + /* qnameID == 250: {urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameterType */ + {6, 1}, + /* qnameID == 251: {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter */ + {6, 2}, + /* qnameID == 252: {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameterType */ + {6, 3}, + /* qnameID == 253: {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus */ + {6, 4}, + /* qnameID == 254: {urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatusType */ + {6, 5}, + /* qnameID == 255: {urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete */ + {6, 6}, + /* qnameID == 256: {urn:iso:15118:2:2010:MsgDataTypes}BulkSOC */ + {6, 7}, + /* qnameID == 257: {urn:iso:15118:2:2010:MsgDataTypes}Certificate */ + {6, 8}, + /* qnameID == 258: {urn:iso:15118:2:2010:MsgDataTypes}CertificateChainType */ + {6, 9}, + /* qnameID == 259: {urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete */ + {6, 10}, + /* qnameID == 260: {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower */ + {6, 11}, + /* qnameID == 261: {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart */ + {6, 12}, + /* qnameID == 262: {urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileType */ + {6, 13}, + /* qnameID == 263: {urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost */ + {6, 14}, + /* qnameID == 264: {urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCostType */ + {6, 15}, + /* qnameID == 265: {urn:iso:15118:2:2010:MsgDataTypes}Cost */ + {6, 16}, + /* qnameID == 266: {urn:iso:15118:2:2010:MsgDataTypes}CostType */ + {6, 17}, + /* qnameID == 267: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter */ + {6, 18}, + /* qnameID == 268: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameterType */ + {6, 19}, + /* qnameID == 269: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVErrorCodeType */ + {6, 20}, + /* qnameID == 270: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter */ + {6, 21}, + /* qnameID == 271: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameterType */ + {6, 22}, + /* qnameID == 272: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter */ + {6, 23}, + /* qnameID == 273: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameterType */ + {6, 24}, + /* qnameID == 274: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus */ + {6, 25}, + /* qnameID == 275: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatusCodeType */ + {6, 26}, + /* qnameID == 276: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatusType */ + {6, 27}, + /* qnameID == 277: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus */ + {6, 28}, + /* qnameID == 278: {urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatusType */ + {6, 29}, + /* qnameID == 279: {urn:iso:15118:2:2010:MsgDataTypes}DepartureTime */ + {6, 30}, + /* qnameID == 280: {urn:iso:15118:2:2010:MsgDataTypes}EAmount */ + {6, 31}, + /* qnameID == 281: {urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel */ + {6, 32}, + /* qnameID == 282: {urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning */ + {6, 33}, + /* qnameID == 283: {urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter */ + {6, 34}, + /* qnameID == 284: {urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameterType */ + {6, 35}, + /* qnameID == 285: {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity */ + {6, 36}, + /* qnameID == 286: {urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest */ + {6, 37}, + /* qnameID == 287: {urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode */ + {6, 38}, + /* qnameID == 288: {urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent */ + {6, 39}, + /* qnameID == 289: {urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage */ + {6, 40}, + /* qnameID == 290: {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit */ + {6, 41}, + /* qnameID == 291: {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit */ + {6, 42}, + /* qnameID == 292: {urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit */ + {6, 43}, + /* qnameID == 293: {urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent */ + {6, 44}, + /* qnameID == 294: {urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter */ + {6, 45}, + /* qnameID == 295: {urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameterType */ + {6, 46}, + /* qnameID == 296: {urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning */ + {6, 47}, + /* qnameID == 297: {urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC */ + {6, 48}, + /* qnameID == 298: {urn:iso:15118:2:2010:MsgDataTypes}EVReady */ + {6, 49}, + /* qnameID == 299: {urn:iso:15118:2:2010:MsgDataTypes}EVRequestedEnergyTransferType */ + {6, 50}, + /* qnameID == 300: {urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter */ + {6, 51}, + /* qnameID == 301: {urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameterType */ + {6, 52}, + /* qnameID == 302: {urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance */ + {6, 53}, + /* qnameID == 303: {urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered */ + {6, 54}, + /* qnameID == 304: {urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus */ + {6, 55}, + /* qnameID == 305: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent */ + {6, 56}, + /* qnameID == 306: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage */ + {6, 57}, + /* qnameID == 307: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit */ + {6, 58}, + /* qnameID == 308: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit */ + {6, 59}, + /* qnameID == 309: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit */ + {6, 60}, + /* qnameID == 310: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent */ + {6, 61}, + /* qnameID == 311: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit */ + {6, 62}, + /* qnameID == 312: {urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit */ + {6, 63}, + /* qnameID == 313: {urn:iso:15118:2:2010:MsgDataTypes}EVSENotification */ + {6, 64}, + /* qnameID == 314: {urn:iso:15118:2:2010:MsgDataTypes}EVSENotificationType */ + {6, 65}, + /* qnameID == 315: {urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple */ + {6, 66}, + /* qnameID == 316: {urn:iso:15118:2:2010:MsgDataTypes}EVSEProcessingType */ + {6, 67}, + /* qnameID == 317: {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus */ + {6, 68}, + /* qnameID == 318: {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode */ + {6, 69}, + /* qnameID == 319: {urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusType */ + {6, 70}, + /* qnameID == 320: {urn:iso:15118:2:2010:MsgDataTypes}EVSESupportedEnergyTransferType */ + {6, 71}, + /* qnameID == 321: {urn:iso:15118:2:2010:MsgDataTypes}EVStatus */ + {6, 72}, + /* qnameID == 322: {urn:iso:15118:2:2010:MsgDataTypes}EVStatusType */ + {6, 73}, + /* qnameID == 323: {urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType */ + {6, 74}, + /* qnameID == 324: {urn:iso:15118:2:2010:MsgDataTypes}Entry */ + {6, 75}, + /* qnameID == 325: {urn:iso:15118:2:2010:MsgDataTypes}EntryType */ + {6, 76}, + /* qnameID == 326: {urn:iso:15118:2:2010:MsgDataTypes}FaultCode */ + {6, 77}, + /* qnameID == 327: {urn:iso:15118:2:2010:MsgDataTypes}FaultMsg */ + {6, 78}, + /* qnameID == 328: {urn:iso:15118:2:2010:MsgDataTypes}FreeService */ + {6, 79}, + /* qnameID == 329: {urn:iso:15118:2:2010:MsgDataTypes}FullSOC */ + {6, 80}, + /* qnameID == 330: {urn:iso:15118:2:2010:MsgDataTypes}IntervalType */ + {6, 81}, + /* qnameID == 331: {urn:iso:15118:2:2010:MsgDataTypes}ListOfRootCertificateIDsType */ + {6, 82}, + /* qnameID == 332: {urn:iso:15118:2:2010:MsgDataTypes}MeterID */ + {6, 83}, + /* qnameID == 333: {urn:iso:15118:2:2010:MsgDataTypes}MeterInfoType */ + {6, 84}, + /* qnameID == 334: {urn:iso:15118:2:2010:MsgDataTypes}MeterReading */ + {6, 85}, + /* qnameID == 335: {urn:iso:15118:2:2010:MsgDataTypes}MeterStatus */ + {6, 86}, + /* qnameID == 336: {urn:iso:15118:2:2010:MsgDataTypes}Multiplier */ + {6, 87}, + /* qnameID == 337: {urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay */ + {6, 88}, + /* qnameID == 338: {urn:iso:15118:2:2010:MsgDataTypes}NotificationType */ + {6, 89}, + /* qnameID == 339: {urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels */ + {6, 90}, + /* qnameID == 340: {urn:iso:15118:2:2010:MsgDataTypes}PMax */ + {6, 91}, + /* qnameID == 341: {urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule */ + {6, 92}, + /* qnameID == 342: {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry */ + {6, 93}, + /* qnameID == 343: {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntryType */ + {6, 94}, + /* qnameID == 344: {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID */ + {6, 95}, + /* qnameID == 345: {urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleType */ + {6, 96}, + /* qnameID == 346: {urn:iso:15118:2:2010:MsgDataTypes}PMaxType */ + {6, 97}, + /* qnameID == 347: {urn:iso:15118:2:2010:MsgDataTypes}Parameter */ + {6, 98}, + /* qnameID == 348: {urn:iso:15118:2:2010:MsgDataTypes}ParameterSet */ + {6, 99}, + /* qnameID == 349: {urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID */ + {6, 100}, + /* qnameID == 350: {urn:iso:15118:2:2010:MsgDataTypes}ParameterSetType */ + {6, 101}, + /* qnameID == 351: {urn:iso:15118:2:2010:MsgDataTypes}ParameterType */ + {6, 102}, + /* qnameID == 352: {urn:iso:15118:2:2010:MsgDataTypes}PaymentOption */ + {6, 103}, + /* qnameID == 353: {urn:iso:15118:2:2010:MsgDataTypes}PaymentOptionsType */ + {6, 104}, + /* qnameID == 354: {urn:iso:15118:2:2010:MsgDataTypes}PhysicalValueType */ + {6, 105}, + /* qnameID == 355: {urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed */ + {6, 106}, + /* qnameID == 356: {urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry */ + {6, 107}, + /* qnameID == 357: {urn:iso:15118:2:2010:MsgDataTypes}ProfileEntryType */ + {6, 108}, + /* qnameID == 358: {urn:iso:15118:2:2010:MsgDataTypes}RCD */ + {6, 109}, + /* qnameID == 359: {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval */ + {6, 110}, + /* qnameID == 360: {urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeIntervalType */ + {6, 111}, + /* qnameID == 361: {urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID */ + {6, 112}, + /* qnameID == 362: {urn:iso:15118:2:2010:MsgDataTypes}SAIDType */ + {6, 113}, + /* qnameID == 363: {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList */ + {6, 114}, + /* qnameID == 364: {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleListType */ + {6, 115}, + /* qnameID == 365: {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple */ + {6, 116}, + /* qnameID == 366: {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID */ + {6, 117}, + /* qnameID == 367: {urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleType */ + {6, 118}, + /* qnameID == 368: {urn:iso:15118:2:2010:MsgDataTypes}SASchedules */ + {6, 119}, + /* qnameID == 369: {urn:iso:15118:2:2010:MsgDataTypes}SASchedulesType */ + {6, 120}, + /* qnameID == 370: {urn:iso:15118:2:2010:MsgDataTypes}SalesTariff */ + {6, 121}, + /* qnameID == 371: {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription */ + {6, 122}, + /* qnameID == 372: {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry */ + {6, 123}, + /* qnameID == 373: {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntryType */ + {6, 124}, + /* qnameID == 374: {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID */ + {6, 125}, + /* qnameID == 375: {urn:iso:15118:2:2010:MsgDataTypes}SalesTariffType */ + {6, 126}, + /* qnameID == 376: {urn:iso:15118:2:2010:MsgDataTypes}SelectedService */ + {6, 127}, + /* qnameID == 377: {urn:iso:15118:2:2010:MsgDataTypes}SelectedServiceListType */ + {6, 128}, + /* qnameID == 378: {urn:iso:15118:2:2010:MsgDataTypes}SelectedServiceType */ + {6, 129}, + /* qnameID == 379: {urn:iso:15118:2:2010:MsgDataTypes}Service */ + {6, 130}, + /* qnameID == 380: {urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory */ + {6, 131}, + /* qnameID == 381: {urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge */ + {6, 132}, + /* qnameID == 382: {urn:iso:15118:2:2010:MsgDataTypes}ServiceChargeType */ + {6, 133}, + /* qnameID == 383: {urn:iso:15118:2:2010:MsgDataTypes}ServiceID */ + {6, 134}, + /* qnameID == 384: {urn:iso:15118:2:2010:MsgDataTypes}ServiceName */ + {6, 135}, + /* qnameID == 385: {urn:iso:15118:2:2010:MsgDataTypes}ServiceParameterListType */ + {6, 136}, + /* qnameID == 386: {urn:iso:15118:2:2010:MsgDataTypes}ServiceScope */ + {6, 137}, + /* qnameID == 387: {urn:iso:15118:2:2010:MsgDataTypes}ServiceTag */ + {6, 138}, + /* qnameID == 388: {urn:iso:15118:2:2010:MsgDataTypes}ServiceTagListType */ + {6, 139}, + /* qnameID == 389: {urn:iso:15118:2:2010:MsgDataTypes}ServiceTagType */ + {6, 140}, + /* qnameID == 390: {urn:iso:15118:2:2010:MsgDataTypes}ServiceType */ + {6, 141}, + /* qnameID == 391: {urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading */ + {6, 142}, + /* qnameID == 392: {urn:iso:15118:2:2010:MsgDataTypes}SubCertificates */ + {6, 143}, + /* qnameID == 393: {urn:iso:15118:2:2010:MsgDataTypes}SubCertificatesType */ + {6, 144}, + /* qnameID == 394: {urn:iso:15118:2:2010:MsgDataTypes}TMeter */ + {6, 145}, + /* qnameID == 395: {urn:iso:15118:2:2010:MsgDataTypes}TimeInterval */ + {6, 146}, + /* qnameID == 396: {urn:iso:15118:2:2010:MsgDataTypes}Unit */ + {6, 147}, + /* qnameID == 397: {urn:iso:15118:2:2010:MsgDataTypes}Value */ + {6, 148}, + /* qnameID == 398: {urn:iso:15118:2:2010:MsgDataTypes}amount */ + {6, 149}, + /* qnameID == 399: {urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier */ + {6, 150}, + /* qnameID == 400: {urn:iso:15118:2:2010:MsgDataTypes}boolValue */ + {6, 151}, + /* qnameID == 401: {urn:iso:15118:2:2010:MsgDataTypes}byteValue */ + {6, 152}, + /* qnameID == 402: {urn:iso:15118:2:2010:MsgDataTypes}certificateType */ + {6, 153}, + /* qnameID == 403: {urn:iso:15118:2:2010:MsgDataTypes}contractIDType */ + {6, 154}, + /* qnameID == 404: {urn:iso:15118:2:2010:MsgDataTypes}costKind */ + {6, 155}, + /* qnameID == 405: {urn:iso:15118:2:2010:MsgDataTypes}costKindType */ + {6, 156}, + /* qnameID == 406: {urn:iso:15118:2:2010:MsgDataTypes}dHParamsType */ + {6, 157}, + /* qnameID == 407: {urn:iso:15118:2:2010:MsgDataTypes}duration */ + {6, 158}, + /* qnameID == 408: {urn:iso:15118:2:2010:MsgDataTypes}evccIDType */ + {6, 159}, + /* qnameID == 409: {urn:iso:15118:2:2010:MsgDataTypes}evseIDType */ + {6, 160}, + /* qnameID == 410: {urn:iso:15118:2:2010:MsgDataTypes}faultCodeType */ + {6, 161}, + /* qnameID == 411: {urn:iso:15118:2:2010:MsgDataTypes}faultMsgType */ + {6, 162}, + /* qnameID == 412: {urn:iso:15118:2:2010:MsgDataTypes}genChallengeType */ + {6, 163}, + /* qnameID == 413: {urn:iso:15118:2:2010:MsgDataTypes}intValue */ + {6, 164}, + /* qnameID == 414: {urn:iso:15118:2:2010:MsgDataTypes}isolationLevelType */ + {6, 165}, + /* qnameID == 415: {urn:iso:15118:2:2010:MsgDataTypes}meterIDType */ + {6, 166}, + /* qnameID == 416: {urn:iso:15118:2:2010:MsgDataTypes}meterStatusType */ + {6, 167}, + /* qnameID == 417: {urn:iso:15118:2:2010:MsgDataTypes}paymentOptionType */ + {6, 168}, + /* qnameID == 418: {urn:iso:15118:2:2010:MsgDataTypes}percentValueType */ + {6, 169}, + /* qnameID == 419: {urn:iso:15118:2:2010:MsgDataTypes}physicalValue */ + {6, 170}, + /* qnameID == 420: {urn:iso:15118:2:2010:MsgDataTypes}privateKeyType */ + {6, 171}, + /* qnameID == 421: {urn:iso:15118:2:2010:MsgDataTypes}responseCodeType */ + {6, 172}, + /* qnameID == 422: {urn:iso:15118:2:2010:MsgDataTypes}rootCertificateIDType */ + {6, 173}, + /* qnameID == 423: {urn:iso:15118:2:2010:MsgDataTypes}serviceCategoryType */ + {6, 174}, + /* qnameID == 424: {urn:iso:15118:2:2010:MsgDataTypes}serviceIDType */ + {6, 175}, + /* qnameID == 425: {urn:iso:15118:2:2010:MsgDataTypes}serviceNameType */ + {6, 176}, + /* qnameID == 426: {urn:iso:15118:2:2010:MsgDataTypes}serviceScopeType */ + {6, 177}, + /* qnameID == 427: {urn:iso:15118:2:2010:MsgDataTypes}sessionIDType */ + {6, 178}, + /* qnameID == 428: {urn:iso:15118:2:2010:MsgDataTypes}shortValue */ + {6, 179}, + /* qnameID == 429: {urn:iso:15118:2:2010:MsgDataTypes}sigMeterReadingType */ + {6, 180}, + /* qnameID == 430: {urn:iso:15118:2:2010:MsgDataTypes}start */ + {6, 181}, + /* qnameID == 431: {urn:iso:15118:2:2010:MsgDataTypes}startValue */ + {6, 182}, + /* qnameID == 432: {urn:iso:15118:2:2010:MsgDataTypes}stringValue */ + {6, 183}, + /* qnameID == 433: {urn:iso:15118:2:2010:MsgDataTypes}tariffDescriptionType */ + {6, 184}, + /* qnameID == 434: {urn:iso:15118:2:2010:MsgDataTypes}unitMultiplierType */ + {6, 185}, + /* qnameID == 435: {urn:iso:15118:2:2010:MsgDataTypes}unitSymbolType */ + {6, 186}, + /* qnameID == 436: {urn:iso:15118:2:2010:MsgDataTypes}valueType */ + {6, 187}, + /* qnameID == 437: {urn:iso:15118:2:2010:MsgDef}Body */ + {7, 0}, + /* qnameID == 438: {urn:iso:15118:2:2010:MsgDef}BodyBaseType */ + {7, 1}, + /* qnameID == 439: {urn:iso:15118:2:2010:MsgDef}BodyElement */ + {7, 2}, + /* qnameID == 440: {urn:iso:15118:2:2010:MsgDef}BodyType */ + {7, 3}, + /* qnameID == 441: {urn:iso:15118:2:2010:MsgDef}Header */ + {7, 4}, + /* qnameID == 442: {urn:iso:15118:2:2010:MsgDef}V2G_Message */ + {7, 5}, + /* qnameID == 443: {urn:iso:15118:2:2010:MsgHeader}MessageHeaderType */ + {8, 0}, + /* qnameID == 444: {urn:iso:15118:2:2010:MsgHeader}Notification */ + {8, 1}, + /* qnameID == 445: {urn:iso:15118:2:2010:MsgHeader}SessionID */ + {8, 2} + +}; + + +int exiGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart) { + int errn = 0; + /* EXI_NUMBER_OF_QNAMES */ + if (qnameID < state->nextQNameID) { + *namespaceURI = qnames[qnameID].namespaceURI; + *localPart = qnames[qnameID].localPart; + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + return errn; +} + + +int exiGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID) { + uint16_t i; + /* TODO Do something more efficient than just walk over the entire list */ + /* EXI_NUMBER_OF_QNAMES */ + for(i=0; iCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI__QNAMES_H +#define EXI__QNAMES_H + +#include "EXITypes.h" + +/** + * \brief Returns efficient qname (namespaceURI & localName) IDs for qnameID + * + * \param state Codec state + * \param qnameID Qualified name ID + * \param namespaceURI QName namespace URI ID + * \param localPart QName local name ID + * \return Error-Code <> 0 + * + */ +int exiGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart); + + +/** + * \brief Returns qnameID for qname namespaceURI & localName + * + * \param state Codec state + * \param namespaceURI QName namespace URI ID + * \param localPart QName local name ID + * \param qnameID QName ID (out) + * \return Error-Code <> 0 + * + */ +int exiGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID); + + +/** + * \brief Add efficient qname (namespaceURI & localName) IDs for qnameID + * + * \param state Codec state + * \param qnameID Qualified name ID + * \param namespaceURI QName namespace URI ID + * \param localPart QName local name ID + * \return Error-Code <> 0 + * + */ +int exiAddEQName(exi_state_t* state, uint16_t* qnameID, uint16_t namespaceURI, uint16_t localPart); + +#endif + diff --git a/src/codec/StringTable.c b/src/codec/StringTable.c new file mode 100644 index 0000000..ccac33b --- /dev/null +++ b/src/codec/StringTable.c @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef STRING_TABLE_C +#define STRING_TABLE_C + +#includeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file StringTable.h + * \brief String table count implementation + * + */ + +#ifndef STRING_TABLE_H +#define STRING_TABLE_H + +#include "EXITypes.h" + + +/** + * \brief Init name table + * + * Inits counter et cetera + * + * \param runtimeTable Runtime Table + * \return Error-Code <> 0 + * + */ +int exiInitNameTableRuntime(exi_name_table_runtime_t* runtimeTable); + + +/** + * \brief Get Uri Size + * + * \param prepopulatedTable Pre-Populated Table + * \param runtimeTable Runtime Table + * \param uriLength Uri Size (out) + * \return Error-Code <> 0 + * + */ +int exiGetUriSize(exi_name_table_prepopulated_t* prepopulatedTable, + exi_name_table_runtime_t* runtimeTable, uint16_t* uriLength); + + +/** + * \brief Get LocalName Size + * + * \param prepopulatedTable Pre-Populated Table + * \param runtimeTable Runtime Table + * \param uriID Uri ID for local-name + * \param localNameLength Local-Name Size (out) + * \return Error-Code <> 0 + * + */ +int exiGetLocalNameSize(exi_name_table_prepopulated_t* prepopulatedTable, + exi_name_table_runtime_t* runtimeTable, uint16_t uriID, + uint16_t* localNameLength); + + +/** + * \brief Add runtime URI entry + * + * \param prepopulatedTable Pre-Populated Table + * \param runtimeTable Runtime Table + * \return Error-Code <> 0 + * + */ +int exiAddUri(exi_name_table_prepopulated_t* prepopulatedTable, + exi_name_table_runtime_t* runtimeTable); + + +/** + * \brief Add runtime local-name entry + * + * \param prepopulatedTable Pre-Populated Table + * \param runtimeTable Runtime Table + * \param uriID Uri ID for local-name + * \param localNameID LocalName ID (out) + * \return Error-Code <> 0 + * + */ +int exiAddLocalName(exi_name_table_prepopulated_t* prepopulatedTable, + exi_name_table_runtime_t* runtimeTable, uint16_t uriID, uint16_t* localNameID); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/UCSString.c b/src/codec/UCSString.c new file mode 100644 index 0000000..2db8e8d --- /dev/null +++ b/src/codec/UCSString.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#includeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \file UCSString.h + * \brief UCS String utilities + * + */ + +#ifndef UCS_STRING_H +#define UCS_STRING_H + +/** + * \brief Converts characters to USC string + * + * \param chars Characters + * \param s UCS String + * \return Error-Code <> 0 + * + */ +int toUCSString(char* chars, exi_string_ucs_t* s); + + +/** + * \brief Converts String to ASCII characters + * + * Note: fails if string contains non ASCII characters. + * + * \param string UCS String + * \param string Input String + * \param outASCII ASCII Characters (out) + * \return Error-Code <> 0 + * + */ +int toASCIIString(exi_string_ucs_t* string, char* outASCII); + +#endif + + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/appHandCodec/appHandEXICoder.c b/src/codec/appHandCodec/appHandEXICoder.c new file mode 100644 index 0000000..0940aa7 --- /dev/null +++ b/src/codec/appHandCodec/appHandEXICoder.c @@ -0,0 +1,862 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI_appHand_CODER_C +#define EXI_appHand_CODER_C + +#include "appHandEXICoder.h" + +#include "EXITypes.h" +#include "EXIOptions.h" +#include "BitInputStream.h" +#include "DecoderChannel.h" +#include "ErrorCodes.h" + + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'qnameID' */ +#endif /* __GNUC__ */ +int exi_appHand_IncrementStringValueCount(exi_state_t* state, uint16_t qnameID) { + int errn = 0; +#if EXI_appHandVALUE_PARTITION_CAPACITY != 0 +#if EXI_appHandVALUE_MAX_LENGTH != 0 + /* increment global string count */ +#if EXI_appHandVALUE_PARTITION_CAPACITY < 0 + state->stringTable.numberOfGlobalStrings++; +#else /* EXI_appHandVALUE_PARTITION_CAPACITY < 0 */ + if (state->stringTable.numberOfGlobalStrings < EXI_appHandVALUE_PARTITION_CAPACITY) { + state->stringTable.numberOfGlobalStrings++; + } +#endif /* EXI_appHandVALUE_PARTITION_CAPACITY < 0 */ + /* increment local string count */ + if (qnameID < state->stringTable.sizeLocalStrings) { + state->stringTable.numberOfLocalStrings[qnameID]++; + /* printf("\tSV %d: lv=%d and gv=%d \n", qnameID, state->numberOfLocalStrings[qnameID], state->numberOfGlobalStrings);*/ + } else { + /* currently we do support a set of qnames only */ + errn = EXI_ERROR_OUT_OF_QNAMES; + } +#endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */ +#endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */ + + return errn; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'qnameID' */ +#endif /* __GNUC__ */ + + +int exi_appHand_PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID) { + /* eqname_t* eqn*/ + if ((state->stackIndex + 1) < EXI_ELEMENT_STACK_SIZE) { + state->grammarStack[++state->stackIndex] = newState; + /* qname */ + state->elementStack[state->stackIndex] = qnameID; + + /*if (eqn == NULL) { + // generic SE, UCD profile + } else { + // copy IDs + state->elementStack[state->stackIndex].localPart = eqn->localPart; + state->elementStack[state->stackIndex].namespaceURI = eqn->namespaceURI; + }*/ + return 0; + } else { + return EXI_ERROR_OUT_OF_GRAMMAR_STACK; + } +} + +int exi_appHand_PopStack(exi_state_t* state) { + if (state->stackIndex >= 1) { + state->stackIndex--; + return 0; + } else { + return EXI_ERROR_OUT_OF_BOUNDS; + } +} + +int exi_appHand_HandleXsiNilTrue(exi_state_t* state) { + switch (state->grammarStack[state->stackIndex]) { + + } + + return EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL; +} + +int exi_appHand_HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType) { + switch(xsiType->namespaceURI) { + case 0: + switch(xsiType->localPart) { + } + break; + case 1: + switch(xsiType->localPart) { + } + break; + case 2: + switch(xsiType->localPart) { + } + break; + case 3: + switch(xsiType->localPart) { + case 0: + /* {3}0,ENTITIES */ + state->grammarStack[state->stackIndex] = 144; + break; + case 1: + /* {3}1,ENTITY */ + state->grammarStack[state->stackIndex] = 10; + break; + case 2: + /* {3}2,ID */ + state->grammarStack[state->stackIndex] = 141; + break; + case 3: + /* {3}3,IDREF */ + state->grammarStack[state->stackIndex] = 79; + break; + case 4: + /* {3}4,IDREFS */ + state->grammarStack[state->stackIndex] = 29; + break; + case 5: + /* {3}5,NCName */ + state->grammarStack[state->stackIndex] = 98; + break; + case 6: + /* {3}6,NMTOKEN */ + state->grammarStack[state->stackIndex] = 36; + break; + case 7: + /* {3}7,NMTOKENS */ + state->grammarStack[state->stackIndex] = 25; + break; + case 8: + /* {3}8,NOTATION */ + state->grammarStack[state->stackIndex] = 78; + break; + case 9: + /* {3}9,Name */ + state->grammarStack[state->stackIndex] = 101; + break; + case 10: + /* {3}10,QName */ + state->grammarStack[state->stackIndex] = 106; + break; + case 11: + /* {3}11,anySimpleType */ + state->grammarStack[state->stackIndex] = 48; + break; + case 12: + /* {3}12,anyType */ + state->grammarStack[state->stackIndex] = 50; + break; + case 13: + /* {3}13,anyURI */ + state->grammarStack[state->stackIndex] = 142; + break; + case 14: + /* {3}14,base64Binary */ + state->grammarStack[state->stackIndex] = 111; + break; + case 15: + /* {3}15,boolean */ + state->grammarStack[state->stackIndex] = 80; + break; + case 16: + /* {3}16,byte */ + state->grammarStack[state->stackIndex] = 134; + break; + case 17: + /* {3}17,date */ + state->grammarStack[state->stackIndex] = 133; + break; + case 18: + /* {3}18,dateTime */ + state->grammarStack[state->stackIndex] = 104; + break; + case 19: + /* {3}19,decimal */ + state->grammarStack[state->stackIndex] = 53; + break; + case 20: + /* {3}20,double */ + state->grammarStack[state->stackIndex] = 11; + break; + case 21: + /* {3}21,duration */ + state->grammarStack[state->stackIndex] = 55; + break; + case 22: + /* {3}22,float */ + state->grammarStack[state->stackIndex] = 130; + break; + case 23: + /* {3}23,gDay */ + state->grammarStack[state->stackIndex] = 135; + break; + case 24: + /* {3}24,gMonth */ + state->grammarStack[state->stackIndex] = 64; + break; + case 25: + /* {3}25,gMonthDay */ + state->grammarStack[state->stackIndex] = 100; + break; + case 26: + /* {3}26,gYear */ + state->grammarStack[state->stackIndex] = 99; + break; + case 27: + /* {3}27,gYearMonth */ + state->grammarStack[state->stackIndex] = 74; + break; + case 28: + /* {3}28,hexBinary */ + state->grammarStack[state->stackIndex] = 132; + break; + case 29: + /* {3}29,int */ + state->grammarStack[state->stackIndex] = 76; + break; + case 30: + /* {3}30,integer */ + state->grammarStack[state->stackIndex] = 138; + break; + case 31: + /* {3}31,language */ + state->grammarStack[state->stackIndex] = 20; + break; + case 32: + /* {3}32,long */ + state->grammarStack[state->stackIndex] = 93; + break; + case 33: + /* {3}33,negativeInteger */ + state->grammarStack[state->stackIndex] = 89; + break; + case 34: + /* {3}34,nonNegativeInteger */ + state->grammarStack[state->stackIndex] = 57; + break; + case 35: + /* {3}35,nonPositiveInteger */ + state->grammarStack[state->stackIndex] = 69; + break; + case 36: + /* {3}36,normalizedString */ + state->grammarStack[state->stackIndex] = 86; + break; + case 37: + /* {3}37,positiveInteger */ + state->grammarStack[state->stackIndex] = 49; + break; + case 38: + /* {3}38,short */ + state->grammarStack[state->stackIndex] = 68; + break; + case 39: + /* {3}39,string */ + state->grammarStack[state->stackIndex] = 24; + break; + case 40: + /* {3}40,time */ + state->grammarStack[state->stackIndex] = 112; + break; + case 41: + /* {3}41,token */ + state->grammarStack[state->stackIndex] = 143; + break; + case 42: + /* {3}42,unsignedByte */ + state->grammarStack[state->stackIndex] = 122; + break; + case 43: + /* {3}43,unsignedInt */ + state->grammarStack[state->stackIndex] = 102; + break; + case 44: + /* {3}44,unsignedLong */ + state->grammarStack[state->stackIndex] = 21; + break; + case 45: + /* {3}45,unsignedShort */ + state->grammarStack[state->stackIndex] = 7; + break; + } + break; + case 4: + switch(xsiType->localPart) { + case 0: + /* {4}0,AppProtocolType */ + state->grammarStack[state->stackIndex] = 5; + break; + case 1: + /* {4}1,idType */ + state->grammarStack[state->stackIndex] = 45; + break; + case 2: + /* {4}2,priorityType */ + state->grammarStack[state->stackIndex] = 43; + break; + case 3: + /* {4}3,protocolNameType */ + state->grammarStack[state->stackIndex] = 58; + break; + case 4: + /* {4}4,protocolNamespaceType */ + state->grammarStack[state->stackIndex] = 18; + break; + case 5: + /* {4}5,responseCodeType */ + state->grammarStack[state->stackIndex] = 44; + break; + } + break; + } + + + return 0; +} + + +int exi_appHand_RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID) { + int errn = EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK; + int16_t i; + + /* schema-informed global element --> Stack ID */ + switch(qnameID) { + case 65: + return exi_appHand_PushStack(state, 15, 65); + case 66: + return exi_appHand_PushStack(state, 16, 66); + + } + + + /* retrieve existing grammar for qname if any available */ + for(i=0; iCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI_appHand_CODER_H +#define EXI_appHand_CODER_H + +#include "EXITypes.h" + +#define DOCUMENT 0 +#define DOC_CONTENT 13 +#define DOC_END 14 +#define UR_TYPE_GRAMMAR_0 22 +#define UR_TYPE_GRAMMAR_1 23 + + +/* increments global and local string count */ +int exi_appHand_IncrementStringValueCount(exi_state_t* state, uint16_t qnameID); + +int exi_appHand_PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID); + +int exi_appHand_PopStack(exi_state_t* state); + +int exi_appHand_HandleXsiNilTrue(exi_state_t* state); + +int exi_appHand_HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType); + +int exi_appHand_RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID); + +int exi_appHand_LearnAttribute(exi_state_t* state, uint16_t qnameID, uint16_t uriID, uint16_t localID); + +int exi_appHand_IsStartContent(int16_t ruleID); + +int exi_appHand_MoveToElementContentRule(exi_state_t* state); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/appHandCodec/appHandEXIDecoder.c b/src/codec/appHandCodec/appHandEXIDecoder.c new file mode 100644 index 0000000..020deca --- /dev/null +++ b/src/codec/appHandCodec/appHandEXIDecoder.c @@ -0,0 +1,2219 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI_appHand_DECODER_C +#define EXI_appHand_DECODER_C + + +#include "appHandEXIDecoder.h" + +#include "EXITypes.h" +#include "EXIOptions.h" +#include "BitInputStream.h" +#include "DecoderChannel.h" +#include "CoderChannel.h" + +#include "StringTable.h" +#include "appHandNameTableEntries.h" +#include "MethodsBag.h" + +#include "appHandEXICoder.h" +#include "EXIHeaderDecoder.h" +#include "ErrorCodes.h" + +#include "appHandQNames.h" +#include "appHandQNameDefines.h" + + + +/* local variables */ +static uint32_t xsi; +static uint32_t bits; +static int errn; +static exi_event_t currEvent; + +#define URI_CODEPOINTS_SIZE 35 +#define LOCALNAME_CODEPOINTS_SIZE 25 + +uint32_t codepointsUri[URI_CODEPOINTS_SIZE]; +uint32_t codepointsLocalName[LOCALNAME_CODEPOINTS_SIZE]; + +/*static exi_string_ucs_t stringUri = {URI_CODEPOINTS_SIZE, codepointsUri, 0};*/ +/*static exi_name_entry_t uri = {EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}};*/ +/*static exi_name_entry_t localName = {EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}};*/ +static exi_qname_t _qname = { + {EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}}, + {EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}} +}; + + +static int _decodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) { + int errn; + uint32_t val; + + errn = decodeNBitUnsignedInteger(stream, nbits, &val); + if(errn) { + return errn; + } + + /* TODO map integer value more fine-grained */ + iv->type = EXI_INTEGER_32; + iv->val.int32 = val + lowerBound; + + return errn; +} + + + +static int exiDecodeNext2Event(bitstream_t* stream, exi_state_t* state, + exi_event_t* nextEvent) { + uint32_t eventCode2 = 0; + int16_t ruleID = state->grammarStack[state->stackIndex]; + + switch (ruleID) { + case 7: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 11: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 10: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 18: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 20: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 21: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 25: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 24: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 29: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 36: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 48: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 49: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 53: + /* FirstStartTag[CHARACTERS[DECIMAL]] */ + case 55: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 57: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 58: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 45: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 64: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 16: + /* FirstStartTag[START_ELEMENT(ResponseCode)] */ + case 68: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 46: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 69: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 74: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 15: + /* FirstStartTag[START_ELEMENT(AppProtocol)] */ + case 76: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 78: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 79: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 80: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + case 35: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 44: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 86: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 89: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 93: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 98: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 99: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 101: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 100: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 102: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 104: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 106: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 111: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 43: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 112: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 122: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 130: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 132: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 133: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 134: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 135: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 5: + /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ + case 138: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 141: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 142: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 143: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 144: + /* FirstStartTag[CHARACTERS[LIST]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 4: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode); + state->eventCode -= 1; + return errn; + case 5: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 6: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 22: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 50: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; + return errn; + case 1: + *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; + return errn; + case 2: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + return errn; + case 3: + *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; + errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode); + state->eventCode -= 1; + return errn; + case 4: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 5: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 1: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 12: + /* Element[CHARACTERS[STRING]] */ + case 17: + /* Element[CHARACTERS[INTEGER]] */ + case 19: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 28: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 30: + /* Element[START_ELEMENT(ProtocolNamespace)] */ + case 32: + /* Element[CHARACTERS[STRING]] */ + case 33: + /* Element[START_ELEMENT(VersionNumberMinor)] */ + case 37: + /* Element[CHARACTERS[BOOLEAN]] */ + case 38: + /* Element[CHARACTERS[STRING]] */ + case 40: + /* Element[CHARACTERS[STRING]] */ + case 41: + /* Element[CHARACTERS[STRING]] */ + case 47: + /* Element[CHARACTERS[INTEGER]] */ + case 52: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 54: + /* Element[CHARACTERS[STRING]] */ + case 56: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 59: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 31: + /* Element[START_ELEMENT(VersionNumberMajor)] */ + case 62: + /* Element[CHARACTERS[FLOAT]] */ + case 63: + /* Element[CHARACTERS[DATETIME]] */ + case 65: + /* Element[CHARACTERS[LIST]] */ + case 67: + /* Element[CHARACTERS[STRING]] */ + case 70: + /* Element[CHARACTERS[STRING]] */ + case 71: + /* Element[CHARACTERS[ENUMERATION]] */ + case 75: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 77: + /* Element[CHARACTERS[STRING]] */ + case 81: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 82: + /* Element[CHARACTERS[DATETIME]] */ + case 83: + /* Element[CHARACTERS[INTEGER]] */ + case 84: + /* Element[CHARACTERS[DATETIME]] */ + case 85: + /* Element[CHARACTERS[STRING]] */ + case 87: + /* Element[CHARACTERS[STRING]] */ + case 88: + /* Element[CHARACTERS[DATETIME]] */ + case 34: + /* Element[START_ELEMENT(SchemaID)] */ + case 91: + /* Element[CHARACTERS[INTEGER]] */ + case 94: + /* Element[START_ELEMENT(AppProtocol)] */ + case 95: + /* Element[CHARACTERS[LIST]] */ + case 96: + /* Element[CHARACTERS[STRING]] */ + case 103: + /* Element[CHARACTERS[FLOAT]] */ + case 107: + /* Element[CHARACTERS[INTEGER]] */ + case 108: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 114: + /* Element[CHARACTERS[STRING]] */ + case 116: + /* Element[CHARACTERS[DECIMAL]] */ + case 117: + /* Element[START_ELEMENT(ResponseCode)] */ + case 118: + /* Element[CHARACTERS[STRING]] */ + case 119: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 120: + /* Element[CHARACTERS[STRING]] */ + case 121: + /* Element[CHARACTERS[DATETIME]] */ + case 123: + /* Element[CHARACTERS[DATETIME]] */ + case 126: + /* Element[CHARACTERS[DATETIME]] */ + case 90: + /* Element[START_ELEMENT(Priority)] */ + case 131: + /* Element[CHARACTERS[STRING]] */ + case 136: + /* Element[CHARACTERS[INTEGER]] */ + case 137: + /* Element[CHARACTERS[STRING]] */ + case 140: + /* Element[CHARACTERS[LIST]] */ + case 139: + /* Element[CHARACTERS[DATETIME]] */ + case 145: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 2: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + case 3: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 2: + /* Element[END_ELEMENT] */ + case 26: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 39: + /* Element[END_ELEMENT] */ + case 60: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 72: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 23: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 97: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 109: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 92: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 115: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 124: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 27: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 51: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 128: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 66: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + case 110: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 61: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 127: + /* Element[END_ELEMENT] */ + case 113: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 4: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 125: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 129: + /* Element[END_ELEMENT] */ + case 73: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2); + switch (eventCode2) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + return errn; + case 1: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + return errn; + } + break; + + default: + if (ruleID < 0) { + /* built-in element grammar */ + if ( exi_appHand_IsStartContent(ruleID) ) { + /* TODO generate 2nd level productions */ + + /* StartTagContent grammar */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); + if(errn) { + return errn; + } + switch(eventCode2) { + case 0: + /* 0: EE */ + *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; + break; + case 1: + /* 1: AT(*) */ + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; + break; + case 2: + /* 2: SE(*) */ + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + break; + case 3: + /* 3: CH */ + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + break; + default: + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; + break; + } + return errn; + } else { + /* TODO generate 2nd level productions */ + + /* ElementContent grammar */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2); + if(errn) { + return errn; + } + switch(eventCode2) { + case 0: + /* 0: SE(*) */ + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; + break; + case 1: + /* 1: CH */ + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; + break; + default: + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; + break; + } + + + + } + + } else { + *nextEvent = EXI_EVENT_ERROR; + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; + } + break; + } + + return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; +} + + + +static int _exiDecodeNamespaceUri(bitstream_t* stream, exi_state_t* state, + exi_name_entry_t* uri) { +/* exi_string_ascii_t* namespaceURI, uint32_t* uriID) {*/ + uint16_t uriSize, uriCodingLength; + uint32_t uriID; + int errn; + + errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize); + if (errn) { + return errn; + } + /* URI Entries + 1 */ + errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); + if (errn) { + return errn; + } + + errn = decodeNBitUnsignedInteger(stream, uriCodingLength, &uriID); + if (errn) { + return errn; + } + + if (uriID == 0) { + /* uri string value was not found */ + /* ==> zero (0) as an n-nit unsigned integer */ + /* followed by uri encoded as string */ + uri->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID; + errn = decodeString(stream, &uri->str); + if (errn) { + return errn; + } + /* after encoding string value is added to table */ + errn = exiAddUri(&state->nameTablePrepopulated, &state->nameTableRuntime); /*, namespaceURI->chars); */ + if (errn) { + return errn; + } + uri->id = uriSize; + /* uriID = uriSize; */ + } else { + /* uri string value found */ + /* ==> value(i+1) is encoded as n-bit unsigned integer */ + uri->type = EXI_NAME_ENTRY_TYPE_ID; + uri->id = (uint16_t)(uriID - 1); + /* *uriID = *uriID - 1; */ + } + + return 0; +} + +static int _exiDecodeLocalName(bitstream_t* stream, exi_state_t* state, + uint16_t uriID, exi_name_entry_t* localName) { +/* exi_string_ascii_t* localName, + uint32_t* localNameID, uint32_t uriID) { */ + uint32_t localNameID; + uint16_t slen; + uint16_t localNameSize; + uint16_t localNameCodingLength; + + + int errn = decodeUnsignedInteger16(stream, &slen); + if (errn) { + return errn; + } + + if (slen > 0) { + /* string value was not found in local partition */ + /* ==> string literal is encoded as a String */ + /* with the length of the string incremented by one */ + localName->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID; + if (slen-- >= (localName->str.size) ) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + localName->str.len = slen; + errn = decodeCharacters(stream, slen, localName->str.codepoints); + + /*if (slen-- >= localName->size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + errn = decodeCharactersASCII(stream, slen, localName->chars); */ + + if (errn) { + return errn; + } + /* After encoding the string value, it is added to the string table */ + /* partition and assigned the next available compact identifier */ + errn = exiAddLocalName(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localName->id); /* uriID); *//*, localName->chars); */ + + /*if (errn) { + return errn; + }*/ + /* TODO UCD Profile */ + /* qname = addLocalName(localName, uriID); */ + } else { + /* string value found in local partition */ + /* ==> string value is represented as zero (0) encoded as an */ + /* Unsigned Integer */ + /* followed by an the compact identifier of the string value as an */ + /* n-bit unsigned integer */ + /* n is log2 m and m is the number of entries in the string table */ + /* partition */ + localName->type = EXI_NAME_ENTRY_TYPE_ID; + errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize); /* uriID, &localNameSize); */ + if (errn) { + return errn; + } + errn = exiGetCodingLength(localNameSize, &localNameCodingLength); + if (errn) { + return errn; + } + errn = decodeNBitUnsignedInteger(stream, localNameCodingLength, &localNameID); /* localNameID);*/ + localName->id = (uint16_t)(localNameID); + /*if (errn) { + return errn; + }*/ + } + + return errn; +} + +static int _exiDecodeQName(bitstream_t* stream, exi_state_t* state, + uint16_t* qnameID, exi_qname_t* qname) { + + /*uint32_t uriID; + uint32_t localNameID;*/ + /* const char * clocalName; */ + + /* uri */ + int errn =_exiDecodeNamespaceUri(stream, state, &qname->uri); /* &qname->namespaceURI, &uriID); */ + if (errn) { + return errn; + } + /* localName */ + errn = _exiDecodeLocalName(stream, state, qname->uri.id, &qname->localName); /* &qname->localName, &localNameID, uriID); */ + if (errn) { + return errn; + } + + /* + errn = exiGetLocalName(nameTable, runtimeTable, uriID, localNameID, &clocalName); + if (errn) { + return errn; + } + strcpy ( qname->localName.chars, clocalName ); + */ + + if (_qname.localName.type == EXI_NAME_ENTRY_TYPE_STRING_AND_ID) { + errn = exiappHandAddEQName(state, qnameID, qname->uri.id, qname->localName.id); + } else { + /* IDs known --> retrieve qnameID */ + errn = exiappHandGetQNameID(state, qname->uri.id, qname->localName.id, qnameID); + } + + + return errn; +} + + +static int _exiDecodeStartElement(exi_state_t* state, uint16_t qnameID, + uint16_t stackId, uint16_t newState) { + /*uint16_t ns, uint16_t ln, uint16_t qn, */ + /*se->namespaceURI = ns; + se->localPart = ln; + se->qname = qn;*/ + /* move on */ + state->grammarStack[state->stackIndex] = stackId; + /* push element on stack */ + return exi_appHand_PushStack(state, newState, qnameID); /* se);*/ +} + + +int exiappHandGetLastQName(exi_qname_t** qname) { + *qname = &_qname; + return 0; +} + + +int exiappHandDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) { + uint32_t uint32; + + val->type = lt.type; + + switch(lt.type) { + case EXI_DATATYPE_BINARY_BASE64: + case EXI_DATATYPE_BINARY_HEX: + errn = decodeBinary(stream, &val->binary); + break; + case EXI_DATATYPE_BOOLEAN: + errn = decodeBoolean(stream, &val->boolean); + break; + case EXI_DATATYPE_BOOLEAN_FACET: + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + val->boolean = uint32 > 1; + break; + case EXI_DATATYPE_DECIMAL: + errn = decodeDecimal(stream, &val->decimal); + break; + case EXI_DATATYPE_FLOAT: + errn = decodeFloat(stream, &val->float_me); + break; + case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER: + errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE; + break; + case EXI_DATATYPE_UNSIGNED_INTEGER: + errn = decodeUnsignedInteger(stream, &val->integer); + break; + case EXI_DATATYPE_INTEGER: + errn = decodeInteger(stream, &val->integer); + break; + case EXI_DATATYPE_DATETIME: + errn = decodeDateTime(stream,lt.datetimeType, &val->datetime); + break; + case EXI_DATATYPE_STRING: + errn = decodeStringValue(stream, state, qnameID, &val->str); + break; + default: + return EXI_UNSUPPORTED_LIST_VALUE_TYPE; + } + + return errn; +} + + + + +int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable) { +#if EXI_appHandVALUE_PARTITION_CAPACITY != 0 +#if EXI_appHandVALUE_MAX_LENGTH != 0 + int i; +#endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */ +#endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */ + /* init grammar state */ + state->stackIndex = 0; + state->grammarStack[0] = DOCUMENT; + /* name table */ + state->nameTablePrepopulated = exiappHandNameTablePrepopulated; + state->nameTableRuntime = runtimeTable; + /* next qname ID */ + state->nextQNameID = EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES; + /* string table */ + state->stringTable = stringTable; + state->stringTable.numberOfGlobalStrings = 0; +#if EXI_appHandVALUE_PARTITION_CAPACITY != 0 +#if EXI_appHandVALUE_MAX_LENGTH != 0 + for(i=0; i<(state->stringTable.sizeLocalStrings); i++) { + state->stringTable.numberOfLocalStrings[i] = 0; + } +#endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */ +#endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */ + + /* runtime grammars */ + state->numberOfRuntimeGrammars = 0; + + /* Avoid warning: Unused declaration of variable 'name' */ + xsi = 0; + bits = 0; + + /* decode header */ + return readEXIHeader(stream); +} + +int exiappHandDecodeNextEvent(bitstream_t* stream, exi_state_t* state, + exi_event_t* nextEvent) { + uint16_t codingLength; + uint16_t numberOfProductions; + uint32_t eventCode1; + int16_t ruleID = state->grammarStack[state->stackIndex]; + state->eventCode = 0; + errn = 0; + + switch (ruleID) { + case 3: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 26: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 60: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 72: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 97: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 109: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 92: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 115: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 124: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 27: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 128: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 66: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + case 110: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 61: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 113: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 4: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 125: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 73: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 1: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 2: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 30: + /* Element[START_ELEMENT(ProtocolNamespace)] */ + case 33: + /* Element[START_ELEMENT(VersionNumberMinor)] */ + case 31: + /* Element[START_ELEMENT(VersionNumberMajor)] */ + case 16: + /* FirstStartTag[START_ELEMENT(ResponseCode)] */ + case 15: + /* FirstStartTag[START_ELEMENT(AppProtocol)] */ + case 34: + /* Element[START_ELEMENT(SchemaID)] */ + case 94: + /* Element[START_ELEMENT(AppProtocol)] */ + case 117: + /* Element[START_ELEMENT(ResponseCode)] */ + case 90: + /* Element[START_ELEMENT(Priority)] */ + case 5: + /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 0: + /* Document[START_DOCUMENT] */ + case 105: + /* Fragment[START_DOCUMENT] */ + *nextEvent = EXI_EVENT_START_DOCUMENT; + break; + case 14: + /* DocEnd[END_DOCUMENT] */ + *nextEvent = EXI_EVENT_END_DOCUMENT; + break; + case 42: + /* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */ + errn = decodeNBitUnsignedInteger(stream, 4, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 9: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 10: + *nextEvent = EXI_EVENT_END_DOCUMENT; + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 22: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 50: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC; + break; + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 2: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 3: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 4: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 1: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 7: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 11: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 10: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 12: + /* Element[CHARACTERS[STRING]] */ + case 17: + /* Element[CHARACTERS[INTEGER]] */ + case 18: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 19: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 20: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 21: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 25: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 24: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 29: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 28: + /* Element[CHARACTERS[BINARY_HEX]] */ + case 32: + /* Element[CHARACTERS[STRING]] */ + case 37: + /* Element[CHARACTERS[BOOLEAN]] */ + case 36: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 38: + /* Element[CHARACTERS[STRING]] */ + case 40: + /* Element[CHARACTERS[STRING]] */ + case 41: + /* Element[CHARACTERS[STRING]] */ + case 48: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 47: + /* Element[CHARACTERS[INTEGER]] */ + case 49: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 52: + /* Element[CHARACTERS[BINARY_BASE64]] */ + case 53: + /* FirstStartTag[CHARACTERS[DECIMAL]] */ + case 54: + /* Element[CHARACTERS[STRING]] */ + case 55: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 56: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 57: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 58: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 59: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 45: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 62: + /* Element[CHARACTERS[FLOAT]] */ + case 63: + /* Element[CHARACTERS[DATETIME]] */ + case 64: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 65: + /* Element[CHARACTERS[LIST]] */ + case 67: + /* Element[CHARACTERS[STRING]] */ + case 68: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 46: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 69: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 70: + /* Element[CHARACTERS[STRING]] */ + case 71: + /* Element[CHARACTERS[ENUMERATION]] */ + case 74: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 75: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 76: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 77: + /* Element[CHARACTERS[STRING]] */ + case 78: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 79: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 80: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + case 81: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 35: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 82: + /* Element[CHARACTERS[DATETIME]] */ + case 44: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + case 83: + /* Element[CHARACTERS[INTEGER]] */ + case 84: + /* Element[CHARACTERS[DATETIME]] */ + case 85: + /* Element[CHARACTERS[STRING]] */ + case 86: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 87: + /* Element[CHARACTERS[STRING]] */ + case 88: + /* Element[CHARACTERS[DATETIME]] */ + case 89: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 91: + /* Element[CHARACTERS[INTEGER]] */ + case 93: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 95: + /* Element[CHARACTERS[LIST]] */ + case 96: + /* Element[CHARACTERS[STRING]] */ + case 98: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 99: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 101: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 100: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 102: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + case 103: + /* Element[CHARACTERS[FLOAT]] */ + case 104: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 106: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 107: + /* Element[CHARACTERS[INTEGER]] */ + case 111: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + case 108: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 43: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 112: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 114: + /* Element[CHARACTERS[STRING]] */ + case 116: + /* Element[CHARACTERS[DECIMAL]] */ + case 118: + /* Element[CHARACTERS[STRING]] */ + case 119: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + case 120: + /* Element[CHARACTERS[STRING]] */ + case 121: + /* Element[CHARACTERS[DATETIME]] */ + case 123: + /* Element[CHARACTERS[DATETIME]] */ + case 122: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 126: + /* Element[CHARACTERS[DATETIME]] */ + case 130: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + case 131: + /* Element[CHARACTERS[STRING]] */ + case 132: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + case 133: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 134: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + case 135: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + case 136: + /* Element[CHARACTERS[INTEGER]] */ + case 137: + /* Element[CHARACTERS[STRING]] */ + case 140: + /* Element[CHARACTERS[LIST]] */ + case 139: + /* Element[CHARACTERS[DATETIME]] */ + case 138: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + case 141: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 142: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 143: + /* FirstStartTag[CHARACTERS[STRING]] */ + case 144: + /* FirstStartTag[CHARACTERS[LIST]] */ + case 145: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_CHARACTERS; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 2: + /* Element[END_ELEMENT] */ + case 39: + /* Element[END_ELEMENT] */ + case 127: + /* Element[END_ELEMENT] */ + case 129: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 1: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 13: + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + case 1: + *nextEvent = EXI_EVENT_START_ELEMENT; + break; + case 2: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + case 23: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 51: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); + switch (state->eventCode) { + case 0: + *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; + break; + case 1: + *nextEvent = EXI_EVENT_END_ELEMENT; + break; + case 2: + *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; + break; + case 3: + /* 2nd level events */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + break; + + default: + if(ruleID < 0) { + /* built-in element grammar */ + numberOfProductions = state->runtimeGrammars[(ruleID + 1)*(-1)].numberOfProductions; + if(numberOfProductions > 0) { + /* decode 1st level event code */ + errn = exiGetCodingLength(numberOfProductions + 1, &codingLength); + if(errn) { + return errn; + } + errn = decodeNBitUnsignedInteger(stream, codingLength, &eventCode1); + if(errn) { + return errn; + } + + if(eventCode1 == numberOfProductions) { + /* 2nd level */ + errn = exiDecodeNext2Event(stream, state, nextEvent); + } else { + /* 1st level event not supported in profile */ + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + } + } else { + errn = exiDecodeNext2Event(stream, state, nextEvent); + } + } else { + *nextEvent = EXI_EVENT_ERROR; + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + } + break; + } + + currEvent = *nextEvent; + return errn; +} + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiappHandDecodeStartDocument(bitstream_t* stream, exi_state_t* state) { + if ( state->grammarStack[state->stackIndex] == 0 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 13; + return 0; + } + if ( state->grammarStack[state->stackIndex] == 105 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 42; + return 0; + } + + return EXI_ERROR_UNEXPECTED_START_DOCUMENT; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiappHandDecodeEndDocument(bitstream_t* stream, exi_state_t* state) { + if ( state->grammarStack[state->stackIndex] == 42) { + return 0; + } + if ( state->grammarStack[state->stackIndex] == 14) { + return 0; + } + + return EXI_ERROR_UNEXPECTED_END_DOCUMENT; +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + + +int exiappHandDecodeStartElement(bitstream_t* stream, exi_state_t* state, + uint16_t* qnameID) { + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + + switch(currEvent) { + case EXI_EVENT_START_ELEMENT: + switch (state->grammarStack[state->stackIndex]) { + case 3: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 4, 5); + break; + } + break; + case 4: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 124, 5); + break; + } + break; + case 5: + /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 2, 31, 18); + break; + } + break; + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 9, 5); + break; + } + break; + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 92, 5); + break; + } + break; + case 13: + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 65, 14, 15); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 66, 14, 16); + break; + } + break; + case 15: + /* FirstStartTag[START_ELEMENT(AppProtocol)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 3, 5); + break; + } + break; + case 16: + /* FirstStartTag[START_ELEMENT(ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 3, 66, 44); + break; + } + break; + case 26: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 27, 5); + break; + } + break; + case 27: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 97, 5); + break; + } + break; + case 30: + /* Element[START_ELEMENT(ProtocolNamespace)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 2, 31, 18); + break; + } + break; + case 31: + /* Element[START_ELEMENT(VersionNumberMajor)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 5, 33, 46); + break; + } + break; + case 33: + /* Element[START_ELEMENT(VersionNumberMinor)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 6, 34, 35); + break; + } + break; + case 34: + /* Element[START_ELEMENT(SchemaID)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 4, 90, 45); + break; + } + break; + case 42: + /* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 42, 5); + break; + case 1: + errn = _exiDecodeStartElement(state, *qnameID = 1, 42, 43); + break; + case 2: + errn = _exiDecodeStartElement(state, *qnameID = 2, 42, 18); + break; + case 3: + errn = _exiDecodeStartElement(state, *qnameID = 3, 42, 44); + break; + case 4: + errn = _exiDecodeStartElement(state, *qnameID = 4, 42, 45); + break; + case 5: + errn = _exiDecodeStartElement(state, *qnameID = 5, 42, 46); + break; + case 6: + errn = _exiDecodeStartElement(state, *qnameID = 6, 42, 35); + break; + case 7: + errn = _exiDecodeStartElement(state, *qnameID = 65, 42, 15); + break; + case 8: + errn = _exiDecodeStartElement(state, *qnameID = 66, 42, 16); + break; + } + break; + case 60: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 61, 5); + break; + } + break; + case 61: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 26, 5); + break; + } + break; + case 66: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 4, 129, 45); + break; + } + break; + case 72: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 73, 5); + break; + } + break; + case 73: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 109, 5); + break; + } + break; + case 90: + /* Element[START_ELEMENT(Priority)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 1, 127, 43); + break; + } + break; + case 92: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 113, 5); + break; + } + break; + case 94: + /* Element[START_ELEMENT(AppProtocol)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 3, 5); + break; + } + break; + case 97: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 39, 5); + break; + } + break; + case 109: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 110, 5); + break; + } + break; + case 110: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 60, 5); + break; + } + break; + case 113: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 115, 5); + break; + } + break; + case 115: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 72, 5); + break; + } + break; + case 117: + /* Element[START_ELEMENT(ResponseCode)] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 3, 66, 44); + break; + } + break; + case 124: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 125, 5); + break; + } + break; + case 125: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 128, 5); + break; + } + break; + case 128: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(state->eventCode) { + case 0: + errn = _exiDecodeStartElement(state, *qnameID = 0, 8, 5); + break; + } + break; + + } + break; + case EXI_EVENT_START_ELEMENT_NS: + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + break; + case EXI_EVENT_START_ELEMENT_GENERIC: + case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED: + errn = _exiDecodeQName(stream, state, qnameID, + &_qname); + if (errn) { + return errn; + } + + /* update current rule --> element content rule (if not already) */ + errn = exi_appHand_MoveToElementContentRule(state); + if (errn) { + return errn; + } + + /* retrieve global grammar(existing OR runtime) and push it stack */ + errn = exi_appHand_RetrieveAndPushGlobalGrammar(state, *qnameID); + break; + default: + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; + break; + } + + return errn; +} + + + +/*int exiappHandDecodeStartElementGeneric(bitstream_t* stream, exi_state_t* state, + qname_t* qname) { + // decode qname + int errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), qname); + if (errn) { + return errn; + } + + switch (state->grammarStack[state->stackIndex]) { + // $EXI_DECODE_START_ELEMENT_GENERIC$ + case DOC_CONTENT: + // move on to DocEnd + state->grammarStack[state->stackIndex] = DOC_END; + // push new ur-type grammar on stack + return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); + break; + case UR_TYPE_GRAMMAR_0: + // move on to UR_TYPE_GRAMMAR_1 + state->grammarStack[state->stackIndex] = UR_TYPE_GRAMMAR_1; + // push new ur-type grammar on stack + return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); + break; + case UR_TYPE_GRAMMAR_1: + // remain in UR_TYPE_GRAMMAR_1 + // push new ur-type grammar on stack + return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); + break; + default: + return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; + } + + return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; +}*/ + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ +int exiappHandDecodeEndElement(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID) { + int16_t currentID; + switch(currEvent) { + case EXI_EVENT_END_ELEMENT_UNDECLARED: + currentID = state->grammarStack[state->stackIndex]; + if (currentID < 0) { + /* runtime grammars do have IDs smaller than 0 */ + /* TODO learn EE event */ + return -1; + } + /* Note: no break statement */ + default: + /* copy IDs */ + *qnameID = state->elementStack[state->stackIndex]; + /*ee->localPart = state->elementStack[state->stackIndex].localPart; + ee->namespaceURI = state->elementStack[state->stackIndex].namespaceURI;*/ + + return exi_appHand_PopStack(state); + } +} +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + +/*int exiappHandDecodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state, eqname_t* ee) { + int16_t currentID = state->grammarStack[state->stackIndex]; + if (currentID < 0) { + // runtime grammars do have IDs smaller than 0 + // TODO learn EE event + return -1; + } + + return exiappHandDecodeEndElement(stream, state, ee); +}*/ + +int exiappHandDecodeCharacters(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + int16_t moveOnID = 0; + errn = EXI_ERROR_UNEXPECTED_CHARACTERS; + + switch(currEvent) { + case EXI_EVENT_CHARACTERS: + case EXI_EVENT_CHARACTERS_GENERIC: + switch (state->grammarStack[state->stackIndex]) { + case 53: + /* DECIMAL */ + case 116: + /* DECIMAL */ + val->type = EXI_DATATYPE_DECIMAL; + errn = decodeDecimal(stream, &val->decimal); + moveOnID = 2; /* move on ID */ + break; + case 10: + /* STRING */ + case 12: + /* STRING */ + case 18: + /* STRING */ + case 20: + /* STRING */ + case 24: + /* STRING */ + case 32: + /* STRING */ + case 36: + /* STRING */ + case 38: + /* STRING */ + case 40: + /* STRING */ + case 41: + /* STRING */ + case 48: + /* STRING */ + case 54: + /* STRING */ + case 55: + /* STRING */ + case 58: + /* STRING */ + case 67: + /* STRING */ + case 70: + /* STRING */ + case 77: + /* STRING */ + case 78: + /* STRING */ + case 79: + /* STRING */ + case 85: + /* STRING */ + case 86: + /* STRING */ + case 87: + /* STRING */ + case 96: + /* STRING */ + case 98: + /* STRING */ + case 101: + /* STRING */ + case 106: + /* STRING */ + case 114: + /* STRING */ + case 118: + /* STRING */ + case 120: + /* STRING */ + case 131: + /* STRING */ + case 137: + /* STRING */ + case 141: + /* STRING */ + case 142: + /* STRING */ + case 143: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 2; /* move on ID */ + break; + case 25: + /* LIST */ + case 29: + /* LIST */ + case 65: + /* LIST */ + case 95: + /* LIST */ + case 140: + /* LIST */ + case 144: + /* LIST */ + val->type = EXI_DATATYPE_LIST; + val->list.type = EXI_DATATYPE_STRING; + errn = decodeUnsignedInteger16(stream, &val->list.len); + moveOnID = 2; /* move on ID */ + break; + case 112: + /* DATETIME */ + case 126: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_TIME, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 28: + /* BINARY_HEX */ + case 132: + /* BINARY_HEX */ + val->type = EXI_DATATYPE_BINARY_HEX; + errn = decodeBinary(stream, &val->binary); + moveOnID = 2; /* move on ID */ + break; + case 74: + /* DATETIME */ + case 123: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GYEARMONTH, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 1: + /* NBIT_UNSIGNED_INTEGER */ + case 45: + /* NBIT_UNSIGNED_INTEGER */ + case 75: + /* NBIT_UNSIGNED_INTEGER */ + case 122: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 8, 0); + moveOnID = 2; /* move on ID */ + break; + case 88: + /* DATETIME */ + case 104: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_DATETIME, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 56: + /* NBIT_UNSIGNED_INTEGER */ + case 134: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 8, -128); + moveOnID = 2; /* move on ID */ + break; + case 100: + /* DATETIME */ + case 139: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GMONTHDAY, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 17: + /* INTEGER */ + case 47: + /* INTEGER */ + case 68: + /* INTEGER */ + case 69: + /* INTEGER */ + case 76: + /* INTEGER */ + case 83: + /* INTEGER */ + case 89: + /* INTEGER */ + case 91: + /* INTEGER */ + case 93: + /* INTEGER */ + case 107: + /* INTEGER */ + case 136: + /* INTEGER */ + case 138: + /* INTEGER */ + val->type = EXI_DATATYPE_INTEGER; + errn = decodeInteger(stream, &val->integer); + moveOnID = 2; /* move on ID */ + break; + case 71: + /* ENUMERATION */ + case 44: + /* ENUMERATION */ + val->type = EXI_DATATYPE_ENUMERATION; + errn = decodeNBitUnsignedInteger(stream, 2, &val->enumeration); + moveOnID = 2; /* move on ID */ + break; + case 64: + /* DATETIME */ + case 82: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GMONTH, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 84: + /* DATETIME */ + case 99: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GYEAR, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 121: + /* DATETIME */ + case 133: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_DATE, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 63: + /* DATETIME */ + case 135: + /* DATETIME */ + val->type = EXI_DATATYPE_DATETIME; + errn = decodeDateTime(stream, EXI_DATETIME_GDAY, &val->datetime); + moveOnID = 2; /* move on ID */ + break; + case 22: + /* STRING */ + case 23: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 23; /* move on ID */ + break; + case 11: + /* FLOAT */ + case 62: + /* FLOAT */ + case 103: + /* FLOAT */ + case 130: + /* FLOAT */ + val->type = EXI_DATATYPE_FLOAT; + errn = decodeFloat(stream, &val->float_me); + moveOnID = 2; /* move on ID */ + break; + case 19: + /* NBIT_UNSIGNED_INTEGER */ + case 43: + /* NBIT_UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; + errn = _decodeNBitIntegerValue(stream, &val->integer, 5, 1); + moveOnID = 2; /* move on ID */ + break; + case 37: + /* BOOLEAN */ + case 80: + /* BOOLEAN */ + val->type = EXI_DATATYPE_BOOLEAN; + errn = decodeBoolean(stream, &val->boolean); + moveOnID = 2; /* move on ID */ + break; + case 7: + /* UNSIGNED_INTEGER */ + case 21: + /* UNSIGNED_INTEGER */ + case 49: + /* UNSIGNED_INTEGER */ + case 57: + /* UNSIGNED_INTEGER */ + case 59: + /* UNSIGNED_INTEGER */ + case 46: + /* UNSIGNED_INTEGER */ + case 81: + /* UNSIGNED_INTEGER */ + case 35: + /* UNSIGNED_INTEGER */ + case 102: + /* UNSIGNED_INTEGER */ + case 108: + /* UNSIGNED_INTEGER */ + case 119: + /* UNSIGNED_INTEGER */ + case 145: + /* UNSIGNED_INTEGER */ + val->type = EXI_DATATYPE_UNSIGNED_INTEGER; + errn = decodeUnsignedInteger(stream, &val->integer); + moveOnID = 2; /* move on ID */ + break; + case 50: + /* STRING */ + case 51: + /* STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 51; /* move on ID */ + break; + case 52: + /* BINARY_BASE64 */ + case 111: + /* BINARY_BASE64 */ + val->type = EXI_DATATYPE_BINARY_BASE64; + errn = decodeBinary(stream, &val->binary); + moveOnID = 2; /* move on ID */ + break; + + } + if (errn) { + /* error */ + } else { + /* move on */ + state->grammarStack[state->stackIndex] = moveOnID; + } + break; + case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED: + if (state->grammarStack[state->stackIndex] < 0) { + /* runtime grammars do have IDs smaller than 0 */ + return EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH; + } + + /* update current rule --> element content rule (if not already) */ + errn = exi_appHand_MoveToElementContentRule(state); + if (errn) { + return errn; + } + + /* read content value as STRING */ + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + break; + default: + errn = EXI_ERROR_UNEXPECTED_CHARACTERS; + break; + } + + return errn; +} + +/*int exiappHandDecodeCharactersGeneric(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + return exiappHandDecodeCharacters(stream, state, val); +}*/ + +/*int exiappHandDecodeCharactersGenericUndeclared(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + int errn = 0; + if (state->grammarStack[state->stackIndex] < 0) { + // runtime grammars do have IDs smaller than 0 + // TODO learn CH event + return -1; + } + + // update current rule --> element content rule (if not already) + errn = exiMoveToElementContentRule(state); + if (errn) { + return errn; + } + + // read content value + // STRING + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, &val->string); + return errn; +}*/ + +int exiappHandDecodeAttributeGenericValue(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID, exi_value_t* val) { + int16_t currentID; + + if (_qname.uri.id == 2 && _qname.localName.id == 1 ) { + /* xsi:type --> QName type */ + errn = exiappHandDecodeAttributeXsiType(stream, state, val); + } else { + currentID = state->grammarStack[state->stackIndex]; + if (currentID >= 0) { + /* if schema-informed value type according global attribute */ + switch(*qnameID) { + + default: + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + break; + } + + } else { + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, state, *qnameID, &val->str); + } + } + + return errn; +} + +int exiappHandDecodeAttribute(bitstream_t* stream, exi_state_t* state, + uint16_t* qnameID, exi_value_t* val) { + int16_t moveOnID = 0; + int16_t currentID = state->grammarStack[state->stackIndex]; + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; + + switch(currEvent) { + case EXI_EVENT_ATTRIBUTE: + case EXI_EVENT_ATTRIBUTE_INVALID_VALUE: + switch (currentID) { + + } + + if (errn) { + /* error */ + } else { + /* move on */ + state->grammarStack[state->stackIndex] = moveOnID; + } + break; + case EXI_EVENT_ATTRIBUTE_GENERIC: + case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED: + errn = _exiDecodeQName(stream, state, qnameID, &_qname); + if (errn) { + return errn; + } + /* learn attribute ? */ + errn = exi_appHand_LearnAttribute(state, *qnameID, _qname.uri.id, _qname.localName.id); + if (errn) { + return errn; + } + /* decode attribute value */ + errn = exiappHandDecodeAttributeGenericValue(stream, state, qnameID, val); + break; + default: + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; + break; + } + + return errn; +} + + + +/*int exiappHandDecodeAttributeGenericUndeclared(bitstream_t* stream, exi_state_t* state, + qname_t* at, exi_value_t* val) { + int errn; + int16_t currentID = state->grammarStack[state->stackIndex]; + + if (currentID < 0) { + // TODO runtime elements + return -1; + } else { + // decode qname + errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), at); + if (errn) { + return errn; + } + } + + + if (currentID < 0) { + // TODO learn AT event + return -1; + } + + decode attribute value + val->type = EXI_DATATYPE_STRING; + errn = decodeStringValue(stream, &val->string); + + // we do not move forward in grammars + + return errn; +}*/ + + + +int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + errn = decodeBoolean(stream, &val->boolean); + if (errn >= 0 && val->boolean) { + /* handle xsi:nil == true */ + errn = exi_appHand_HandleXsiNilTrue(state); + } + return errn; +} + + +int exiappHandDecodeAttributeXsiType(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + /*uint32_t uriID; + uint32_t localNameID; */ + /* uri */ + errn =_exiDecodeNamespaceUri(stream, state, &_qname.uri); /* NULL, &uriID); */ + if (errn) { + return errn; + } + /* localName */ + errn = _exiDecodeLocalName(stream, state, _qname.uri.id, &_qname.localName); /* NULL, &localNameID, uriID);*/ + if (errn) { + return errn; + } + + val->type = EXI_DATATYPE_QNAME; + val->eqname.namespaceURI = _qname.uri.id; /* uriID; */ + val->eqname.localPart = _qname.localName.id; /* localNameID; */ + + /* handle xsi type cast */ + errn = exi_appHand_HandleXsiType(state, &val->eqname); + + return errn; +} + + + +#endif + diff --git a/src/codec/appHandCodec/appHandEXIDecoder.h b/src/codec/appHandCodec/appHandEXIDecoder.h new file mode 100644 index 0000000..ecb3f52 --- /dev/null +++ b/src/codec/appHandCodec/appHandEXIDecoder.h @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI_appHand_DECODER_H +#define EXI_appHand_DECODER_H + +/** +* \file EXIDecoder.h +* \brief EXI Decoder +* +*/ + +#include "EXITypes.h" + +/** + * \brief Initialize EXI decoder + * + * Resets & initializes the EXI decoder. + * + * \param stream Input Stream + * \param state Codec state + * \param runtimeTable Runtime name-tables + * \param stringTable String table + * \return Error-Code <> 0 + * + */ +int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable); + + +/** + * \brief Reports last decoded qualified name + * + * Note: Qualified name only available for previously unknown qname. Otherwise make use of name table entries. + * + * \param qname Qualified name + * \return Error-Code <> 0 + * + */ +int exiappHandGetLastQName(exi_qname_t** qname); + + +/** + * \brief Decodes next event + * + * Inspects EXI stream and decodes next EXI event. + * + * \param stream Input Stream + * \param state Codec state + * \param nextEvent Next event + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeNextEvent(bitstream_t* stream, + exi_state_t* state, exi_event_t* nextEvent); + + +/** + * \brief Decodes StartDocument (SD) event + * + * \param stream Input Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeStartDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Decodes EndDocument (ED) event + * + * \param stream Input Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeEndDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Decodes StartElemnt (SE) event + * + * Note: The first time a qnameID is larger than schema-informed NUMBER_OF_QNAMES it is possible to retrieve the qname by calling GetLastQName(...). + * It is up to the caller to track qnames. + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \return Error-Code <> 0 + * + */ +int +exiappHandDecodeStartElement(bitstream_t* stream, + exi_state_t* state, uint16_t* qnameID); + + +/** + * \brief Decodes EndElement (EE) event + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeEndElement(bitstream_t* stream, + exi_state_t* state, uint16_t* qnameID); + + +/** + * \brief Decodes Characters (CH) event. + * + * Reports characters value. + * + * \param stream Input Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeCharacters(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + + +/** + * \brief Decodes Attribute (AT) event. + * + * Reports attribute qname and value. + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeAttribute(bitstream_t* stream, + exi_state_t* state, uint16_t* qnameID, exi_value_t* val); + + +/** + * \brief Decodes attribute xsi:nil + * + * Reports value. + * + * \param stream Input Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + + +/** + * \brief Decodes attribute xsi:type + * + * Reports value. + * + * \param stream Input Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeAttributeXsiType(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + + +/** + * \brief Decodes attribute/characters list value + * + * List values are special and are processed one by one. + * + * \param stream Input Stream + * \param state Codec state + * \param qnameID Qualified Name ID + * \param val List value + * \param lt List type + * \return Error-Code <> 0 + * + */ +int exiappHandDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_value_t* val, exi_list_t lt); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/appHandCodec/appHand_EXIEncoder.c b/src/codec/appHandCodec/appHandEXIEncoder.c similarity index 56% rename from src/codec/appHandCodec/appHand_EXIEncoder.c rename to src/codec/appHandCodec/appHandEXIEncoder.c index bff5ce6..e79d7ea 100644 --- a/src/codec/appHandCodec/appHand_EXIEncoder.c +++ b/src/codec/appHandCodec/appHandEXIEncoder.c @@ -19,10 +19,10 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.6 + * @version 0.7 * @contact Joerg.Heuer@siemens.com * - *Code generated by EXIdizer
+ *Code generated by EXIdizer.com
********************************************************************/ @@ -31,26 +31,199 @@ #define EXI_appHand_ENCODER_C #include "EXITypes.h" +#include "EXIOptions.h" #include "BitOutputStream.h" #include "EncoderChannel.h" #include "StringTable.h" -#include "appHand_NameTableEntries.h" +#include "appHandNameTableEntries.h" #include "MethodsBag.h" -#include "EXICoder.h" +#include "EXIOptions.h" + +#include "appHandEXICoder.h" #include "EXIHeaderEncoder.h" +#include "ErrorCodes.h" +#include "appHandQNames.h" +#include "appHandQNameDefines.h" /* local variables */ +static uint32_t bits; static int errn; /* ==================================== */ +static int _encodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) { + int errn; + uint32_t val; + switch(iv->type) { + /* Unsigned Integer */ + case EXI_UNSIGNED_INTEGER_8: + val = iv->val.int8 - lowerBound; + break; + case EXI_UNSIGNED_INTEGER_16: + val = iv->val.int16 - lowerBound; + break; + case EXI_UNSIGNED_INTEGER_32: + val = (uint32_t)(iv->val.int32 - lowerBound); + break; + case EXI_UNSIGNED_INTEGER_64: + val = (uint32_t)(iv->val.int64 - lowerBound); + break; + /* (Signed) Integer */ + case EXI_INTEGER_8: + val = iv->val.uint8 - lowerBound; + break; + case EXI_INTEGER_16: + val = iv->val.uint16 - lowerBound; + break; + case EXI_INTEGER_32: + val = iv->val.uint32 - lowerBound; + break; + case EXI_INTEGER_64: + val = (uint32_t)(iv->val.uint64 - lowerBound); + break; + default: + return EXI_UNSUPPORTED_INTEGER_VALUE_TYPE; + break; + } -int exiappHandEncodeListValue(bitstream_t* stream, exi_value_t* val, list_t lt) { + errn = encodeNBitUnsignedInteger(stream, nbits, val); + return errn; +} + + + +static int _exiValueToString(exi_value_t* val) { + if (val->type == EXI_DATATYPE_STRING) { + return 0; + } else { + /* TODO convert typed value to string */ + return EXI_ERROR_CONVERSION_TYPE_TO_STRING; + } +} + + + +static int _exiEncodeEventCode2(bitstream_t* stream, exi_state_t* state, exi_event_t event2) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +static int _exiEncodeNamespaceUriHit(bitstream_t* stream, exi_state_t* state, uint16_t uriID) { + int errn; + uint16_t uriCodingLength; + uint16_t uriSize; + + errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize); + if (errn) { + return errn; + } + /* URI Entries + 1 */ + errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); + if (errn) { + return errn; + } + + /* uri string value found */ + /* ==> value(i+1) is encoded as n-bit unsigned integer */ + errn = encodeNBitUnsignedInteger(stream, uriCodingLength, uriID+1); + + return errn; +} + + +static int _exiEncodeNamespaceMiss(bitstream_t* stream, exi_state_t* state, + exi_string_ucs_t* uri, uint16_t* uriID) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + + +static int _exiEncodeLocalNameHit(bitstream_t* stream, exi_state_t* state, + uint16_t uriID, uint16_t localNameID) { + int errn; + uint16_t localNameSize; + uint16_t localNameCodingLength; + + /* string value found in local partition */ + /* ==> string value is represented as zero (0) encoded as an */ + errn = encodeUnsignedInteger32(stream, 0 ); + if (errn < 0) { + return errn; + } + /* Unsigned Integer followed by an the compact identifier of the */ + /* string value as an n-bit unsigned integer n is log2 m and m is */ + /* the number of entries in the string table partition */ + errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize); + if (errn < 0) { + return errn; + } + errn = exiGetCodingLength(localNameSize, &localNameCodingLength); + if (errn) { + return errn; + } + errn = encodeNBitUnsignedInteger(stream, localNameCodingLength, localNameID); + return errn; + +} + + +static int _exiEncodeLocalNameMiss(bitstream_t* stream, exi_state_t* state, + exi_string_ucs_t* localName, uint16_t uriID, uint16_t* localNameID) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +static int _encodeAttributeXsiTypeContent(bitstream_t* stream, exi_state_t* state, + exi_value_t* val) { + + /* encode qname */ + errn = _exiEncodeNamespaceUriHit(stream, state, val->eqname.namespaceURI); + if (errn < 0) { + return errn; + } + errn = _exiEncodeLocalNameHit(stream, state, val->eqname.namespaceURI, val->eqname.localPart); + if (errn < 0) { + return errn; + } + + /* handle xsi type cast */ + errn = exi_appHand_HandleXsiType(state, &val->eqname); + + return errn; +} + + +static int _exiEncodeStartElement(bitstream_t* stream, uint16_t nbits, + uint32_t val, exi_state_t* state, uint16_t qnameID, uint16_t stackId, + uint16_t newState) { + /* event-code */ + int errn = encodeNBitUnsignedInteger(stream, nbits, val); + if (errn) { + return errn; + } + /* move on */ + state->grammarStack[state->stackIndex] = stackId; + /* push element on stack */ + return exi_appHand_PushStack(state, newState, qnameID); +} + + +static int _exiEncodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + +static int _encode2ndLevelAttribute(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, + exi_value_t* val) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + +int exiappHandEncodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) { switch(lt.type) { case EXI_DATATYPE_BINARY_BASE64: @@ -70,30 +243,19 @@ int exiappHandEncodeListValue(bitstream_t* stream, exi_value_t* val, list_t lt) errn = encodeFloat(stream, &val->float_me); break; case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER: + errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE; + break; case EXI_DATATYPE_UNSIGNED_INTEGER: + errn = encodeUnsignedInteger(stream, &val->integer); + break; case EXI_DATATYPE_INTEGER: - switch(lt.intType) { - /* (Signed) Integer */ - case EXI_UNSIGNED_INTEGER_8: - case EXI_UNSIGNED_INTEGER_16: - case EXI_UNSIGNED_INTEGER_32: - case EXI_UNSIGNED_INTEGER_64: - errn = encodeUnsignedInteger(stream, &val->integer); - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - case EXI_INTEGER_16: - case EXI_INTEGER_32: - case EXI_INTEGER_64: - errn = encodeInteger(stream, &val->integer); - break; - } + errn = encodeInteger(stream, &val->integer); break; case EXI_DATATYPE_DATETIME: errn = encodeDateTime(stream, &val->datetime); break; case EXI_DATATYPE_STRING: - errn = encodeStringValue(stream, &val->string); + errn = encodeStringValue(stream, state, qnameID, &val->str); break; default: return EXI_UNSUPPORTED_LIST_VALUE_TYPE; @@ -103,747 +265,515 @@ int exiappHandEncodeListValue(bitstream_t* stream, exi_value_t* val, list_t lt) } - -static int _encodeNBitIntegerValue(bitstream_t* stream, integer_t* iv, uint16_t nbits, int32_t lowerBound) { - int errn; - uint32_t val; - switch(iv->type) { - /* Unsigned Integer */ - case EXI_UNSIGNED_INTEGER_8: - val = iv->val.int8 - lowerBound; - break; - case EXI_UNSIGNED_INTEGER_16: - val = iv->val.int16 - lowerBound; - break; - case EXI_UNSIGNED_INTEGER_32: - val = iv->val.int32 - lowerBound; - break; - case EXI_UNSIGNED_INTEGER_64: - val = iv->val.int64 - lowerBound; - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - val = iv->val.uint8 - lowerBound; - break; - case EXI_INTEGER_16: - val = iv->val.uint16 - lowerBound; - break; - case EXI_INTEGER_32: - val = iv->val.uint32 - lowerBound; - break; - case EXI_INTEGER_64: - val = iv->val.uint64 - lowerBound; - break; - default: - return -1; - } - - errn = encodeNBitUnsignedInteger(stream, nbits, val); - return errn; -} - -#define MAX_NUMBER_CHARACTERS 50 -char nameCharacters [MAX_NUMBER_CHARACTERS]; - -/* -#define MAX_NUMBER_URI 1 -#define MAX_NUMBER_LOCALNAMES 0 -char * uris [MAX_NUMBER_URI]; -exi_name_table_runtime_t nameTableRuntime = {MAX_NUMBER_URI, uris, 0}; -*/ - -int exiappHandInitEncoder(bitstream_t* stream, exi_state_t* state, exi_name_table_runtime_t runtimeTable) { - /* init grammar state */ - state->stackIndex = 0; - state->grammarStack[0] = DOCUMENT; - /* string tables */ - state->nameTablePrepopulated = exiappHandNameTablePrepopulated; - state->nameTableRuntime = runtimeTable; - /* encode header */ - return writeEXIHeader(stream); -} - +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ int exiappHandEncodeStartDocument(bitstream_t* stream, exi_state_t* state) { if ( state->grammarStack[state->stackIndex] == 0 ) { /* move on */ - state->grammarStack[state->stackIndex] = 1; + state->grammarStack[state->stackIndex] = 13; + return 0; + } + if ( state->grammarStack[state->stackIndex] == 0 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 13; + return 0; + } + if ( state->grammarStack[state->stackIndex] == 105 ) { + /* move on */ + state->grammarStack[state->stackIndex] = 42; return 0; } return EXI_ERROR_UNEXPECTED_START_DOCUMENT; } +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ + +#ifndef __GNUC__ +#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ int exiappHandEncodeEndDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 2) { + if ( state->grammarStack[state->stackIndex] == 42) { + encodeFinish(stream); + return 0; + } + if ( state->grammarStack[state->stackIndex] == 14) { encodeFinish(stream); return 0; } return EXI_ERROR_UNEXPECTED_END_DOCUMENT; } +#ifndef __GNUC__ +#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */ +#endif /* __GNUC__ */ -static int _exiEncodeNamespaceUriID(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, uint16_t uriID) { - int errn; - uint16_t uriCodingLength; - uint16_t uriSize; - errn = exiGetUriSize(nameTable, runtimeTable, &uriSize); - if (errn) { - return errn; - } - /* URI Entries + 1 */ - errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); - if (errn) { - return errn; +int exiappHandInitEncoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable) { +#if EXI_appHandVALUE_PARTITION_CAPACITY != 0 +#if EXI_appHandVALUE_MAX_LENGTH != 0 + int i; +#endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */ +#endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */ + /* init grammar state */ + state->stackIndex = 0; + state->grammarStack[0] = DOCUMENT; + /* name tables */ + state->nameTablePrepopulated = exiappHandNameTablePrepopulated; + state->nameTableRuntime = runtimeTable; + /* next qname ID */ + state->nextQNameID = EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES; + /* string tables */ + state->stringTable = stringTable; + state->stringTable.numberOfGlobalStrings = 0; +#if EXI_appHandVALUE_PARTITION_CAPACITY != 0 +#if EXI_appHandVALUE_MAX_LENGTH != 0 + for(i=0; i<(state->stringTable.sizeLocalStrings); i++) { + state->stringTable.numberOfLocalStrings[i] = 0; } +#endif /* EXI_appHandVALUE_MAX_LENGTH != 0 */ +#endif /* EXI_appHandVALUE_PARTITION_CAPACITY != 0 */ - /* uri string value found */ - /* ==> value(i+1) is encoded as n-bit unsigned integer */ - errn = encodeNBitUnsignedInteger(stream, uriCodingLength, uriID+1); + /* runtime grammars */ + state->numberOfRuntimeGrammars = 0; - return errn; + /* Avoid warning: Unused declaration of variable 'name' */ + bits = 0; + + /* encode header */ + return writeEXIHeader(stream); } -static int _exiEncodeLocalNameID(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, - uint16_t uriID, uint16_t localNameID) { - int errn; - uint16_t localNameSize; - uint16_t localNameCodingLength; +int exiappHandEncodeStartElement(bitstream_t* stream, exi_state_t* state, uint16_t qnameID) { + uint16_t namespaceUriID, localNameID; + int16_t currentID = state->grammarStack[state->stackIndex]; + errn = EXI_ERROR_UNEXPECTED_START_ELEMENT; - /* string value found in local partition */ - /* ==> string value is represented as zero (0) encoded as an */ - errn = encodeUnsignedInteger32(stream, 0 ); - if (errn < 0) { - return errn; - } - /* Unsigned Integer followed by an the compact identifier of the */ - /* string value as an n-bit unsigned integer n is log2 m and m is */ - /* the number of entries in the string table partition */ - errn = exiGetLocalNameSize(nameTable, runtimeTable, uriID, &localNameSize); - if (errn < 0) { - return errn; - } - errn = exiGetCodingLength(localNameSize, &localNameCodingLength); - if (errn) { - return errn; - } - errn = encodeNBitUnsignedInteger(stream, localNameCodingLength, localNameID); - return errn; - -} - - -static int _exiEncodeStartElement(bitstream_t* stream, uint16_t nbits, - uint32_t val, exi_state_t* state, eqname_t* se, uint16_t stackId, - uint16_t newState) { - /* event-code */ - int errn = encodeNBitUnsignedInteger(stream, nbits, val); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = stackId; - /* push element on stack */ - return exiPushStack(state, newState, se); -} - -int exiappHandEncodeStartElement(bitstream_t* stream, exi_state_t* state, eqname_t* se) { - switch (state->grammarStack[state->stackIndex]) { - case 1: - /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ - if ( se->localPart == 6 && se->namespaceURI == 4 ) { - /* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 2, 3); - } - else if ( se->localPart == 7 && se->namespaceURI == 4 ) { - /* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes ) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 2, 43); - } - else { - /* SE( null ) */ - return _exiEncodeStartElement(stream, 2, 2, state, se, 2, 49); - } - break; + switch (currentID) { case 3: - /* FirstStartTag[START_ELEMENT(AppProtocol)] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 4, 5); + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 4, 5); + break; } break; case 4: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { + switch(qnameID) { + case 0: /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 23, 5); + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 124, 5); + break; } break; case 5: /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ - if ( se->localPart == 2 && se->namespaceURI == 0 ) { + switch(qnameID) { + case 2: /* SE( ProtocolNamespace ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 6, 7); + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 31, 18); + break; } break; - case 6: - /* Element[START_ELEMENT(VersionNumberMajor)] */ - if ( se->localPart == 5 && se->namespaceURI == 0 ) { - /* SE( VersionNumberMajor ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 11, 12); + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 9, 5); + break; } break; - case 11: - /* Element[START_ELEMENT(VersionNumberMinor)] */ - if ( se->localPart == 6 && se->namespaceURI == 0 ) { - /* SE( VersionNumberMinor ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 14, 15); + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 92, 5); + break; } break; - case 14: - /* Element[START_ELEMENT(SchemaID)] */ - if ( se->localPart == 4 && se->namespaceURI == 0 ) { - /* SE( SchemaID ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 16, 17); + case 13: + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ + switch(qnameID) { + case 65: + /* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 14, 15); + break; + case 66: + /* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes ) */ + errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 14, 16); + break; + } + break; + case 15: + /* FirstStartTag[START_ELEMENT(AppProtocol)] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 3, 5); + break; } break; case 16: - /* Element[START_ELEMENT(Priority)] */ - if ( se->localPart == 1 && se->namespaceURI == 0 ) { - /* SE( Priority ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 19, 20); - } - break; - case 22: - /* Element[START_ELEMENT(ProtocolNamespace)] */ - if ( se->localPart == 2 && se->namespaceURI == 0 ) { - /* SE( ProtocolNamespace ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 6, 7); - } - break; - case 23: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 24, 5); - } - break; - case 24: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 25, 5); - } - break; - case 25: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 26, 5); + /* FirstStartTag[START_ELEMENT(ResponseCode)] */ + switch(qnameID) { + case 3: + /* SE( ResponseCode ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 66, 44); + break; } break; case 26: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { + switch(qnameID) { + case 0: /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 27, 5); + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 27, 5); + break; } break; case 27: /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { + switch(qnameID) { + case 0: /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 28, 5); - } - break; - case 28: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 29, 5); - } - break; - case 29: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 30, 5); + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 97, 5); + break; } break; case 30: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 31, 5); + /* Element[START_ELEMENT(ProtocolNamespace)] */ + switch(qnameID) { + case 2: + /* SE( ProtocolNamespace ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 31, 18); + break; } break; case 31: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 32, 5); - } - break; - case 32: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 33, 5); + /* Element[START_ELEMENT(VersionNumberMajor)] */ + switch(qnameID) { + case 5: + /* SE( VersionNumberMajor ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 33, 46); + break; } break; case 33: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 34, 5); + /* Element[START_ELEMENT(VersionNumberMinor)] */ + switch(qnameID) { + case 6: + /* SE( VersionNumberMinor ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 34, 35); + break; } break; case 34: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 35, 5); - } - break; - case 35: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 36, 5); - } - break; - case 36: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 37, 5); - } - break; - case 37: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 38, 5); - } - break; - case 38: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 39, 5); - } - break; - case 39: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 40, 5); - } - break; - case 40: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { - /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 41, 5); + /* Element[START_ELEMENT(SchemaID)] */ + switch(qnameID) { + case 4: + /* SE( SchemaID ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 90, 45); + break; } break; case 42: - /* Element[START_ELEMENT(AppProtocol)] */ - if ( se->localPart == 0 && se->namespaceURI == 0 ) { + /* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */ + switch(qnameID) { + case 0: /* SE( AppProtocol ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 4, 5); - } - break; - case 43: - /* FirstStartTag[START_ELEMENT(ResponseCode)] */ - if ( se->localPart == 3 && se->namespaceURI == 0 ) { + errn = _exiEncodeStartElement(stream, 4, 0, state, qnameID, 42, 5); + break; + case 1: + /* SE( Priority ) */ + errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 42, 43); + break; + case 2: + /* SE( ProtocolNamespace ) */ + errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 42, 18); + break; + case 3: /* SE( ResponseCode ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 44, 45); - } - break; - case 44: - /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ - if ( se->localPart == 4 && se->namespaceURI == 0 ) { + errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 42, 44); + break; + case 4: /* SE( SchemaID ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 47, 17); + errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 42, 45); + break; + case 5: + /* SE( VersionNumberMajor ) */ + errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 42, 46); + break; + case 6: + /* SE( VersionNumberMinor ) */ + errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 42, 35); + break; + case 65: + /* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq ) */ + errn = _exiEncodeStartElement(stream, 4, 7, state, qnameID, 42, 15); + break; + case 66: + /* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes ) */ + errn = _exiEncodeStartElement(stream, 4, 8, state, qnameID, 42, 16); + break; } break; - case 48: + case 60: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 61, 5); + break; + } + break; + case 61: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 26, 5); + break; + } + break; + case 66: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + switch(qnameID) { + case 4: + /* SE( SchemaID ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 129, 45); + break; + } + break; + case 72: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 73, 5); + break; + } + break; + case 73: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 109, 5); + break; + } + break; + case 90: + /* Element[START_ELEMENT(Priority)] */ + switch(qnameID) { + case 1: + /* SE( Priority ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 127, 43); + break; + } + break; + case 92: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 113, 5); + break; + } + break; + case 94: + /* Element[START_ELEMENT(AppProtocol)] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 3, 5); + break; + } + break; + case 97: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 39, 5); + break; + } + break; + case 109: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 110, 5); + break; + } + break; + case 110: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 60, 5); + break; + } + break; + case 113: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 115, 5); + break; + } + break; + case 115: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 72, 5); + break; + } + break; + case 117: /* Element[START_ELEMENT(ResponseCode)] */ - if ( se->localPart == 3 && se->namespaceURI == 0 ) { + switch(qnameID) { + case 3: /* SE( ResponseCode ) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 44, 45); + errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 66, 44); + break; } break; - case 49: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - { - /* SE( null ) */ - return _exiEncodeStartElement(stream, 3, 1, state, se, 50, 49); + case 124: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 125, 5); + break; } break; - case 50: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - { - /* SE( null ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 50, 49); + case 125: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 128, 5); + break; } break; - case 75: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - { - /* SE( null ) */ - return _exiEncodeStartElement(stream, 3, 1, state, se, 76, 49); - } - break; - case 76: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - { - /* SE( null ) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 76, 49); + case 128: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + switch(qnameID) { + case 0: + /* SE( AppProtocol ) */ + errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 8, 5); + break; } break; default: - return EXI_ERROR_UNEXPECTED_START_ELEMENT; + /* element qname not expected */ + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; } - return EXI_ERROR_UNEXPECTED_START_ELEMENT; -} - - -/* Look first for qualified name */ -int exiappHandEncodeStartElementGeneric(bitstream_t* stream, exi_state_t* state, - string_ascii_t* namespaceURI , string_ascii_t* localName) { - int errn = -1; - return errn; } -static int _exiEncodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state) { - int16_t currentID = state->grammarStack[state->stackIndex]; - switch (currentID) { - case 9: - /* Element[] */ - /* 1st level and 2nd level event code */ - encodeNBitUnsignedInteger(stream, 0, 0); - encodeNBitUnsignedInteger(stream, 2, 0); - return 0; - case 70: - /* Element[CHARACTERS[STRING]] */ - case 124: - /* Element[CHARACTERS[STRING]] */ - case 139: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 46: - /* Element[CHARACTERS[ENUMERATION]] */ - case 22: - /* Element[START_ELEMENT(ProtocolNamespace)] */ - case 86: - /* Element[CHARACTERS[DATETIME]] */ - case 120: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 100: - /* Element[CHARACTERS[DATETIME]] */ - case 54: - /* Element[CHARACTERS[STRING]] */ - case 68: - /* Element[CHARACTERS[STRING]] */ - case 72: - /* Element[CHARACTERS[STRING]] */ - case 94: - /* Element[CHARACTERS[STRING]] */ - case 21: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 78: - /* Element[CHARACTERS[STRING]] */ - case 134: - /* Element[CHARACTERS[STRING]] */ - case 141: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 52: - /* Element[CHARACTERS[LIST]] */ - case 102: - /* Element[CHARACTERS[DATETIME]] */ - case 96: - /* Element[CHARACTERS[FLOAT]] */ - case 60: - /* Element[CHARACTERS[LIST]] */ - case 82: - /* Element[CHARACTERS[BOOLEAN]] */ - case 88: - /* Element[CHARACTERS[DATETIME]] */ - case 116: - /* Element[CHARACTERS[INTEGER]] */ - case 98: - /* Element[CHARACTERS[DATETIME]] */ - case 128: - /* Element[CHARACTERS[INTEGER]] */ - case 13: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 90: - /* Element[CHARACTERS[DECIMAL]] */ - case 92: - /* Element[CHARACTERS[FLOAT]] */ - case 42: - /* Element[START_ELEMENT(AppProtocol)] */ - case 143: - /* Element[CHARACTERS[STRING]] */ - case 110: - /* Element[CHARACTERS[INTEGER]] */ - case 66: - /* Element[CHARACTERS[LIST]] */ - case 112: - /* Element[CHARACTERS[INTEGER]] */ - case 58: - /* Element[CHARACTERS[STRING]] */ - case 14: - /* Element[START_ELEMENT(SchemaID)] */ - case 122: - /* Element[CHARACTERS[INTEGER]] */ - case 16: - /* Element[START_ELEMENT(Priority)] */ - case 104: - /* Element[CHARACTERS[DATETIME]] */ - case 132: - /* Element[CHARACTERS[DATETIME]] */ - case 114: - /* Element[CHARACTERS[STRING]] */ - case 108: - /* Element[CHARACTERS[BINARY_HEX]] */ - case 84: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 106: - /* Element[CHARACTERS[DATETIME]] */ - case 11: - /* Element[START_ELEMENT(VersionNumberMinor)] */ - case 74: - /* Element[CHARACTERS[STRING]] */ - case 6: - /* Element[START_ELEMENT(VersionNumberMajor)] */ - case 64: - /* Element[CHARACTERS[STRING]] */ - case 62: - /* Element[CHARACTERS[STRING]] */ - case 136: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 130: - /* Element[CHARACTERS[STRING]] */ - case 126: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 118: - /* Element[CHARACTERS[INTEGER]] */ - case 48: - /* Element[START_ELEMENT(ResponseCode)] */ - case 10: - /* Element[CHARACTERS[STRING]] */ - case 80: - /* Element[CHARACTERS[BINARY_BASE64]] */ - case 56: - /* Element[CHARACTERS[STRING]] */ - case 18: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - /* 1st level and 2nd level event code */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 0); - return 0; - case 109: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 113: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 12: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 140: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 57: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 97: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 135: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 5: - /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ - case 91: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - case 111: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 103: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 7: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 133: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 123: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 61: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 99: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 107: - /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ - case 73: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 59: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 63: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 115: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 101: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 71: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 77: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 142: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 121: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 17: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 83: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 117: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 3: - /* FirstStartTag[START_ELEMENT(AppProtocol)] */ - case 87: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 67: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 93: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 53: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 137: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 81: - /* FirstStartTag[CHARACTERS[BOOLEAN]] */ - case 79: - /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ - case 119: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 51: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 105: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 69: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 45: - /* FirstStartTag[CHARACTERS[ENUMERATION]] */ - case 65: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 129: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 55: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 43: - /* FirstStartTag[START_ELEMENT(ResponseCode)] */ - case 20: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 85: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 125: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 138: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 15: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 131: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 89: - /* FirstStartTag[CHARACTERS[DECIMAL]] */ - case 127: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 95: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - /* 1st level and 2nd level event code */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 0); - return 0; - } - return EXI_ERROR_UNEXPECTED_END_ELEMENT; + +int exiappHandEncodeStartElementNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; } + +int exiappHandEncodeStartElementGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + + int exiappHandEncodeEndElement(bitstream_t* stream, exi_state_t* state) { int errn = 0; int16_t currentID = state->grammarStack[state->stackIndex]; switch (currentID) { - case 49: + case 22: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 75: + case 50: /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ errn = encodeNBitUnsignedInteger(stream, 3, 2); break; - case 40: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 2: + /* Element[END_ELEMENT] */ case 39: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 38: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 37: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 36: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 35: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 34: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 33: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 32: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 31: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 30: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 29: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 28: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 27: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 26: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 25: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 24: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 23: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 4: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 44: - /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ - case 50: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 76: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - errn = encodeNBitUnsignedInteger(stream, 2, 1); - break; - case 8: /* Element[END_ELEMENT] */ - case 19: + case 127: /* Element[END_ELEMENT] */ - case 41: - /* Element[END_ELEMENT] */ - case 47: + case 129: /* Element[END_ELEMENT] */ errn = encodeNBitUnsignedInteger(stream, 1, 0); break; + case 3: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 26: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 60: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 72: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 23: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 97: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 109: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 92: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 115: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 124: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 27: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 51: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + case 128: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 66: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + case 110: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 61: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 113: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 4: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 125: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + case 73: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = encodeNBitUnsignedInteger(stream, 2, 1); + break; default: - if (currentID < 0) { - /* runtime grammars */ - return -1; - } else { - errn = _exiEncodeEndElementUndeclared(stream, state); - if (errn < 0) { - return errn; - } - } - /* return EXI_ERROR_UNEXPECTED_END_ELEMENT; */ + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; } if (errn < 0) { @@ -851,655 +781,518 @@ int exiappHandEncodeEndElement(bitstream_t* stream, exi_state_t* state) { } /* pop item */ - return exiPopStack(state); + return exi_appHand_PopStack(state); } -static int _exiValueToString(exi_value_t* val) { - if (val->type == EXI_DATATYPE_STRING) { - return 0; - } else { - /* TODO convert typed value to string */ - return EXI_ERROR_CONVERSION_TYPE_TO_STRING; - } -} + int exiappHandEncodeCharacters(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { - int errn; + int16_t moveOnID = 0; + int deviantChars = 0; + int16_t currentID = state->grammarStack[state->stackIndex]; switch (currentID) { - case 91: + case 43: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 5, 1); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 65: case 95: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - if (val->type == EXI_DATATYPE_FLOAT) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeFloat(stream, &val->float_me); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 49: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - if (val->type == EXI_DATATYPE_STRING) { - encodeNBitUnsignedInteger(stream, 3, 3); - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 50; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 3, 4); - encodeNBitUnsignedInteger(stream, 3, 5); - } - break; - case 109: - case 111: - case 115: - case 117: - case 121: - case 127: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - if (val->type == EXI_DATATYPE_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 89: - /* FirstStartTag[CHARACTERS[DECIMAL]] */ - if (val->type == EXI_DATATYPE_DECIMAL) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeDecimal(stream, &val->decimal); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 107: - /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ - if (val->type == EXI_DATATYPE_BINARY_HEX) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeBinary(stream, &val->binary); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 82: - /* Element[CHARACTERS[BOOLEAN]] */ - if (val->type == EXI_DATATYPE_BOOLEAN) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeBoolean(stream, val->boolean); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 13: - case 120: - case 126: - case 139: - case 141: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeUnsignedInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 12: - case 15: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeUnsignedInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 10: - case 54: - case 56: - case 58: - case 62: - case 64: - case 68: - case 70: - case 72: - case 74: - case 78: - case 94: - case 114: - case 124: - case 130: - case 134: - case 143: - /* Element[CHARACTERS[STRING]] */ - if (val->type == EXI_DATATYPE_STRING) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 110: - case 112: - case 116: - case 118: - case 122: - case 128: - /* Element[CHARACTERS[INTEGER]] */ - if (val->type == EXI_DATATYPE_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 45: - /* FirstStartTag[CHARACTERS[ENUMERATION]] */ - if (val->type == EXI_DATATYPE_ENUMERATION) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 108: - /* Element[CHARACTERS[BINARY_HEX]] */ - if (val->type == EXI_DATATYPE_BINARY_HEX) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeBinary(stream, &val->binary); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 86: - case 88: - case 98: - case 100: - case 102: - case 104: - case 106: - case 132: - /* Element[CHARACTERS[DATETIME]] */ - if (val->type == EXI_DATATYPE_DATETIME) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeDateTime(stream, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 92: - case 96: - /* Element[CHARACTERS[FLOAT]] */ - if (val->type == EXI_DATATYPE_FLOAT) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeFloat(stream, &val->float_me); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 90: - /* Element[CHARACTERS[DECIMAL]] */ - if (val->type == EXI_DATATYPE_DECIMAL) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeDecimal(stream, &val->decimal); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 20: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = _encodeNBitIntegerValue(stream, &val->integer, 5, 1); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 85: - case 87: - case 97: - case 99: - case 101: - case 103: - case 105: - case 131: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - if (val->type == EXI_DATATYPE_DATETIME) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeDateTime(stream, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 75: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - if (val->type == EXI_DATATYPE_STRING) { - encodeNBitUnsignedInteger(stream, 3, 3); - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 76; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 3, 4); - encodeNBitUnsignedInteger(stream, 3, 5); - } - break; - case 21: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = _encodeNBitIntegerValue(stream, &val->integer, 5, 1); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 76: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - if (val->type == EXI_DATATYPE_STRING) { - encodeNBitUnsignedInteger(stream, 2, 2); - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 76; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 2, 3); - encodeNBitUnsignedInteger(stream, 1, 1); - } - break; - case 46: - /* Element[CHARACTERS[ENUMERATION]] */ - if (val->type == EXI_DATATYPE_ENUMERATION) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 81: - /* FirstStartTag[CHARACTERS[BOOLEAN]] */ - if (val->type == EXI_DATATYPE_BOOLEAN) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeBoolean(stream, val->boolean); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 79: - /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ - if (val->type == EXI_DATATYPE_BINARY_BASE64) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeBinary(stream, &val->binary); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 18: - case 136: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 7: - case 53: - case 55: - case 57: - case 61: - case 63: - case 67: - case 69: - case 71: - case 73: - case 77: - case 93: - case 113: - case 123: - case 129: - case 133: - case 142: - /* FirstStartTag[CHARACTERS[STRING]] */ - if (val->type == EXI_DATATYPE_STRING) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 80: - /* Element[CHARACTERS[BINARY_BASE64]] */ - if (val->type == EXI_DATATYPE_BINARY_BASE64) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeBinary(stream, &val->binary); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 84: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 2, 2); - } - break; - case 50: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - if (val->type == EXI_DATATYPE_STRING) { - encodeNBitUnsignedInteger(stream, 2, 2); - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 50; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 2, 3); - encodeNBitUnsignedInteger(stream, 1, 1); - } - break; - case 17: - case 135: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 119: - case 125: - case 137: - case 138: case 140: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { - encodeNBitUnsignedInteger(stream, 1, 0); - errn = encodeUnsignedInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - } else { - /* deviant characters */ - encodeNBitUnsignedInteger(stream, 1, 1); - encodeNBitUnsignedInteger(stream, 3, 6); - } - break; - case 52: - case 60: - case 66: /* Element[CHARACTERS[LIST]] */ if (val->type == EXI_DATATYPE_LIST) { encodeNBitUnsignedInteger(stream, 1, 0); errn = encodeUnsignedInteger32(stream, val->list.len); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; + moveOnID = 2; } else { /* deviant characters */ encodeNBitUnsignedInteger(stream, 1, 1); encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; } break; case 51: - case 59: - case 65: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 51; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 37: + /* Element[CHARACTERS[BOOLEAN]] */ + if (val->type == EXI_DATATYPE_BOOLEAN) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBoolean(stream, val->boolean); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 56: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 19: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 5, 1); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 44: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 53: + /* FirstStartTag[CHARACTERS[DECIMAL]] */ + if (val->type == EXI_DATATYPE_DECIMAL) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDecimal(stream, &val->decimal); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 11: + case 130: + /* FirstStartTag[CHARACTERS[FLOAT]] */ + if (val->type == EXI_DATATYPE_FLOAT) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeFloat(stream, &val->float_me); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 116: + /* Element[CHARACTERS[DECIMAL]] */ + if (val->type == EXI_DATATYPE_DECIMAL) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDecimal(stream, &val->decimal); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 25: + case 29: + case 144: /* FirstStartTag[CHARACTERS[LIST]] */ if (val->type == EXI_DATATYPE_LIST) { encodeNBitUnsignedInteger(stream, 1, 0); errn = encodeUnsignedInteger32(stream, val->list.len); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; + moveOnID = 2; } else { /* deviant characters */ encodeNBitUnsignedInteger(stream, 1, 1); encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; } break; + case 50: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 51; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 3, 5); + deviantChars = 1; + } + break; + case 46: + case 35: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger(stream, &val->integer); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 12: + case 32: + case 38: + case 40: + case 41: + case 54: + case 67: + case 70: + case 77: + case 85: + case 87: + case 96: + case 114: + case 118: + case 120: + case 131: + case 137: + /* Element[CHARACTERS[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 23: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 2, 2); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 23; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 2, 3); + encodeNBitUnsignedInteger(stream, 1, 1); + deviantChars = 1; + } + break; + case 111: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 28: + /* Element[CHARACTERS[BINARY_HEX]] */ + if (val->type == EXI_DATATYPE_BINARY_HEX) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 17: + case 47: case 83: + case 91: + case 107: + case 136: + /* Element[CHARACTERS[INTEGER]] */ + if (val->type == EXI_DATATYPE_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeInteger(stream, &val->integer); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 62: + case 103: + /* Element[CHARACTERS[FLOAT]] */ + if (val->type == EXI_DATATYPE_FLOAT) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeFloat(stream, &val->float_me); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 52: + /* Element[CHARACTERS[BINARY_BASE64]] */ + if (val->type == EXI_DATATYPE_BINARY_BASE64) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 132: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + if (val->type == EXI_DATATYPE_BINARY_HEX) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBinary(stream, &val->binary); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 7: + case 21: + case 49: + case 57: + case 102: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger(stream, &val->integer); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 45: + case 122: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 64: + case 74: + case 99: + case 100: + case 104: + case 112: + case 133: + case 135: + /* FirstStartTag[CHARACTERS[DATETIME]] */ + if (val->type == EXI_DATATYPE_DATETIME) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDateTime(stream, &val->datetime); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 1: + case 75: + /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 68: + case 69: + case 76: + case 89: + case 93: + case 138: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + if (val->type == EXI_DATATYPE_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeInteger(stream, &val->integer); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 134: /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) { encodeNBitUnsignedInteger(stream, 1, 0); errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; + moveOnID = 2; } else { /* deviant characters */ encodeNBitUnsignedInteger(stream, 1, 1); encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 71: + /* Element[CHARACTERS[ENUMERATION]] */ + if (val->type == EXI_DATATYPE_ENUMERATION) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 59: + case 81: + case 108: + case 119: + case 145: + /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ + if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeUnsignedInteger(stream, &val->integer); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 80: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + if (val->type == EXI_DATATYPE_BOOLEAN) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeBoolean(stream, val->boolean); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 63: + case 82: + case 84: + case 88: + case 121: + case 123: + case 126: + case 139: + /* Element[CHARACTERS[DATETIME]] */ + if (val->type == EXI_DATATYPE_DATETIME) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeDateTime(stream, &val->datetime); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 2, 2); + deviantChars = 1; + } + break; + case 10: + case 18: + case 20: + case 24: + case 36: + case 48: + case 55: + case 58: + case 78: + case 79: + case 86: + case 98: + case 101: + case 106: + case 141: + case 142: + case 143: + /* FirstStartTag[CHARACTERS[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 1, 0); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 2; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 1, 1); + encodeNBitUnsignedInteger(stream, 3, 6); + deviantChars = 1; + } + break; + case 22: + /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (val->type == EXI_DATATYPE_STRING) { + encodeNBitUnsignedInteger(stream, 3, 3); + errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str); + moveOnID = 23; + } else { + /* deviant characters */ + encodeNBitUnsignedInteger(stream, 3, 4); + encodeNBitUnsignedInteger(stream, 3, 5); + deviantChars = 1; } break; @@ -1508,47 +1301,64 @@ int exiappHandEncodeCharacters(bitstream_t* stream, exi_state_t* state, } if (currentID < 0) { - /* runtime rules */ - return -1; + /* TODO runtime rules */ + errn = EXI_ERROR_UNEXPECTED_CHARACTERS; + } else if (deviantChars) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; } else { - /* convert typed value to string for EXI encoding */ - errn = _exiValueToString(val); - if (errn) { - return errn; - } - /* undeclared CH event code already written */ - /* encode deviant value */ - errn = encodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - - /* move to element content rule if not already */ - errn = exiMoveToElementContentRule( state); + /* move on */ + state->grammarStack[state->stackIndex] = moveOnID; } return errn; } -int exiappHandEncodeAttribute(bitstream_t* stream, exi_state_t* state, eqname_t* at, +int exiappHandEncodeAttribute(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val) { + int16_t moveOnID = 0; int16_t currentID = state->grammarStack[state->stackIndex]; + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; + switch (currentID) { - + } /* no expected attribute */ if (currentID < 0) { /* runtime element */ - return -1; + errn = _encode2ndLevelAttribute(stream, state, qnameID, val); } else { - return +1; + if(moveOnID == 0) { + /* no action yet */ +#if EXI_appHandSTRICT != 0 + /* no 2nd level events in strict mode for schema-informed grammars */ + errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE; +#else /* EXI_appHandSTRICT != 0 */ + errn = _encode2ndLevelAttribute(stream, state, qnameID, val); +#endif /* EXI_appHandSTRICT != 0 */ + } else { + state->grammarStack[state->stackIndex] = moveOnID; + } } - /* return EXI_ERROR_UNEXPECTED_ATTRIBUTE; */ + return errn; } + +int exiappHandEncodeAttributeNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName, exi_value_t* val) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + +int exiappHandEncodeAttributeGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName, exi_value_t* val) { + return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; +} + + int exiappHandEncodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { @@ -1561,48 +1371,45 @@ int exiappHandEncodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, } errn = encodeBoolean(stream, val->boolean); - if (errn >= 0 && val->boolean) { + if (!errn && val->boolean) { /* handle xsi:nil == true */ - errn = exiHandleXsiNilTrue(state); + errn = exi_appHand_HandleXsiNilTrue(state); } return errn; } + + int exiappHandEncodeAttributeXsiType(bitstream_t* stream, exi_state_t* state, exi_value_t* val) { /* encode xsi:type event code */ switch (state->grammarStack[state->stackIndex]) { - case 12: + case 46: errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; errn = encodeNBitUnsignedInteger(stream, 3, 1); break; - case 15: + case 35: errn = encodeNBitUnsignedInteger(stream, 1, 1); + if(errn) return errn; errn = encodeNBitUnsignedInteger(stream, 3, 1); break; default: return EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE; } - if (errn < 0) { + if (errn) { return errn; } /* encode qname */ - errn = _exiEncodeNamespaceUriID(stream, &state->nameTablePrepopulated, &state->nameTableRuntime, val->eqname.namespaceURI); - if (errn < 0) { - return errn; - } - errn = _exiEncodeLocalNameID(stream, &state->nameTablePrepopulated, &state->nameTableRuntime, val->eqname.namespaceURI, val->eqname.localPart); - if (errn < 0) { - return errn; - } - - /* handle xsi type cast */ - errn = exiHandleXsiType(state, &val->eqname); + errn = _encodeAttributeXsiTypeContent(stream, state, val); return errn; } + + + #endif diff --git a/src/codec/appHandCodec/appHandEXIEncoder.h b/src/codec/appHandCodec/appHandEXIEncoder.h new file mode 100644 index 0000000..7f1c4b5 --- /dev/null +++ b/src/codec/appHandCodec/appHandEXIEncoder.h @@ -0,0 +1,271 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI_appHand_ENCODER_H +#define EXI_appHand_ENCODER_H + +/** +* \file EXIEncoder.h +* \brief EXI Encoder +* +*/ + +#include "EXITypes.h" +#include "appHandEXIEncoder.h" + +/** + * \brief Initialize EXI encoder + * + * Resets & initializes the EXI encoder. + * + * \param stream Output Stream + * \param state Codec state + * \param runtimeTable Runtime name-tables + * \param stringTable String table + * \return Error-Code <> 0 + * + */ +int exiappHandInitEncoder(bitstream_t* stream, exi_state_t* state, + exi_name_table_runtime_t runtimeTable, exi_string_table_t stringTable); + +/** + * \brief Reports the beginning of a set of XML events + * + * see EXI StartDocument (SD) event + * + * \param stream Output Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeStartDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Reports the end of a set of XML events + * + * see EXI EndDocument (ED) event + * + * \param stream Output Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeEndDocument(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Supplies the start of a known element + * + * Provides access to the namespace URI and local name of the start tag by providing qnameID. + * Note: Both, namespace URI and local name are known (schema-informed) or have been encoded before. + * see EXI StartElement (SE) event + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID qualified name ID + * \return Error-Code <> 0 + * + */ +int +exiappHandEncodeStartElement(bitstream_t* stream, + exi_state_t* state, uint16_t qnameID); + +/** + * \brief Supplies the start of an element where the namespace is known + * + * Note: Namespace URI is known (schema-informed) or has been encoded before while local name is unknown. + * see EXI StartElement (SE) event + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUriID namespace URI ID + * \param localName local name as string + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeStartElementNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName); + +/** + * \brief Supplies the start of an element where the namespace and the local name is unknown + * + * Note: Neither namespace URI nor local name is known. + * see EXI StartElement (SE) event + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUri namespace URI as string + * \param localName local name as string + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeStartElementGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName); + +/** + * \brief Supplies the end tag of an element + * + * see EXI EndElement (EE) event + * + * \param stream Output Stream + * \param state Codec state + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeEndElement(bitstream_t* stream, + exi_state_t* state); + +/** + * \brief Supplies characters value + * + * Note: Special handling for list value. + * see EXI Characters (CH) event + * + * \param stream Output Stream + * \param state Codec state + * \param val Characters value + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeCharacters(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + +/** + * \brief Supplies an attribute qname and value + * + * Note: Special handling for list value. + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID qualified name ID + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeAttribute(bitstream_t* stream, + exi_state_t* state, uint16_t qnameID, exi_value_t* val); + + + + +/** + * \brief Supplies an attribute qname and value where the namespace is known + * + * Note: Special handling for list value. + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUriID Qualified namespace URI ID + * \param localName Qualified localname as String + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeAttributeNS(bitstream_t* stream, + exi_state_t* state, uint16_t namespaceUriID, + exi_string_ucs_t* localName, exi_value_t* val); + + +/** + * \brief Supplies an attribute qname and value where the namespace and the local name is unknown + * + * + * \param stream Output Stream + * \param state Codec state + * \param namespaceUri namespace URI as string + * \param localName local name as string + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeAttributeGeneric(bitstream_t* stream, + exi_state_t* state, exi_string_ucs_t* namespaceUri, + exi_string_ucs_t* localName, exi_value_t* val); + + + +/** + * \brief Supplies an xsi:nil attribute + * + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeAttributeXsiNil(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + +/** + * \brief Supplies an xsi:type attribute + * + * see EXI Attribute (AT) event + * + * \param stream Output Stream + * \param state Codec state + * \param val Attribute value + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeAttributeXsiType(bitstream_t* stream, + exi_state_t* state, exi_value_t* val); + +/** + * \brief Supplies list value for characters and attribute event + * + * List values are special given that first the number and type of entry needs to be passed (element/attribute event) and then one by one the actual values. + * + * \param stream Output Stream + * \param state Codec state + * \param qnameID qualified name ID + * \param val one list value + * \param lt list type + * \return Error-Code <> 0 + * + */ +int exiappHandEncodeListValue(bitstream_t* stream, + exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/src/codec/appHandCodec/appHandNameTableEntries.c b/src/codec/appHandCodec/appHandNameTableEntries.c new file mode 100644 index 0000000..5ede2f7 --- /dev/null +++ b/src/codec/appHandCodec/appHandNameTableEntries.c @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI_appHand_NAME_TABLE_ENTRIES_C +#define EXI_appHand_NAME_TABLE_ENTRIES_C + +#include "appHandNameTableEntries.h" + + + +/* ==================================== */ +/* String Table Population */ + +/* localName entries for URI '', id = 0 */ +/* + "AppProtocol", "Priority", "ProtocolNamespace", "ResponseCode", "SchemaID", + "VersionNumberMajor", "VersionNumberMinor" + */ + +/* localName entries for URI 'http://www.w3.org/XML/1998/namespace', id = 1 */ +/* + "base", "id", "lang", "space" + */ + +/* localName entries for URI 'http://www.w3.org/2001/XMLSchema-instance', id = 2 */ +/* + "nil", "type" + */ + +/* localName entries for URI 'http://www.w3.org/2001/XMLSchema', id = 3 */ +/* + "ENTITIES", "ENTITY", "ID", "IDREF", "IDREFS", + "NCName", "NMTOKEN", "NMTOKENS", "NOTATION", "Name", + "QName", "anySimpleType", "anyType", "anyURI", "base64Binary", + "boolean", "byte", "date", "dateTime", "decimal", + "double", "duration", "float", "gDay", "gMonth", + "gMonthDay", "gYear", "gYearMonth", "hexBinary", "int", + "integer", "language", "long", "negativeInteger", "nonNegativeInteger", + "nonPositiveInteger", "normalizedString", "positiveInteger", "short", "string", + "time", "token", "unsignedByte", "unsignedInt", "unsignedLong", + "unsignedShort" + */ + +/* localName entries for URI 'urn:iso:15118:2:2010:AppProtocol', id = 4 */ +/* + "AppProtocolType", "idType", "priorityType", "protocolNameType", "protocolNamespaceType", + "responseCodeType", "supportedAppProtocolReq", "supportedAppProtocolRes" + */ + + +/* number of local-name entries per URI */ +static uint16_t localNames[5] = { + /* '' */ + 7, + /* 'http://www.w3.org/XML/1998/namespace' */ + 4, + /* 'http://www.w3.org/2001/XMLSchema-instance' */ + 2, + /* 'http://www.w3.org/2001/XMLSchema' */ + 46, + /* 'urn:iso:15118:2:2010:AppProtocol' */ + 8 +}; + + +exi_name_table_prepopulated_t exiappHandNameTablePrepopulated = { 5, localNames }; + + + + +#endif + diff --git a/src/codec/appHandCodec/appHand_NameTableEntries.h b/src/codec/appHandCodec/appHandNameTableEntries.h similarity index 95% rename from src/codec/appHandCodec/appHand_NameTableEntries.h rename to src/codec/appHandCodec/appHandNameTableEntries.h index 5fcabee..fde1d01 100644 --- a/src/codec/appHandCodec/appHand_NameTableEntries.h +++ b/src/codec/appHandCodec/appHandNameTableEntries.h @@ -19,10 +19,10 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.6 + * @version 0.7 * @contact Joerg.Heuer@siemens.com * - *Code generated by EXIdizer
+ *Code generated by EXIdizer.com
********************************************************************/ diff --git a/src/codec/appHandCodec/appHandQNameDefines.h b/src/codec/appHandCodec/appHandQNameDefines.h new file mode 100644 index 0000000..ac6dbce --- /dev/null +++ b/src/codec/appHandCodec/appHandQNameDefines.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef EXI_appHand_QNAME_DEFINES_H +#define EXI_appHand_QNAME_DEFINES_H + +/** Number of pre-populated qnames */ +#define EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES 67 + +/** Number of runtime qnames */ +#define EXI_appHandMAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES 100 + +/** Number of overall qnames (pre-populated from schema and runtime qnames) */ +#define EXI_appHandMAX_NUMBER_OF_QNAMES (EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES + EXI_appHandMAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES) + + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/src/codec/appHandCodec/appHandQNames.c b/src/codec/appHandCodec/appHandQNames.c new file mode 100644 index 0000000..238eb49 --- /dev/null +++ b/src/codec/appHandCodec/appHandQNames.c @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI_appHand_QNAMES_C +#define EXI_appHand_QNAMES_C + +#include "EXITypes.h" +#include "ErrorCodes.h" +#include "appHandQNameDefines.h" + +/* qname is a composition of namespaceURI(ID) and localPart(ID) */ +static exi_eqname_t qnames[EXI_appHandMAX_NUMBER_OF_QNAMES] = { + /* qnameID == 0: AppProtocol */ + {0, 0}, + /* qnameID == 1: Priority */ + {0, 1}, + /* qnameID == 2: ProtocolNamespace */ + {0, 2}, + /* qnameID == 3: ResponseCode */ + {0, 3}, + /* qnameID == 4: SchemaID */ + {0, 4}, + /* qnameID == 5: VersionNumberMajor */ + {0, 5}, + /* qnameID == 6: VersionNumberMinor */ + {0, 6}, + /* qnameID == 7: {http://www.w3.org/XML/1998/namespace}base */ + {1, 0}, + /* qnameID == 8: {http://www.w3.org/XML/1998/namespace}id */ + {1, 1}, + /* qnameID == 9: {http://www.w3.org/XML/1998/namespace}lang */ + {1, 2}, + /* qnameID == 10: {http://www.w3.org/XML/1998/namespace}space */ + {1, 3}, + /* qnameID == 11: {http://www.w3.org/2001/XMLSchema-instance}nil */ + {2, 0}, + /* qnameID == 12: {http://www.w3.org/2001/XMLSchema-instance}type */ + {2, 1}, + /* qnameID == 13: {http://www.w3.org/2001/XMLSchema}ENTITIES */ + {3, 0}, + /* qnameID == 14: {http://www.w3.org/2001/XMLSchema}ENTITY */ + {3, 1}, + /* qnameID == 15: {http://www.w3.org/2001/XMLSchema}ID */ + {3, 2}, + /* qnameID == 16: {http://www.w3.org/2001/XMLSchema}IDREF */ + {3, 3}, + /* qnameID == 17: {http://www.w3.org/2001/XMLSchema}IDREFS */ + {3, 4}, + /* qnameID == 18: {http://www.w3.org/2001/XMLSchema}NCName */ + {3, 5}, + /* qnameID == 19: {http://www.w3.org/2001/XMLSchema}NMTOKEN */ + {3, 6}, + /* qnameID == 20: {http://www.w3.org/2001/XMLSchema}NMTOKENS */ + {3, 7}, + /* qnameID == 21: {http://www.w3.org/2001/XMLSchema}NOTATION */ + {3, 8}, + /* qnameID == 22: {http://www.w3.org/2001/XMLSchema}Name */ + {3, 9}, + /* qnameID == 23: {http://www.w3.org/2001/XMLSchema}QName */ + {3, 10}, + /* qnameID == 24: {http://www.w3.org/2001/XMLSchema}anySimpleType */ + {3, 11}, + /* qnameID == 25: {http://www.w3.org/2001/XMLSchema}anyType */ + {3, 12}, + /* qnameID == 26: {http://www.w3.org/2001/XMLSchema}anyURI */ + {3, 13}, + /* qnameID == 27: {http://www.w3.org/2001/XMLSchema}base64Binary */ + {3, 14}, + /* qnameID == 28: {http://www.w3.org/2001/XMLSchema}boolean */ + {3, 15}, + /* qnameID == 29: {http://www.w3.org/2001/XMLSchema}byte */ + {3, 16}, + /* qnameID == 30: {http://www.w3.org/2001/XMLSchema}date */ + {3, 17}, + /* qnameID == 31: {http://www.w3.org/2001/XMLSchema}dateTime */ + {3, 18}, + /* qnameID == 32: {http://www.w3.org/2001/XMLSchema}decimal */ + {3, 19}, + /* qnameID == 33: {http://www.w3.org/2001/XMLSchema}double */ + {3, 20}, + /* qnameID == 34: {http://www.w3.org/2001/XMLSchema}duration */ + {3, 21}, + /* qnameID == 35: {http://www.w3.org/2001/XMLSchema}float */ + {3, 22}, + /* qnameID == 36: {http://www.w3.org/2001/XMLSchema}gDay */ + {3, 23}, + /* qnameID == 37: {http://www.w3.org/2001/XMLSchema}gMonth */ + {3, 24}, + /* qnameID == 38: {http://www.w3.org/2001/XMLSchema}gMonthDay */ + {3, 25}, + /* qnameID == 39: {http://www.w3.org/2001/XMLSchema}gYear */ + {3, 26}, + /* qnameID == 40: {http://www.w3.org/2001/XMLSchema}gYearMonth */ + {3, 27}, + /* qnameID == 41: {http://www.w3.org/2001/XMLSchema}hexBinary */ + {3, 28}, + /* qnameID == 42: {http://www.w3.org/2001/XMLSchema}int */ + {3, 29}, + /* qnameID == 43: {http://www.w3.org/2001/XMLSchema}integer */ + {3, 30}, + /* qnameID == 44: {http://www.w3.org/2001/XMLSchema}language */ + {3, 31}, + /* qnameID == 45: {http://www.w3.org/2001/XMLSchema}long */ + {3, 32}, + /* qnameID == 46: {http://www.w3.org/2001/XMLSchema}negativeInteger */ + {3, 33}, + /* qnameID == 47: {http://www.w3.org/2001/XMLSchema}nonNegativeInteger */ + {3, 34}, + /* qnameID == 48: {http://www.w3.org/2001/XMLSchema}nonPositiveInteger */ + {3, 35}, + /* qnameID == 49: {http://www.w3.org/2001/XMLSchema}normalizedString */ + {3, 36}, + /* qnameID == 50: {http://www.w3.org/2001/XMLSchema}positiveInteger */ + {3, 37}, + /* qnameID == 51: {http://www.w3.org/2001/XMLSchema}short */ + {3, 38}, + /* qnameID == 52: {http://www.w3.org/2001/XMLSchema}string */ + {3, 39}, + /* qnameID == 53: {http://www.w3.org/2001/XMLSchema}time */ + {3, 40}, + /* qnameID == 54: {http://www.w3.org/2001/XMLSchema}token */ + {3, 41}, + /* qnameID == 55: {http://www.w3.org/2001/XMLSchema}unsignedByte */ + {3, 42}, + /* qnameID == 56: {http://www.w3.org/2001/XMLSchema}unsignedInt */ + {3, 43}, + /* qnameID == 57: {http://www.w3.org/2001/XMLSchema}unsignedLong */ + {3, 44}, + /* qnameID == 58: {http://www.w3.org/2001/XMLSchema}unsignedShort */ + {3, 45}, + /* qnameID == 59: {urn:iso:15118:2:2010:AppProtocol}AppProtocolType */ + {4, 0}, + /* qnameID == 60: {urn:iso:15118:2:2010:AppProtocol}idType */ + {4, 1}, + /* qnameID == 61: {urn:iso:15118:2:2010:AppProtocol}priorityType */ + {4, 2}, + /* qnameID == 62: {urn:iso:15118:2:2010:AppProtocol}protocolNameType */ + {4, 3}, + /* qnameID == 63: {urn:iso:15118:2:2010:AppProtocol}protocolNamespaceType */ + {4, 4}, + /* qnameID == 64: {urn:iso:15118:2:2010:AppProtocol}responseCodeType */ + {4, 5}, + /* qnameID == 65: {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq */ + {4, 6}, + /* qnameID == 66: {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes */ + {4, 7} + +}; + + +int exiappHandGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart) { + int errn = 0; + /* EXI_appHandNUMBER_OF_QNAMES */ + if (qnameID < state->nextQNameID) { + *namespaceURI = qnames[qnameID].namespaceURI; + *localPart = qnames[qnameID].localPart; + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + return errn; +} + + +int exiappHandGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID) { + uint16_t i; + /* TODO Do something more efficient than just walk over the entire list */ + /* EXI_appHandNUMBER_OF_QNAMES */ + for(i=0; iCode generated by EXIdizer.com
+ ********************************************************************/ + + + +#ifndef EXI_appHand_QNAMES_H +#define EXI_appHand_QNAMES_H + +#include "EXITypes.h" + +/** + * \brief Returns efficient qname (namespaceURI & localName) IDs for qnameID + * + * \param state Codec state + * \param qnameID Qualified name ID + * \param namespaceURI QName namespace URI ID + * \param localPart QName local name ID + * \return Error-Code <> 0 + * + */ +int exiappHandGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart); + + +/** + * \brief Returns qnameID for qname namespaceURI & localName + * + * \param state Codec state + * \param namespaceURI QName namespace URI ID + * \param localPart QName local name ID + * \param qnameID QName ID (out) + * \return Error-Code <> 0 + * + */ +int exiappHandGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID); + + +/** + * \brief Add efficient qname (namespaceURI & localName) IDs for qnameID + * + * \param state Codec state + * \param qnameID Qualified name ID + * \param namespaceURI QName namespace URI ID + * \param localPart QName local name ID + * \return Error-Code <> 0 + * + */ +int exiappHandAddEQName(exi_state_t* state, uint16_t* qnameID, uint16_t namespaceURI, uint16_t localPart); + +#endif + diff --git a/src/codec/appHandCodec/appHand_EXIDecoder.c b/src/codec/appHandCodec/appHand_EXIDecoder.c deleted file mode 100644 index 43f8b85..0000000 --- a/src/codec/appHandCodec/appHand_EXIDecoder.c +++ /dev/null @@ -1,1881 +0,0 @@ -/* - * Copyright (C) 2007-2012 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXIdizer
- ********************************************************************/ - - - -#ifndef EXI_appHand_DECODER_C -#define EXI_appHand_DECODER_C - -#include "EXITypes.h" -#include "BitInputStream.h" -#include "DecoderChannel.h" -#include "CoderChannel.h" - -#include "StringTable.h" -#include "appHand_NameTableEntries.h" -#include "MethodsBag.h" - -#include "EXICoder.h" -#include "EXIHeaderDecoder.h" - - - -/* local variables */ -static uint32_t bits; -static int errn; - - -int exiappHandDecodeListValue(bitstream_t* stream, exi_value_t* val, list_t lt) { - uint32_t uint32; - - val->type = lt.type; - - switch(lt.type) { - case EXI_DATATYPE_BINARY_BASE64: - case EXI_DATATYPE_BINARY_HEX: - errn = decodeBinary(stream, &val->binary); - break; - case EXI_DATATYPE_BOOLEAN: - errn = decodeBoolean(stream, &val->boolean); - break; - case EXI_DATATYPE_BOOLEAN_FACET: - errn = decodeNBitUnsignedInteger(stream, 2, &uint32); - val->boolean = uint32 > 1; - break; - case EXI_DATATYPE_DECIMAL: - errn = decodeDecimal(stream, &val->decimal); - break; - case EXI_DATATYPE_FLOAT: - errn = decodeFloat(stream, &val->float_me); - break; - case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER: - case EXI_DATATYPE_UNSIGNED_INTEGER: - case EXI_DATATYPE_INTEGER: - switch(lt.intType) { - /* (Signed) Integer */ - case EXI_UNSIGNED_INTEGER_8: - case EXI_UNSIGNED_INTEGER_16: - case EXI_UNSIGNED_INTEGER_32: - case EXI_UNSIGNED_INTEGER_64: - errn = decodeUnsignedInteger(stream, &val->integer); - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - case EXI_INTEGER_16: - case EXI_INTEGER_32: - case EXI_INTEGER_64: - errn = decodeInteger(stream, &val->integer); - break; - } - break; - case EXI_DATATYPE_DATETIME: - errn = decodeDateTime(stream,lt.datetimeType, &val->datetime); - break; - case EXI_DATATYPE_STRING: - errn = decodeStringValue(stream, &val->string); - break; - default: - return EXI_UNSUPPORTED_LIST_VALUE_TYPE; - } - - return errn; -} - - - - -int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state, exi_name_table_runtime_t runtimeTable) { - /* init grammar state */ - state->stackIndex = 0; - state->grammarStack[0] = DOCUMENT; - /* string table */ - state->nameTablePrepopulated = exiappHandNameTablePrepopulated; - state->nameTableRuntime = runtimeTable; - /* decode header */ - return readEXIHeader(stream); -} - -static int exiDecodeNext2Event(bitstream_t* stream, exi_state_t* state, - exi_event_t* nextEvent) { - uint32_t eventCode2 = 0; - - switch (state->grammarStack[state->stackIndex]) { - case 109: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 113: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 12: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 140: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 57: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 97: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 135: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 5: - /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ - case 91: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - case 111: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 103: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 7: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 133: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 123: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 61: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 99: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 107: - /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ - case 73: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 59: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 63: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 115: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 101: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 71: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 77: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 142: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 121: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 17: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 83: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 117: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 3: - /* FirstStartTag[START_ELEMENT(AppProtocol)] */ - case 87: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 67: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 93: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 53: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 137: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 81: - /* FirstStartTag[CHARACTERS[BOOLEAN]] */ - case 79: - /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ - case 119: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 51: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 105: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 69: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 45: - /* FirstStartTag[CHARACTERS[ENUMERATION]] */ - case 65: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 129: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 55: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 43: - /* FirstStartTag[START_ELEMENT(ResponseCode)] */ - case 20: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 85: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 125: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 138: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 15: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 131: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 89: - /* FirstStartTag[CHARACTERS[DECIMAL]] */ - case 127: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 95: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); - switch (eventCode2) { - case 0: - *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; - return errn; - case 1: - *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; - return errn; - case 2: - *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; - return errn; - case 3: - *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; - return errn; - case 4: - *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; - return errn; - case 5: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; - return errn; - case 6: - *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; - return errn; - } - break; - case 49: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 75: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2); - switch (eventCode2) { - case 0: - *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE; - return errn; - case 1: - *nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL; - return errn; - case 2: - *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED; - return errn; - case 3: - *nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE; - return errn; - case 4: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; - return errn; - case 5: - *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; - return errn; - } - break; - case 70: - /* Element[CHARACTERS[STRING]] */ - case 124: - /* Element[CHARACTERS[STRING]] */ - case 139: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 46: - /* Element[CHARACTERS[ENUMERATION]] */ - case 22: - /* Element[START_ELEMENT(ProtocolNamespace)] */ - case 86: - /* Element[CHARACTERS[DATETIME]] */ - case 120: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 100: - /* Element[CHARACTERS[DATETIME]] */ - case 54: - /* Element[CHARACTERS[STRING]] */ - case 68: - /* Element[CHARACTERS[STRING]] */ - case 72: - /* Element[CHARACTERS[STRING]] */ - case 94: - /* Element[CHARACTERS[STRING]] */ - case 21: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 78: - /* Element[CHARACTERS[STRING]] */ - case 134: - /* Element[CHARACTERS[STRING]] */ - case 141: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 52: - /* Element[CHARACTERS[LIST]] */ - case 102: - /* Element[CHARACTERS[DATETIME]] */ - case 96: - /* Element[CHARACTERS[FLOAT]] */ - case 60: - /* Element[CHARACTERS[LIST]] */ - case 82: - /* Element[CHARACTERS[BOOLEAN]] */ - case 88: - /* Element[CHARACTERS[DATETIME]] */ - case 116: - /* Element[CHARACTERS[INTEGER]] */ - case 98: - /* Element[CHARACTERS[DATETIME]] */ - case 128: - /* Element[CHARACTERS[INTEGER]] */ - case 13: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 90: - /* Element[CHARACTERS[DECIMAL]] */ - case 92: - /* Element[CHARACTERS[FLOAT]] */ - case 42: - /* Element[START_ELEMENT(AppProtocol)] */ - case 143: - /* Element[CHARACTERS[STRING]] */ - case 110: - /* Element[CHARACTERS[INTEGER]] */ - case 66: - /* Element[CHARACTERS[LIST]] */ - case 112: - /* Element[CHARACTERS[INTEGER]] */ - case 58: - /* Element[CHARACTERS[STRING]] */ - case 14: - /* Element[START_ELEMENT(SchemaID)] */ - case 122: - /* Element[CHARACTERS[INTEGER]] */ - case 16: - /* Element[START_ELEMENT(Priority)] */ - case 104: - /* Element[CHARACTERS[DATETIME]] */ - case 132: - /* Element[CHARACTERS[DATETIME]] */ - case 114: - /* Element[CHARACTERS[STRING]] */ - case 108: - /* Element[CHARACTERS[BINARY_HEX]] */ - case 84: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 106: - /* Element[CHARACTERS[DATETIME]] */ - case 11: - /* Element[START_ELEMENT(VersionNumberMinor)] */ - case 74: - /* Element[CHARACTERS[STRING]] */ - case 6: - /* Element[START_ELEMENT(VersionNumberMajor)] */ - case 64: - /* Element[CHARACTERS[STRING]] */ - case 62: - /* Element[CHARACTERS[STRING]] */ - case 136: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 130: - /* Element[CHARACTERS[STRING]] */ - case 126: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 118: - /* Element[CHARACTERS[INTEGER]] */ - case 48: - /* Element[START_ELEMENT(ResponseCode)] */ - case 10: - /* Element[CHARACTERS[STRING]] */ - case 80: - /* Element[CHARACTERS[BINARY_BASE64]] */ - case 56: - /* Element[CHARACTERS[STRING]] */ - case 18: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2); - switch (eventCode2) { - case 0: - *nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED; - return errn; - case 1: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; - return errn; - case 2: - *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; - return errn; - } - break; - case 8: - /* Element[END_ELEMENT] */ - case 34: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 40: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 44: - /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ - case 25: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 31: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 39: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 33: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 50: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 26: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 32: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 47: - /* Element[END_ELEMENT] */ - case 38: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 35: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 24: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 30: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 4: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 19: - /* Element[END_ELEMENT] */ - case 37: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 29: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 23: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 27: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 76: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 41: - /* Element[END_ELEMENT] */ - case 36: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 28: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2); - switch (eventCode2) { - case 0: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED; - return errn; - case 1: - *nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED; - return errn; - } - break; - - default: - *nextEvent = EXI_EVENT_ERROR; - return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; - } - - return EXI_ERROR_UNEXPECTED_EVENT_LEVEL2; -} - - -int exiappHandDecodeNextEvent(bitstream_t* stream, exi_state_t* state, - exi_event_t* nextEvent) { - state->eventCode = 0; - - switch (state->grammarStack[state->stackIndex]) { - case 5: - /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ - case 22: - /* Element[START_ELEMENT(ProtocolNamespace)] */ - case 3: - /* FirstStartTag[START_ELEMENT(AppProtocol)] */ - case 42: - /* Element[START_ELEMENT(AppProtocol)] */ - case 14: - /* Element[START_ELEMENT(SchemaID)] */ - case 16: - /* Element[START_ELEMENT(Priority)] */ - case 11: - /* Element[START_ELEMENT(VersionNumberMinor)] */ - case 43: - /* FirstStartTag[START_ELEMENT(ResponseCode)] */ - case 6: - /* Element[START_ELEMENT(VersionNumberMajor)] */ - case 48: - /* Element[START_ELEMENT(ResponseCode)] */ - errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); - switch (state->eventCode) { - case 0: - *nextEvent = EXI_EVENT_START_ELEMENT; - return errn; - case 1: - /* 2nd level events */ - errn = exiDecodeNext2Event(stream, state, nextEvent); - return errn; - } - break; - case 109: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 113: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 12: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 140: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 70: - /* Element[CHARACTERS[STRING]] */ - case 124: - /* Element[CHARACTERS[STRING]] */ - case 57: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 97: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 135: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 91: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - case 111: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 139: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 103: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 46: - /* Element[CHARACTERS[ENUMERATION]] */ - case 86: - /* Element[CHARACTERS[DATETIME]] */ - case 7: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 133: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 123: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 61: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 99: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 120: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 107: - /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ - case 73: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 100: - /* Element[CHARACTERS[DATETIME]] */ - case 54: - /* Element[CHARACTERS[STRING]] */ - case 59: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 68: - /* Element[CHARACTERS[STRING]] */ - case 72: - /* Element[CHARACTERS[STRING]] */ - case 63: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 94: - /* Element[CHARACTERS[STRING]] */ - case 115: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 101: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 21: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 71: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 77: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 142: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 78: - /* Element[CHARACTERS[STRING]] */ - case 121: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 134: - /* Element[CHARACTERS[STRING]] */ - case 141: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 52: - /* Element[CHARACTERS[LIST]] */ - case 102: - /* Element[CHARACTERS[DATETIME]] */ - case 96: - /* Element[CHARACTERS[FLOAT]] */ - case 17: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 83: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 117: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 87: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 60: - /* Element[CHARACTERS[LIST]] */ - case 82: - /* Element[CHARACTERS[BOOLEAN]] */ - case 88: - /* Element[CHARACTERS[DATETIME]] */ - case 116: - /* Element[CHARACTERS[INTEGER]] */ - case 98: - /* Element[CHARACTERS[DATETIME]] */ - case 128: - /* Element[CHARACTERS[INTEGER]] */ - case 67: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 93: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 13: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 90: - /* Element[CHARACTERS[DECIMAL]] */ - case 92: - /* Element[CHARACTERS[FLOAT]] */ - case 53: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 137: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 81: - /* FirstStartTag[CHARACTERS[BOOLEAN]] */ - case 79: - /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ - case 119: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 143: - /* Element[CHARACTERS[STRING]] */ - case 110: - /* Element[CHARACTERS[INTEGER]] */ - case 66: - /* Element[CHARACTERS[LIST]] */ - case 51: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 112: - /* Element[CHARACTERS[INTEGER]] */ - case 58: - /* Element[CHARACTERS[STRING]] */ - case 105: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 122: - /* Element[CHARACTERS[INTEGER]] */ - case 69: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 104: - /* Element[CHARACTERS[DATETIME]] */ - case 132: - /* Element[CHARACTERS[DATETIME]] */ - case 114: - /* Element[CHARACTERS[STRING]] */ - case 45: - /* FirstStartTag[CHARACTERS[ENUMERATION]] */ - case 65: - /* FirstStartTag[CHARACTERS[LIST]] */ - case 108: - /* Element[CHARACTERS[BINARY_HEX]] */ - case 84: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 129: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 106: - /* Element[CHARACTERS[DATETIME]] */ - case 55: - /* FirstStartTag[CHARACTERS[STRING]] */ - case 74: - /* Element[CHARACTERS[STRING]] */ - case 20: - /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 85: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 125: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 64: - /* Element[CHARACTERS[STRING]] */ - case 62: - /* Element[CHARACTERS[STRING]] */ - case 136: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - case 138: - /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 130: - /* Element[CHARACTERS[STRING]] */ - case 126: - /* Element[CHARACTERS[UNSIGNED_INTEGER]] */ - case 15: - /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ - case 118: - /* Element[CHARACTERS[INTEGER]] */ - case 131: - /* FirstStartTag[CHARACTERS[DATETIME]] */ - case 10: - /* Element[CHARACTERS[STRING]] */ - case 80: - /* Element[CHARACTERS[BINARY_BASE64]] */ - case 89: - /* FirstStartTag[CHARACTERS[DECIMAL]] */ - case 56: - /* Element[CHARACTERS[STRING]] */ - case 127: - /* FirstStartTag[CHARACTERS[INTEGER]] */ - case 95: - /* FirstStartTag[CHARACTERS[FLOAT]] */ - case 18: - /* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ - errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); - switch (state->eventCode) { - case 0: - *nextEvent = EXI_EVENT_CHARACTERS; - return errn; - case 1: - /* 2nd level events */ - errn = exiDecodeNext2Event(stream, state, nextEvent); - return errn; - } - break; - case 2: - /* DocEnd[END_DOCUMENT] */ - *nextEvent = EXI_EVENT_END_DOCUMENT; - return errn; - case 1: - /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ - errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); - switch (state->eventCode) { - case 0: - case 1: - *nextEvent = EXI_EVENT_START_ELEMENT; - return errn; - case 2: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; - return errn; - } - break; - case 49: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 75: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode); - switch (state->eventCode) { - case 0: - *nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC; - return errn; - case 1: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; - return errn; - case 2: - *nextEvent = EXI_EVENT_END_ELEMENT; - return errn; - case 3: - *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; - return errn; - case 4: - /* 2nd level events */ - errn = exiDecodeNext2Event(stream, state, nextEvent); - return errn; - } - break; - case 50: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - case 76: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); - switch (state->eventCode) { - case 0: - *nextEvent = EXI_EVENT_START_ELEMENT_GENERIC; - return errn; - case 1: - *nextEvent = EXI_EVENT_END_ELEMENT; - return errn; - case 2: - *nextEvent = EXI_EVENT_CHARACTERS_GENERIC; - return errn; - case 3: - /* 2nd level events */ - errn = exiDecodeNext2Event(stream, state, nextEvent); - return errn; - } - break; - case 34: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 40: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 44: - /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ - case 25: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 31: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 39: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 33: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 26: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 32: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 38: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 35: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 24: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 30: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 4: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 37: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 29: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 23: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 27: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 36: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - case 28: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode); - switch (state->eventCode) { - case 0: - *nextEvent = EXI_EVENT_START_ELEMENT; - return errn; - case 1: - *nextEvent = EXI_EVENT_END_ELEMENT; - return errn; - case 2: - /* 2nd level events */ - errn = exiDecodeNext2Event(stream, state, nextEvent); - return errn; - } - break; - case 0: - /* Document[START_DOCUMENT] */ - *nextEvent = EXI_EVENT_START_DOCUMENT; - return errn; - case 8: - /* Element[END_ELEMENT] */ - case 47: - /* Element[END_ELEMENT] */ - case 19: - /* Element[END_ELEMENT] */ - case 41: - /* Element[END_ELEMENT] */ - errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode); - switch (state->eventCode) { - case 0: - *nextEvent = EXI_EVENT_END_ELEMENT; - return errn; - case 1: - /* 2nd level events */ - errn = exiDecodeNext2Event(stream, state, nextEvent); - return errn; - } - break; - - default: - *nextEvent = EXI_EVENT_ERROR; - return EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; - } - - return EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; -} - -int exiappHandDecodeStartDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 0 ) { - /* move on */ - state->grammarStack[state->stackIndex] = 1; - return 0; - } - - return EXI_ERROR_UNEXPECTED_START_DOCUMENT; -} - -int exiappHandDecodeEndDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 2) { - return 0; - } - - return EXI_ERROR_UNEXPECTED_END_DOCUMENT; -} - -static int _exiDecodeStartElement(exi_state_t* state, eqname_t* se, - uint16_t ns, uint16_t ln, uint16_t stackId, uint16_t newState) { - se->namespaceURI = ns; - se->localPart = ln; - /* move on */ - state->grammarStack[state->stackIndex] = stackId; - /* push element on stack */ - return exiPushStack(state, newState, se); -} - - -int exiappHandDecodeStartElement(bitstream_t* stream, exi_state_t* state, - eqname_t* se) { - switch (state->grammarStack[state->stackIndex]) { - case 1: - /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 4, 6, 2, 3); - case 1: - return _exiDecodeStartElement(state, se, 4, 7, 2, 43); - case 2: - return _exiDecodeStartElement(state, se, 65535, 65535, 2, 49); - } - break; - case 3: - /* FirstStartTag[START_ELEMENT(AppProtocol)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 4, 5); - } - break; - case 4: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 23, 5); - } - break; - case 5: - /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 2, 6, 7); - } - break; - case 6: - /* Element[START_ELEMENT(VersionNumberMajor)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 5, 11, 12); - } - break; - case 11: - /* Element[START_ELEMENT(VersionNumberMinor)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 6, 14, 15); - } - break; - case 14: - /* Element[START_ELEMENT(SchemaID)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 4, 16, 17); - } - break; - case 16: - /* Element[START_ELEMENT(Priority)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 1, 19, 20); - } - break; - case 22: - /* Element[START_ELEMENT(ProtocolNamespace)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 2, 6, 7); - } - break; - case 23: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 24, 5); - } - break; - case 24: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 25, 5); - } - break; - case 25: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 26, 5); - } - break; - case 26: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 27, 5); - } - break; - case 27: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 28, 5); - } - break; - case 28: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 29, 5); - } - break; - case 29: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 30, 5); - } - break; - case 30: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 31, 5); - } - break; - case 31: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 32, 5); - } - break; - case 32: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 33, 5); - } - break; - case 33: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 34, 5); - } - break; - case 34: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 35, 5); - } - break; - case 35: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 36, 5); - } - break; - case 36: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 37, 5); - } - break; - case 37: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 38, 5); - } - break; - case 38: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 39, 5); - } - break; - case 39: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 40, 5); - } - break; - case 40: - /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 41, 5); - } - break; - case 42: - /* Element[START_ELEMENT(AppProtocol)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 0, 4, 5); - } - break; - case 43: - /* FirstStartTag[START_ELEMENT(ResponseCode)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 3, 44, 45); - } - break; - case 44: - /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 4, 47, 17); - } - break; - case 48: - /* Element[START_ELEMENT(ResponseCode)] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 0, 3, 44, 45); - } - break; - case 49: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - switch(state->eventCode) { - case 1: - return _exiDecodeStartElement(state, se, 65535, 65535, 50, 49); - } - break; - case 50: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 65535, 65535, 50, 49); - } - break; - case 75: - /* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - switch(state->eventCode) { - case 1: - return _exiDecodeStartElement(state, se, 65535, 65535, 76, 49); - } - break; - case 76: - /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ - switch(state->eventCode) { - case 0: - return _exiDecodeStartElement(state, se, 65535, 65535, 76, 49); - } - break; - - default: - return EXI_ERROR_UNEXPECTED_START_ELEMENT; - } - - return EXI_ERROR_UNEXPECTED_START_ELEMENT; -} - - -static int _exiDecodeNamespaceUri(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, - string_ascii_t* namespaceURI, uint32_t* uriID) { - uint16_t uriSize, uriCodingLength; - int errn; - - errn = exiGetUriSize(nameTable, runtimeTable, &uriSize); - if (errn) { - return errn; - } - /* URI Entries + 1 */ - errn = exiGetCodingLength(uriSize + 1, &uriCodingLength); - if (errn) { - return errn; - } - - errn = decodeNBitUnsignedInteger(stream, uriCodingLength, uriID); - if (errn) { - return errn; - } - - if (*uriID == 0) { - /* uri string value was not found */ - /* ==> zero (0) as an n-nit unsigned integer */ - /* followed by uri encoded as string */ - decodeStringASCII(stream, namespaceURI); - /* after encoding string value is added to table */ - errn = exiAddUri(nameTable, runtimeTable, namespaceURI->chars); - if (errn) { - return errn; - } - *uriID = uriSize; - } else { - /* uri string value found */ - /* ==> value(i+1) is encoded as n-bit unsigned integer */ - *uriID = *uriID - 1; - } - - return 0; -} - -static int _exiDecodeLocalName(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, - string_ascii_t* localName, - uint32_t* localNameID, uint32_t uriID) { - uint16_t slen; - uint16_t localNameSize; - uint16_t localNameCodingLength; - - - int errn = decodeUnsignedInteger16(stream, &slen); - if (errn) { - return errn; - } - - if (slen > 0) { - /* string value was not found in local partition */ - /* ==> string literal is encoded as a String */ - /* with the length of the string incremented by one */ - if (slen-- >= localName->size) { - return EXI_ERROR_OUT_OF_BOUNDS; - } - errn = decodeCharactersASCII(stream, slen, localName->chars); - if (errn) { - return errn; - } - /* After encoding the string value, it is added to the string table */ - /* partition and assigned the next available compact identifier */ - errn = exiAddLocalName(nameTable, runtimeTable, uriID, localName->chars); - if (errn) { - return errn; - } - /* TODO UCD Profile */ - /* qname = addLocalName(localName, uriID); */ - } else { - /* string value found in local partition */ - /* ==> string value is represented as zero (0) encoded as an */ - /* Unsigned Integer */ - /* followed by an the compact identifier of the string value as an */ - /* n-bit unsigned integer */ - /* n is log2 m and m is the number of entries in the string table */ - /* partition */ - errn = exiGetLocalNameSize(nameTable, runtimeTable, uriID, &localNameSize); - if (errn) { - return errn; - } - errn = exiGetCodingLength(localNameSize, &localNameCodingLength); - if (errn) { - return errn; - } - errn = decodeNBitUnsignedInteger(stream, localNameCodingLength, localNameID); - if (errn) { - return errn; - } - } - - return 0; -} - -static int _exiDecodeQName(bitstream_t* stream, exi_name_table_prepopulated_t* nameTable, exi_name_table_runtime_t* runtimeTable, - qname_t* qname) { - uint32_t uriID; - uint32_t localNameID; - /* const char * clocalName; */ - - /* uri */ - int errn =_exiDecodeNamespaceUri(stream, nameTable, runtimeTable, &qname->namespaceURI, &uriID); - if (errn) { - return errn; - } - /* localName */ - errn = _exiDecodeLocalName(stream, nameTable, runtimeTable, &qname->localName, &localNameID, uriID); - if (errn) { - return errn; - } - - /* - errn = exiGetLocalName(nameTable, runtimeTable, uriID, localNameID, &clocalName); - if (errn) { - return errn; - } - strcpy ( qname->localName.chars, clocalName ); - */ - - return 0 ; -} - -int exiappHandDecodeStartElementGeneric(bitstream_t* stream, exi_state_t* state, - qname_t* qname) { - /* decode qname */ - int errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), qname); - if (errn) { - return errn; - } - - switch (state->grammarStack[state->stackIndex]) { - /* $EXI_DECODE_START_ELEMENT_GENERIC$ */ - case DOC_CONTENT: - /* move on to DocEnd */ - state->grammarStack[state->stackIndex] = DOC_END; - /* push new ur-type grammar on stack */ - return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); - break; - case UR_TYPE_GRAMMAR_0: - /* move on to UR_TYPE_GRAMMAR_1 */ - state->grammarStack[state->stackIndex] = UR_TYPE_GRAMMAR_1; - /* push new ur-type grammar on stack */ - return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); - break; - case UR_TYPE_GRAMMAR_1: - /* remain in UR_TYPE_GRAMMAR_1 */ - /* push new ur-type grammar on stack */ - return exiPushStack(state, UR_TYPE_GRAMMAR_0, NULL); - break; - default: - return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; - } - - return EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC; -} - -int exiappHandDecodeEndElement(bitstream_t* stream, exi_state_t* state, eqname_t* ee) { - /* copy IDs */ - ee->localPart = state->elementStack[state->stackIndex].localPart; - ee->namespaceURI = state->elementStack[state->stackIndex].namespaceURI; - - return exiPopStack(state); -} - -int exiappHandDecodeEndElementUndeclared(bitstream_t* stream, exi_state_t* state, eqname_t* ee) { - int16_t currentID = state->grammarStack[state->stackIndex]; - if (currentID < 0) { - /* runtime grammars do have IDs smaller than 0 */ - /* TODO learn EE event */ - return -1; - } - - return exiappHandDecodeEndElement(stream, state, ee); -} - -int exiappHandDecodeCharacters(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - switch (state->grammarStack[state->stackIndex]) { - case 12: - /* UNSIGNED_INTEGER */ - case 13: - /* UNSIGNED_INTEGER */ - case 15: - /* UNSIGNED_INTEGER */ - case 119: - /* UNSIGNED_INTEGER */ - case 120: - /* UNSIGNED_INTEGER */ - case 125: - /* UNSIGNED_INTEGER */ - case 126: - /* UNSIGNED_INTEGER */ - case 137: - /* UNSIGNED_INTEGER */ - case 138: - /* UNSIGNED_INTEGER */ - case 139: - /* UNSIGNED_INTEGER */ - case 140: - /* UNSIGNED_INTEGER */ - case 141: - /* UNSIGNED_INTEGER */ - val->type = EXI_DATATYPE_UNSIGNED_INTEGER; - errn = decodeUnsignedInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 17: - /* NBIT_UNSIGNED_INTEGER */ - case 18: - /* NBIT_UNSIGNED_INTEGER */ - case 135: - /* NBIT_UNSIGNED_INTEGER */ - case 136: - /* NBIT_UNSIGNED_INTEGER */ - val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; - errn = decodeNBitUnsignedInteger(stream, 8, &bits); - val->integer.val.uint8 = bits + 0; - val->integer.type = EXI_UNSIGNED_INTEGER_8; - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 50: - /* STRING */ - case 49: - /* STRING */ - val->type = EXI_DATATYPE_STRING; - errn = decodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 50; - return 0; - case 101: - /* DATETIME */ - case 102: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_GMONTHDAY, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 20: - /* NBIT_UNSIGNED_INTEGER */ - case 21: - /* NBIT_UNSIGNED_INTEGER */ - val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; - errn = decodeNBitUnsignedInteger(stream, 5, &bits); - val->integer.val.uint8 = bits + 1; - val->integer.type = EXI_UNSIGNED_INTEGER_8; - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 97: - /* DATETIME */ - case 98: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_GDAY, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 51: - /* LIST */ - case 52: - /* LIST */ - case 59: - /* LIST */ - case 60: - /* LIST */ - case 65: - /* LIST */ - case 66: - /* LIST */ - val->type = EXI_DATATYPE_LIST; - /* List not supported properly yet */ - val->list.type = EXI_DATATYPE_STRING; - errn = decodeUnsignedInteger16(stream, &val->list.len); - if (errn) { - return errn; - } - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 79: - /* BINARY_BASE64 */ - case 80: - /* BINARY_BASE64 */ - val->type = EXI_DATATYPE_BINARY_BASE64; - errn = decodeBinary(stream, &val->binary); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 89: - /* DECIMAL */ - case 90: - /* DECIMAL */ - val->type = EXI_DATATYPE_DECIMAL; - errn = decodeDecimal(stream, &val->decimal); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 99: - /* DATETIME */ - case 100: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_GMONTH, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 91: - /* FLOAT */ - case 92: - /* FLOAT */ - case 95: - /* FLOAT */ - case 96: - /* FLOAT */ - val->type = EXI_DATATYPE_FLOAT; - errn = decodeFloat(stream, &val->float_me); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 107: - /* BINARY_HEX */ - case 108: - /* BINARY_HEX */ - val->type = EXI_DATATYPE_BINARY_HEX; - errn = decodeBinary(stream, &val->binary); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 83: - /* NBIT_UNSIGNED_INTEGER */ - case 84: - /* NBIT_UNSIGNED_INTEGER */ - val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER; - errn = decodeNBitUnsignedInteger(stream, 8, &bits); - val->integer.val.int8 = bits -128; - val->integer.type = EXI_INTEGER_8; - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 85: - /* DATETIME */ - case 86: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_DATE, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 103: - /* DATETIME */ - case 104: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_GYEAR, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 131: - /* DATETIME */ - case 132: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_TIME, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 105: - /* DATETIME */ - case 106: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_GYEARMONTH, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 109: - /* INTEGER */ - case 110: - /* INTEGER */ - case 111: - /* INTEGER */ - case 112: - /* INTEGER */ - case 115: - /* INTEGER */ - case 116: - /* INTEGER */ - case 117: - /* INTEGER */ - case 118: - /* INTEGER */ - case 121: - /* INTEGER */ - case 122: - /* INTEGER */ - case 127: - /* INTEGER */ - case 128: - /* INTEGER */ - val->type = EXI_DATATYPE_INTEGER; - errn = decodeInteger(stream, &val->integer); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 7: - /* STRING */ - case 10: - /* STRING */ - case 53: - /* STRING */ - case 54: - /* STRING */ - case 55: - /* STRING */ - case 56: - /* STRING */ - case 57: - /* STRING */ - case 58: - /* STRING */ - case 61: - /* STRING */ - case 62: - /* STRING */ - case 63: - /* STRING */ - case 64: - /* STRING */ - case 67: - /* STRING */ - case 68: - /* STRING */ - case 69: - /* STRING */ - case 70: - /* STRING */ - case 71: - /* STRING */ - case 72: - /* STRING */ - case 73: - /* STRING */ - case 74: - /* STRING */ - case 77: - /* STRING */ - case 78: - /* STRING */ - case 93: - /* STRING */ - case 94: - /* STRING */ - case 113: - /* STRING */ - case 114: - /* STRING */ - case 123: - /* STRING */ - case 124: - /* STRING */ - case 129: - /* STRING */ - case 130: - /* STRING */ - case 133: - /* STRING */ - case 134: - /* STRING */ - case 142: - /* STRING */ - case 143: - /* STRING */ - val->type = EXI_DATATYPE_STRING; - errn = decodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 45: - /* ENUMERATION */ - case 46: - /* ENUMERATION */ - val->type = EXI_DATATYPE_ENUMERATION; - errn = decodeNBitUnsignedInteger(stream, 2, &val->enumeration); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 76: - /* STRING */ - case 75: - /* STRING */ - val->type = EXI_DATATYPE_STRING; - errn = decodeStringValue(stream, &val->string); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 76; - return 0; - case 87: - /* DATETIME */ - case 88: - /* DATETIME */ - val->type = EXI_DATATYPE_DATETIME; - errn = decodeDateTime(stream, EXI_DATETIME_DATETIME, &val->datetime); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - case 81: - /* BOOLEAN */ - case 82: - /* BOOLEAN */ - val->type = EXI_DATATYPE_BOOLEAN; - errn = decodeBoolean(stream, &val->boolean); - if (errn) { - return errn; - } - /* move on */ - state->grammarStack[state->stackIndex] = 8; - return 0; - - default: - return EXI_ERROR_UNEXPECTED_CHARACTERS; - } - - return 0; -} - -int exiappHandDecodeCharactersGeneric(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - return exiappHandDecodeCharacters(stream, state, val); -} - -int exiappHandDecodeCharactersGenericUndeclared(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - int errn = 0; - if (state->grammarStack[state->stackIndex] < 0) { - /* runtime grammars do have IDs smaller than 0 */ - /* TODO learn CH event */ - return -1; - } - - /* update current rule --> element content rule (if not already) */ - errn = exiMoveToElementContentRule(state); - if (errn) { - return errn; - } - - /* read content value */ - /* STRING */ - val->type = EXI_DATATYPE_STRING; - errn = decodeStringValue(stream, &val->string); - return errn; -} - - -int exiappHandDecodeAttribute(bitstream_t* stream, exi_state_t* state, - eqname_t* at, exi_value_t* val) { - switch (state->grammarStack[state->stackIndex]) { - - default: - return EXI_ERROR_UNEXPECTED_ATTRIBUTE; - } - return EXI_ERROR_UNEXPECTED_ATTRIBUTE; -} - - - -int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - errn = decodeBoolean(stream, &val->boolean); - if (errn >= 0 && val->boolean) { - /* handle xsi:nil == true */ - errn = exiHandleXsiNilTrue(state); - } - return errn; -} - - -int exiappHandDecodeAttributeXsiType(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - uint32_t uriID; - uint32_t localNameID; - /* uri */ - errn =_exiDecodeNamespaceUri(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), NULL, &uriID); - if (errn) { - return errn; - } - /* localName */ - errn = _exiDecodeLocalName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), NULL, &localNameID, uriID); - if (errn) { - return errn; - } - - val->eqname.namespaceURI = uriID; - val->eqname.localPart = localNameID; - - /* handle xsi type cast */ - errn = exiHandleXsiType(state, &val->eqname); - - return errn; -} - -int exiappHandDecodeAttributeGenericUndeclared(bitstream_t* stream, exi_state_t* state, - qname_t* at, exi_value_t* val) { - int errn; - int16_t currentID = state->grammarStack[state->stackIndex]; - - if (currentID < 0) { - /* TODO runtime elements */ - return -1; - } else { - /* decode qname */ - errn = _exiDecodeQName(stream, &(state->nameTablePrepopulated), &(state->nameTableRuntime), at); - if (errn) { - return errn; - } - } - - - if (currentID < 0) { - /* TODO learn AT event */ - return -1; - } - - /* decode attribute value */ - val->type = EXI_DATATYPE_STRING; - errn = decodeStringValue(stream, &val->string); - - /* we do not move forward in grammars */ - - return errn; -} - - - -#endif - diff --git a/src/codec/appHandCodec/appHand_EXIDecoder.h b/src/codec/appHandCodec/appHand_EXIDecoder.h deleted file mode 100644 index e328e45..0000000 --- a/src/codec/appHandCodec/appHand_EXIDecoder.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 2007-2012 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXIdizer
- ********************************************************************/ - - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef EXI_appHand_DECODER_H -#define EXI_appHand_DECODER_H - -#include "EXITypes.h" - -int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state, - exi_name_table_runtime_t runtimeTable); - -int exiappHandDecodeNextEvent(bitstream_t* stream, - exi_state_t* state, exi_event_t* nextEvent); - -int exiappHandDecodeStartDocument(bitstream_t* stream, - exi_state_t* state); - -int exiappHandDecodeEndDocument(bitstream_t* stream, - exi_state_t* state); - -int -exiappHandDecodeStartElement(bitstream_t* stream, - exi_state_t* state, eqname_t* se); - -int exiappHandDecodeStartElementGeneric(bitstream_t* stream, - exi_state_t* state, qname_t* qname); - -int exiappHandDecodeEndElement(bitstream_t* stream, - exi_state_t* state, eqname_t* ee); - -int exiappHandDecodeEndElementUndeclared(bitstream_t* stream, - exi_state_t* state, eqname_t* ee); - -int exiappHandDecodeCharacters(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandDecodeCharactersGeneric(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandDecodeCharactersGenericUndeclared(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandDecodeAttribute(bitstream_t* stream, - exi_state_t* state, eqname_t* at, exi_value_t* val); - -int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandDecodeAttributeXsiType(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandDecodeAttributeGenericUndeclared(bitstream_t* stream, - exi_state_t* state, qname_t* at, exi_value_t* val); - -int exiappHandDecodeListValue(bitstream_t* stream, exi_value_t* val, - list_t lt); - -#endif - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/appHandCodec/appHand_EXIEncoder.h b/src/codec/appHandCodec/appHand_EXIEncoder.h deleted file mode 100644 index 7f2e0a0..0000000 --- a/src/codec/appHandCodec/appHand_EXIEncoder.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2007-2012 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXIdizer
- ********************************************************************/ - - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef EXI_appHand_ENCODER_H -#define EXI_appHand_ENCODER_H - -#include "EXITypes.h" - -int exiappHandInitEncoder(bitstream_t* stream, exi_state_t* state, - exi_name_table_runtime_t runtimeTable); - -int exiappHandEncodeStartDocument(bitstream_t* stream, - exi_state_t* state); - -int exiappHandEncodeEndDocument(bitstream_t* stream, - exi_state_t* state); - -int -exiappHandEncodeStartElement(bitstream_t* stream, - exi_state_t* state, eqname_t* se); - -int exiappHandEncodeStartElementGeneric(bitstream_t* stream, - exi_state_t* state, string_ascii_t* namespaceURI, - string_ascii_t* localName); - -int exiappHandEncodeEndElement(bitstream_t* stream, - exi_state_t* state); - -int exiappHandEncodeCharacters(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandEncodeAttribute(bitstream_t* stream, - exi_state_t* state, eqname_t* at, exi_value_t* val); - -int exiappHandEncodeAttributeXsiNil(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandEncodeAttributeXsiType(bitstream_t* stream, - exi_state_t* state, exi_value_t* val); - -int exiappHandEncodeListValue(bitstream_t* stream, exi_value_t* val, - list_t lt); - -#endif - -#ifdef __cplusplus -} -#endif - diff --git a/src/service/v2g_serviceDataTypes.c b/src/service/v2g_dataTypes.c similarity index 93% rename from src/service/v2g_serviceDataTypes.c rename to src/service/v2g_dataTypes.c index bff9930..157a292 100644 --- a/src/service/v2g_serviceDataTypes.c +++ b/src/service/v2g_dataTypes.c @@ -19,7 +19,7 @@ /******************************************************************* * * @author Sebastian.Kaebisch.EXT@siemens.com - * @version 0.6 + * @version 0.7 * @contact Joerg.Heuer@siemens.com * *Code generated by EXISeGen
@@ -28,7 +28,7 @@ #include "EXITypes.h" -#include "v2g_serviceDataTypes.h" +#include "v2g_dataTypes.h" static void init_sessionIDType(struct sessionIDType* type) @@ -95,24 +95,18 @@ static void init_ReferenceType(struct ReferenceType* type) static void init_SignedInfoType(struct SignedInfoType* type) { - int i_loop; - init_service_string(&(type->attr_Id)); type->isused.attr_Id=0; init_CanonicalizationMethodType(&(type->CanonicalizationMethod)); init_SignatureMethodType(&(type->SignatureMethod)); - for(i_loop=0; i_loop<1;i_loop++) - { - init_ReferenceType(&(type->Reference[i_loop])); - } - - type->arraylen.Reference=0; + init_ReferenceType(&(type->Reference[0])); + type->arraylen.Reference=0; } static void init_SignatureValueType(struct SignatureValueType* type) { - + type->arraylen.data=0; } @@ -208,7 +202,6 @@ static void init_ServiceDiscoveryReqType(struct ServiceDiscoveryReqType* type) static void init_PaymentOptionsType(struct PaymentOptionsType* type) { - type->arraylen.PaymentOption=0; } @@ -223,7 +216,6 @@ static void init_ServiceTagType(struct ServiceTagType* type) { init_serviceNameType(&(type->ServiceName)); type->isused.ServiceName=0; - type->isused.ServiceCategory=0; init_serviceScopeType(&(type->ServiceScope)); type->isused.ServiceScope=0; @@ -245,7 +237,7 @@ static void init_ServiceTagListType(struct ServiceTagListType* type) { int i_loop; - for(i_loop=0; i_loop<2;i_loop++) + for(i_loop=0; i_loop<3;i_loop++) { init_ServiceType(&(type->Service[i_loop])); } @@ -254,7 +246,7 @@ static void init_ServiceTagListType(struct ServiceTagListType* type) } -static void init_ServiceDiscoveryResType(struct ServiceDiscoveryResType* type) +static void init_ServiceDiscoveryResType(struct ServiceDiscoveryResType* type) { init_PaymentOptionsType(&(type->PaymentOptions)); init_ServiceChargeType(&(type->ChargeService)); @@ -352,7 +344,7 @@ static void init_SubCertificatesType(struct SubCertificatesType* type) { int i_loop; - for(i_loop=0; i_loop<2;i_loop++) + for(i_loop=0; i_loop<4;i_loop++) { init_certificateType(&(type->Certificate[i_loop])); } @@ -391,7 +383,9 @@ static void init_PaymentDetailsResType(struct PaymentDetailsResType* type) static void init_ContractAuthenticationReqType(struct ContractAuthenticationReqType* type) { init_service_string(&(type->attr_Id)); - init_genChallengeType(&(type->GenChallenge)); + type->isused.attr_Id=0; + init_genChallengeType(&(type->GenChallenge)); + type->isused.GenChallenge=0; } @@ -507,7 +501,7 @@ static void init_SalesTariffType(struct SalesTariffType* type) init_service_string(&(type->attr_Id)); init_tariffDescriptionType(&(type->SalesTariffDescription)); type->isused.SalesTariffDescription=0; - for(i_loop=0; i_loop<2;i_loop++) + for(i_loop=0; i_loop<12;i_loop++) { init_SalesTariffEntryType(&(type->SalesTariffEntry[i_loop])); } @@ -546,7 +540,7 @@ static void init_AC_EVSEChargeParameterType(struct AC_EVSEChargeParameterType* static void init_DC_EVSEStatusType(struct DC_EVSEStatusType* type) { - type->isused.EVSEIsolationStatus=0; + type->isused.EVSEIsolationStatus=0; } @@ -569,7 +563,7 @@ static void init_DC_EVSEChargeParameterType(struct DC_EVSEChargeParameterType* static void init_ChargeParameterDiscoveryResType(struct ChargeParameterDiscoveryResType* type) { - type->isused.SAScheduleList=0; + init_SAScheduleListType(&(type->SAScheduleList)); type->isused.AC_EVSEChargeParameter=0; type->isused.DC_EVSEChargeParameter=0; @@ -577,7 +571,7 @@ static void init_ChargeParameterDiscoveryResType(struct ChargeParameterDiscover static void init_ChargingProfileType(struct ChargingProfileType* type) { - + type->arraylen.ProfileEntry=0; } @@ -631,7 +625,6 @@ static void init_MeterInfoType(struct MeterInfoType* type) static void init_ChargingStatusResType(struct ChargingStatusResType* type) { init_evseIDType(&(type->EVSEID)); - type->isused.SAScheduleTupleID=0; init_PhysicalValueType(&(type->EVSEMaxCurrent)); type->isused.EVSEMaxCurrent=0; init_MeterInfoType(&(type->MeterInfo)); @@ -664,7 +657,7 @@ static void init_ListOfRootCertificateIDsType(struct ListOfRootCertificateIDsTy { int i_loop; - for(i_loop=0; i_loop<2;i_loop++) + for(i_loop=0; i_loop<20;i_loop++) { init_rootCertificateIDType(&(type->RootCertificateID[i_loop])); } @@ -734,7 +727,7 @@ static void init_CableCheckReqType(struct CableCheckReqType* type) static void init_CableCheckResType(struct CableCheckResType* type) { - init_DC_EVSEStatusType(&(type->DC_EVSEStatus)); + init_DC_EVSEStatusType(&(type->DC_EVSEStatus)); } @@ -844,7 +837,7 @@ static void init_AnonType_V2G_Message(struct AnonType_V2G_Message* type) } -static void init_EXIDocumentType(struct EXIDocumentType* type) +static void init_EXIDocumentType(struct EXIDocumentType* type) { init_AnonType_V2G_Message(&(type->V2G_Message)); diff --git a/src/service/v2g_serviceDataTypes.h b/src/service/v2g_dataTypes.h similarity index 80% rename from src/service/v2g_serviceDataTypes.h rename to src/service/v2g_dataTypes.h index 616978a..a393830 100644 --- a/src/service/v2g_serviceDataTypes.h +++ b/src/service/v2g_dataTypes.h @@ -19,7 +19,7 @@ /******************************************************************* * * @author Sebastian.Kaebisch.EXT@siemens.com - * @version 0.6 + * @version 0.7 * @contact Joerg.Heuer@siemens.com * *Code generated by EXISeGen
@@ -42,146 +42,160 @@ extern "C" { enum faultCodeType { - ParsingError_faultCodeType, - NoTLSRootCertificatAvailable_faultCodeType, - UnknownError_faultCodeType + ParsingError_faultCodeType=0, + NoTLSRootCertificatAvailable_faultCodeType=1, + UnknownError_faultCodeType=2 }; enum responseCodeType { - OK_responseCodeType, - OK_NewSessionEstablished_responseCodeType, - OK_OldSessionJoined_responseCodeType, - OK_CertificateExpiresSoon_responseCodeType, - FAILED_responseCodeType, - FAILED_SequenceError_responseCodeType, - FAILED_ServiceIDInvalid_responseCodeType, - FAILED_UnknownSession_responseCodeType, - FAILED_ServiceSelectionInvalid_responseCodeType, - FAILED_PaymentSelectionInvalid_responseCodeType, - FAILED_CertificateExpired_responseCodeType, - FAILED_SignatureError_responseCodeType, - FAILED_NoCertificateAvailable_responseCodeType, - FAILED_CertChainError_responseCodeType, - FAILED_ChallengeInvalid_responseCodeType, - FAILED_ContractCanceled_responseCodeType, - FAILED_WrongChargeParameter_responseCodeType, - FAILED_PowerDeliveryNotApplied_responseCodeType, - FAILED_TariffSelectionInvalid_responseCodeType, - FAILED_ChargingProfileInvalid_responseCodeType, - FAILED_EVSEPresentVoltageToLow_responseCodeType, - FAILED_MeteringSignatureNotValid_responseCodeType, - FAILED_WrongEnergyTransferType_responseCodeType + OK_responseCodeType=0, + OK_NewSessionEstablished_responseCodeType=1, + OK_OldSessionJoined_responseCodeType=2, + OK_CertificateExpiresSoon_responseCodeType=3, + FAILED_responseCodeType=4, + FAILED_SequenceError_responseCodeType=5, + FAILED_ServiceIDInvalid_responseCodeType=6, + FAILED_UnknownSession_responseCodeType=7, + FAILED_ServiceSelectionInvalid_responseCodeType=8, + FAILED_PaymentSelectionInvalid_responseCodeType=9, + FAILED_CertificateExpired_responseCodeType=10, + FAILED_SignatureError_responseCodeType=11, + FAILED_NoCertificateAvailable_responseCodeType=12, + FAILED_CertChainError_responseCodeType=13, + FAILED_ChallengeInvalid_responseCodeType=14, + FAILED_ContractCanceled_responseCodeType=15, + FAILED_WrongChargeParameter_responseCodeType=16, + FAILED_PowerDeliveryNotApplied_responseCodeType=17, + FAILED_TariffSelectionInvalid_responseCodeType=18, + FAILED_ChargingProfileInvalid_responseCodeType=19, + FAILED_EVSEPresentVoltageToLow_responseCodeType=20, + FAILED_MeteringSignatureNotValid_responseCodeType=21, + FAILED_WrongEnergyTransferType_responseCodeType=22 }; enum serviceCategoryType { - EVCharging_serviceCategoryType, - Internet_serviceCategoryType, - ContractCertificate_serviceCategoryType, - OtherCustom_serviceCategoryType + EVCharging_serviceCategoryType=0, + Internet_serviceCategoryType=1, + ContractCertificate_serviceCategoryType=2, + OtherCustom_serviceCategoryType=3 }; enum paymentOptionType { - Contract_paymentOptionType, - ExternalPayment_paymentOptionType + Contract_paymentOptionType=0, + ExternalPayment_paymentOptionType=1 }; enum EVSESupportedEnergyTransferType { - AC_single_phase_core_EVSESupportedEnergyTransferType, - AC_three_phase_core_EVSESupportedEnergyTransferType, - DC_core_EVSESupportedEnergyTransferType, - DC_extended_EVSESupportedEnergyTransferType, - DC_combo_core_EVSESupportedEnergyTransferType, - DC_dual_EVSESupportedEnergyTransferType, - AC_core1p_DC_extended_EVSESupportedEnergyTransferType, - AC_single_DC_core_EVSESupportedEnergyTransferType, - AC_single_phase_three_phase_core_DC_extended_EVSESupportedEnergyTransferType, - AC_core3p_DC_extended_EVSESupportedEnergyTransferType + AC_single_phase_core_EVSESupportedEnergyTransferType=0, + AC_three_phase_core_EVSESupportedEnergyTransferType=1, + DC_core_EVSESupportedEnergyTransferType=2, + DC_extended_EVSESupportedEnergyTransferType=3, + DC_combo_core_EVSESupportedEnergyTransferType=4, + DC_dual_EVSESupportedEnergyTransferType=5, + AC_core1p_DC_extended_EVSESupportedEnergyTransferType=6, + AC_single_DC_core_EVSESupportedEnergyTransferType=7, + AC_single_phase_three_phase_core_DC_extended_EVSESupportedEnergyTransferType=8, + AC_core3p_DC_extended_EVSESupportedEnergyTransferType=9 }; enum unitSymbolType { - h_unitSymbolType, - m_unitSymbolType, - s_unitSymbolType, - A_unitSymbolType, - Ah_unitSymbolType, - V_unitSymbolType, - VA_unitSymbolType, - W_unitSymbolType, - W_s_unitSymbolType, - Wh_unitSymbolType + h_unitSymbolType=0, + m_unitSymbolType=1, + s_unitSymbolType=2, + A_unitSymbolType=3, + Ah_unitSymbolType=4, + V_unitSymbolType=5, + VA_unitSymbolType=6, + W_unitSymbolType=7, + W_s_unitSymbolType=8, + Wh_unitSymbolType=9 + +}; + +enum EVSEProcessingType +{ + Finished_EVSEProcessingType=0, + Ongoing_EVSEProcessingType=1 }; enum EVRequestedEnergyTransferType { - AC_single_phase_core_EVRequestedEnergyTransferType, - AC_three_phase_core_EVRequestedEnergyTransferType, - DC_core_EVRequestedEnergyTransferType, - DC_extended_EVRequestedEnergyTransferType, - DC_combo_core_EVRequestedEnergyTransferType, - DC_unique_EVRequestedEnergyTransferType + AC_single_phase_core_EVRequestedEnergyTransferType=0, + AC_three_phase_core_EVRequestedEnergyTransferType=1, + DC_core_EVRequestedEnergyTransferType=2, + DC_extended_EVRequestedEnergyTransferType=3, + DC_combo_core_EVRequestedEnergyTransferType=4, + DC_unique_EVRequestedEnergyTransferType=5 }; enum DC_EVErrorCodeType { - NO_ERROR_DC_EVErrorCodeType, - FAILED_RESSTemperatureInhibit_DC_EVErrorCodeType, - FAILED_EVShiftPosition_DC_EVErrorCodeType, - FAILED_ChargerConnectorLockFault_DC_EVErrorCodeType, - FAILED_EVRESSMalfunction_DC_EVErrorCodeType, - FAILED_ChargingCurrentdifferential_DC_EVErrorCodeType, - FAILED_ChargingVoltageOutOfRange_DC_EVErrorCodeType, - Reserved_A_DC_EVErrorCodeType, - Reserved_B_DC_EVErrorCodeType, - Reserved_C_DC_EVErrorCodeType, - FAILED_ChargingSystemIncompatibility_DC_EVErrorCodeType, - NoData_DC_EVErrorCodeType + NO_ERROR_DC_EVErrorCodeType=0, + FAILED_RESSTemperatureInhibit_DC_EVErrorCodeType=1, + FAILED_EVShiftPosition_DC_EVErrorCodeType=2, + FAILED_ChargerConnectorLockFault_DC_EVErrorCodeType=3, + FAILED_EVRESSMalfunction_DC_EVErrorCodeType=4, + FAILED_ChargingCurrentdifferential_DC_EVErrorCodeType=5, + FAILED_ChargingVoltageOutOfRange_DC_EVErrorCodeType=6, + Reserved_A_DC_EVErrorCodeType=7, + Reserved_B_DC_EVErrorCodeType=8, + Reserved_C_DC_EVErrorCodeType=9, + FAILED_ChargingSystemIncompatibility_DC_EVErrorCodeType=10, + NoData_DC_EVErrorCodeType=11 }; enum costKindType { - relativePricePercentage_costKindType, - RenewableGenerationPercentage_costKindType, - CarbonDioxideEmission_costKindType + relativePricePercentage_costKindType=0, + RenewableGenerationPercentage_costKindType=1, + CarbonDioxideEmission_costKindType=2 + +}; + +enum EVSENotificationType +{ + None_EVSENotificationType=0, + StopCharging_EVSENotificationType=1, + ReNegotiation_EVSENotificationType=2 }; enum isolationLevelType { - Invalid_isolationLevelType, - Safe_isolationLevelType, - Warning_isolationLevelType, - Fault_isolationLevelType + Invalid_isolationLevelType=0, + Valid_isolationLevelType=1, + Warning_isolationLevelType=2, + Fault_isolationLevelType=3 }; enum DC_EVSEStatusCodeType { - EVSE_NotReady_DC_EVSEStatusCodeType, - EVSE_Ready_DC_EVSEStatusCodeType, - EVSE_Shutdown_DC_EVSEStatusCodeType, - EVSE_UtilityInterruptEvent_DC_EVSEStatusCodeType, - EVSE_Precharge_DC_EVSEStatusCodeType, - EVSE_IsolationMonitoringActive_DC_EVSEStatusCodeType, - EVSE_EmergencyShutdown_DC_EVSEStatusCodeType, - EVSE_Malfunction_DC_EVSEStatusCodeType, - Reserved_8_DC_EVSEStatusCodeType, - Reserved_9_DC_EVSEStatusCodeType, - Reserved_A_DC_EVSEStatusCodeType, - Reserved_B_DC_EVSEStatusCodeType, - Reserved_C_DC_EVSEStatusCodeType + EVSE_NotReady_DC_EVSEStatusCodeType=0, + EVSE_Ready_DC_EVSEStatusCodeType=1, + EVSE_Shutdown_DC_EVSEStatusCodeType=2, + EVSE_UtilityInterruptEvent_DC_EVSEStatusCodeType=3, + EVSE_IsolationMonitoringActive_DC_EVSEStatusCodeType=4, + EVSE_EmergencyShutdown_DC_EVSEStatusCodeType=5, + EVSE_Malfunction_DC_EVSEStatusCodeType=6, + Reserved_8_DC_EVSEStatusCodeType=7, + Reserved_9_DC_EVSEStatusCodeType=8, + Reserved_A_DC_EVSEStatusCodeType=9, + Reserved_B_DC_EVSEStatusCodeType=10, + Reserved_C_DC_EVSEStatusCodeType=11 }; @@ -349,11 +363,10 @@ struct arraylen_SignatureValueType struct SignatureValueType { - - uint8_t data[128]; struct arraylen_SignatureValueType arraylen; + }; struct selection_KeyInfoType @@ -575,7 +588,6 @@ struct serviceNameType struct selection_ServiceTagType { unsigned int ServiceName:1; - unsigned int ServiceCategory:1; unsigned int ServiceScope:1; @@ -617,7 +629,7 @@ struct arraylen_ServiceTagListType struct ServiceTagListType { - struct ServiceType Service[2]; + struct ServiceType Service[3]; struct arraylen_ServiceTagListType arraylen; }; @@ -851,19 +863,28 @@ struct PaymentDetailsResType int64_t DateTimeNow; +}; + +struct selection_ContractAuthenticationReqType +{ + unsigned int attr_Id:1; + unsigned int GenChallenge:1; + + }; struct ContractAuthenticationReqType { struct service_string attr_Id; struct genChallengeType GenChallenge; - + struct selection_ContractAuthenticationReqType isused; }; struct ContractAuthenticationResType { enum responseCodeType ResponseCode; + enum EVSEProcessingType EVSEProcessing; }; @@ -1055,7 +1076,7 @@ struct SalesTariffEntryType { struct RelativeTimeIntervalType RelativeTimeInterval; uint8_t EPriceLevel; - struct ConsumptionCostType ConsumptionCost[3]; + struct ConsumptionCostType ConsumptionCost[2]; struct selection_SalesTariffEntryType isused; struct arraylen_SalesTariffEntryType arraylen; }; @@ -1074,7 +1095,8 @@ struct SalesTariffType struct tariffDescriptionType SalesTariffDescription; uint8_t NumEPriceLevels; struct SalesTariffEntryType SalesTariffEntry[12]; - struct selection_SalesTariffType isused; struct arraylen_SalesTariffType arraylen; + struct selection_SalesTariffType isused; + struct arraylen_SalesTariffType arraylen; }; @@ -1108,21 +1130,12 @@ struct SAScheduleListType }; -struct selection_ChargeParameterDiscoveryResType -{ - unsigned int SAScheduleList:1; - unsigned int AC_EVSEChargeParameter:1; - unsigned int DC_EVSEChargeParameter:1; - - -}; - struct AC_EVSEStatusType { int PowerSwitchClosed; int RCD; - uint32_t ShutDownTime; - int StopCharging; + uint32_t NotificationMaxDelay; + enum EVSENotificationType EVSENotification; }; @@ -1135,6 +1148,14 @@ struct AC_EVSEChargeParameterType struct PhysicalValueType EVSEMinCurrent; +}; + +struct selection_ChargeParameterDiscoveryResType +{ + unsigned int AC_EVSEChargeParameter:1; + unsigned int DC_EVSEChargeParameter:1; + + }; struct selection_DC_EVSEStatusType @@ -1148,6 +1169,8 @@ struct DC_EVSEStatusType { enum isolationLevelType EVSEIsolationStatus; enum DC_EVSEStatusCodeType EVSEStatusCode; + uint32_t NotificationMaxDelay; + enum EVSENotificationType EVSENotification; struct selection_DC_EVSEStatusType isused; }; @@ -1179,7 +1202,8 @@ struct DC_EVSEChargeParameterType struct ChargeParameterDiscoveryResType { enum responseCodeType ResponseCode; - struct SAScheduleListType* SAScheduleList; + enum EVSEProcessingType EVSEProcessing; + struct SAScheduleListType SAScheduleList; struct AC_EVSEChargeParameterType* AC_EVSEChargeParameter; struct DC_EVSEChargeParameterType* DC_EVSEChargeParameter; struct selection_ChargeParameterDiscoveryResType isused; @@ -1269,7 +1293,6 @@ struct ChargingStatusReqType struct selection_ChargingStatusResType { - unsigned int SAScheduleTupleID:1; unsigned int EVSEMaxCurrent:1; unsigned int MeterInfo:1; @@ -1506,6 +1529,7 @@ struct CableCheckResType { enum responseCodeType ResponseCode; struct DC_EVSEStatusType DC_EVSEStatus; + enum EVSEProcessingType EVSEProcessing; }; @@ -1652,27 +1676,10 @@ struct EXIDocumentType }; -enum responseMessages -{ - SESSIONSETUPRES, - SERVICEDISCOVERYRES, - SERVICEDETAILRES, - SERVICEPAYMENTSELECTIONRES, - PAYMENTDETAILSRES, - CONTRACTAUTHENTICATIONRES, - CHARGEPARAMETERDISCOVERYRES, - POWERDELIVERYRES, - CHARGINGSTATUSRES, - METERINGRECEIPTRES, - SESSIONSTOPRES, - CERTIFICATEUPDATERES, - CERTIFICATEINSTALLATIONRES, - CABLECHECKRES, - PRECHARGERES, - CURRENTDEMANDRES, - WELDINGDETECTIONRES -}; - +/* init methods */ +/*void init_EXIDocumentType(struct EXIDocumentType* type); +void init_ServiceDiscoveryResType(struct ServiceDiscoveryResType* type); +*/ #endif diff --git a/src/service/v2g_serviceClientStubs.c b/src/service/v2g_serviceClientStubs.c deleted file mode 100644 index 9c0e11d..0000000 --- a/src/service/v2g_serviceClientStubs.c +++ /dev/null @@ -1,3387 +0,0 @@ - - -/* - * Copyright (C) 2007-2012 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXISeGen
- * - ********************************************************************/ - - - #include "v2g_serviceDataTypes.h" - #include "v2g_serviceDataTypes.c" - #include "v2g_serviceClientStubs.h" - #include "v2g_serviceDataSerialization.c" - #include "v2g_serviceClientDataTransmitter.h" - #include "EXITypes.h" - #include "EXIDecoder.h" - #include "EXIEncoder.h" - #include "StringTable.h" - - - - - - -static int deserializeMessage(struct EXIService* service); - -static int _setInt32Value(integer_t* iv, int32_t* int32) { - int errn = 0; - switch(iv->type) { - /* Unsigned Integer */ - case EXI_UNSIGNED_INTEGER_8: - *int32 = iv->val.uint8; - break; - case EXI_UNSIGNED_INTEGER_16: - *int32 = iv->val.uint16; - break; - case EXI_UNSIGNED_INTEGER_32: - if (iv->val.uint32 <= 2147483647) { - *int32 = iv->val.uint32; - } else { - errn = -1; - } - break; - case EXI_UNSIGNED_INTEGER_64: - errn = -1; - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - *int32 = iv->val.int8; - break; - case EXI_INTEGER_16: - *int32 = iv->val.int16; - break; - case EXI_INTEGER_32: - *int32 = iv->val.int32; - break; - case EXI_INTEGER_64: - errn =-1; - } - return errn; -} - -static int _setUInt32Value(integer_t* iv, uint32_t* uint32) { - int errn = 0; - switch(iv->type) { - /* Unsigned Integer */ - case EXI_UNSIGNED_INTEGER_8: - *uint32 = iv->val.uint8; - break; - case EXI_UNSIGNED_INTEGER_16: - *uint32 = iv->val.uint16; - break; - case EXI_UNSIGNED_INTEGER_32: - if (iv->val.uint32 <= 2147483647) { - *uint32 = iv->val.uint32; - } else { - errn = -1; - } - break; - case EXI_UNSIGNED_INTEGER_64: - errn = -1; - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - *uint32 = iv->val.int8; - break; - case EXI_INTEGER_16: - *uint32 = iv->val.int16; - break; - case EXI_INTEGER_32: - *uint32 = iv->val.int32; - break; - case EXI_INTEGER_64: - errn = -1; - } - return errn; -} - -static int _setInt16Value(integer_t* iv, int16_t* int16) { - int errn = 0; - switch(iv->type) { - /* Unsigned Integer */ - case EXI_UNSIGNED_INTEGER_8: - *int16 = iv->val.uint8; - break; - case EXI_UNSIGNED_INTEGER_16: - errn = -1; - break; - case EXI_UNSIGNED_INTEGER_32: - errn = -1; - break; - case EXI_UNSIGNED_INTEGER_64: - errn = -1; - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - *int16 = iv->val.int8; - break; - case EXI_INTEGER_16: - *int16 = iv->val.int16; - break; - case EXI_INTEGER_32: - errn = -1;; - break; - case EXI_INTEGER_64: - errn = -1; - } - return errn; -} - -static int _setUInt16Value(integer_t* iv, uint16_t* uint16) { - int errn = 0; - switch(iv->type) { - /* Unsigned Integer */ - case EXI_UNSIGNED_INTEGER_8: - *uint16 = iv->val.uint8; - break; - case EXI_UNSIGNED_INTEGER_16: - *uint16 = iv->val.uint16; - break; - case EXI_UNSIGNED_INTEGER_32: - if (iv->val.uint32 <= 2147483647) { - errn = -1; - } else { - errn = -1; - } - break; - case EXI_UNSIGNED_INTEGER_64: - errn = -1; - break; - /* (Signed) Integer */ - case EXI_INTEGER_8: - *uint16 = iv->val.int8; - break; - case EXI_INTEGER_16: - *uint16 = iv->val.int16; - break; - case EXI_INTEGER_32: - errn = -1; - break; - case EXI_INTEGER_64: - errn = -1; - } - return errn; -} - - - - -/** - * \brief Prepares the remote sessionSetup method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct SessionSetupReqType* Request data for the server (has to be set up before) - * \param result struct SessionSetupResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_sessionSetup(struct EXIService* service, struct MessageHeaderType* header, struct SessionSetupReqType* params, struct SessionSetupResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.SessionSetupReq = params; - service->exiMsg.V2G_Message.Body.isused.SessionSetupReq=1; - - - service->exiMsg.V2G_Message.Body.SessionSetupRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - - *(service->outStream.pos) -= service->transportHeaderOffset; - - - return 0; - } -/** - * \brief Prepares the remote serviceDiscovery method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ServiceDiscoveryReqType* Request data for the server (has to be set up before) - * \param result struct ServiceDiscoveryResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_serviceDiscovery(struct EXIService* service, struct MessageHeaderType* header, struct ServiceDiscoveryReqType* params, struct ServiceDiscoveryResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - init_ServiceDiscoveryResType(result); - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq = params; - service->exiMsg.V2G_Message.Body.isused.ServiceDiscoveryReq=1; - - - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - - *(service->outStream.pos) -= service->transportHeaderOffset; - - return 0; - } -/** - * \brief Prepares the remote serviceDetail method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ServiceDetailReqType* Request data for the server (has to be set up before) - * \param result struct ServiceDetailResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_serviceDetail(struct EXIService* service, struct MessageHeaderType* header, struct ServiceDetailReqType* params, struct ServiceDetailResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.ServiceDetailReq = params; - service->exiMsg.V2G_Message.Body.isused.ServiceDetailReq=1; - - - service->exiMsg.V2G_Message.Body.ServiceDetailRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote servicePaymentSelection method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ServicePaymentSelectionReqType* Request data for the server (has to be set up before) - * \param result struct ServicePaymentSelectionResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_servicePaymentSelection(struct EXIService* service, struct MessageHeaderType* header, struct ServicePaymentSelectionReqType* params, struct ServicePaymentSelectionResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.ServicePaymentSelectionReq = params; - service->exiMsg.V2G_Message.Body.isused.ServicePaymentSelectionReq=1; - - - service->exiMsg.V2G_Message.Body.ServicePaymentSelectionRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote paymentDetails method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct PaymentDetailsReqType* Request data for the server (has to be set up before) - * \param result struct PaymentDetailsResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_paymentDetails(struct EXIService* service, struct MessageHeaderType* header, struct PaymentDetailsReqType* params, struct PaymentDetailsResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.PaymentDetailsReq = params; - service->exiMsg.V2G_Message.Body.isused.PaymentDetailsReq=1; - - - service->exiMsg.V2G_Message.Body.PaymentDetailsRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote contractAuthentication method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ContractAuthenticationReqType* Request data for the server (has to be set up before) - * \param result struct ContractAuthenticationResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_contractAuthentication(struct EXIService* service, struct MessageHeaderType* header, struct ContractAuthenticationReqType* params, struct ContractAuthenticationResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.ContractAuthenticationReq = params; - service->exiMsg.V2G_Message.Body.isused.ContractAuthenticationReq=1; - - - service->exiMsg.V2G_Message.Body.ContractAuthenticationRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote chargeParameterDiscovery method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ChargeParameterDiscoveryReqType* Request data for the server (has to be set up before) - * \param result struct ChargeParameterDiscoveryResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_chargeParameterDiscovery(struct EXIService* service, struct MessageHeaderType* header, struct ChargeParameterDiscoveryReqType* params, struct ChargeParameterDiscoveryResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - init_ChargeParameterDiscoveryResType(result); - init_SAScheduleListType(result->SAScheduleList); - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq = params; - service->exiMsg.V2G_Message.Body.isused.ChargeParameterDiscoveryReq=1; - - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote powerDelivery method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct PowerDeliveryReqType* Request data for the server (has to be set up before) - * \param result struct PowerDeliveryResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_powerDelivery(struct EXIService* service, struct MessageHeaderType* header, struct PowerDeliveryReqType* params, struct PowerDeliveryResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - init_PowerDeliveryResType(result); - - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.PowerDeliveryReq = params; - service->exiMsg.V2G_Message.Body.isused.PowerDeliveryReq=1; - - - service->exiMsg.V2G_Message.Body.PowerDeliveryRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote chargingStatus method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param result struct ChargingStatusResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_chargingStatus(struct EXIService* service, struct MessageHeaderType* header, struct ChargingStatusResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.isused.ChargingStatusReq=1; - - - service->exiMsg.V2G_Message.Body.ChargingStatusRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote meteringReceipt method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct MeteringReceiptReqType* Request data for the server (has to be set up before) - * \param result struct MeteringReceiptResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_meteringReceipt(struct EXIService* service, struct MessageHeaderType* header, struct MeteringReceiptReqType* params, struct MeteringReceiptResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.MeteringReceiptReq = params; - service->exiMsg.V2G_Message.Body.isused.MeteringReceiptReq=1; - - - service->exiMsg.V2G_Message.Body.MeteringReceiptRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote certificateUpdate method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CertificateUpdateReqType* Request data for the server (has to be set up before) - * \param result struct CertificateUpdateResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_certificateUpdate(struct EXIService* service, struct MessageHeaderType* header, struct CertificateUpdateReqType* params, struct CertificateUpdateResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.CertificateUpdateReq = params; - service->exiMsg.V2G_Message.Body.isused.CertificateUpdateReq=1; - - - service->exiMsg.V2G_Message.Body.CertificateUpdateRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote certificateInstallation method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CertificateInstallationReqType* Request data for the server (has to be set up before) - * \param result struct CertificateInstallationResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_certificateInstallation(struct EXIService* service, struct MessageHeaderType* header, struct CertificateInstallationReqType* params, struct CertificateInstallationResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - init_CertificateInstallationResType(result); - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.CertificateInstallationReq = params; - service->exiMsg.V2G_Message.Body.isused.CertificateInstallationReq=1; - - - service->exiMsg.V2G_Message.Body.CertificateInstallationRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote cableCheck method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CableCheckReqType* Request data for the server (has to be set up before) - * \param result struct CableCheckResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_cableCheck(struct EXIService* service, struct MessageHeaderType* header, struct CableCheckReqType* params, struct CableCheckResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.CableCheckReq = params; - service->exiMsg.V2G_Message.Body.isused.CableCheckReq=1; - - - service->exiMsg.V2G_Message.Body.CableCheckRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote preCharge method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct PreChargeReqType* Request data for the server (has to be set up before) - * \param result struct PreChargeResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_preCharge(struct EXIService* service, struct MessageHeaderType* header, struct PreChargeReqType* params, struct PreChargeResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.PreChargeReq = params; - service->exiMsg.V2G_Message.Body.isused.PreChargeReq=1; - - - service->exiMsg.V2G_Message.Body.PreChargeRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote currentDemand method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CurrentDemandReqType* Request data for the server (has to be set up before) - * \param result struct CurrentDemandResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_currentDemand(struct EXIService* service, struct MessageHeaderType* header, struct CurrentDemandReqType* params, struct CurrentDemandResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.CurrentDemandReq = params; - service->exiMsg.V2G_Message.Body.isused.CurrentDemandReq=1; - - - service->exiMsg.V2G_Message.Body.CurrentDemandRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote weldingDetection method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct WeldingDetectionReqType* Request data for the server (has to be set up before) - * \param result struct WeldingDetectionResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_weldingDetection(struct EXIService* service, struct MessageHeaderType* header, struct WeldingDetectionReqType* params, struct WeldingDetectionResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.WeldingDetectionReq = params; - service->exiMsg.V2G_Message.Body.isused.WeldingDetectionReq=1; - - - service->exiMsg.V2G_Message.Body.WeldingDetectionRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } -/** - * \brief Prepares the remote sessionStop method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param result struct SessionStopResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ - int prepare_sessionStop(struct EXIService* service, struct MessageHeaderType* header, struct SessionStopResType* result) -{ - /* uint32_t posEncode; */ - exi_name_table_runtime_t runtimeTableEncode; - - /* init uniqueID stack */ - service->idPath.pos=0; - - /* init outStream data structure */ - *(service->outStream.pos) = service->transportHeaderOffset; - service->outStream.buffer = 0; - service->outStream.capacity = 8; - - /* init encoder (write header, set initial state) */ - exiInitNameTableRuntime(&runtimeTableEncode); - exiInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); - - - - - - /* init EXI message */ - init_EXIDocumentType(&(service->exiMsg)); - - - - /* assign data to service data structure */ - service->exiMsg.V2G_Message.Header = header; - service->exiMsg.V2G_Message.Body.isused.SessionStopReq=1; - - - service->exiMsg.V2G_Message.Body.SessionStopRes = result; - - - - /* encode data to exi stream*/ - if(serialize_message(service)) - { - - service->errorCode = EXI_SERIALIZATION_FAILED; - return EXI_SERIALIZATION_FAILED; - } - *(service->outStream.pos) -= service->transportHeaderOffset; - return 0; - } - - - - /** - * \brief Determines which response message was received - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param respMsg enum responseMessages* contains the name of the response message - * \param result struct SessionStopResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ -int determineResponseMesssage(struct EXIService* service, enum responseMessages* respMsg) -{ - - uint32_t posDecode; - exi_name_table_runtime_t runtimeTableDecode; - - /* init inStream data structure */ - posDecode = service->transportHeaderOffset; - service->inStream.pos = &posDecode; - service->inStream.buffer=0; - service->inStream.capacity=0; - - /* init decoder (read header, set initial state) */ - /* init runtime table */ - exiInitNameTableRuntime(&runtimeTableDecode); - exiInitDecoder(&(service->inStream), &(service->stateDecode), runtimeTableDecode); - - /* deserilize the response message */ - if(deserializeMessage(service)<0) - { - - service->errorCode = EXI_DESERIALIZATION_FAILED; - return EXI_DESERIALIZATION_FAILED; - } - - - if(service->exiMsg.V2G_Message.Body.isused.SessionSetupRes) - *respMsg = SESSIONSETUPRES; - else if(service->exiMsg.V2G_Message.Body.isused.ServiceDiscoveryRes) - *respMsg = SERVICEDISCOVERYRES; - else if(service->exiMsg.V2G_Message.Body.isused.ServiceDetailRes) - *respMsg = SERVICEDETAILRES; - else if(service->exiMsg.V2G_Message.Body.isused.ServicePaymentSelectionRes) - *respMsg = SERVICEPAYMENTSELECTIONRES; - else if(service->exiMsg.V2G_Message.Body.isused.PaymentDetailsRes) - *respMsg = PAYMENTDETAILSRES; - else if(service->exiMsg.V2G_Message.Body.isused.ContractAuthenticationRes) - *respMsg = CONTRACTAUTHENTICATIONRES; - else if(service->exiMsg.V2G_Message.Body.isused.ChargeParameterDiscoveryRes) - *respMsg = CHARGEPARAMETERDISCOVERYRES; - else if(service->exiMsg.V2G_Message.Body.isused.PowerDeliveryRes) - *respMsg = POWERDELIVERYRES; - else if(service->exiMsg.V2G_Message.Body.isused.ChargingStatusRes) - *respMsg = CHARGINGSTATUSRES; - else if(service->exiMsg.V2G_Message.Body.isused.MeteringReceiptRes) - *respMsg = METERINGRECEIPTRES; - else if(service->exiMsg.V2G_Message.Body.isused.SessionStopRes) - *respMsg = SESSIONSTOPRES; - else if(service->exiMsg.V2G_Message.Body.isused.CertificateUpdateRes) - *respMsg = CERTIFICATEUPDATERES; - else if(service->exiMsg.V2G_Message.Body.isused.CertificateInstallationRes) - *respMsg = CERTIFICATEINSTALLATIONRES; - else if(service->exiMsg.V2G_Message.Body.isused.CableCheckRes) - *respMsg = CABLECHECKRES; - else if(service->exiMsg.V2G_Message.Body.isused.PreChargeRes) - *respMsg = PRECHARGERES; - else if(service->exiMsg.V2G_Message.Body.isused.CurrentDemandRes) - *respMsg = CURRENTDEMANDRES; - else if(service->exiMsg.V2G_Message.Body.isused.WeldingDetectionRes) - *respMsg = WELDINGDETECTIONRES; - - return 0; -} - - - /** - * Deserialize an element value of the EXI stream and assign it to the - * service data structure - */ -static int deserializeElementAttributeCharacter(struct EXIService* service) -{ - - switch(service->eqn.namespaceURI) { - case 0: - switch(service->eqn.localPart) { - case 0: /*attr_Algorithm*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - if( service->idPath.id[4] == 0) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.CanonicalizationMethod.attr_Algorithm.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.CanonicalizationMethod.attr_Algorithm.arraylen.data = service->val.string.len; - - } else if(service->idPath.id[4] == 43) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.SignatureMethod.attr_Algorithm.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.SignatureMethod.attr_Algorithm.arraylen.data = service->val.string.len; - - } else if(service->idPath.id[5] == 5) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].DigestMethod.attr_Algorithm.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].DigestMethod.attr_Algorithm.arraylen.data = service->val.string.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 2: /*attr_Id*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - if( service->idPath.id[2] == 42) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->attr_Id.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Signature->isused.attr_Id=1; - - } else if(service->idPath.id[2] == 12) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateRes->attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->attr_Id.arraylen.data = service->val.string.len; - - } else if(service->idPath.id[2] == 8) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationRes->attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->attr_Id.arraylen.data = service->val.string.len; - - } else if(service->idPath.id[3] == 52) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.attr_Id.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.isused.attr_Id=1; - - } else if(service->idPath.id[3] == 50) - { - - } else if(service->idPath.id[3] == 14) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->KeyInfo.attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.attr_Id.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.isused.attr_Id=1; - - } else if(service->idPath.id[4] == 34) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].attr_Id.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].isused.attr_Id=1; - - } else if(service->idPath.id[5] == 117) - { - memcpy(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->attr_Id.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->attr_Id.arraylen.data = service->val.string.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 7: /*attr_URI*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].attr_URI.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].attr_URI.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].isused.attr_URI=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 6: /*attr_Type*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].attr_Type.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].attr_Type.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].isused.attr_Type=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 4: /*attr_Name*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].attr_Name.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].attr_Name.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 8: /*attr_ValueType*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].attr_ValueType.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].attr_ValueType.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - } /* close switch(service->eqn.localPart) */ - break; - case 4: - switch(service->eqn.localPart) { - case 7: /*DigestValue*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].DigestValue.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[0].DigestValue.arraylen.data = service->val.binary.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 50: /*SignatureValue*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->SignatureValue.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Header->Signature->SignatureValue.arraylen.data = service->val.binary.len; - - - } - else - { - return -1; /* wrong data type */ - } - - - break; - - - - case 62: /*X509IssuerName*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509IssuerSerial.X509IssuerName.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509IssuerSerial.X509IssuerName.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 66: /*X509SerialNumber*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509IssuerSerial.X509SerialNumber = service->val.integer.val.int64; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 65: /*X509SKI*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509SKI.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509SKI.arraylen.data = service->val.binary.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 67: /*X509SubjectName*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509SubjectName.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509SubjectName.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 59: /*X509Certificate*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509Certificate.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509Certificate.arraylen.data = service->val.binary.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 58: /*X509CRL*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - memcpy(service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509CRL.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Header->Signature->KeyInfo.X509Data.X509CRL.arraylen.data = service->val.binary.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - } /* close switch(service->eqn.localPart) */ - break; - case 5: - switch(service->eqn.localPart) { - case 82: /*ResponseCode*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - if( service->idPath.id[2] == 107) - { - if(service->exiMsg.V2G_Message.Body.isused.SessionSetupReq) - { - service->exiMsg.V2G_Message.Body.isused.SessionSetupRes=1; - } - else - { - return -1; - } - - service->exiMsg.V2G_Message.Body.SessionSetupRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 94) - { - - if(service->exiMsg.V2G_Message.Body.isused.ServiceDiscoveryReq) - { - service->exiMsg.V2G_Message.Body.isused.ServiceDiscoveryRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 90) - { - - - if(service->exiMsg.V2G_Message.Body.isused.ServiceDetailReq) - { - service->exiMsg.V2G_Message.Body.isused.ServiceDetailRes=1; - } - else - { - return -1; - } - - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 101) - { - - if(service->exiMsg.V2G_Message.Body.isused.ServicePaymentSelectionReq) - { - service->exiMsg.V2G_Message.Body.isused.ServicePaymentSelectionRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.ServicePaymentSelectionRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 67) - { - - - if(service->exiMsg.V2G_Message.Body.isused.PaymentDetailsReq) - { - service->exiMsg.V2G_Message.Body.isused.PaymentDetailsRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.PaymentDetailsRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 27) - { - - if(service->exiMsg.V2G_Message.Body.isused.ContractAuthenticationReq) - { - service->exiMsg.V2G_Message.Body.isused.ContractAuthenticationRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.ContractAuthenticationRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 16) - { - - if(service->exiMsg.V2G_Message.Body.isused.ChargeParameterDiscoveryReq) - { - service->exiMsg.V2G_Message.Body.isused.ChargeParameterDiscoveryRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 72) - { - - if(service->exiMsg.V2G_Message.Body.isused.PowerDeliveryReq) - { - service->exiMsg.V2G_Message.Body.isused.PowerDeliveryRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 23) - { - - if(service->exiMsg.V2G_Message.Body.isused.ChargingStatusReq) - { - service->exiMsg.V2G_Message.Body.isused.ChargingStatusRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.ChargingStatusRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 62) - { - - if(service->exiMsg.V2G_Message.Body.isused.MeteringReceiptReq) - { - service->exiMsg.V2G_Message.Body.isused.MeteringReceiptRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.MeteringReceiptRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 110) - { - - if(service->exiMsg.V2G_Message.Body.isused.SessionStopReq) - { - service->exiMsg.V2G_Message.Body.isused.SessionStopRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.SessionStopRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 12) - { - - if(service->exiMsg.V2G_Message.Body.isused.CertificateUpdateReq) - { - service->exiMsg.V2G_Message.Body.isused.CertificateUpdateRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 8) - { - - - if(service->exiMsg.V2G_Message.Body.isused.CertificateInstallationReq) - { - service->exiMsg.V2G_Message.Body.isused.CertificateInstallationRes=1; - } - else - { - return -1; - } - - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 4) - { - - if(service->exiMsg.V2G_Message.Body.isused.CableCheckReq) - { - service->exiMsg.V2G_Message.Body.isused.CableCheckRes=1; - } - else - { - return -1; - } - - - - service->exiMsg.V2G_Message.Body.CableCheckRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 76) - { - - - if(service->exiMsg.V2G_Message.Body.isused.PreChargeReq) - { - service->exiMsg.V2G_Message.Body.isused.PreChargeRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.PreChargeRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 34) - { - - - if(service->exiMsg.V2G_Message.Body.isused.CurrentDemandReq) - { - service->exiMsg.V2G_Message.Body.isused.CurrentDemandRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.CurrentDemandRes->ResponseCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 115) - { - - if(service->exiMsg.V2G_Message.Body.isused.WeldingDetectionReq) - { - service->exiMsg.V2G_Message.Body.isused.WeldingDetectionRes=1; - } - else - { - return -1; - } - - - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->ResponseCode = service->val.enumeration; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 46: /*EVSEID*/ - - if(service->val.type == EXI_DATATYPE_BINARY_HEX) - { - if( service->idPath.id[2] == 107) - { - memcpy(service->exiMsg.V2G_Message.Body.SessionSetupRes->EVSEID.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.SessionSetupRes->EVSEID.arraylen.data = service->val.binary.len; - - } else if(service->idPath.id[2] == 23) - { - memcpy(service->exiMsg.V2G_Message.Body.ChargingStatusRes->EVSEID.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.ChargingStatusRes->EVSEID.arraylen.data = service->val.binary.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 39: /*DateTimeNow*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - if( service->idPath.id[2] == 107) - { - service->exiMsg.V2G_Message.Body.SessionSetupRes->DateTimeNow = service->val.integer.val.int64; - service->exiMsg.V2G_Message.Body.SessionSetupRes->isused.DateTimeNow=1; - - } else if(service->idPath.id[2] == 67) - { - service->exiMsg.V2G_Message.Body.PaymentDetailsRes->DateTimeNow = service->val.integer.val.int64; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 96: /*ServiceID*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - if( service->idPath.id[2] == 90) - { - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceID = service->val.integer.val.uint16; - - } else if(service->idPath.id[4] == 134) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceID = service->val.integer.val.uint16; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 57: /*GenChallenge*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Body.PaymentDetailsRes->GenChallenge.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.PaymentDetailsRes->GenChallenge.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 84: /*SAScheduleTupleID*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - - if( service->idPath.id[2] == 23) - { - - service->exiMsg.V2G_Message.Body.ChargingStatusRes->SAScheduleTupleID = service->val.integer.val.int16; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->isused.SAScheduleTupleID=1; - - } else if(service->idPath.id[4] == 112) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SAScheduleTupleID = service->val.integer.val.int16; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 79: /*ReceiptRequired*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->ReceiptRequired = service->val.boolean; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 31: /*ContractSignatureEncryptedPrivateKey*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - if( service->idPath.id[2] == 12) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ContractSignatureEncryptedPrivateKey.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ContractSignatureEncryptedPrivateKey.arraylen.data = service->val.binary.len; - - } else if(service->idPath.id[2] == 8) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureEncryptedPrivateKey.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureEncryptedPrivateKey.arraylen.data = service->val.binary.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 38: /*DHParams*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - if( service->idPath.id[2] == 12) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateRes->DHParams.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->DHParams.arraylen.data = service->val.binary.len; - - } else if(service->idPath.id[2] == 8) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationRes->DHParams.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->DHParams.arraylen.data = service->val.binary.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 29: /*ContractID*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - if( service->idPath.id[2] == 12) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ContractID.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ContractID.arraylen.data = service->val.string.len; - - } else if(service->idPath.id[2] == 8) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractID.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractID.arraylen.data = service->val.string.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 83: /*RetryCounter*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->RetryCounter = service->val.integer.val.int16; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 45: /*EVSECurrentLimitAchieved*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSECurrentLimitAchieved = service->val.boolean; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 54: /*EVSEVoltageLimitAchieved*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEVoltageLimitAchieved = service->val.boolean; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 51: /*EVSEPowerLimitAchieved*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPowerLimitAchieved = service->val.boolean; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - } /* close switch(service->eqn.localPart) */ - break; - case 6: - switch(service->eqn.localPart) { - case 74: /*FaultCode*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - service->exiMsg.V2G_Message.Header->Notification.FaultCode = service->val.enumeration; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 75: /*FaultMsg*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Header->Notification.FaultMsg.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Header->Notification.FaultMsg.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Header->Notification.isused.FaultMsg=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 99: /*PaymentOption*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->PaymentOptions.PaymentOption[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->PaymentOptions.arraylen.PaymentOption++] = service->val.enumeration; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 130: /*ServiceID*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - - _setUInt16Value( &(service->val.integer),&(service->val.integer.val.uint16)); - - if( service->idPath.id[4] == 134) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceID = service->val.integer.val.uint16; - - } else if(service->idPath.id[5] == 134) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.ServiceID = service->val.integer.val.uint16; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 131: /*ServiceName*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - if( service->idPath.id[4] == 134) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceName.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceName.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.isused.ServiceName=1; - - } else if(service->idPath.id[5] == 134) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.ServiceName.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.ServiceName.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.isused.ServiceName=1; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 127: /*ServiceCategory*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - if( service->idPath.id[4] == 134) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceCategory = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.isused.ServiceCategory=1; - - } else if(service->idPath.id[5] == 134) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.ServiceCategory = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.isused.ServiceCategory=1; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 133: /*ServiceScope*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - if( service->idPath.id[4] == 134) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceScope.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.ServiceScope.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.ServiceTag.isused.ServiceScope=1; - - } else if(service->idPath.id[5] == 134) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.ServiceScope.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.ServiceScope.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].ServiceTag.isused.ServiceScope=1; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 76: /*FreeService*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - if( service->idPath.id[3] == 18) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.FreeService = service->val.boolean; - - } else if(service->idPath.id[4] == 126) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.Service[service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service].FreeService = service->val.boolean; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 71: /*EnergyTransferType*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ChargeService.EnergyTransferType = service->val.enumeration; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 84: /*Multiplier*/ - - if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) - { - if( service->idPath.id[3] == 47) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->EVSEMaxCurrent.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 76) - { - service->exiMsg.V2G_Message.Body.PreChargeRes->EVSEPresentVoltage.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 34) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentVoltage.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 52) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentCurrent.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 50) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumVoltageLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 48) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumCurrentLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 49) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumPowerLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 115) - { - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->EVSEPresentVoltage.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 57) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxVoltage.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 56) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxCurrent.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 61) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMinCurrent.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 58) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumCurrentLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 59) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumPowerLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 60) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumVoltageLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 62) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumCurrentLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 63) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumVoltageLimit.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 53) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSECurrentRegulationTolerance.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 64) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEPeakCurrentRipple.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 54) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEEnergyToBeDelivered.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[4] == 82) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterReading.Multiplier = service->val.integer.val.int8; - - } else if(service->idPath.id[6] == 168) - { - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.Multiplier = service->val.integer.val.int8; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 145: /*Unit*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - if( service->idPath.id[3] == 47) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->EVSEMaxCurrent.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->EVSEMaxCurrent.isused.Unit=1; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 76) - { - service->exiMsg.V2G_Message.Body.PreChargeRes->EVSEPresentVoltage.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.PreChargeRes->EVSEPresentVoltage.isused.Unit=1; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 34) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentVoltage.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentVoltage.isused.Unit=1; - - } else if(service->idPath.id[3] == 52) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentCurrent.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentCurrent.isused.Unit=1; - - } else if(service->idPath.id[3] == 50) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumVoltageLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumVoltageLimit.isused.Unit=1; - - } else if(service->idPath.id[3] == 48) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumCurrentLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumCurrentLimit.isused.Unit=1; - - } else if(service->idPath.id[3] == 49) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumPowerLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumPowerLimit.isused.Unit=1; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 115) - { - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->EVSEPresentVoltage.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->EVSEPresentVoltage.isused.Unit=1; - - } else if(service->idPath.id[4] == 57) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxVoltage.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxVoltage.isused.Unit=1; - - } else if(service->idPath.id[4] == 56) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxCurrent.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxCurrent.isused.Unit=1; - - } else if(service->idPath.id[4] == 61) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMinCurrent.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMinCurrent.isused.Unit=1; - - } else if(service->idPath.id[4] == 58) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumCurrentLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumCurrentLimit.isused.Unit=1; - - } else if(service->idPath.id[4] == 59) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumPowerLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumPowerLimit.isused.Unit=1; - - } else if(service->idPath.id[4] == 60) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumVoltageLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumVoltageLimit.isused.Unit=1; - - } else if(service->idPath.id[4] == 62) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumCurrentLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumCurrentLimit.isused.Unit=1; - - } else if(service->idPath.id[4] == 63) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumVoltageLimit.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumVoltageLimit.isused.Unit=1; - - } else if(service->idPath.id[4] == 53) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSECurrentRegulationTolerance.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSECurrentRegulationTolerance.isused.Unit=1; - - } else if(service->idPath.id[4] == 64) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEPeakCurrentRipple.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEPeakCurrentRipple.isused.Unit=1; - - } else if(service->idPath.id[4] == 54) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEEnergyToBeDelivered.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEEnergyToBeDelivered.isused.Unit=1; - - } else if(service->idPath.id[4] == 82) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterReading.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterReading.isused.Unit=1; - - } else if(service->idPath.id[6] == 168) - { - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.Unit = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.isused.Unit=1; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 146: /*Value*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - - if( service->idPath.id[3] == 47) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->EVSEMaxCurrent.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 76) - { - service->exiMsg.V2G_Message.Body.PreChargeRes->EVSEPresentVoltage.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 34) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentVoltage.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 52) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEPresentCurrent.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 50) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumVoltageLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 48) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumCurrentLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 49) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->EVSEMaximumPowerLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[3] == 53 && service->idPath.id[2] == 115) - { - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->EVSEPresentVoltage.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 57) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxVoltage.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 56) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMaxCurrent.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 61) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->EVSEMinCurrent.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 58) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumCurrentLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 59) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumPowerLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 60) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMaximumVoltageLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 62) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumCurrentLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 63) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEMinimumVoltageLimit.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 53) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSECurrentRegulationTolerance.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 64) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEPeakCurrentRipple.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 54) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->EVSEEnergyToBeDelivered.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[4] == 82) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterReading.Value = service->val.integer.val.int16; - - } else if(service->idPath.id[6] == 168) - { - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.Value = service->val.integer.val.int16; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 149: /*boolValue*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].boolValue = service->val.boolean; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 150: /*byteValue*/ - - if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) - { - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].byteValue = service->val.integer.val.int8; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 177: /*shortValue*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].shortValue = service->val.integer.val.int16; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 162: /*intValue*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - _setInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].intValue)); - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 181: /*stringValue*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].stringValue.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].stringValue.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 96: /*ParameterSetID*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].ParameterSetID = service->val.integer.val.int16; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 8: /*Certificate*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - if( service->idPath.id[2] == 12) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ContractSignatureCertChain.Certificate.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateUpdateRes->ContractSignatureCertChain.Certificate.arraylen.data = service->val.binary.len; - - } else if(service->idPath.id[5] == 8 && service->idPath.id[4] == 141) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.SubCertificates.Certificate[service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.SubCertificates.arraylen.Certificate].data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.SubCertificates.Certificate[service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.SubCertificates.arraylen.Certificate++].arraylen.data = service->val.binary.len; - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.isused.SubCertificates=1; - - } else if(service->idPath.id[2] == 8) - { - memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.Certificate.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.CertificateInstallationRes->ContractSignatureCertChain.Certificate.arraylen.data = service->val.binary.len; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 179: /*start*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - if( service->idPath.id[5] == 88) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.PMaxScheduleEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.arraylen.PMaxScheduleEntry].RelativeTimeInterval.start)); - - } else if(service->idPath.id[5] == 117) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].RelativeTimeInterval.start)); - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 156: /*duration*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - if( service->idPath.id[5] == 88) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.PMaxScheduleEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.arraylen.PMaxScheduleEntry].RelativeTimeInterval.duration)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.PMaxScheduleEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.arraylen.PMaxScheduleEntry].RelativeTimeInterval.isused.duration=1; - - } else if(service->idPath.id[5] == 117) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].RelativeTimeInterval.duration)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].RelativeTimeInterval.isused.duration=1; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 87: /*PMax*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.PMaxScheduleEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.arraylen.PMaxScheduleEntry].PMax = service->val.integer.val.int16; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 91: /*PMaxScheduleID*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.PMaxScheduleID = service->val.integer.val.int16; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 153: /*costKind*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].Cost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].arraylen.Cost].costKind = service->val.enumeration; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 147: /*amount*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].Cost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].arraylen.Cost].amount)); - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 148: /*amountMultiplier*/ - - if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].Cost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].arraylen.Cost].amountMultiplier = service->val.integer.val.int8; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].Cost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].arraylen.Cost].isused.amountMultiplier=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 180: /*startValue*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].startValue)); - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 32: /*EPriceLevel*/ - - if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].EPriceLevel = service->val.integer.val.uint8; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 121: /*SalesTariffID*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffID = service->val.integer.val.int16; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 118: /*SalesTariffDescription*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffDescription.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffDescription.arraylen.data = service->val.string.len; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->isused.SalesTariffDescription=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 86: /*NumEPriceLevels*/ - - if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->NumEPriceLevels = service->val.integer.val.uint8; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 113: /*SAScheduleTupleID*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - - if( service->idPath.id[2] == 23) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->SAScheduleTupleID = service->val.integer.val.int16; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->isused.SAScheduleTupleID=1; - - } else if(service->idPath.id[4] == 112) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SAScheduleTupleID = service->val.integer.val.int16; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 102: /*PowerSwitchClosed*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - if( service->idPath.id[2] == 72) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->AC_EVSEStatus->PowerSwitchClosed = service->val.boolean; - - } else if(service->idPath.id[2] == 23) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->AC_EVSEStatus.PowerSwitchClosed = service->val.boolean; - - } else if(service->idPath.id[2] == 62) - { - service->exiMsg.V2G_Message.Body.MeteringReceiptRes->AC_EVSEStatus.PowerSwitchClosed = service->val.boolean; - - } else if(service->idPath.id[4] == 4) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->AC_EVSEStatus.PowerSwitchClosed = service->val.boolean; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 105: /*RCD*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - if( service->idPath.id[2] == 72) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->AC_EVSEStatus->RCD = service->val.boolean; - - } else if(service->idPath.id[2] == 23) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->AC_EVSEStatus.RCD = service->val.boolean; - - } else if(service->idPath.id[2] == 62) - { - service->exiMsg.V2G_Message.Body.MeteringReceiptRes->AC_EVSEStatus.RCD = service->val.boolean; - - } else if(service->idPath.id[4] == 4) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->AC_EVSEStatus.RCD = service->val.boolean; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 138: /*ShutDownTime*/ - - if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) - { - if( service->idPath.id[2] == 72) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.PowerDeliveryRes->AC_EVSEStatus->ShutDownTime)); - - } else if(service->idPath.id[2] == 23) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargingStatusRes->AC_EVSEStatus.ShutDownTime)); - - } else if(service->idPath.id[2] == 62) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.MeteringReceiptRes->AC_EVSEStatus.ShutDownTime)); - - } else if(service->idPath.id[4] == 4) - { - _setUInt32Value( &(service->val.integer),&(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->AC_EVSEStatus.ShutDownTime)); - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 140: /*StopCharging*/ - - if(service->val.type == EXI_DATATYPE_BOOLEAN) - { - if( service->idPath.id[2] == 72) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->AC_EVSEStatus->StopCharging = service->val.boolean; - - } else if(service->idPath.id[2] == 23) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->AC_EVSEStatus.StopCharging = service->val.boolean; - - } else if(service->idPath.id[2] == 62) - { - service->exiMsg.V2G_Message.Body.MeteringReceiptRes->AC_EVSEStatus.StopCharging = service->val.boolean; - - } else if(service->idPath.id[4] == 4) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->AC_EVSEChargeParameter->AC_EVSEStatus.StopCharging = service->val.boolean; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 55: /*EVSEIsolationStatus*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - if( service->idPath.id[2] == 72) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->DC_EVSEStatus->EVSEIsolationStatus = service->val.enumeration; - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->DC_EVSEStatus->isused.EVSEIsolationStatus=1; - - } else if(service->idPath.id[2] == 4) - { - service->exiMsg.V2G_Message.Body.CableCheckRes->DC_EVSEStatus.EVSEIsolationStatus = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CableCheckRes->DC_EVSEStatus.isused.EVSEIsolationStatus=1; - - } else if(service->idPath.id[2] == 76) - { - service->exiMsg.V2G_Message.Body.PreChargeRes->DC_EVSEStatus.EVSEIsolationStatus = service->val.enumeration; - service->exiMsg.V2G_Message.Body.PreChargeRes->DC_EVSEStatus.isused.EVSEIsolationStatus=1; - - } else if(service->idPath.id[2] == 34) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->DC_EVSEStatus.EVSEIsolationStatus = service->val.enumeration; - service->exiMsg.V2G_Message.Body.CurrentDemandRes->DC_EVSEStatus.isused.EVSEIsolationStatus=1; - - } else if(service->idPath.id[2] == 115) - { - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->DC_EVSEStatus.EVSEIsolationStatus = service->val.enumeration; - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->DC_EVSEStatus.isused.EVSEIsolationStatus=1; - - } else if(service->idPath.id[4] == 25) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->DC_EVSEStatus.EVSEIsolationStatus = service->val.enumeration; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->DC_EVSEStatus.isused.EVSEIsolationStatus=1; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 66: /*EVSEStatusCode*/ - - if(service->val.type == EXI_DATATYPE_ENUMERATION) - { - if( service->idPath.id[2] == 72) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->DC_EVSEStatus->EVSEStatusCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 4) - { - service->exiMsg.V2G_Message.Body.CableCheckRes->DC_EVSEStatus.EVSEStatusCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 76) - { - service->exiMsg.V2G_Message.Body.PreChargeRes->DC_EVSEStatus.EVSEStatusCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 34) - { - service->exiMsg.V2G_Message.Body.CurrentDemandRes->DC_EVSEStatus.EVSEStatusCode = service->val.enumeration; - - } else if(service->idPath.id[2] == 115) - { - service->exiMsg.V2G_Message.Body.WeldingDetectionRes->DC_EVSEStatus.EVSEStatusCode = service->val.enumeration; - - } else if(service->idPath.id[4] == 25) - { - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->DC_EVSEStatus.EVSEStatusCode = service->val.enumeration; - } - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 80: /*MeterID*/ - - if(service->val.type == EXI_DATATYPE_STRING) - { - memcpy(service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterID.data, service->val.string.codepoints,service->val.string.len*sizeof(uint32_t)); - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterID.arraylen.data = service->val.string.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 139: /*SigMeterReading*/ - - if(service->val.type == EXI_DATATYPE_BINARY_BASE64) - { - memcpy(service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.SigMeterReading.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.SigMeterReading.arraylen.data = service->val.binary.len; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.isused.SigMeterReading=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 83: /*MeterStatus*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - _setInt16Value( &(service->val.integer),&(service->val.integer.val.int16)); - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.MeterStatus = service->val.integer.val.int16; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.isused.MeterStatus=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - case 143: /*TMeter*/ - - if(service->val.type == EXI_DATATYPE_INTEGER) - { - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.TMeter = service->val.integer.val.int64; - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.isused.TMeter=1; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - } /* close switch(service->eqn.localPart) */ - break; - case 8: - switch(service->eqn.localPart) { - case 2: /*SessionID*/ - - if(service->val.type == EXI_DATATYPE_BINARY_HEX) - { - memcpy(service->exiMsg.V2G_Message.Header->SessionID.data, service->val.binary.data,service->val.binary.len); - service->exiMsg.V2G_Message.Header->SessionID.arraylen.data = service->val.binary.len; - - } - else - { - return -1; /* wrong data type */ - } - - - break; - } /* close switch(service->eqn.localPart) */ - break; - - } /* close switch(service->eqn.namespaceURI) */ - return 0; -} - -/** - * Deserialize an element of the EXI stream - * @return 0 = 0K; -1 = ERROR - */ -static int deserializeElement(struct EXIService* service) -{ - switch(service->eqn.namespaceURI) { - case 0: - switch(service->eqn.localPart) { - - } - break; - case 4: - switch(service->eqn.localPart) { - case 34:/* Reference */ - - service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference++; - - break; - case 14:/* KeyInfo */ - - service->exiMsg.V2G_Message.Header->Signature->isused.KeyInfo=1; - - break; - case 42:/* Signature */ - - service->exiMsg.V2G_Message.Header->isused.Signature=1; - - break; - - } - break; - case 5: - switch(service->eqn.localPart) { - case 97:/* ServiceList */ - - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->isused.ServiceList=1; - - break; - case 98:/* ServiceParameterList */ - - service->exiMsg.V2G_Message.Body.ServiceDetailRes->isused.ServiceParameterList=1; - - break; - case 47:/* EVSEMaxCurrent */ - - service->exiMsg.V2G_Message.Body.ChargingStatusRes->isused.EVSEMaxCurrent=1; - - break; - case 59:/* MeterInfo */ - - service->exiMsg.V2G_Message.Body.ChargingStatusRes->isused.MeterInfo=1; - - break; - case 50:/* EVSEMaximumVoltageLimit */ - - service->exiMsg.V2G_Message.Body.CurrentDemandRes->isused.EVSEMaximumVoltageLimit=1; - - break; - case 48:/* EVSEMaximumCurrentLimit */ - - service->exiMsg.V2G_Message.Body.CurrentDemandRes->isused.EVSEMaximumCurrentLimit=1; - - break; - case 49:/* EVSEMaximumPowerLimit */ - - service->exiMsg.V2G_Message.Body.CurrentDemandRes->isused.EVSEMaximumPowerLimit=1; - - break; - - } - break; - case 6: - switch(service->eqn.localPart) { - case 126:/* Service */ - - service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes->ServiceList.arraylen.Service++; - - break; - case 94:/* Parameter */ - - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter++; - - break; - case 95:/* ParameterSet */ - - service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet++; - - break; - case 89:/* PMaxScheduleEntry */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].PMaxSchedule.arraylen.PMaxScheduleEntry++; - - break; - case 16:/* Cost */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].isused.Cost=1; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].ConsumptionCost[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost].arraylen.Cost++; - - break; - case 14:/* ConsumptionCost */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].isused.ConsumptionCost=1; - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->SalesTariffEntry[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry].arraylen.ConsumptionCost++; - - break; - case 119:/* SalesTariffEntry */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].SalesTariff->arraylen.SalesTariffEntry++; - - break; - case 117:/* SalesTariff */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->SAScheduleTuple[service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple].isused.SalesTariff=1; - - break; - case 112:/* SAScheduleTuple */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->SAScheduleList->arraylen.SAScheduleTuple++; - - break; - case 59:/* EVSEMaximumPowerLimit */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->isused.EVSEMaximumPowerLimit=1; - - break; - case 53:/* EVSECurrentRegulationTolerance */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->isused.EVSECurrentRegulationTolerance=1; - - break; - case 54:/* EVSEEnergyToBeDelivered */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->DC_EVSEChargeParameter->isused.EVSEEnergyToBeDelivered=1; - - break; - case 110:/* SAScheduleList */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->isused.SAScheduleList=1; - - break; - case 2:/* AC_EVSEChargeParameter */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->isused.AC_EVSEChargeParameter=1; - - break; - case 23:/* DC_EVSEChargeParameter */ - - service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes->isused.DC_EVSEChargeParameter=1; - - break; - case 4:/* AC_EVSEStatus */ - - if( service->idPath.id[3] != 2) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->isused.AC_EVSEStatus=1; - } - - break; - case 25:/* DC_EVSEStatus */ - - if( service->idPath.id[3] != 23) - { - service->exiMsg.V2G_Message.Body.PowerDeliveryRes->isused.DC_EVSEStatus=1; - } - - - break; - case 82:/* MeterReading */ - - service->exiMsg.V2G_Message.Body.ChargingStatusRes->MeterInfo.isused.MeterReading=1; - - break; - - } - break; - case 8: - switch(service->eqn.localPart) { - case 1:/* Notification */ - - service->exiMsg.V2G_Message.Header->isused.Notification=1; - - break; - - } - break; - - - } - return 0; -} - - - - - /** - * Deserialize the EXI stream - * @return 0 = 0K; -1 = ERROR - */ -static int deserializeMessage(struct EXIService* service) -{ - int noEndOfDocument = 1; /* true */ - int returnCode=0; - - - do { - exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event)); - if (returnCode < 0) { - printf("[ERROR] %d \n", returnCode); - return returnCode; - } - - switch (service->event) { - case EXI_EVENT_START_DOCUMENT: - - returnCode = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode)); - - break; - case EXI_EVENT_END_DOCUMENT: - - returnCode = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode)); - noEndOfDocument = 0; /* false */ - break; - case EXI_EVENT_START_ELEMENT: - returnCode = exiDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->eqn)); - service->idPath.id[service->idPath.pos++]=service->eqn.localPart; - - break; - case EXI_EVENT_END_ELEMENT: - - returnCode = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn)); - service->idPath.pos--; - - returnCode = deserializeElement(service); - break; - case EXI_EVENT_CHARACTERS: - /* decode */ - returnCode = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val)); - - /* assign character data to the v2g message structure */ - returnCode = deserializeElementAttributeCharacter(service); - break; - case EXI_EVENT_ATTRIBUTE: - /* decode */ - returnCode = exiDecodeAttribute(&(service->inStream), &(service->stateDecode), &(service->eqn), &(service->val)); - returnCode = deserializeElementAttributeCharacter(service); - break; - case EXI_EVENT_START_ELEMENT_GENERIC: - break; - case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED: - break; - case EXI_EVENT_END_ELEMENT_UNDECLARED: - break; - case EXI_EVENT_CHARACTERS_GENERIC: - break; - case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED: - break; - case EXI_EVENT_ATTRIBUTE_GENERIC: - break; - case EXI_EVENT_ATTRIBUTE_INVALID_VALUE: - break; - case EXI_EVENT_ATTRIBUTE_ANY_INVALID_VALUE: - break; - case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED: - break; - default: - /* ERROR */ - return -1; - } - - } while (noEndOfDocument); - - return 0; -} - - - - /* Initialize the v2g client */ -int init_v2gServiceClient(struct EXIService* service, bytes_t bytes, string_ucs_t string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size, uint32_t* outPayloadLength, uint16_t transportHeaderOffset) - -{ - /* init byte array */ - service->val.binary = bytes; - - /* init string array */ - service->val.string = string; - - /* init input / output stream */ - service->inStream.data=inStream; - service->inStream.size=max_inStream_size; - - service->outStream.data=outStream; - service->outStream.size=max_outStream_size; - service->outStream.pos=outPayloadLength; - - - /* init offset for transport protocol */ - service->transportHeaderOffset=transportHeaderOffset; - - return 0; - -} diff --git a/src/service/v2g_serviceClientStubs.h b/src/service/v2g_serviceClientStubs.h deleted file mode 100644 index 5ea479e..0000000 --- a/src/service/v2g_serviceClientStubs.h +++ /dev/null @@ -1,268 +0,0 @@ - - - - -/* - * Copyright (C) 2007-2012 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXISeGen
- * - ********************************************************************/ - - - - #ifdef __cplusplus -extern "C" { -#endif - -#ifndef SERVICECLIENTSTUBS_H -#define SERVICECLIENTSTUBS_H - - #include "v2g_service.h" - #include "v2g_serviceDataTypes.h" - #include "v2g_serviceClientStubs.h" - -/** - * \brief Prepares the remote sessionSetup method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct SessionSetupReqType* Request data for the server (has to be set up before) - * \param result struct SessionSetupResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_sessionSetup(struct EXIService* service, struct MessageHeaderType* header, struct SessionSetupReqType* params, struct SessionSetupResType* result); - - - - -/** - * \brief Prepares the remote serviceDiscovery method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ServiceDiscoveryReqType* Request data for the server (has to be set up before) - * \param result struct ServiceDiscoveryResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_serviceDiscovery(struct EXIService* service, struct MessageHeaderType* header, struct ServiceDiscoveryReqType* params, struct ServiceDiscoveryResType* result); - - - - -/** - * \brief Prepares the remote serviceDetail method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ServiceDetailReqType* Request data for the server (has to be set up before) - * \param result struct ServiceDetailResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_serviceDetail(struct EXIService* service, struct MessageHeaderType* header, struct ServiceDetailReqType* params, struct ServiceDetailResType* result); - - - - -/** - * \brief Prepares the remote servicePaymentSelection method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ServicePaymentSelectionReqType* Request data for the server (has to be set up before) - * \param result struct ServicePaymentSelectionResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_servicePaymentSelection(struct EXIService* service, struct MessageHeaderType* header, struct ServicePaymentSelectionReqType* params, struct ServicePaymentSelectionResType* result); - - - - -/** - * \brief Prepares the remote paymentDetails method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct PaymentDetailsReqType* Request data for the server (has to be set up before) - * \param result struct PaymentDetailsResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_paymentDetails(struct EXIService* service, struct MessageHeaderType* header, struct PaymentDetailsReqType* params, struct PaymentDetailsResType* result); - - - - -/** - * \brief Prepares the remote contractAuthentication method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ContractAuthenticationReqType* Request data for the server (has to be set up before) - * \param result struct ContractAuthenticationResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_contractAuthentication(struct EXIService* service, struct MessageHeaderType* header, struct ContractAuthenticationReqType* params, struct ContractAuthenticationResType* result); - - - - -/** - * \brief Prepares the remote chargeParameterDiscovery method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct ChargeParameterDiscoveryReqType* Request data for the server (has to be set up before) - * \param result struct ChargeParameterDiscoveryResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_chargeParameterDiscovery(struct EXIService* service, struct MessageHeaderType* header, struct ChargeParameterDiscoveryReqType* params, struct ChargeParameterDiscoveryResType* result); - - - - -/** - * \brief Prepares the remote powerDelivery method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct PowerDeliveryReqType* Request data for the server (has to be set up before) - * \param result struct PowerDeliveryResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_powerDelivery(struct EXIService* service, struct MessageHeaderType* header, struct PowerDeliveryReqType* params, struct PowerDeliveryResType* result); - - - - -/** - * \brief Prepares the remote chargingStatus method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param result struct ChargingStatusResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_chargingStatus(struct EXIService* service, struct MessageHeaderType* header, struct ChargingStatusResType* result); - - - - -/** - * \brief Prepares the remote meteringReceipt method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct MeteringReceiptReqType* Request data for the server (has to be set up before) - * \param result struct MeteringReceiptResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_meteringReceipt(struct EXIService* service, struct MessageHeaderType* header, struct MeteringReceiptReqType* params, struct MeteringReceiptResType* result); - - - - -/** - * \brief Prepares the remote certificateUpdate method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CertificateUpdateReqType* Request data for the server (has to be set up before) - * \param result struct CertificateUpdateResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_certificateUpdate(struct EXIService* service, struct MessageHeaderType* header, struct CertificateUpdateReqType* params, struct CertificateUpdateResType* result); - - - - -/** - * \brief Prepares the remote certificateInstallation method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CertificateInstallationReqType* Request data for the server (has to be set up before) - * \param result struct CertificateInstallationResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_certificateInstallation(struct EXIService* service, struct MessageHeaderType* header, struct CertificateInstallationReqType* params, struct CertificateInstallationResType* result); - - - - -/** - * \brief Prepares the remote cableCheck method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CableCheckReqType* Request data for the server (has to be set up before) - * \param result struct CableCheckResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_cableCheck(struct EXIService* service, struct MessageHeaderType* header, struct CableCheckReqType* params, struct CableCheckResType* result); - - - - -/** - * \brief Prepares the remote preCharge method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct PreChargeReqType* Request data for the server (has to be set up before) - * \param result struct PreChargeResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_preCharge(struct EXIService* service, struct MessageHeaderType* header, struct PreChargeReqType* params, struct PreChargeResType* result); - - - - -/** - * \brief Prepares the remote currentDemand method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct CurrentDemandReqType* Request data for the server (has to be set up before) - * \param result struct CurrentDemandResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_currentDemand(struct EXIService* service, struct MessageHeaderType* header, struct CurrentDemandReqType* params, struct CurrentDemandResType* result); - - - - -/** - * \brief Prepares the remote weldingDetection method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param params struct WeldingDetectionReqType* Request data for the server (has to be set up before) - * \param result struct WeldingDetectionResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_weldingDetection(struct EXIService* service, struct MessageHeaderType* header, struct WeldingDetectionReqType* params, struct WeldingDetectionResType* result); - - - - -/** - * \brief Prepares the remote sessionStop method - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param header struct MessageHeaderType* Header data structure - * \param result struct SessionStopResType* Contains the response data from the server - * \return 0 = 0K; -1 = ERROR */ - int prepare_sessionStop(struct EXIService* service, struct MessageHeaderType* header, struct SessionStopResType* result); - - - - - - - /** - * \brief Determines which response message was received - * \param service struct EXIService* Service data structure (has to be initialized before) - * \param respMsg enum responseMessages* contains the name of the response message - * \param result struct SessionStopResType* Contains the response data from the server - * \return 0 = 0K; 0 != ERROR */ -int determineResponseMesssage(struct EXIService* service, enum responseMessages* respMsg); - - - - - /* Initialize the v2g client */ -int init_v2gServiceClient(struct EXIService* service, bytes_t bytes, string_ucs_t string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size, uint32_t* outPayloadLength, uint16_t transportHeaderOffset); - - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/src/service/v2g_serviceDataSerialization.c b/src/service/v2g_serviceDataSerialization.c deleted file mode 100644 index 6fcce74..0000000 --- a/src/service/v2g_serviceDataSerialization.c +++ /dev/null @@ -1,7882 +0,0 @@ - -/* - * Copyright (C) 2007-2012 Siemens AG - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, seeCode generated by EXISeGen
- * - ********************************************************************/ - - -#include "v2g_service.h" -#include "v2g_serviceDataTypes.h" - -#include "EXITypes.h" -#include "EXIEncoder.h" - -#includeCode generated by EXISeGen
- * - ********************************************************************/ - - -#include "v2g_service.h" -#include "v2g_serviceDispatcher.h" -#include "v2g_serviceDataTypes.h" -#include "v2g_serviceDataTypes.c" -#include "v2g_serviceMethods.h" -#include "v2g_serviceDataSerialization.c" -#include "EXITypes.h" -#include "EXIDecoder.h" -#include "EXIEncoder.h" -#include "StringTable.h" -#includeCode generated by EXISeGen
- * - ********************************************************************/ - - - #ifdef __cplusplus -extern "C" { -#endif - -#ifndef SERVICEMETHODS_H -#define SERVICEMETHODS_H - -#include "v2g_serviceDataTypes.h" -#include "EXITypes.h" - -/* This service methods has to be implemented by the EVSE server */ -int sessionSetup(struct MessageHeaderType* header, struct SessionSetupReqType* param, struct SessionSetupResType* result); - -int serviceDiscovery(struct MessageHeaderType* header, struct ServiceDiscoveryReqType* param, struct ServiceDiscoveryResType* result); - -int serviceDetail(struct MessageHeaderType* header, struct ServiceDetailReqType* param, struct ServiceDetailResType* result); - -int servicePaymentSelection(struct MessageHeaderType* header, struct ServicePaymentSelectionReqType* param, struct ServicePaymentSelectionResType* result); - -int paymentDetails(struct MessageHeaderType* header, struct PaymentDetailsReqType* param, struct PaymentDetailsResType* result); - -int contractAuthentication(struct MessageHeaderType* header, struct ContractAuthenticationReqType* param, struct ContractAuthenticationResType* result); - -int chargeParameterDiscovery(struct MessageHeaderType* header, struct ChargeParameterDiscoveryReqType* param, struct ChargeParameterDiscoveryResType* result); - -int powerDelivery(struct MessageHeaderType* header, struct PowerDeliveryReqType* param, struct PowerDeliveryResType* result); - -int chargingStatus(struct MessageHeaderType* header, struct ChargingStatusReqType* param, struct ChargingStatusResType* result); - -int meteringReceipt(struct MessageHeaderType* header, struct MeteringReceiptReqType* param, struct MeteringReceiptResType* result); - -int sessionStop(struct MessageHeaderType* header, struct SessionStopType* param, struct SessionStopResType* result); - -int certificateUpdate(struct MessageHeaderType* header, struct CertificateUpdateReqType* param, struct CertificateUpdateResType* result); - -int certificateInstallation(struct MessageHeaderType* header, struct CertificateInstallationReqType* param, struct CertificateInstallationResType* result); - -int cableCheck(struct MessageHeaderType* header, struct CableCheckReqType* param, struct CableCheckResType* result); - -int preCharge(struct MessageHeaderType* header, struct PreChargeReqType* param, struct PreChargeResType* result); - -int currentDemand(struct MessageHeaderType* header, struct CurrentDemandReqType* param, struct CurrentDemandResType* result); - -int weldingDetection(struct MessageHeaderType* header, struct WeldingDetectionReqType* param, struct WeldingDetectionResType* result); - - - - - - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/src/test/evse_server.c b/src/test/evse_server.c new file mode 100644 index 0000000..014ef7e --- /dev/null +++ b/src/test/evse_server.c @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2007-2012 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, seeCode generated by EXIdizer.com
+ ********************************************************************/ + + + +/******************************************************************* + * + *Sample program to illustrate how to read an EXI stream and + * directly write it again to an output
+ * + *e.g.,