From e1e0b55598ec56b453f89c58b2d63dac9ad05124 Mon Sep 17 00:00:00 2001 From: sebastiankb Date: Wed, 22 Dec 2010 14:34:31 +0000 Subject: [PATCH] git-svn-id: https://svn.code.sf.net/p/openv2g/code/trunk@27 d9f2db14-54d0-4bde-b00c-16405c910529 --- src/codec/BitDecoderChannel.c | 257 ------ src/codec/BitDecoderChannel.h | 117 --- src/codec/BitEncoderChannel.c | 298 ------- src/codec/BitEncoderChannel.h | 133 --- src/codec/BitInputStream.c | 100 --- src/codec/BitInputStream.h | 44 - src/codec/BitOutputStream.c | 95 -- src/codec/BitOutputStream.h | 48 - src/codec/ByteStream.c | 83 -- src/codec/ByteStream.h | 46 - src/codec/EXICoder.c | 70 -- src/codec/EXICoder.h | 51 -- src/codec/EXIDecoder.c | 1512 -------------------------------- src/codec/EXIDecoder.h | 61 -- src/codec/EXIEncoder.c | 1335 ---------------------------- src/codec/EXIEncoder.h | 61 -- src/codec/EXIHeaderDecoder.c | 58 -- src/codec/EXIHeaderDecoder.h | 44 - src/codec/EXIHeaderEncoder.c | 43 - src/codec/EXIHeaderEncoder.h | 44 - src/codec/EXITypes.h | 185 ---- src/codec/StringTable.c | 112 --- src/codec/StringTable.h | 53 -- src/codec/StringTableEntries.c | 122 --- src/codec/StringTableEntries.h | 60 -- src/codec/UCSString.c | 64 -- src/codec/UCSString.h | 48 - 27 files changed, 5144 deletions(-) delete mode 100644 src/codec/BitDecoderChannel.c delete mode 100644 src/codec/BitDecoderChannel.h delete mode 100644 src/codec/BitEncoderChannel.c delete mode 100644 src/codec/BitEncoderChannel.h delete mode 100644 src/codec/BitInputStream.c delete mode 100644 src/codec/BitInputStream.h delete mode 100644 src/codec/BitOutputStream.c delete mode 100644 src/codec/BitOutputStream.h delete mode 100644 src/codec/ByteStream.c delete mode 100644 src/codec/ByteStream.h delete mode 100644 src/codec/EXICoder.c delete mode 100644 src/codec/EXICoder.h delete mode 100644 src/codec/EXIDecoder.c delete mode 100644 src/codec/EXIDecoder.h delete mode 100644 src/codec/EXIEncoder.c delete mode 100644 src/codec/EXIEncoder.h delete mode 100644 src/codec/EXIHeaderDecoder.c delete mode 100644 src/codec/EXIHeaderDecoder.h delete mode 100644 src/codec/EXIHeaderEncoder.c delete mode 100644 src/codec/EXIHeaderEncoder.h delete mode 100644 src/codec/EXITypes.h delete mode 100644 src/codec/StringTable.c delete mode 100644 src/codec/StringTable.h delete mode 100644 src/codec/StringTableEntries.c delete mode 100644 src/codec/StringTableEntries.h delete mode 100644 src/codec/UCSString.c delete mode 100644 src/codec/UCSString.h diff --git a/src/codec/BitDecoderChannel.c b/src/codec/BitDecoderChannel.c deleted file mode 100644 index c82b25c..0000000 --- a/src/codec/BitDecoderChannel.c +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - * Bit decoding functionalities - * - ********************************************************************/ - -#include -#include -#include -#include -#include - -#include "BitDecoderChannel.h" -#include "BitInputStream.h" -#include "EXITypes.h" - -#ifndef BIT_DECODER_CHANNEL_C -#define BIT_DECODER_CHANNEL_C - -int decode(bitstream_t* stream, uint8_t* b) { - return readBits(stream, 8, b); -} - -int decodeBoolean(bitstream_t* stream, int* b) { - uint8_t ub; - int errn = readBits(stream, 1, &ub); - *b = (ub == 0) ? 0 : 1; - return errn; -} - -int decodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint8_t* uint8) { - if (nbits == 0) { - *uint8 = 0; - return 0; - } else { - return readBits(stream, nbits, uint8); - } -} - -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; -} - -/** - * 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 = -(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 = -(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, float_me_t* f) { - int errn = decodeInteger64(stream, &f->mantissa); - if (errn < 0) { - return errn; - } - return decodeInteger32(stream, &f->exponent); -} - -/** - * Decode a sequence of characters for a given length. - */ -int decodeStringOnly(bitstream_t* stream, size_t len, string_ucs_t* s) { - decodeCharacters(stream, len, s->codepoints); - s->len = len; - return 0; -} - -/** - * Decode a length prefixed sequence of characters. - */ -int decodeString(bitstream_t* stream, string_ucs_t* s) { - int errn = decodeUnsignedInteger32(stream, &s->len); - if (errn < 0) { - return errn; - } - return decodeStringOnly(stream, s->len, s); -} - -int decodeStringValue(bitstream_t* stream, string_ucs_t* s) { - int errn = decodeUnsignedInteger32(stream, &s->len); - if (errn < 0) { - return errn; - } - - switch (s->len) { - case 0: - /* local value partition */ - printf("[ERROR] String local value partition hit not supported \n"); - return -2; - case 1: - /* found in global value partition */ - printf("[ERROR] String global value partition hit not supported \n"); - return -3; - default: - /* not found in global value (and local value) partition - * ==> string literal is encoded as a String with the length - * incremented by two */ - return decodeStringOnly(stream, ((s->len) - 2), s); - /* After encoding the string value, it is added to both the - * associated "local" value string table partition and the global - * value string table partition */ - /* addValue(context, value); */ - } -} - -/** - * 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, size_t len, uint32_t* chars) { - unsigned int i; - int errn = 0; - for (i = 0; i < len && errn >= 0; i++) { - errn = decodeUnsignedInteger32(stream, &chars[i]); - } - - return errn; -} - -/** - * Decode a binary value as a length-prefixed sequence of octets. - */ -int decodeBinary(bitstream_t* stream, bytes_t* bytes) { - unsigned int i; - int errn = decodeUnsignedInteger32(stream, &bytes->len); - if (errn < 0) { - return errn; - } - - for (i = 0; i < bytes->len && errn >= 0; i++) { - errn = decode(stream, &bytes->data[i]); - } - - return errn; -} - -#endif - diff --git a/src/codec/BitDecoderChannel.h b/src/codec/BitDecoderChannel.h deleted file mode 100644 index 7623304..0000000 --- a/src/codec/BitDecoderChannel.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "EXITypes.h" - -#ifndef BIT_DECODER_CHANNEL_H -#define BIT_DECODER_CHANNEL_H - -/** - * Decode a single boolean value. The value false is represented by the bit - * 0, and the value true is represented by the bit 1. - */ -int decodeBoolean(bitstream_t* stream, int* b); - -/** - * Decodes and returns an n-bit unsigned integer. - */ -int decodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint8_t* uint8); - -/** - * 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 decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32); - -/** - * 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); - -/** - * 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); - -/** - * 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); - -/** - * 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, float_me_t* f); - -/** - * Decode a length prefixed sequence of characters. - */ -int decodeString(bitstream_t* stream, string_ucs_t* s); - -/** - * 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 - * --> string literal is encoded as a String with the length incremented by two - */ -int decodeStringValue(bitstream_t* stream, string_ucs_t* s); - - -/** - * Decode a sequence of characters according to a given length. - */ -int decodeCharacters(bitstream_t* stream, size_t len, uint32_t* chars); - -/** - * Decode a binary value as a length-prefixed sequence of octets. - */ -int decodeBinary(bitstream_t* stream, bytes_t* bytes); - - -#endif - - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/BitEncoderChannel.c b/src/codec/BitEncoderChannel.c deleted file mode 100644 index ac295c8..0000000 --- a/src/codec/BitEncoderChannel.c +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ -#include -#include -#include - -#include "BitEncoderChannel.h" -#include "BitOutputStream.h" -#include "EXITypes.h" - -#ifndef BIT_ENCODER_CHANNEL_C -#define BIT_ENCODER_CHANNEL_C - -/** - * Returns the least number of 7 bit-blocks that is needed to represent the - * int n. Returns 1 if n is 0. - * - * @param n - * integer value - * - */ -uint8_t numberOf7BitBlocksToRepresent(int 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; - } -} - - -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, size_t nbits, uint8_t val) { - return writeBits(stream, nbits, val); -} - - - - -/** - * 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; - } - case 4: - errn = encode(stream, (uint8_t)(128 | n)); - n = n >> 7; - if (errn < 0) { - break; - } - case 3: - errn = encode(stream, (uint8_t)(128 | n)); - n = n >> 7; - if (errn < 0) { - break; - } - case 2: - errn = encode(stream, (uint8_t)(128 | n)); - n = n >> 7; - if (errn < 0) { - break; - } - case 1: - /* 0 .. 7 (last byte) */ - errn = encode(stream, (uint8_t)(0 | n)); - } - } - - 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); -} - - -/** - * 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, float_me_t* f) { - int errn = encodeInteger64(stream, f->mantissa); - if (errn >= 0) { - errn = encodeInteger32(stream, f->exponent); - } - return errn; -} - - -/** - * Encode a length prefixed sequence of characters. - */ -int encodeString(bitstream_t* stream, string_ucs_t* string) { - int errn = encodeUnsignedInteger32(stream, string->len); - if (errn >= 0) { - errn = encodeCharacters(stream, string->codepoints, string->len); - } - return errn; -} - -int encodeStringValue(bitstream_t* stream, string_ucs_t* string) { - /* encode string as string table miss */ - int errn = encodeUnsignedInteger32(stream, string->len+2); - if (errn >= 0) { - errn = encodeCharacters(stream, string->codepoints, string->len); - } - 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 encodeCharacters(bitstream_t* stream, uint32_t* chars, size_t len) { - unsigned int i; - int errn = 0; - for(i=0; i=0; i++) { - errn = encodeUnsignedInteger32(stream, chars[i]); - } - return errn; -} - - -/** - * Encode a binary value as a length-prefixed sequence of octets. - */ -int encodeBinary(bitstream_t* stream, bytes_t* bytes) { - unsigned int i; - int errn = encodeUnsignedInteger32(stream, bytes->len); - - for(i=0; ilen && errn>=0; i++) { - errn = encode(stream, bytes->data[i]); - } - return errn; -} - -/** - * Flush underlying bit output stream. - */ -int encodeFinish(bitstream_t* stream) { - return flush(stream); -} - - -#endif - - - - - - - - - - - - diff --git a/src/codec/BitEncoderChannel.h b/src/codec/BitEncoderChannel.h deleted file mode 100644 index 0d54c73..0000000 --- a/src/codec/BitEncoderChannel.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include "EXITypes.h" - -#ifndef BIT_ENCODER_CHANNEL_H -#define BIT_ENCODER_CHANNEL_H - -/** - * 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); - - -/** - * 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, size_t nbits, uint8_t val); - - -/** - * 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); - -/** - * 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); - -/** - * 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); - -/** - * 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); - -/** - * 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. - */ -int encodeFloat(bitstream_t* stream, float_me_t* f); - - -/** - * Encode a length prefixed sequence of characters. - */ -int encodeString(bitstream_t* stream, string_ucs_t* string); - -/** - * Encode a length prefixed sequence of characters in the sense of string tables - */ -int encodeStringValue(bitstream_t* stream, string_ucs_t* string); - -/** - * 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 encodeCharacters(bitstream_t* stream, uint32_t* chars, size_t len); - -/** - * Encode a binary value as a length-prefixed sequence of octets. - */ -int encodeBinary(bitstream_t* stream, bytes_t* bytes); - -/** - * Flush underlying bit output stream - */ -int encodeFinish(bitstream_t* stream); - - -#endif - - -#ifdef __cplusplus -} -#endif - - - - - - - - diff --git a/src/codec/BitInputStream.c b/src/codec/BitInputStream.c deleted file mode 100644 index 77a3e50..0000000 --- a/src/codec/BitInputStream.c +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#include -#include -#include - -#include "EXITypes.h" -#include "BitInputStream.h" - -#ifndef BIT_INPUT_STREAM_C -#define BIT_INPUT_STREAM_C - -/* internal method to (re)fill buffer */ -int readBuffer(bitstream_t* stream) -{ - int errn = 0; - if(stream->capacity==0) - { - if ( (*stream->pos) < stream->size ) { - stream->buffer = stream->data[(*stream->pos)++]; - stream->capacity = BITS_IN_BYTE; - } else { - errn = -1; - } - } - return errn; -} - -int readBits(bitstream_t* stream, size_t num_bits, uint8_t* b) -{ - int errn = readBuffer(stream); - if (errn < 0) { - return errn; - } - - /* read the bits in one step */ - if(num_bits <= stream->capacity) - { - stream->capacity -= 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 = BITS_IN_BYTE - num_bits; - } - - } - - return errn; -} - -#endif diff --git a/src/codec/BitInputStream.h b/src/codec/BitInputStream.h deleted file mode 100644 index 4076da5..0000000 --- a/src/codec/BitInputStream.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "EXITypes.h" - -#ifndef BIT_INPUT_STREAM_H -#define BIT_INPUT_STREAM_H - -int readBits(bitstream_t* stream, size_t num_bits, uint8_t* b); - -int flush(); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/src/codec/BitOutputStream.c b/src/codec/BitOutputStream.c deleted file mode 100644 index a4d43e2..0000000 --- a/src/codec/BitOutputStream.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#include - -#include "EXITypes.h" -#include "BitOutputStream.h" - -#ifndef BIT_OUTPUT_STREAM_C -#define BIT_OUTPUT_STREAM_C - -/* NOTE: nbits <= 8 */ -int writeBits(bitstream_t* stream, size_t nbits, uint8_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 -= nbits; - /* if the buffer is full write it into the data */ - if (stream->capacity == 0) { - if ((*stream->pos) >= stream->size) { - return -1; - } - stream->data[(*stream->pos)++] = 0xFF & stream->buffer; - 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 ((*stream->pos) >= stream->size) { - return -1; - } - stream->data[(*stream->pos)++] = 0xFF & stream->buffer; - stream->buffer = 0; - - /* write whole bytes */ - while (nbits >= BITS_IN_BYTE) { - nbits -= BITS_IN_BYTE; - if ((*stream->pos) >= stream->size) { - return -1; - } - stream->data[(*stream->pos)++] = 0xFF & (val >> (nbits)); - } - - /* spared bits are kept in the buffer */ - stream->buffer = val; /* Note: the high bits will be shifted out during further filling */ - stream->capacity = 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 deleted file mode 100644 index 7aadd58..0000000 --- a/src/codec/BitOutputStream.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include "EXITypes.h" - -#ifndef BIT_OUTPUT_STREAM_H -#define BIT_OUTPUT_STREAM_H - -int writeBits(bitstream_t* stream, size_t nbits, uint8_t bits); - -/* flush output */ -int flush(bitstream_t* stream); - -#endif - - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/ByteStream.c b/src/codec/ByteStream.c deleted file mode 100644 index a2f7b79..0000000 --- a/src/codec/ByteStream.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#define _CRT_SECURE_NO_DEPRECATE 1 - -#include -#include -#include -#include -#include - -#include "EXITypes.h" - -#ifndef BYTE_STREAM_C -#define BYTE_STREAM_C - -int readBytesFromFile(const char * filename, uint8_t* data, size_t size, size_t pos) { - FILE* f; - int character; - - f = fopen(filename, "rb"); - - if (f == NULL) { - printf("\n[Error] no valid file handle !\n"); - return -1; - } else { - /* read bytes */ - while ((character = getc(f)) != EOF) { - if (pos >= size) { - return -1; - } - data[pos++] = (uint8_t) character; - /* printf("%u \n", character); */ - } - fclose(f); - } - - return pos; -} - -int writeBytesToFile(uint8_t* data, size_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 -1; - } - } -} - - -#endif - diff --git a/src/codec/ByteStream.h b/src/codec/ByteStream.h deleted file mode 100644 index 90ee84e..0000000 --- a/src/codec/ByteStream.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include "EXITypes.h" - -#ifndef BYTE_STREAM_H -#define BYTE_STREAM_H - -int writeBytesToFile(uint8_t* data, size_t len, const char * filename); - -int readBytesFromFile(const char * filename, uint8_t* data, size_t size, size_t pos); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/src/codec/EXICoder.c b/src/codec/EXICoder.c deleted file mode 100644 index 8544771..0000000 --- a/src/codec/EXICoder.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifndef EXI_CODER_C -#define EXI_CODER_C - -#include -#include -#include -#include - -#include "EXITypes.h" -#include "BitInputStream.h" -#include "BitDecoderChannel.h" - -#include "assert.h" -#include "EXICoder.h" - -/* - size_t exiGetCurrentState(struct exiState* state) { - return state->grammarStates[state->currentStack]; - // return 0; - } - */ - -int exiPushStack(exi_state_t* state, size_t newState, eqname_t* eqn) { - if ((state->stackIndex + 1) < EXI_ELEMENT_STACK_SIZE) { - state->grammarStack[++state->stackIndex] = newState; - /* copy qname */ - state->elementStack[state->stackIndex].localPart = eqn->localPart; - state->elementStack[state->stackIndex].namespaceURI = eqn->namespaceURI; - return 0; - } else { - return EXI_ERROR_OUT_OF_BOUNDS; - } -} - -int exiPopStack(exi_state_t* state) { - if (state->stackIndex >= 1) { - state->stackIndex--; - return 0; - } else { - return EXI_ERROR_OUT_OF_BOUNDS; - } -} - -#endif - diff --git a/src/codec/EXICoder.h b/src/codec/EXICoder.h deleted file mode 100644 index 4069e2b..0000000 --- a/src/codec/EXICoder.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef EXI_CODER_H -#define EXI_CODER_H - -#include -#include -#include - -#include "EXITypes.h" - - -/* size_t exiGetCurrentState(struct exiState* state); */ - -int exiPushStack(exi_state_t* state, size_t newState, eqname_t* eqn); - -int exiPopStack(exi_state_t* state); - -#endif - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/EXIDecoder.c b/src/codec/EXIDecoder.c deleted file mode 100644 index 3215dba..0000000 --- a/src/codec/EXIDecoder.c +++ /dev/null @@ -1,1512 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - *

NOTE: Code generated by EXIdizer v0.1

- ********************************************************************/ - -#ifndef EXI_DECODER_C -#define EXI_DECODER_C - -#include -#include -#include -#include - -#include "EXITypes.h" -#include "BitInputStream.h" -#include "BitDecoderChannel.h" - -#include "EXICoder.h" -#include "EXIHeaderDecoder.h" - - -int exiInitDecoder(bitstream_t* stream, exi_state_t* state) { - /* init grammar state */ - state->stackIndex = 0; - state->grammarStack[0] = 0; - /* decode header */ - return readEXIHeader(stream); -} - -int exiDecodeNextEvent(bitstream_t* stream, exi_state_t* state, - exi_event_t* nextEvent) { - - switch (state->grammarStack[state->stackIndex]) { - case 2: - /* DocEnd[END_DOCUMENT] */ - *nextEvent = END_DOCUMENT; - return 0; - case 56: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - case 75: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - case 83: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - case 104: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EnergyProvider), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - case 17: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - case 136: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - case 161: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceSessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - case 166: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - decodeNBitUnsignedInteger(stream, 2, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 2) { - *nextEvent = END_ELEMENT; - return 0; - } - case 156: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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), END_ELEMENT] */ - decodeNBitUnsignedInteger(stream, 5, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 2) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 3) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 4) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 5) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 6) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 7) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 8) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 9) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 10) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 11) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 12) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 13) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 14) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 15) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 16) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 17) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 18) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 19) { - *nextEvent = END_ELEMENT; - return 0; - } - case 54: - /* Element[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:MsgDataTypes}TMeter), END_ELEMENT] */ - case 134: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - case 160: - /* FirstStartTagStartTag[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}EventList), END_ELEMENT] */ - decodeNBitUnsignedInteger(stream, 2, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 2) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 3) { - *nextEvent = END_ELEMENT; - return 0; - } - case 7: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - case 48: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff)] */ - case 113: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries)] */ - case 21: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - decodeNBitUnsignedInteger(stream, 1, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = START_ELEMENT; - return 0; - } - case 5: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - case 24: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqLockStatus)] */ - case 25: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked)] */ - case 28: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargerStandby)] */ - case 6: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 32: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - case 35: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FatalError)] */ - case 36: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStandby)] */ - case 38: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked)] */ - case 39: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ - case 40: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ - case 42: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ShutDownTime)] */ - case 46: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - case 49: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff)] */ - case 50: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ - case 57: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ - case 61: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit)] */ - case 63: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ - case 8: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 10: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 69: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ - case 71: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - case 73: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent)] */ - case 74: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPower)] */ - case 11: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ - case 12: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 13: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - case 82: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqSwitchStatus)] */ - case 86: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ - case 87: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ - case 14: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 15: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - case 91: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EoC)] */ - case 92: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EAmount)] */ - case 93: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPower)] */ - case 94: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPhases)] */ - case 95: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxVoltage)] */ - case 97: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMinVoltage)] */ - case 16: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 99: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - case 101: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltage)] */ - case 102: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEIMax)] */ - case 103: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPhases)] */ - case 108: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Currency)] */ - case 109: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff)] */ - case 112: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffID)] */ - case 114: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries)] */ - case 117: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry)] */ - case 119: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffStart)] */ - case 120: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffPMax)] */ - case 18: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 131: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ - case 133: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ - case 19: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList)] */ - case 140: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVPubKey)] */ - case 20: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 146: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - case 22: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - case 148: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ - case 150: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - case 151: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent)] */ - case 23: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ - case 153: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ - case 154: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}SessionInformation)] */ - case 158: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SessionID)] */ - case 171: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Event)] */ - *nextEvent = START_ELEMENT; - return 0; - case 3: - /* FirstStartTag(xsi:type)StartTag[END_ELEMENT] */ - case 26: - /* Element[END_ELEMENT] */ - case 29: - /* Element[END_ELEMENT] */ - case 31: - /* Element[END_ELEMENT] */ - case 34: - /* Element[END_ELEMENT] */ - case 44: - /* Element[END_ELEMENT] */ - case 52: - /* Element[END_ELEMENT] */ - case 60: - /* Element[END_ELEMENT] */ - case 65: - /* Element[END_ELEMENT] */ - case 67: - /* Element[END_ELEMENT] */ - case 9: - /* FirstStartTagStartTag[END_ELEMENT] */ - case 77: - /* Element[END_ELEMENT] */ - case 78: - /* Element[END_ELEMENT] */ - case 80: - /* Element[END_ELEMENT] */ - case 85: - /* Element[END_ELEMENT] */ - case 88: - /* Element[END_ELEMENT] */ - case 89: - /* Element[END_ELEMENT] */ - case 98: - /* Element[END_ELEMENT] */ - case 107: - /* Element[END_ELEMENT] */ - case 116: - /* Element[END_ELEMENT] */ - case 123: - /* Element[END_ELEMENT] */ - case 126: - /* Element[END_ELEMENT] */ - case 130: - /* Element[END_ELEMENT] */ - case 139: - /* Element[END_ELEMENT] */ - case 141: - /* Element[END_ELEMENT] */ - case 145: - /* Element[END_ELEMENT] */ - case 147: - /* Element[END_ELEMENT] */ - case 152: - /* Element[END_ELEMENT] */ - case 155: - /* Element[END_ELEMENT] */ - case 159: - /* Element[END_ELEMENT] */ - case 164: - /* Element[END_ELEMENT] */ - case 170: - /* Element[END_ELEMENT] */ - case 172: - /* Element[END_ELEMENT] */ - case 174: - /* Element[END_ELEMENT] */ - *nextEvent = END_ELEMENT; - return 0; - case 27: - /* FirstStartTagStartTag[CHARACTERS[BOOLEAN]] */ - case 30: - /* FirstStartTagStartTag[CHARACTERS[BOOLEAN]] */ - case 33: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 37: - /* FirstStartTagStartTag[CHARACTERS[BOOLEAN]] */ - case 41: - /* FirstStartTagStartTag[CHARACTERS[BOOLEAN]] */ - case 43: - /* FirstStartTagStartTag[CHARACTERS[BOOLEAN]] */ - case 45: - /* FirstStartTagStartTag[CHARACTERS[INTEGER_32]] */ - case 47: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 51: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 55: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 62: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 64: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 66: - /* FirstStartTag(xsi:type)StartTag[CHARACTERS[INTEGER_32]] */ - case 59: - /* FirstStartTagStartTag[CHARACTERS[INTEGER_16]] */ - case 68: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 70: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 72: - /* FirstStartTagStartTag[CHARACTERS[BINARY_HEX]] */ - case 79: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 81: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 90: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 96: - /* FirstStartTagStartTag[CHARACTERS[INTEGER_16]] */ - case 100: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 106: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 110: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 115: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 121: - /* FirstStartTagStartTag[CHARACTERS[UNSIGNED_INTEGER_32]] */ - case 125: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 127: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 129: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 135: - /* FirstStartTagStartTag[CHARACTERS[BINARY_HEX]] */ - case 137: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 142: - /* FirstStartTagStartTag[CHARACTERS[BINARY_HEX]] */ - case 144: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 149: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 162: - /* FirstStartTagStartTag[CHARACTERS[BINARY_HEX]] */ - case 165: - /* FirstStartTagStartTag[CHARACTERS[STRING]] */ - case 167: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - case 169: - /* FirstStartTag(xsi:type)StartTag[CHARACTERS[STRING]] */ - case 173: - /* FirstStartTagStartTag[CHARACTERS[ENUMERATION]] */ - *nextEvent = CHARACTERS; - return 0; - case 53: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), 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:MsgDataTypes}TMeter), END_ELEMENT] */ - decodeNBitUnsignedInteger(stream, 3, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 2) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 3) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 4) { - *nextEvent = END_ELEMENT; - return 0; - } - case 58: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - case 76: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - case 84: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - case 105: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - case 111: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff), END_ELEMENT] */ - case 118: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry), END_ELEMENT] */ - case 122: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPrice), END_ELEMENT] */ - case 124: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - case 128: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ - case 132: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ - case 138: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - case 143: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringAuthPubKey), END_ELEMENT] */ - case 157: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Notification), END_ELEMENT] */ - case 163: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - case 168: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - decodeNBitUnsignedInteger(stream, 1, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = END_ELEMENT; - return 0; - } - case 1: - /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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:MsgDef}V2G_Message), START_ELEMENT_GENERIC] */ - decodeNBitUnsignedInteger(stream, 5, &state->eventCode); - if (state->eventCode == 0) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 1) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 2) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 3) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 4) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 5) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 6) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 7) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 8) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 9) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 10) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 11) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 12) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 13) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 14) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 15) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 16) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 17) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 18) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 19) { - *nextEvent = START_ELEMENT; - return 0; - } - else if (state->eventCode == 20) { - *nextEvent = START_ELEMENT_GENERIC; - return 0; - } - case 0: - /* Document[START_DOCUMENT] */ - *nextEvent = START_DOCUMENT; - return 0; - - default: - *nextEvent = ERROR; - return -1; - } - - return -1; -} - -int exiDecodeStartDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 0 ) { - /* move on */ - state->grammarStack[state->stackIndex] = 1; - return 0; - } - - return -1; -} - -int exiDecodeEndDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 2) { - return 0; - } - - return -1; -} - -static int _exiDecodeStartElement(exi_state_t* state, eqname_t* se, - unsigned int ns, unsigned int ln, size_t stackId, size_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 exiDecodeStartElement(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:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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:MsgDef}V2G_Message), START_ELEMENT_GENERIC] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 6, 2, 2, 3); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 11, 2, 5); - } - else if (state->eventCode == 2) { - return _exiDecodeStartElement(state, se, 4, 13, 2, 6); - } - else if (state->eventCode == 3) { - return _exiDecodeStartElement(state, se, 4, 17, 2, 7); - } - else if (state->eventCode == 4) { - return _exiDecodeStartElement(state, se, 4, 19, 2, 8); - } - else if (state->eventCode == 5) { - return _exiDecodeStartElement(state, se, 4, 21, 2, 9); - } - else if (state->eventCode == 6) { - return _exiDecodeStartElement(state, se, 4, 23, 2, 10); - } - else if (state->eventCode == 7) { - return _exiDecodeStartElement(state, se, 4, 33, 2, 11); - } - else if (state->eventCode == 8) { - return _exiDecodeStartElement(state, se, 4, 35, 2, 12); - } - else if (state->eventCode == 9) { - return _exiDecodeStartElement(state, se, 4, 37, 2, 13); - } - else if (state->eventCode == 10) { - return _exiDecodeStartElement(state, se, 4, 39, 2, 14); - } - else if (state->eventCode == 11) { - return _exiDecodeStartElement(state, se, 4, 41, 2, 15); - } - else if (state->eventCode == 12) { - return _exiDecodeStartElement(state, se, 4, 43, 2, 16); - } - else if (state->eventCode == 13) { - return _exiDecodeStartElement(state, se, 4, 48, 2, 17); - } - else if (state->eventCode == 14) { - return _exiDecodeStartElement(state, se, 4, 50, 2, 18); - } - else if (state->eventCode == 15) { - return _exiDecodeStartElement(state, se, 4, 53, 2, 19); - } - else if (state->eventCode == 16) { - return _exiDecodeStartElement(state, se, 4, 55, 2, 20); - } - else if (state->eventCode == 17) { - return _exiDecodeStartElement(state, se, 4, 59, 2, 21); - } - else if (state->eventCode == 18) { - return _exiDecodeStartElement(state, se, 4, 61, 2, 22); - } - else if (state->eventCode == 19) { - return _exiDecodeStartElement(state, se, 6, 8, 2, 23); - } - break; - case 5: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - return _exiDecodeStartElement(state, se, 4, 32, 24, 25); - break; - case 6: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 32, 33); - break; - case 7: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 26, 46, 47); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 32, 48, 25); - } - break; - case 8: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 67, 68); - break; - case 10: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 69, 70); - break; - case 11: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ - return _exiDecodeStartElement(state, se, 4, 1, 78, 79); - break; - case 12: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 80, 81); - break; - case 13: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - return _exiDecodeStartElement(state, se, 4, 32, 82, 25); - break; - case 14: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 89, 90); - break; - case 15: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - return _exiDecodeStartElement(state, se, 4, 32, 91, 25); - break; - case 16: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 99, 100); - break; - case 17: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 58, 124, 125); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 57, 126, 127); - } - break; - case 18: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 128, 129); - break; - case 19: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList)] */ - return _exiDecodeStartElement(state, se, 4, 52, 140, 131); - break; - case 20: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 143, 144); - break; - case 21: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 26, 146, 47); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 32, 147, 25); - } - break; - case 22: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - return _exiDecodeStartElement(state, se, 4, 47, 148, 149); - break; - case 23: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ - return _exiDecodeStartElement(state, se, 6, 4, 153, 154); - break; - case 24: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqLockStatus)] */ - return _exiDecodeStartElement(state, se, 4, 45, 26, 27); - break; - case 25: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked)] */ - return _exiDecodeStartElement(state, se, 5, 4, 28, 27); - break; - case 28: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargerStandby)] */ - return _exiDecodeStartElement(state, se, 5, 0, 29, 30); - break; - case 32: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - return _exiDecodeStartElement(state, se, 4, 7, 34, 35); - break; - case 35: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FatalError)] */ - return _exiDecodeStartElement(state, se, 5, 12, 36, 37); - break; - case 36: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStandby)] */ - return _exiDecodeStartElement(state, se, 5, 7, 38, 30); - break; - case 38: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked)] */ - return _exiDecodeStartElement(state, se, 5, 4, 39, 27); - break; - case 39: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ - return _exiDecodeStartElement(state, se, 5, 23, 40, 41); - break; - case 40: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ - return _exiDecodeStartElement(state, se, 5, 25, 42, 43); - break; - case 42: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ShutDownTime)] */ - return _exiDecodeStartElement(state, se, 5, 36, 44, 45); - break; - case 46: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - return _exiDecodeStartElement(state, se, 4, 32, 48, 25); - break; - case 48: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff)] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 63, 49, 45); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 64, 50, 51); - } - break; - case 49: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff)] */ - return _exiDecodeStartElement(state, se, 4, 64, 50, 51); - break; - case 50: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ - return _exiDecodeStartElement(state, se, 4, 15, 52, 53); - break; - case 53: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), 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:MsgDataTypes}TMeter), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 16, 54, 55); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 18, 56, 57); - } - else if (state->eventCode == 2) { - return _exiDecodeStartElement(state, se, 5, 19, 58, 59); - } - else if (state->eventCode == 3) { - return _exiDecodeStartElement(state, se, 5, 37, 60, 45); - } - break; - case 54: - /* Element[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:MsgDataTypes}TMeter), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 18, 56, 57); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 19, 58, 59); - } - else if (state->eventCode == 2) { - return _exiDecodeStartElement(state, se, 5, 37, 60, 45); - } - break; - case 56: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 19, 58, 59); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 37, 60, 45); - } - break; - case 57: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ - return _exiDecodeStartElement(state, se, 5, 20, 61, 62); - break; - case 58: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 37, 60, 45); - } - break; - case 61: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit)] */ - return _exiDecodeStartElement(state, se, 5, 49, 63, 64); - break; - case 63: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ - return _exiDecodeStartElement(state, se, 5, 50, 65, 66); - break; - case 69: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ - return _exiDecodeStartElement(state, se, 4, 3, 71, 72); - break; - case 71: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - return _exiDecodeStartElement(state, se, 4, 7, 73, 35); - break; - case 73: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent)] */ - return _exiDecodeStartElement(state, se, 4, 63, 74, 45); - break; - case 74: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPower)] */ - return _exiDecodeStartElement(state, se, 4, 6, 75, 57); - break; - case 75: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 25, 76, 57); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 15, 77, 53); - } - break; - case 76: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 15, 77, 53); - } - break; - case 82: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqSwitchStatus)] */ - return _exiDecodeStartElement(state, se, 4, 46, 83, 41); - break; - case 83: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 64, 84, 51); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 0, 85, 86); - } - break; - case 84: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 0, 85, 86); - } - break; - case 86: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ - return _exiDecodeStartElement(state, se, 5, 2, 87, 45); - break; - case 87: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ - return _exiDecodeStartElement(state, se, 5, 1, 88, 57); - break; - case 91: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EoC)] */ - return _exiDecodeStartElement(state, se, 4, 10, 92, 45); - break; - case 92: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EAmount)] */ - return _exiDecodeStartElement(state, se, 4, 2, 93, 57); - break; - case 93: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPower)] */ - return _exiDecodeStartElement(state, se, 4, 28, 94, 57); - break; - case 94: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPhases)] */ - return _exiDecodeStartElement(state, se, 4, 27, 95, 96); - break; - case 95: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxVoltage)] */ - return _exiDecodeStartElement(state, se, 4, 29, 97, 57); - break; - case 97: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMinVoltage)] */ - return _exiDecodeStartElement(state, se, 4, 30, 98, 57); - break; - case 99: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - return _exiDecodeStartElement(state, se, 4, 7, 101, 35); - break; - case 101: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltage)] */ - return _exiDecodeStartElement(state, se, 4, 8, 102, 57); - break; - case 102: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEIMax)] */ - return _exiDecodeStartElement(state, se, 4, 4, 103, 57); - break; - case 103: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPhases)] */ - return _exiDecodeStartElement(state, se, 4, 5, 104, 96); - break; - case 104: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EnergyProvider), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 9, 105, 106); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 65, 107, 108); - } - break; - case 105: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 65, 107, 108); - } - break; - case 108: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Currency)] */ - return _exiDecodeStartElement(state, se, 5, 5, 109, 110); - break; - case 109: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff)] */ - return _exiDecodeStartElement(state, se, 5, 38, 111, 112); - break; - case 111: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 38, 111, 112); - } - break; - case 112: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffID)] */ - return _exiDecodeStartElement(state, se, 5, 45, 113, 51); - break; - case 113: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries)] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 40, 114, 115); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 41, 116, 117); - } - break; - case 114: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries)] */ - return _exiDecodeStartElement(state, se, 5, 41, 116, 117); - break; - case 117: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry)] */ - return _exiDecodeStartElement(state, se, 5, 43, 118, 119); - break; - case 118: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 43, 118, 119); - } - break; - case 119: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffStart)] */ - return _exiDecodeStartElement(state, se, 5, 47, 120, 121); - break; - case 120: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffPMax)] */ - return _exiDecodeStartElement(state, se, 5, 46, 122, 57); - break; - case 122: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPrice), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 6, 123, 57); - } - break; - case 124: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 57, 126, 127); - } - break; - case 128: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 52, 130, 131); - } - break; - case 131: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ - return _exiDecodeStartElement(state, se, 5, 26, 132, 133); - break; - case 132: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 26, 132, 133); - } - break; - case 133: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ - return _exiDecodeStartElement(state, se, 5, 28, 134, 135); - break; - case 134: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 30, 136, 137); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 33, 138, 125); - } - else if (state->eventCode == 2) { - return _exiDecodeStartElement(state, se, 5, 31, 139, 127); - } - break; - case 136: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 33, 138, 125); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 31, 139, 127); - } - break; - case 138: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 31, 139, 127); - } - break; - case 140: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVPubKey)] */ - return _exiDecodeStartElement(state, se, 4, 31, 141, 142); - break; - case 143: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringAuthPubKey), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 4, 16, 145, 142); - } - break; - case 146: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - return _exiDecodeStartElement(state, se, 4, 32, 147, 25); - break; - case 148: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ - return _exiDecodeStartElement(state, se, 4, 3, 150, 72); - break; - case 150: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - return _exiDecodeStartElement(state, se, 4, 7, 151, 35); - break; - case 151: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent)] */ - return _exiDecodeStartElement(state, se, 4, 63, 152, 45); - break; - case 153: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ - return _exiDecodeStartElement(state, se, 6, 0, 155, 156); - break; - case 154: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}SessionInformation)] */ - return _exiDecodeStartElement(state, se, 6, 7, 157, 158); - break; - case 156: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 6, 2, 174, 3); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 4, 11, 174, 5); - } - else if (state->eventCode == 2) { - return _exiDecodeStartElement(state, se, 4, 13, 174, 6); - } - else if (state->eventCode == 3) { - return _exiDecodeStartElement(state, se, 4, 17, 174, 7); - } - else if (state->eventCode == 4) { - return _exiDecodeStartElement(state, se, 4, 19, 174, 8); - } - else if (state->eventCode == 5) { - return _exiDecodeStartElement(state, se, 4, 21, 174, 9); - } - else if (state->eventCode == 6) { - return _exiDecodeStartElement(state, se, 4, 23, 174, 10); - } - else if (state->eventCode == 7) { - return _exiDecodeStartElement(state, se, 4, 33, 174, 11); - } - else if (state->eventCode == 8) { - return _exiDecodeStartElement(state, se, 4, 35, 174, 12); - } - else if (state->eventCode == 9) { - return _exiDecodeStartElement(state, se, 4, 37, 174, 13); - } - else if (state->eventCode == 10) { - return _exiDecodeStartElement(state, se, 4, 39, 174, 14); - } - else if (state->eventCode == 11) { - return _exiDecodeStartElement(state, se, 4, 41, 174, 15); - } - else if (state->eventCode == 12) { - return _exiDecodeStartElement(state, se, 4, 43, 174, 16); - } - else if (state->eventCode == 13) { - return _exiDecodeStartElement(state, se, 4, 48, 174, 17); - } - else if (state->eventCode == 14) { - return _exiDecodeStartElement(state, se, 4, 50, 174, 18); - } - else if (state->eventCode == 15) { - return _exiDecodeStartElement(state, se, 4, 53, 174, 19); - } - else if (state->eventCode == 16) { - return _exiDecodeStartElement(state, se, 4, 55, 174, 20); - } - else if (state->eventCode == 17) { - return _exiDecodeStartElement(state, se, 4, 59, 174, 21); - } - else if (state->eventCode == 18) { - return _exiDecodeStartElement(state, se, 4, 61, 174, 22); - } - break; - case 157: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Notification), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 6, 6, 159, 160); - } - break; - case 158: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SessionID)] */ - return _exiDecodeStartElement(state, se, 5, 34, 161, 162); - break; - case 160: - /* FirstStartTagStartTag[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}EventList), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 13, 166, 167); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 14, 168, 169); - } - else if (state->eventCode == 2) { - return _exiDecodeStartElement(state, se, 5, 10, 170, 171); - } - break; - case 161: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceSessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 32, 163, 162); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 24, 164, 165); - } - break; - case 163: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 24, 164, 165); - } - break; - case 166: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 14, 168, 169); - } - else if (state->eventCode == 1) { - return _exiDecodeStartElement(state, se, 5, 10, 170, 171); - } - break; - case 168: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - if (state->eventCode == 0) { - return _exiDecodeStartElement(state, se, 5, 10, 170, 171); - } - break; - case 171: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Event)] */ - return _exiDecodeStartElement(state, se, 5, 9, 172, 173); - break; - - default: - return -1; - } - - return -1; -} - -int exiDecodeEndElement(bitstream_t* stream, exi_state_t* state, - eqname_t* ee) { - /* pop item and update ahead of time element qname */ - ee->localPart = state->elementStack[state->stackIndex].localPart; - ee->namespaceURI = state->elementStack[state->stackIndex].namespaceURI; - return exiPopStack(state); -} - -int exiDecodeCharacters(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - uint8_t xsi; - switch (state->grammarStack[state->stackIndex]) { - case 62: - /* CHARACTERS[ENUMERATION] */ - val->type = ENUMERATION; - decodeNBitUnsignedInteger(stream, 4, &val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 27: - /* CHARACTERS[BOOLEAN] */ - case 30: - /* CHARACTERS[BOOLEAN] */ - case 37: - /* CHARACTERS[BOOLEAN] */ - case 41: - /* CHARACTERS[BOOLEAN] */ - case 43: - /* CHARACTERS[BOOLEAN] */ - val->type = BOOLEAN; - decodeBoolean(stream, &val->boolean); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 47: - /* CHARACTERS[STRING] */ - case 55: - /* CHARACTERS[STRING] */ - case 79: - /* CHARACTERS[STRING] */ - case 106: - /* CHARACTERS[STRING] */ - case 110: - /* CHARACTERS[STRING] */ - case 115: - /* CHARACTERS[STRING] */ - case 127: - /* CHARACTERS[STRING] */ - case 137: - /* CHARACTERS[STRING] */ - case 165: - /* CHARACTERS[STRING] */ - val->type = STRING; - decodeStringValue(stream, &val->string); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 68: - /* CHARACTERS[ENUMERATION] */ - case 70: - /* CHARACTERS[ENUMERATION] */ - case 100: - /* CHARACTERS[ENUMERATION] */ - val->type = ENUMERATION; - decodeNBitUnsignedInteger(stream, 1, &val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 33: - /* CHARACTERS[ENUMERATION] */ - case 81: - /* CHARACTERS[ENUMERATION] */ - case 125: - /* CHARACTERS[ENUMERATION] */ - case 144: - /* CHARACTERS[ENUMERATION] */ - case 167: - /* CHARACTERS[ENUMERATION] */ - val->type = ENUMERATION; - decodeNBitUnsignedInteger(stream, 2, &val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 72: - /* CHARACTERS[BINARY_HEX] */ - case 135: - /* CHARACTERS[BINARY_HEX] */ - case 142: - /* CHARACTERS[BINARY_HEX] */ - case 162: - /* CHARACTERS[BINARY_HEX] */ - val->type = BINARY_HEX; - decodeBinary(stream, &val->binary); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 169: - /* CHARACTERS[STRING] */ - /* xsi:type OR xsi:nil */ - decodeNBitUnsignedInteger(stream, 1, &xsi); - val->type = STRING; - decodeStringValue(stream, &val->string); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 66: - /* CHARACTERS[INTEGER_32] */ - /* xsi:type OR xsi:nil */ - decodeNBitUnsignedInteger(stream, 1, &xsi); - val->type = INTEGER_32; - decodeInteger32(stream, &val->int32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 51: - /* CHARACTERS[ENUMERATION] */ - case 90: - /* CHARACTERS[ENUMERATION] */ - case 129: - /* CHARACTERS[ENUMERATION] */ - case 149: - /* CHARACTERS[ENUMERATION] */ - case 173: - /* CHARACTERS[ENUMERATION] */ - val->type = ENUMERATION; - decodeNBitUnsignedInteger(stream, 3, &val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 59: - /* CHARACTERS[INTEGER_16] */ - case 96: - /* CHARACTERS[INTEGER_16] */ - val->type = INTEGER_16; - decodeInteger32(stream, &val->int32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 45: - /* CHARACTERS[INTEGER_32] */ - val->type = INTEGER_32; - decodeInteger32(stream, &val->int32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 64: - /* CHARACTERS[ENUMERATION] */ - val->type = ENUMERATION; - decodeNBitUnsignedInteger(stream, 5, &val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - case 121: - /* CHARACTERS[UNSIGNED_INTEGER_32] */ - val->type = UNSIGNED_INTEGER_32; - decodeUnsignedInteger32(stream, &val->uint32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - - default: - return -1; - } - - return 0; -} - -int exiDecodeAttribute(bitstream_t* stream, exi_state_t* state, - eqname_t* at, exi_value_t* val) { - switch (state->grammarStack[state->stackIndex]) { - - default: - return -1; - } - return -1; -} - - - -#endif - diff --git a/src/codec/EXIDecoder.h b/src/codec/EXIDecoder.h deleted file mode 100644 index f0c1e53..0000000 --- a/src/codec/EXIDecoder.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef EXI_DECODER_H -#define EXI_DECODER_H - -#include "EXITypes.h" - -int exiInitDecoder(bitstream_t* stream, exi_state_t* state); - -int exiDecodeNextEvent(bitstream_t* stream, exi_state_t* state, - exi_event_t* nextEvent); - -int exiDecodeStartDocument(bitstream_t* stream, exi_state_t* state); - -int exiDecodeEndDocument(bitstream_t* stream, exi_state_t* state); - -int exiDecodeStartElement(bitstream_t* stream, exi_state_t* state, - eqname_t* se); - -int exiDecodeEndElement(bitstream_t* stream, exi_state_t* state, - eqname_t* ee); - -int exiDecodeCharacters(bitstream_t* stream, exi_state_t* state, - exi_value_t* val); - -int exiDecodeAttribute(bitstream_t* stream, exi_state_t* state, - eqname_t* at, exi_value_t* val); - -#endif - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/EXIEncoder.c b/src/codec/EXIEncoder.c deleted file mode 100644 index a88d1f6..0000000 --- a/src/codec/EXIEncoder.c +++ /dev/null @@ -1,1335 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - *

NOTE: Code generated by EXIdizer v0.1

- ********************************************************************/ - -#ifndef EXI_ENCODER_C -#define EXI_ENCODER_C - -#include -#include -#include -#include - -#include "EXITypes.h" -#include "BitOutputStream.h" -#include "BitEncoderChannel.h" - -#include "EXICoder.h" -#include "EXIHeaderEncoder.h" - -/* ==================================== */ - -int exiInitEncoder(bitstream_t* stream, exi_state_t* state) { - /* init grammar state */ - state->stackIndex = 0; - state->grammarStack[0] = 0; - /* encode header */ - return writeEXIHeader(stream); -} - -int exiEncodeStartDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 0 ) { - /* move on */ - state->grammarStack[state->stackIndex] = 1; - return 0; - } - - return -1; -} - -int exiEncodeEndDocument(bitstream_t* stream, exi_state_t* state) { - if ( state->grammarStack[state->stackIndex] == 2) { - encodeFinish(stream); - return 0; - } - - return -1; -} - -static int _exiEncodeStartElement(bitstream_t* stream, size_t nbits, uint8_t val, - exi_state_t* state, eqname_t* se, size_t stackId, size_t newState) { - encodeNBitUnsignedInteger(stream, nbits, val); - /* move on */ - state->grammarStack[state->stackIndex] = stackId; - /* push element on stack */ - return exiPushStack(state, newState, se); -} - -int exiEncodeStartElement(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:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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:MsgDef}V2G_Message), START_ELEMENT_GENERIC] */ - if ( se->localPart == 2 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement) */ - return _exiEncodeStartElement(stream, 5, 0, state, se, 2, 3); - } - else if ( se->localPart == 11 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq) */ - return _exiEncodeStartElement(stream, 5, 1, state, se, 2, 5); - } - else if ( se->localPart == 13 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes) */ - return _exiEncodeStartElement(stream, 5, 2, state, se, 2, 6); - } - else if ( se->localPart == 17 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq) */ - return _exiEncodeStartElement(stream, 5, 3, state, se, 2, 7); - } - else if ( se->localPart == 19 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes) */ - return _exiEncodeStartElement(stream, 5, 4, state, se, 2, 8); - } - else if ( se->localPart == 21 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusReq) */ - return _exiEncodeStartElement(stream, 5, 5, state, se, 2, 9); - } - else if ( se->localPart == 23 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes) */ - return _exiEncodeStartElement(stream, 5, 6, state, se, 2, 10); - } - else if ( se->localPart == 33 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */ - return _exiEncodeStartElement(stream, 5, 7, state, se, 2, 11); - } - else if ( se->localPart == 35 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes) */ - return _exiEncodeStartElement(stream, 5, 8, state, se, 2, 12); - } - else if ( se->localPart == 37 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq) */ - return _exiEncodeStartElement(stream, 5, 9, state, se, 2, 13); - } - else if ( se->localPart == 39 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes) */ - return _exiEncodeStartElement(stream, 5, 10, state, se, 2, 14); - } - else if ( se->localPart == 41 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryReq) */ - return _exiEncodeStartElement(stream, 5, 11, state, se, 2, 15); - } - else if ( se->localPart == 43 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes) */ - return _exiEncodeStartElement(stream, 5, 12, state, se, 2, 16); - } - else if ( se->localPart == 48 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq) */ - return _exiEncodeStartElement(stream, 5, 13, state, se, 2, 17); - } - else if ( se->localPart == 50 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes) */ - return _exiEncodeStartElement(stream, 5, 14, state, se, 2, 18); - } - else if ( se->localPart == 53 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq) */ - return _exiEncodeStartElement(stream, 5, 15, state, se, 2, 19); - } - else if ( se->localPart == 55 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes) */ - return _exiEncodeStartElement(stream, 5, 16, state, se, 2, 20); - } - else if ( se->localPart == 59 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */ - return _exiEncodeStartElement(stream, 5, 17, state, se, 2, 21); - } - else if ( se->localPart == 61 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes) */ - return _exiEncodeStartElement(stream, 5, 18, state, se, 2, 22); - } - else if ( se->localPart == 8 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message) */ - return _exiEncodeStartElement(stream, 5, 19, state, se, 2, 23); - } - break; - case 5: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 24, 25); - } - break; - case 6: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 32, 33); - } - break; - case 7: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 26 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 46, 47); - } - else if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 1, 1, state, se, 48, 25); - } - break; - case 8: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 67, 68); - } - break; - case 10: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 69, 70); - } - break; - case 11: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ - if ( se->localPart == 1 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 78, 79); - } - break; - case 12: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 80, 81); - } - break; - case 13: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 82, 25); - } - break; - case 14: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 89, 90); - } - break; - case 15: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 91, 25); - } - break; - case 16: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 99, 100); - } - break; - case 17: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - if ( se->localPart == 58 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceType) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 124, 125); - } - else if ( se->localPart == 57 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 126, 127); - } - break; - case 18: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 128, 129); - } - break; - case 19: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList)] */ - if ( se->localPart == 52 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 140, 131); - } - break; - case 20: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 143, 144); - } - break; - case 21: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 26 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVID) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 146, 47); - } - else if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 1, 1, state, se, 147, 25); - } - break; - case 22: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ - if ( se->localPart == 47 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 148, 149); - } - break; - case 23: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ - if ( se->localPart == 4 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 153, 154); - } - break; - case 24: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqLockStatus)] */ - if ( se->localPart == 45 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqLockStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 26, 27); - } - break; - case 25: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked)] */ - if ( se->localPart == 4 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 28, 27); - } - break; - case 28: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargerStandby)] */ - if ( se->localPart == 0 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargerStandby) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 29, 30); - } - break; - case 32: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - if ( se->localPart == 7 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 34, 35); - } - break; - case 35: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FatalError)] */ - if ( se->localPart == 12 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FatalError) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 36, 37); - } - break; - case 36: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStandby)] */ - if ( se->localPart == 7 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStandby) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 38, 30); - } - break; - case 38: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked)] */ - if ( se->localPart == 4 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConnectorLocked) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 39, 27); - } - break; - case 39: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ - if ( se->localPart == 23 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 40, 41); - } - break; - case 40: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ - if ( se->localPart == 25 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 42, 43); - } - break; - case 42: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ShutDownTime)] */ - if ( se->localPart == 36 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ShutDownTime) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 44, 45); - } - break; - case 46: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 48, 25); - } - break; - case 48: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff)] */ - if ( se->localPart == 63 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 49, 45); - } - else if ( se->localPart == 64 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff) */ - return _exiEncodeStartElement(stream, 1, 1, state, se, 50, 51); - } - break; - case 49: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff)] */ - if ( se->localPart == 64 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 50, 51); - } - break; - case 50: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ - if ( se->localPart == 15 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 52, 53); - } - break; - case 53: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), 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:MsgDataTypes}TMeter), END_ELEMENT] */ - if ( se->localPart == 16 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID) */ - return _exiEncodeStartElement(stream, 3, 0, state, se, 54, 55); - } - else if ( se->localPart == 18 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading) */ - return _exiEncodeStartElement(stream, 3, 1, state, se, 56, 57); - } - else if ( se->localPart == 19 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) */ - return _exiEncodeStartElement(stream, 3, 2, state, se, 58, 59); - } - else if ( se->localPart == 37 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) */ - return _exiEncodeStartElement(stream, 3, 3, state, se, 60, 45); - } - break; - case 54: - /* Element[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:MsgDataTypes}TMeter), END_ELEMENT] */ - if ( se->localPart == 18 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 56, 57); - } - else if ( se->localPart == 19 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 58, 59); - } - else if ( se->localPart == 37 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) */ - return _exiEncodeStartElement(stream, 2, 2, state, se, 60, 45); - } - break; - case 56: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - if ( se->localPart == 19 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 58, 59); - } - else if ( se->localPart == 37 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 60, 45); - } - break; - case 57: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ - if ( se->localPart == 20 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 61, 62); - } - break; - case 58: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - if ( se->localPart == 37 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 60, 45); - } - break; - case 61: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit)] */ - if ( se->localPart == 49 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 63, 64); - } - break; - case 63: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ - if ( se->localPart == 50 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 65, 66); - } - break; - case 69: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ - if ( se->localPart == 3 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 71, 72); - } - break; - case 71: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - if ( se->localPart == 7 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 73, 35); - } - break; - case 73: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent)] */ - if ( se->localPart == 63 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 74, 45); - } - break; - case 74: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPower)] */ - if ( se->localPart == 6 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPower) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 75, 57); - } - break; - case 75: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - if ( se->localPart == 25 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PCurrent) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 76, 57); - } - else if ( se->localPart == 15 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 77, 53); - } - break; - case 76: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - if ( se->localPart == 15 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 77, 53); - } - break; - case 82: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqSwitchStatus)] */ - if ( se->localPart == 46 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReqSwitchStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 83, 41); - } - break; - case 83: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - if ( se->localPart == 64 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 84, 51); - } - else if ( se->localPart == 0 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 85, 86); - } - break; - case 84: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - if ( se->localPart == 0 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 85, 86); - } - break; - case 86: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ - if ( se->localPart == 2 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 87, 45); - } - break; - case 87: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ - if ( se->localPart == 1 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 88, 57); - } - break; - case 91: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EoC)] */ - if ( se->localPart == 10 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EoC) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 92, 45); - } - break; - case 92: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EAmount)] */ - if ( se->localPart == 2 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EAmount) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 93, 57); - } - break; - case 93: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPower)] */ - if ( se->localPart == 28 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPower) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 94, 57); - } - break; - case 94: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPhases)] */ - if ( se->localPart == 27 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxPhases) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 95, 96); - } - break; - case 95: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxVoltage)] */ - if ( se->localPart == 29 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMaxVoltage) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 97, 57); - } - break; - case 97: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMinVoltage)] */ - if ( se->localPart == 30 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVMinVoltage) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 98, 57); - } - break; - case 99: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - if ( se->localPart == 7 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 101, 35); - } - break; - case 101: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltage)] */ - if ( se->localPart == 8 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltage) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 102, 57); - } - break; - case 102: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEIMax)] */ - if ( se->localPart == 4 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEIMax) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 103, 57); - } - break; - case 103: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPhases)] */ - if ( se->localPart == 5 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxPhases) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 104, 96); - } - break; - case 104: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EnergyProvider), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - if ( se->localPart == 9 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EnergyProvider) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 105, 106); - } - else if ( se->localPart == 65 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 107, 108); - } - break; - case 105: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - if ( se->localPart == 65 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 107, 108); - } - break; - case 108: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Currency)] */ - if ( se->localPart == 5 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Currency) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 109, 110); - } - break; - case 109: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff)] */ - if ( se->localPart == 38 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 111, 112); - } - break; - case 111: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff), END_ELEMENT] */ - if ( se->localPart == 38 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 111, 112); - } - break; - case 112: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffID)] */ - if ( se->localPart == 45 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffID) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 113, 51); - } - break; - case 113: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries)] */ - if ( se->localPart == 40 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffDescription) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 114, 115); - } - else if ( se->localPart == 41 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries) */ - return _exiEncodeStartElement(stream, 1, 1, state, se, 116, 117); - } - break; - case 114: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries)] */ - if ( se->localPart == 41 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntries) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 116, 117); - } - break; - case 117: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry)] */ - if ( se->localPart == 43 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 118, 119); - } - break; - case 118: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry), END_ELEMENT] */ - if ( se->localPart == 43 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 118, 119); - } - break; - case 119: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffStart)] */ - if ( se->localPart == 47 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffStart) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 120, 121); - } - break; - case 120: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffPMax)] */ - if ( se->localPart == 46 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffPMax) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 122, 57); - } - break; - case 122: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPrice), END_ELEMENT] */ - if ( se->localPart == 6 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPrice) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 123, 57); - } - break; - case 124: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - if ( se->localPart == 57 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 126, 127); - } - break; - case 128: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ - if ( se->localPart == 52 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 130, 131); - } - break; - case 131: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ - if ( se->localPart == 26 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 132, 133); - } - break; - case 132: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ - if ( se->localPart == 26 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 132, 133); - } - break; - case 133: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ - if ( se->localPart == 28 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 134, 135); - } - break; - case 134: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - if ( se->localPart == 30 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 136, 137); - } - else if ( se->localPart == 33 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 138, 125); - } - else if ( se->localPart == 31 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */ - return _exiEncodeStartElement(stream, 2, 2, state, se, 139, 127); - } - break; - case 136: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - if ( se->localPart == 33 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 138, 125); - } - else if ( se->localPart == 31 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 139, 127); - } - break; - case 138: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - if ( se->localPart == 31 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 139, 127); - } - break; - case 140: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVPubKey)] */ - if ( se->localPart == 31 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVPubKey) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 141, 142); - } - break; - case 143: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringAuthPubKey), END_ELEMENT] */ - if ( se->localPart == 16 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringAuthPubKey) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 145, 142); - } - break; - case 146: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus)] */ - if ( se->localPart == 32 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PEVStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 147, 25); - } - break; - case 148: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ - if ( se->localPart == 3 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 150, 72); - } - break; - case 150: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus)] */ - if ( se->localPart == 7 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEStatus) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 151, 35); - } - break; - case 151: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent)] */ - if ( se->localPart == 63 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TCurrent) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 152, 45); - } - break; - case 153: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ - if ( se->localPart == 0 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 155, 156); - } - break; - case 154: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}SessionInformation)] */ - if ( se->localPart == 7 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}SessionInformation) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 157, 158); - } - break; - case 156: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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), END_ELEMENT] */ - if ( se->localPart == 2 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement) */ - return _exiEncodeStartElement(stream, 5, 0, state, se, 174, 3); - } - else if ( se->localPart == 11 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq) */ - return _exiEncodeStartElement(stream, 5, 1, state, se, 174, 5); - } - else if ( se->localPart == 13 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes) */ - return _exiEncodeStartElement(stream, 5, 2, state, se, 174, 6); - } - else if ( se->localPart == 17 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq) */ - return _exiEncodeStartElement(stream, 5, 3, state, se, 174, 7); - } - else if ( se->localPart == 19 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes) */ - return _exiEncodeStartElement(stream, 5, 4, state, se, 174, 8); - } - else if ( se->localPart == 21 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusReq) */ - return _exiEncodeStartElement(stream, 5, 5, state, se, 174, 9); - } - else if ( se->localPart == 23 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes) */ - return _exiEncodeStartElement(stream, 5, 6, state, se, 174, 10); - } - else if ( se->localPart == 33 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */ - return _exiEncodeStartElement(stream, 5, 7, state, se, 174, 11); - } - else if ( se->localPart == 35 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes) */ - return _exiEncodeStartElement(stream, 5, 8, state, se, 174, 12); - } - else if ( se->localPart == 37 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq) */ - return _exiEncodeStartElement(stream, 5, 9, state, se, 174, 13); - } - else if ( se->localPart == 39 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes) */ - return _exiEncodeStartElement(stream, 5, 10, state, se, 174, 14); - } - else if ( se->localPart == 41 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryReq) */ - return _exiEncodeStartElement(stream, 5, 11, state, se, 174, 15); - } - else if ( se->localPart == 43 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes) */ - return _exiEncodeStartElement(stream, 5, 12, state, se, 174, 16); - } - else if ( se->localPart == 48 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq) */ - return _exiEncodeStartElement(stream, 5, 13, state, se, 174, 17); - } - else if ( se->localPart == 50 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes) */ - return _exiEncodeStartElement(stream, 5, 14, state, se, 174, 18); - } - else if ( se->localPart == 53 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq) */ - return _exiEncodeStartElement(stream, 5, 15, state, se, 174, 19); - } - else if ( se->localPart == 55 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes) */ - return _exiEncodeStartElement(stream, 5, 16, state, se, 174, 20); - } - else if ( se->localPart == 59 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */ - return _exiEncodeStartElement(stream, 5, 17, state, se, 174, 21); - } - else if ( se->localPart == 61 && se->namespaceURI == 4 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes) */ - return _exiEncodeStartElement(stream, 5, 18, state, se, 174, 22); - } - break; - case 157: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Notification), END_ELEMENT] */ - if ( se->localPart == 6 && se->namespaceURI == 6 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Notification) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 159, 160); - } - break; - case 158: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SessionID)] */ - if ( se->localPart == 34 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SessionID) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 161, 162); - } - break; - case 160: - /* FirstStartTagStartTag[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}EventList), END_ELEMENT] */ - if ( se->localPart == 13 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 166, 167); - } - else if ( se->localPart == 14 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 168, 169); - } - else if ( se->localPart == 10 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList) */ - return _exiEncodeStartElement(stream, 2, 2, state, se, 170, 171); - } - break; - case 161: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceSessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - if ( se->localPart == 32 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceSessionID) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 163, 162); - } - else if ( se->localPart == 24 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 164, 165); - } - break; - case 163: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - if ( se->localPart == 24 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 164, 165); - } - break; - case 166: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - if ( se->localPart == 14 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg) */ - return _exiEncodeStartElement(stream, 2, 0, state, se, 168, 169); - } - else if ( se->localPart == 10 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList) */ - return _exiEncodeStartElement(stream, 2, 1, state, se, 170, 171); - } - break; - case 168: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - if ( se->localPart == 10 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList) */ - return _exiEncodeStartElement(stream, 1, 0, state, se, 170, 171); - } - break; - case 171: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Event)] */ - if ( se->localPart == 9 && se->namespaceURI == 5 ) { - /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Event) */ - return _exiEncodeStartElement(stream, 0, 0, state, se, 172, 173); - } - break; - - default: - return -1; - } - - return -1; -} - -int exiEncodeEndElement(bitstream_t* stream, exi_state_t* state, - eqname_t* ee) { - switch (state->grammarStack[state->stackIndex]) { - case 53: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), 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:MsgDataTypes}TMeter), END_ELEMENT] */ - encodeNBitUnsignedInteger(stream, 3, 4); - break; - case 54: - /* Element[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:MsgDataTypes}TMeter), END_ELEMENT] */ - case 134: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - case 160: - /* FirstStartTagStartTag[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}EventList), END_ELEMENT] */ - encodeNBitUnsignedInteger(stream, 2, 3); - break; - case 156: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}LineLockRes), 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}MeteringStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringStatusRes), 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}PowerDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDiscoveryRes), 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), END_ELEMENT] */ - encodeNBitUnsignedInteger(stream, 5, 19); - break; - case 58: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - case 76: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - case 84: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - case 105: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - case 111: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Tariff), END_ELEMENT] */ - case 118: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TariffEntry), END_ELEMENT] */ - case 122: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPrice), END_ELEMENT] */ - case 124: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - case 128: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ - case 132: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ - case 138: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - case 143: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringAuthPubKey), END_ELEMENT] */ - case 157: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Notification), END_ELEMENT] */ - case 163: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - case 168: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - encodeNBitUnsignedInteger(stream, 1, 1); - break; - case 56: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ - case 75: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), END_ELEMENT] */ - case 83: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}Tariff), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), END_ELEMENT] */ - case 104: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EnergyProvider), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}TariffTable), END_ELEMENT] */ - case 17: - /* FirstStartTagStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), END_ELEMENT] */ - case 136: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ - case 161: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceSessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProtocolVersion), END_ELEMENT] */ - case 166: - /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EventList), END_ELEMENT] */ - encodeNBitUnsignedInteger(stream, 2, 2); - break; - case 3: - /* FirstStartTag(xsi:type)StartTag[END_ELEMENT] */ - case 26: - /* Element[END_ELEMENT] */ - case 29: - /* Element[END_ELEMENT] */ - case 31: - /* Element[END_ELEMENT] */ - case 34: - /* Element[END_ELEMENT] */ - case 44: - /* Element[END_ELEMENT] */ - case 52: - /* Element[END_ELEMENT] */ - case 60: - /* Element[END_ELEMENT] */ - case 65: - /* Element[END_ELEMENT] */ - case 67: - /* Element[END_ELEMENT] */ - case 9: - /* FirstStartTagStartTag[END_ELEMENT] */ - case 77: - /* Element[END_ELEMENT] */ - case 78: - /* Element[END_ELEMENT] */ - case 80: - /* Element[END_ELEMENT] */ - case 85: - /* Element[END_ELEMENT] */ - case 88: - /* Element[END_ELEMENT] */ - case 89: - /* Element[END_ELEMENT] */ - case 98: - /* Element[END_ELEMENT] */ - case 107: - /* Element[END_ELEMENT] */ - case 116: - /* Element[END_ELEMENT] */ - case 123: - /* Element[END_ELEMENT] */ - case 126: - /* Element[END_ELEMENT] */ - case 130: - /* Element[END_ELEMENT] */ - case 139: - /* Element[END_ELEMENT] */ - case 141: - /* Element[END_ELEMENT] */ - case 145: - /* Element[END_ELEMENT] */ - case 147: - /* Element[END_ELEMENT] */ - case 152: - /* Element[END_ELEMENT] */ - case 155: - /* Element[END_ELEMENT] */ - case 159: - /* Element[END_ELEMENT] */ - case 164: - /* Element[END_ELEMENT] */ - case 170: - /* Element[END_ELEMENT] */ - case 172: - /* Element[END_ELEMENT] */ - case 174: - /* Element[END_ELEMENT] */ - /* no event code to write */ - break; - - default: - return -1; - } - - /* pop item */ - return exiPopStack(state); -} - -int exiEncodeCharacters(bitstream_t* stream, exi_state_t* state, - exi_value_t* val) { - switch (state->grammarStack[state->stackIndex]) { - case 27: - case 30: - case 37: - case 41: - case 43: - if (val->type == BOOLEAN) { - /* CHARACTERS[BOOLEAN] */ - encodeBoolean(stream, val->boolean); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 51: - case 90: - case 129: - case 149: - case 173: - if (val->type == ENUMERATION) { - /* CHARACTERS[ENUMERATION] */ - encodeNBitUnsignedInteger(stream, 3, val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 68: - case 70: - case 100: - if (val->type == ENUMERATION) { - /* CHARACTERS[ENUMERATION] */ - encodeNBitUnsignedInteger(stream, 1, val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 33: - case 81: - case 125: - case 144: - case 167: - if (val->type == ENUMERATION) { - /* CHARACTERS[ENUMERATION] */ - encodeNBitUnsignedInteger(stream, 2, val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 169: - if (val->type == STRING) { - /* CHARACTERS[STRING] */ - /* xsi:type OR xsi:nil */ - encodeNBitUnsignedInteger(stream, 1, 0); - encodeStringValue(stream, &val->string); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 62: - if (val->type == ENUMERATION) { - /* CHARACTERS[ENUMERATION] */ - encodeNBitUnsignedInteger(stream, 4, val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 121: - if (val->type == UNSIGNED_INTEGER_32) { - /* CHARACTERS[UNSIGNED_INTEGER_32] */ - encodeUnsignedInteger32(stream, val->uint32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 47: - case 55: - case 79: - case 106: - case 110: - case 115: - case 127: - case 137: - case 165: - if (val->type == STRING) { - /* CHARACTERS[STRING] */ - encodeStringValue(stream, &val->string); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 64: - if (val->type == ENUMERATION) { - /* CHARACTERS[ENUMERATION] */ - encodeNBitUnsignedInteger(stream, 5, val->enumeration); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 66: - if (val->type == INTEGER_32) { - /* CHARACTERS[INTEGER_32] */ - /* xsi:type OR xsi:nil */ - encodeNBitUnsignedInteger(stream, 1, 0); - encodeInteger32(stream, val->int32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 45: - if (val->type == INTEGER_32) { - /* CHARACTERS[INTEGER_32] */ - encodeInteger32(stream, val->int32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 59: - case 96: - if (val->type == INTEGER_16) { - /* CHARACTERS[INTEGER_16] */ - encodeInteger32(stream, val->int32); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - case 72: - case 135: - case 142: - case 162: - if (val->type == BINARY_HEX) { - /* CHARACTERS[BINARY_HEX] */ - encodeBinary(stream, &val->binary); - /* move on */ - state->grammarStack[state->stackIndex] = 31; - return 0; - } - break; - - default: - return -1; - } - - return -1; -} - -int exiEncodeAttribute(bitstream_t* stream, exi_state_t* state, - eqname_t* at, exi_value_t* val) { - switch (state->grammarStack[state->stackIndex]) { - - default: - return -1; - } - - return -1; -} - - -#endif - diff --git a/src/codec/EXIEncoder.h b/src/codec/EXIEncoder.h deleted file mode 100644 index 2a1dbae..0000000 --- a/src/codec/EXIEncoder.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef EXI_ENCODER_H -#define EXI_ENCODER_H - -#include -#include -#include - -#include "EXITypes.h" - -int exiInitEncoder(bitstream_t* stream, exi_state_t* state); - -int exiEncodeStartDocument(bitstream_t* stream, exi_state_t* state); - -int exiEncodeEndDocument(bitstream_t* stream, exi_state_t* state); - -int exiEncodeStartElement(bitstream_t* stream, exi_state_t* state, - eqname_t* se); - -int exiEncodeEndElement(bitstream_t* stream, exi_state_t* state, eqname_t* ee); - -int exiEncodeCharacters(bitstream_t* stream, exi_state_t* state, - exi_value_t* val); - -int exiEncodeAttribute(bitstream_t* stream, exi_state_t* state, eqname_t* at, - exi_value_t* val); - -#endif - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/EXIHeaderDecoder.c b/src/codec/EXIHeaderDecoder.c deleted file mode 100644 index f398324..0000000 --- a/src/codec/EXIHeaderDecoder.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#include -#include - -#include "EXIHeaderDecoder.h" -#include "BitInputStream.h" -#include "BitDecoderChannel.h" - -#ifndef EXI_HEADER_DECODER_C -#define EXI_HEADER_DECODER_C - -int readEXIHeader(bitstream_t* stream) { - uint8_t header; - int errn = readBits(stream, 8, &header); - if (errn < 0) { - return errn; - } - if(header == '$') { - /* we do not support "EXI Cookie" */ - errn = -1; - } else if ( header & 0x20 ) { - /* we do not support "Presence Bit for EXI Options" */ - errn = -2; - } else { - /* Yes, a *simple* header */ - errn = 0; - } - return errn; -} - - -#endif - - diff --git a/src/codec/EXIHeaderDecoder.h b/src/codec/EXIHeaderDecoder.h deleted file mode 100644 index 20d20ae..0000000 --- a/src/codec/EXIHeaderDecoder.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include "EXITypes.h" - -#ifndef EXI_HEADER_DECODER_H -#define EXI_HEADER_DECODER_H - -int readEXIHeader(bitstream_t* stream); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/src/codec/EXIHeaderEncoder.c b/src/codec/EXIHeaderEncoder.c deleted file mode 100644 index 1e9aaea..0000000 --- a/src/codec/EXIHeaderEncoder.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#include -#include - -#include "EXIHeaderEncoder.h" -#include "BitOutputStream.h" -#include "BitEncoderChannel.h" - -#ifndef EXI_HEADER_ENCODER_C -#define EXI_HEADER_ENCODER_C - -int writeEXIHeader(bitstream_t* stream) { - return writeBits(stream, 8, 144); -} - - -#endif - - diff --git a/src/codec/EXIHeaderEncoder.h b/src/codec/EXIHeaderEncoder.h deleted file mode 100644 index 8538ab1..0000000 --- a/src/codec/EXIHeaderEncoder.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#include "EXITypes.h" - -#ifndef EXI_HEADER_ENCODER_H -#define EXI_HEADER_ENCODER_H - -int writeEXIHeader(bitstream_t* stream); - -#endif - - -#ifdef __cplusplus -} -#endif diff --git a/src/codec/EXITypes.h b/src/codec/EXITypes.h deleted file mode 100644 index 6c699f6..0000000 --- a/src/codec/EXITypes.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -#ifndef EXI_TYPES_H -#define EXI_TYPES_H - -#define BITS_IN_BYTE 8 - -#define EXI_ELEMENT_STACK_SIZE 16 - -/* EXI automaton methods prefixes such as "inline" etc. */ -#ifndef EXI_MPFX -#define EXI_MPFX -#endif - -#define FLOAT_EXPONENT_SPECIAL_VALUES -16384 -#define FLOAT_MANTISSA_INFINITY 1 -#define FLOAT_MANTISSA_MINUS_INFINITY -1 -#define FLOAT_MANTISSA_NOT_A_NUMBER 0 - -typedef struct { - /* Integer Array */ - size_t size; /* array size */ - uint8_t* data; /* int data array */ - size_t* pos; /* next position in array */ - /* Current byte buffer & its remaining bit capacity */ - uint8_t buffer; - size_t capacity; -} bitstream_t; - -typedef struct { - /* Bytes Size and array container */ - size_t size; - uint8_t* data; - /* current length (len <= size) */ - size_t len; -} bytes_t; - -/* Universal Character Set (UCS) strings */ -typedef struct { - /* UCS size and UCS character container*/ - size_t size; - uint32_t* codepoints; - /* current length == number of code-points, (len <= size) */ - size_t len; -} string_ucs_t; - -typedef struct { - /* range of the mantissa is -(2^63) to 2^63-1 */ - int64_t mantissa; - /* range of the exponent is - (2^14-1) to 2^14-1 */ - int32_t exponent; /* base-10 */ -} float_me_t; - - -typedef enum -{ - /* Binary */ - BINARY_BASE64, BINARY_HEX, - /* Boolean */ - BOOLEAN, - /* Decimal */ - DECIMAL, - /* Float */ - FLOAT, DOUBLE, - /* N-Bit Integer */ - NBIT_INTEGER_32, NBIT_INTEGER_64, NBIT_INTEGER_BIG, - /* Unsigned Integer */ - UNSIGNED_INTEGER_16, UNSIGNED_INTEGER_32, UNSIGNED_INTEGER_64, UNSIGNED_INTEGER_BIG, - /* (Signed) Integer */ - INTEGER_16, INTEGER_32, INTEGER_64, INTEGER_BIG, - /* Datetime */ - DATETIME, - /* String */ - STRING, - /* Enumeration */ - ENUMERATION, - /* List */ - LIST -} exi_datatype_t; - - -typedef enum -{ - START_DOCUMENT, - END_DOCUMENT, - START_ELEMENT, - START_ELEMENT_GENERIC, /* not supported yet */ - END_ELEMENT, - CHARACTERS, - CHARACTERS_GENERIC, /* not supported yet */ - ATTRIBUTE, - ATTRIBUTE_GENERIC, /* not supported yet */ - /* error state */ - ERROR -} exi_event_t; - -/* TODO list support */ -typedef struct { - /* List container with memory size */ - size_t size; - uint8_t* data; - /* list item type */ - exi_datatype_t type; - /* number of items */ - size_t len; -} list_t; - - -typedef struct { - unsigned int namespaceURI; - unsigned int localPart; -} eqname_t; - -typedef struct { - /* stack of grammar states and elements */ - size_t grammarStack [EXI_ELEMENT_STACK_SIZE]; - eqname_t elementStack [EXI_ELEMENT_STACK_SIZE]; - size_t stackIndex; - /* event-code */ - uint8_t eventCode; -} exi_state_t; - - -typedef struct { - /* type of value */ - exi_datatype_t type; - - /* base types */ - int boolean; - int8_t int8; - uint8_t uint8; - uint32_t uint32; - int32_t int32; - int64_t int64; - uint8_t enumeration; - - /* Bytes, Strings and Lists are not native types anymore */ - bytes_t binary; - string_ucs_t string; - list_t list; -} exi_value_t; - - -/* - * ERROR-Codes - */ -# define EXI_ERROR_OUT_OF_BOUNDS -100 - -# define EXI_ERROR_UNKOWN_EVENT_CODE -110 - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/src/codec/StringTable.c b/src/codec/StringTable.c deleted file mode 100644 index d02a019..0000000 --- a/src/codec/StringTable.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifndef STRING_TABLE_C -#define STRING_TABLE_C - -#include -#include -#include -#include - -#include "StringTable.h" -#include "EXITypes.h" -#include "BitInputStream.h" -#include "BitDecoderChannel.h" - -#include "StringTableEntries.h" - -#include "assert.h" - -int exiGetUri(size_t uriID, const char** uri) { - if ( uriID < stringTable.len ) { - *uri = stringTable.uris[uriID]; - } else { - return EXI_ERROR_OUT_OF_BOUNDS; - } - - return 0; -} - -int exiGetUriLength(size_t* uriLength) { - *uriLength = stringTable.len; - return 0; -} - - -int exiGetUriID(const char* uri, size_t* uriID) { - unsigned int i; - for(i=0; i. - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef STRING_TABLE_H -#define STRING_TABLE_H - -#include "EXITypes.h" - -int exiGetUri(size_t uriID, const char** uri); - -int exiGetUriLength(size_t* uriLength); - -int exiGetUriID(const char* uri, size_t* uriID); - -int exiGetLocalName(size_t uriID, size_t localNameID, const char** localName); - -int exiGetLocalNameLength(size_t uriID, size_t* localNameLength); - -int exiGetLocalNameID(size_t uriID, const char* localName, size_t* localNameID); - -#endif - - -#ifdef __cplusplus -} -#endif - diff --git a/src/codec/StringTableEntries.c b/src/codec/StringTableEntries.c deleted file mode 100644 index 14ef4bb..0000000 --- a/src/codec/StringTableEntries.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifndef STRING_TABLE_ENTRIES_C -#define STRING_TABLE_ENTRIES_C - -#include "StringTableEntries.h" - - -/* ==================================== */ -/* String Table Population */ - -/* localName entries for URI id = 0 */ -const char * localNames0[] = { - NULL -}; -/* localName entries for URI id = 1 */ -const char * localNames1[] = { - "base", "id", "lang", "space" -}; -/* localName entries for URI id = 2 */ -const char * localNames2[] = { - "nil", "type" -}; -/* localName entries for URI id = 3 */ -const char * localNames3[] = { - "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 id = 4 */ -const char * localNames4[] = { - "ChargingProfile", "ContractID", "EAmount", "EVSEID", "EVSEIMax", - "EVSEMaxPhases", "EVSEMaxPower", "EVSEStatus", "EVSEVoltage", "EnergyProvider", - "EoC", "LineLockReq", "LineLockReqType", "LineLockRes", "LineLockResType", - "MeterInfo", "MeteringAuthPubKey", "MeteringReceiptReq", "MeteringReceiptReqType", "MeteringReceiptRes", - "MeteringReceiptResType", "MeteringStatusReq", "MeteringStatusReqType", "MeteringStatusRes", "MeteringStatusResType", - "PCurrent", "PEVID", "PEVMaxPhases", "PEVMaxPower", "PEVMaxVoltage", - "PEVMinVoltage", "PEVPubKey", "PEVStatus", "PaymentDetailsReq", "PaymentDetailsReqType", - "PaymentDetailsRes", "PaymentDetailsResType", "PowerDeliveryReq", "PowerDeliveryReqType", "PowerDeliveryRes", - "PowerDeliveryResType", "PowerDiscoveryReq", "PowerDiscoveryReqType", "PowerDiscoveryRes", "PowerDiscoveryResType", - "ReqLockStatus", "ReqSwitchStatus", "ResponseCode", "ServiceDiscoveryReq", "ServiceDiscoveryReqType", - "ServiceDiscoveryRes", "ServiceDiscoveryResType", "ServiceList", "ServicePaymentSelectionReq", "ServicePaymentSelectionReqType", - "ServicePaymentSelectionRes", "ServicePaymentSelectionResType", "ServiceScope", "ServiceType", "SessionSetupReq", - "SessionSetupReqType", "SessionSetupRes", "SessionSetupResType", "TCurrent", "Tariff", - "TariffTable" -}; -/* localName entries for URI id = 5 */ -const char * localNames5[] = { - "ChargerStandby", "ChargingProfileEntryMaxPower", "ChargingProfileEntryStart", "ChargingProfileType", "ConnectorLocked", - "Currency", "EPrice", "EVSEStandby", "EVSEStatusType", "Event", - "EventList", "EventListType", "FatalError", "FaultCode", "FaultMsg", - "FloatingValueType", "MeterID", "MeterInfoType", "MeterReading", "MeterStatus", - "Multiplier", "NotificationType", "PEVStatusType", "PowerSwitchClosed", "ProtocolVersion", - "RCD", "Service", "ServiceDescriptionType", "ServiceID", "ServiceListType", - "ServiceName", "ServiceScope", "ServiceSessionID", "ServiceType", "SessionID", - "SessionInformationType", "ShutDownTime", "TMeter", "Tariff", "TariffDescrType", - "TariffDescription", "TariffEntries", "TariffEntriesType", "TariffEntry", "TariffEntryType", - "TariffID", "TariffPMax", "TariffStart", "TariffTableType", "Unit", - "Value", "contractIDType", "currencyType", "energyProviderType", "eventEntryType", - "evseIDType", "fatalErrorType", "faultCodeType", "lockStatusType", "maxPhasesType", - "meterIDType", "meterStatusType", "paymentOptionListType", "paymentOptionType", "pevIDType", - "protocolVersionType", "pubKeyType", "rcdType", "responseCode_LineLockType", "responseCode_MeteringReceiptType", - "responseCode_MeteringStatusType", "responseCode_PaymentDetailsType", "responseCode_PowerDeliveryType", "responseCode_PowerDiscoveryType", "responseCode_ServiceDiscoveryType", - "responseCode_ServicePaymentSelectionType", "responseCode_SessionSetupType", "serviceDetailsType", "serviceIDType", "serviceNameType", - "serviceScopeType", "serviceTypeType", "sessionIDType", "standbyType", "switchStatusType", - "tariffDescriptionType", "tariffIDType", "tariffStartType", "timeType", "unitMultiplierType", - "unitSymbolType" -}; -/* localName entries for URI id = 6 */ -const char * localNames6[] = { - "Body", "BodyBaseType", "BodyElement", "BodyType", "Header", - "HeaderType", "Notification", "SessionInformation", "V2G_Message" -}; -struct exiPartition localNamePartitions[7] = { - { 0, localNames0 }, - { 4, localNames1 }, - { 2, localNames2 }, - { 46, localNames3 }, - { 66, localNames4 }, - { 91, localNames5 }, - { 9, localNames6 } -}; -const char * uris[] = { - "", "http://www.w3.org/XML/1998/namespace", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/2001/XMLSchema", "urn:iso:15118:2:2010:MsgBody", "urn:iso:15118:2:2010:MsgDataTypes", "urn:iso:15118:2:2010:MsgDef" -}; -struct exiStringTable stringTable = { 7, uris, localNamePartitions }; - - - - -#endif - diff --git a/src/codec/StringTableEntries.h b/src/codec/StringTableEntries.h deleted file mode 100644 index d162a9b..0000000 --- a/src/codec/StringTableEntries.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifndef STRING_TABLE_ENTRIES_H -#define STRING_TABLE_ENTRIES_H - -#include -#include -#include -#include - -/* ==================================== */ -/* String Table Structures */ - -struct exiPartition { - /* length of array */ - size_t len; - /* array of string entries */ - const char** entries; -}; - -struct exiStringTable { - /* length of both arrays (uris & localNames) */ - size_t len; - /* URI entries*/ - const char** uris; - /* localName entries divided by URI */ - struct exiPartition * localNames; -}; - - -/* ==================================== */ -/* String Table Population */ - -extern struct exiStringTable stringTable; - -#endif - diff --git a/src/codec/UCSString.c b/src/codec/UCSString.c deleted file mode 100644 index a71b630..0000000 --- a/src/codec/UCSString.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#include -#include -#include -#include - -#include "BitDecoderChannel.h" -#include "BitInputStream.h" -#include "EXITypes.h" - -#ifndef UCS_STRING_C -#define UCS_STRING_C - -int toUCSString(char* chars, string_ucs_t* s) { - unsigned int i; - s->len = strlen(chars); - - if (s->len <= s->size) { - for(i=0; ilen; i++) { - s->codepoints[i] = chars[i]; - } - return 0; - } else { - return -1; - } -} - -/* Note: fails if string contains non ASCII characters */ -int toASCIIString(string_ucs_t* string, char* outASCII) { - unsigned int i; - for(i=0; ilen; i++) { - outASCII[i] = (char)string->codepoints[i]; - } - outASCII[string->len] = '\0'; - - return 0; -} - -#endif - diff --git a/src/codec/UCSString.h b/src/codec/UCSString.h deleted file mode 100644 index 7055d7f..0000000 --- a/src/codec/UCSString.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2007-2010 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, see . - */ - -/******************************************************************* - * - * @author Daniel.Peintner.EXT@siemens.com - * @version 0.3 - * @contact Joerg.Heuer@siemens.com - * - ********************************************************************/ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "EXITypes.h" - -/* TODO utf8/cstring//wchar_t/char16_t/char32_t methods */ - - -#ifndef UCS_STRING_H -#define UCS_STRING_H - -int toUCSString(char* chars, string_ucs_t* s); - -/* Note: fails if string contains non ASCII characters */ -int toASCIIString(string_ucs_t* string, char* outASCII); - -#endif - - -#ifdef __cplusplus -} -#endif