Procházet zdrojové kódy

* get ready for release 0.9

daniel_peintner před 11 roky
rodič
revize
1b28ce9531
100 změnil soubory, kde provedl 9798 přidání a 32574 odebrání
  1. 90 168
      .cproject
  2. 0 2
      Debug/makefile
  3. 0 2
      Debug/sources.mk
  4. 10 10
      Debug/src/appHandshake/subdir.mk
  5. 0 36
      Debug/src/codec/appHandCodec/subdir.mk
  6. 10 28
      Debug/src/codec/subdir.mk
  7. 0 33
      Debug/src/service/subdir.mk
  8. 7 13
      Debug/src/test/subdir.mk
  9. 1 1
      Debug/src/transport/subdir.mk
  10. 17 2
      README.txt
  11. 0 2
      Release/makefile
  12. 0 2
      Release/sources.mk
  13. 10 10
      Release/src/appHandshake/subdir.mk
  14. 0 36
      Release/src/codec/appHandCodec/subdir.mk
  15. 10 28
      Release/src/codec/subdir.mk
  16. 0 33
      Release/src/service/subdir.mk
  17. 7 13
      Release/src/test/subdir.mk
  18. 1 1
      Release/src/transport/subdir.mk
  19. 64 0
      src/appHandshake/appHandEXIDatatypes.c
  20. 130 0
      src/appHandshake/appHandEXIDatatypes.h
  21. 898 0
      src/appHandshake/appHandEXIDatatypesDecoder.c
  22. 32 19
      src/appHandshake/appHandEXIDatatypesDecoder.h
  23. 671 0
      src/appHandshake/appHandEXIDatatypesEncoder.c
  24. 33 19
      src/appHandshake/appHandEXIDatatypesEncoder.h
  25. 0 341
      src/appHandshake/appHand_dataDeserialization.c
  26. 0 424
      src/appHandshake/appHand_dataSerialization.c
  27. 0 57
      src/appHandshake/appHand_dataTypes.c
  28. 0 133
      src/appHandshake/appHand_dataTypes.h
  29. 0 94
      src/appHandshake/appHand_service.h
  30. 719 644
      src/codec/AbstractDecoderChannel.c
  31. 630 515
      src/codec/AbstractEncoderChannel.c
  32. 52 53
      src/codec/BitDecoderChannel.c
  33. 67 68
      src/codec/BitEncoderChannel.c
  34. 80 81
      src/codec/BitInputStream.c
  35. 42 44
      src/codec/BitInputStream.h
  36. 99 100
      src/codec/BitOutputStream.c
  37. 60 61
      src/codec/BitOutputStream.h
  38. 68 69
      src/codec/ByteDecoderChannel.c
  39. 118 119
      src/codec/ByteEncoderChannel.c
  40. 6 7
      src/codec/ByteStream.c
  41. 14 15
      src/codec/ByteStream.h
  42. 361 334
      src/codec/DecoderChannel.h
  43. 0 101
      src/codec/DynamicMemory.c
  44. 0 101
      src/codec/DynamicMemory.h
  45. 21 29
      src/codec/EXIConfig.h
  46. 8 32
      src/codec/EXIHeaderDecoder.c
  47. 12 14
      src/codec/EXIHeaderDecoder.h
  48. 5 31
      src/codec/EXIHeaderEncoder.c
  49. 12 14
      src/codec/EXIHeaderEncoder.h
  50. 68 71
      src/codec/EXIOptions.h
  51. 567 532
      src/codec/EXITypes.h
  52. 362 298
      src/codec/EncoderChannel.h
  53. 95 92
      src/codec/ErrorCodes.h
  54. 92 93
      src/codec/MethodsBag.c
  55. 45 45
      src/codec/MethodsBag.h
  56. 0 118
      src/codec/StringNameTable.c
  57. 0 119
      src/codec/StringNameTable.h
  58. 202 170
      src/codec/StringValueTable.c
  59. 94 95
      src/codec/StringValueTable.h
  60. 0 95
      src/codec/UCSString.c
  61. 0 78
      src/codec/UCSString.h
  62. 0 722
      src/codec/appHandCodec/appHandEXICoder.c
  63. 0 74
      src/codec/appHandCodec/appHandEXICoder.h
  64. 0 1746
      src/codec/appHandCodec/appHandEXIDecoder.c
  65. 0 225
      src/codec/appHandCodec/appHandEXIDecoder.h
  66. 0 1425
      src/codec/appHandCodec/appHandEXIEncoder.c
  67. 0 274
      src/codec/appHandCodec/appHandEXIEncoder.h
  68. 0 101
      src/codec/appHandCodec/appHandNameTableEntries.c
  69. 0 54
      src/codec/appHandCodec/appHandQNameDefines.h
  70. 0 227
      src/codec/appHandCodec/appHandQNames.c
  71. 0 77
      src/codec/appHandCodec/appHandQNames.h
  72. 0 604
      src/codec/main_codec.c
  73. 0 1325
      src/codec/v2gEXICoder.c
  74. 0 74
      src/codec/v2gEXICoder.h
  75. 634 0
      src/codec/v2gEXIDatatypes.c
  76. 2225 0
      src/codec/v2gEXIDatatypes.h
  77. 563 0
      src/codec/v2gEXIDatatypesDecoder.c
  78. 34 28
      src/codec/v2gEXIDatatypesDecoder.h
  79. 416 0
      src/codec/v2gEXIDatatypesEncoder.c
  80. 36 22
      src/codec/v2gEXIDatatypesEncoder.h
  81. 0 947
      src/codec/v2gEXIDecoder.c
  82. 0 225
      src/codec/v2gEXIDecoder.h
  83. 0 331
      src/codec/v2gEXIEncoder.c
  84. 0 274
      src/codec/v2gEXIEncoder.h
  85. 0 204
      src/codec/v2gNameTableEntries.c
  86. 0 54
      src/codec/v2gQNameDefines.h
  87. 0 989
      src/codec/v2gQNames.c
  88. 0 77
      src/codec/v2gQNames.h
  89. 0 692
      src/service/v2g_dataTypes.c
  90. 0 1681
      src/service/v2g_dataTypes.h
  91. 0 83
      src/service/v2g_service.h
  92. 0 2615
      src/service/v2g_serviceClientStubs.c
  93. 0 322
      src/service/v2g_serviceClientStubs.h
  94. 0 7504
      src/service/v2g_serviceDataSerialization.c
  95. 0 2536
      src/service/v2g_serviceDispatcher.c
  96. 0 63
      src/service/v2g_serviceDispatcher.h
  97. 0 186
      src/service/v2g_serviceMethods.h
  98. 0 192
      src/test/evse_server.c
  99. 0 33
      src/test/evse_server.h
  100. 0 843
      src/test/evse_serviceMethods.c

+ 90 - 168
.cproject

@@ -5,12 +5,12 @@
 			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907" moduleId="org.eclipse.cdt.core.settings" name="Debug">
 				<externalSettings/>
 				<extensions>
+					<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
@@ -18,7 +18,7 @@
 					<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907." name="/" resourcePath="">
 						<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.186426714" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.base">
 							<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.PE" id="cdt.managedbuild.target.gnu.platform.mingw.base.208578740" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
-							<builder buildPath="${workspace_loc:/OpenV2G}/Debug" id="cdt.managedbuild.builder.gnu.cross.474380604" superClass="cdt.managedbuild.builder.gnu.cross"/>
+							<builder buildPath="${workspace_loc:/OpenV2G}/Debug" id="cdt.managedbuild.builder.gnu.cross.474380604" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/>
 							<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.467817276" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
 								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1213164158" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
 							</tool>
@@ -30,10 +30,8 @@
 							<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.1511109002" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
 								<option id="gnu.c.compiler.option.include.paths.229245493" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;../src/codec&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;../src/codec/appHandCodec&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;../src/appHandshake&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;../src/transport&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;../src/service&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;../src/test&quot;"/>
 								</option>
 								<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1880660058" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
@@ -41,7 +39,7 @@
 								<option id="gnu.c.compiler.option.warnings.pedantic.1983095151" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic" value="true" valueType="boolean"/>
 								<option id="gnu.c.compiler.option.misc.ansi.1916749690" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="true" valueType="boolean"/>
 								<option id="gnu.c.compiler.option.warnings.toerrors.990186240" name="Warnings as errors (-Werror)" superClass="gnu.c.compiler.option.warnings.toerrors" value="false" valueType="boolean"/>
-								<option id="gnu.c.compiler.option.warnings.pedantic.error.145905553" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error" value="true" valueType="boolean"/>
+								<option id="gnu.c.compiler.option.warnings.pedantic.error.145905553" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error" value="false" valueType="boolean"/>
 								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1904654876" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
 							<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1907160138" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
@@ -66,12 +64,12 @@
 			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450" moduleId="org.eclipse.cdt.core.settings" name="Release">
 				<externalSettings/>
 				<extensions>
+					<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
 					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
-					<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
 				</extensions>
 			</storageModule>
 			<storageModule moduleId="cdtBuildSystem" version="4.0.0">
@@ -91,18 +89,16 @@
 							<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.2107890734" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
 								<option id="gnu.c.compiler.option.include.paths.289860304" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
 									<listOptionValue builtIn="false" value="&quot;../src/codec&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;../src/codec/appHandCodec&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;../src/appHandshake&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;../src/transport&quot;"/>
-									<listOptionValue builtIn="false" value="&quot;../src/service&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;../src/test&quot;"/>
 								</option>
-								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.899621054" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" value="gnu.c.optimization.level.most" valueType="enumerated"/>
-								<option id="gnu.c.compiler.option.debugging.level.1251127335" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-								<option id="gnu.c.compiler.option.misc.ansi.496561434" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="true" valueType="boolean"/>
+								<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.899621054" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" value="gnu.c.optimization.level.size" valueType="enumerated"/>
+								<option id="gnu.c.compiler.option.debugging.level.1251127335" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+								<option id="gnu.c.compiler.option.misc.ansi.496561434" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="false" valueType="boolean"/>
 								<option id="gnu.c.compiler.option.warnings.pedantic.289278524" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic" value="true" valueType="boolean"/>
-								<option id="gnu.c.compiler.option.warnings.pedantic.error.822372173" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error" value="true" valueType="boolean"/>
-								<option id="gnu.c.compiler.option.optimization.flags.1051939537" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-Os" valueType="string"/>
+								<option id="gnu.c.compiler.option.warnings.pedantic.error.822372173" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error" value="false" valueType="boolean"/>
+								<option id="gnu.c.compiler.option.optimization.flags.1051939537" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="" valueType="string"/>
 								<option id="gnu.c.compiler.option.misc.other.1470884128" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0" valueType="string"/>
 								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.898314529" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
 							</tool>
@@ -126,6 +122,28 @@
 	<storageModule moduleId="cdtBuildSystem" version="4.0.0">
 		<project id="OpenV2G.cdt.managedbuild.target.gnu.mingw.exe.1420366407" name="Executable" projectType="cdt.managedbuild.target.gnu.mingw.exe"/>
 	</storageModule>
+	<storageModule moduleId="refreshScope" versionNumber="2">
+		<configuration configurationName="Release">
+			<resource resourceType="PROJECT" workspacePath="/OpenV2G"/>
+		</configuration>
+		<configuration configurationName="Debug">
+			<resource resourceType="PROJECT" workspacePath="/OpenV2G"/>
+		</configuration>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
+		<buildTargets>
+			<target name="OpenV2G.exe" path="Debug" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+				<buildCommand>make</buildCommand>
+				<buildArguments/>
+				<buildTarget>OpenV2G.exe</buildTarget>
+				<stopOnError>true</stopOnError>
+				<useDefaultCommand>true</useDefaultCommand>
+				<runAllBuilders>true</runAllBuilders>
+			</target>
+		</buildTargets>
+	</storageModule>
+	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 	<storageModule moduleId="scannerConfiguration">
 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 		<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
@@ -178,38 +196,8 @@
 				<parser enabled="true"/>
 			</scannerInfoProvider>
 		</profile>
-		<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-			<buildOutputProvider>
-				<openAction enabled="true" filePath=""/>
-				<parser enabled="true"/>
-			</buildOutputProvider>
-			<scannerInfoProvider id="specsFile">
-				<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
-				<parser enabled="true"/>
-			</scannerInfoProvider>
-		</profile>
-		<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-			<buildOutputProvider>
-				<openAction enabled="true" filePath=""/>
-				<parser enabled="true"/>
-			</buildOutputProvider>
-			<scannerInfoProvider id="specsFile">
-				<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
-				<parser enabled="true"/>
-			</scannerInfoProvider>
-		</profile>
-		<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-			<buildOutputProvider>
-				<openAction enabled="true" filePath=""/>
-				<parser enabled="true"/>
-			</buildOutputProvider>
-			<scannerInfoProvider id="specsFile">
-				<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
-				<parser enabled="true"/>
-			</scannerInfoProvider>
-		</profile>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.base.1358204014;cdt.managedbuild.tool.gnu.c.compiler.input.822105819">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907;cdt.managedbuild.config.gnu.mingw.exe.debug.181718907.;cdt.managedbuild.tool.gnu.c.compiler.mingw.base.1511109002;cdt.managedbuild.tool.gnu.c.compiler.input.1904654876">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
 			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
@@ -260,40 +248,30 @@
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-				<buildOutputProvider>
-					<openAction enabled="true" filePath=""/>
-					<parser enabled="true"/>
-				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
-					<parser enabled="true"/>
-				</scannerInfoProvider>
-			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907;cdt.managedbuild.config.gnu.mingw.exe.debug.181718907.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.113647340;cdt.managedbuild.tool.gnu.c.compiler.input.67299528">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+				<scannerInfoProvider id="makefileGenerator">
+					<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.150928873;cdt.managedbuild.tool.gnu.c.compiler.input.2117635578">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
-			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
@@ -303,78 +281,81 @@
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
-				<scannerInfoProvider id="makefileGenerator">
-					<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+				<scannerInfoProvider id="specsFile">
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.mingw.base.2107890734;cdt.managedbuild.tool.gnu.c.compiler.input.898314529">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+				<scannerInfoProvider id="makefileGenerator">
+					<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
 		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907;cdt.managedbuild.config.gnu.mingw.exe.debug.181718907.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.113647340;cdt.managedbuild.tool.gnu.c.compiler.input.67299528">
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.150928873;cdt.managedbuild.tool.gnu.c.compiler.input.2117635578">
 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
 			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
 				<buildOutputProvider>
@@ -426,40 +407,30 @@
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-				<buildOutputProvider>
-					<openAction enabled="true" filePath=""/>
-					<parser enabled="true"/>
-				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
-					<parser enabled="true"/>
-				</scannerInfoProvider>
-			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.base.1358204014;cdt.managedbuild.tool.gnu.c.compiler.input.822105819">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+				<scannerInfoProvider id="makefileGenerator">
+					<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-		</scannerConfigBuildInfo>
-		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1536681007;cdt.managedbuild.config.gnu.mingw.exe.debug.1536681007.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1257453970;cdt.managedbuild.tool.gnu.c.compiler.input.1901507773">
-			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
-			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
@@ -469,73 +440,76 @@
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
-				<scannerInfoProvider id="makefileGenerator">
-					<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+				<scannerInfoProvider id="specsFile">
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+		</scannerConfigBuildInfo>
+		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1536681007;cdt.managedbuild.config.gnu.mingw.exe.debug.1536681007.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1257453970;cdt.managedbuild.tool.gnu.c.compiler.input.1901507773">
+			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+				<scannerInfoProvider id="makefileGenerator">
+					<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+			<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
 				<buildOutputProvider>
 					<openAction enabled="true" filePath=""/>
 					<parser enabled="true"/>
 				</buildOutputProvider>
 				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
+					<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
@@ -592,58 +566,6 @@
 					<parser enabled="true"/>
 				</scannerInfoProvider>
 			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
-				<buildOutputProvider>
-					<openAction enabled="true" filePath=""/>
-					<parser enabled="true"/>
-				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
-					<parser enabled="true"/>
-				</scannerInfoProvider>
-			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
-				<buildOutputProvider>
-					<openAction enabled="true" filePath=""/>
-					<parser enabled="true"/>
-				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
-					<parser enabled="true"/>
-				</scannerInfoProvider>
-			</profile>
-			<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
-				<buildOutputProvider>
-					<openAction enabled="true" filePath=""/>
-					<parser enabled="true"/>
-				</buildOutputProvider>
-				<scannerInfoProvider id="specsFile">
-					<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
-					<parser enabled="true"/>
-				</scannerInfoProvider>
-			</profile>
 		</scannerConfigBuildInfo>
 	</storageModule>
-	<storageModule moduleId="refreshScope" versionNumber="2">
-		<configuration configurationName="Release">
-			<resource resourceType="PROJECT" workspacePath="/OpenV2G"/>
-		</configuration>
-		<configuration configurationName="Debug">
-			<resource resourceType="PROJECT" workspacePath="/OpenV2G"/>
-		</configuration>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
-	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
-		<buildTargets>
-			<target name="OpenV2G.exe" path="Debug" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
-				<buildCommand>make</buildCommand>
-				<buildArguments/>
-				<buildTarget>OpenV2G.exe</buildTarget>
-				<stopOnError>true</stopOnError>
-				<useDefaultCommand>true</useDefaultCommand>
-				<runAllBuilders>true</runAllBuilders>
-			</target>
-		</buildTargets>
-	</storageModule>
-	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
 </cproject>

+ 0 - 2
Debug/makefile

@@ -10,8 +10,6 @@ RM := rm -rf
 -include sources.mk
 -include src/transport/subdir.mk
 -include src/test/subdir.mk
--include src/service/subdir.mk
--include src/codec/appHandCodec/subdir.mk
 -include src/codec/subdir.mk
 -include src/appHandshake/subdir.mk
 -include subdir.mk

+ 0 - 2
Debug/sources.mk

@@ -15,8 +15,6 @@ EXECUTABLES :=
 SUBDIRS := \
 src/transport \
 src/test \
-src/service \
 src/codec \
-src/codec/appHandCodec \
 src/appHandshake \
 

+ 10 - 10
Debug/src/appHandshake/subdir.mk

@@ -4,26 +4,26 @@
 
 # Add inputs and outputs from these tool invocations to the build variables 
 C_SRCS += \
-../src/appHandshake/appHand_dataDeserialization.c \
-../src/appHandshake/appHand_dataSerialization.c \
-../src/appHandshake/appHand_dataTypes.c 
+../src/appHandshake/appHandEXIDatatypes.c \
+../src/appHandshake/appHandEXIDatatypesDecoder.c \
+../src/appHandshake/appHandEXIDatatypesEncoder.c 
 
 OBJS += \
-./src/appHandshake/appHand_dataDeserialization.o \
-./src/appHandshake/appHand_dataSerialization.o \
-./src/appHandshake/appHand_dataTypes.o 
+./src/appHandshake/appHandEXIDatatypes.o \
+./src/appHandshake/appHandEXIDatatypesDecoder.o \
+./src/appHandshake/appHandEXIDatatypesEncoder.o 
 
 C_DEPS += \
-./src/appHandshake/appHand_dataDeserialization.d \
-./src/appHandshake/appHand_dataSerialization.d \
-./src/appHandshake/appHand_dataTypes.d 
+./src/appHandshake/appHandEXIDatatypes.d \
+./src/appHandshake/appHandEXIDatatypesDecoder.d \
+./src/appHandshake/appHandEXIDatatypesEncoder.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
 src/appHandshake/%.o: ../src/appHandshake/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -O0 -g3 -pedantic -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 0 - 36
Debug/src/codec/appHandCodec/subdir.mk

@@ -1,36 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables 
-C_SRCS += \
-../src/codec/appHandCodec/appHandEXICoder.c \
-../src/codec/appHandCodec/appHandEXIDecoder.c \
-../src/codec/appHandCodec/appHandEXIEncoder.c \
-../src/codec/appHandCodec/appHandNameTableEntries.c \
-../src/codec/appHandCodec/appHandQNames.c 
-
-OBJS += \
-./src/codec/appHandCodec/appHandEXICoder.o \
-./src/codec/appHandCodec/appHandEXIDecoder.o \
-./src/codec/appHandCodec/appHandEXIEncoder.o \
-./src/codec/appHandCodec/appHandNameTableEntries.o \
-./src/codec/appHandCodec/appHandQNames.o 
-
-C_DEPS += \
-./src/codec/appHandCodec/appHandEXICoder.d \
-./src/codec/appHandCodec/appHandEXIDecoder.d \
-./src/codec/appHandCodec/appHandEXIEncoder.d \
-./src/codec/appHandCodec/appHandNameTableEntries.d \
-./src/codec/appHandCodec/appHandQNames.d 
-
-
-# Each subdirectory must supply rules for building sources it contributes
-src/codec/appHandCodec/%.o: ../src/codec/appHandCodec/%.c
-	@echo 'Building file: $<'
-	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
-	@echo 'Finished building: $<'
-	@echo ' '
-
-

+ 10 - 28
Debug/src/codec/subdir.mk

@@ -13,19 +13,13 @@ C_SRCS += \
 ../src/codec/ByteDecoderChannel.c \
 ../src/codec/ByteEncoderChannel.c \
 ../src/codec/ByteStream.c \
-../src/codec/DynamicMemory.c \
 ../src/codec/EXIHeaderDecoder.c \
 ../src/codec/EXIHeaderEncoder.c \
 ../src/codec/MethodsBag.c \
-../src/codec/StringNameTable.c \
 ../src/codec/StringValueTable.c \
-../src/codec/UCSString.c \
-../src/codec/main_codec.c \
-../src/codec/v2gEXICoder.c \
-../src/codec/v2gEXIDecoder.c \
-../src/codec/v2gEXIEncoder.c \
-../src/codec/v2gNameTableEntries.c \
-../src/codec/v2gQNames.c 
+../src/codec/v2gEXIDatatypes.c \
+../src/codec/v2gEXIDatatypesDecoder.c \
+../src/codec/v2gEXIDatatypesEncoder.c 
 
 OBJS += \
 ./src/codec/AbstractDecoderChannel.o \
@@ -37,19 +31,13 @@ OBJS += \
 ./src/codec/ByteDecoderChannel.o \
 ./src/codec/ByteEncoderChannel.o \
 ./src/codec/ByteStream.o \
-./src/codec/DynamicMemory.o \
 ./src/codec/EXIHeaderDecoder.o \
 ./src/codec/EXIHeaderEncoder.o \
 ./src/codec/MethodsBag.o \
-./src/codec/StringNameTable.o \
 ./src/codec/StringValueTable.o \
-./src/codec/UCSString.o \
-./src/codec/main_codec.o \
-./src/codec/v2gEXICoder.o \
-./src/codec/v2gEXIDecoder.o \
-./src/codec/v2gEXIEncoder.o \
-./src/codec/v2gNameTableEntries.o \
-./src/codec/v2gQNames.o 
+./src/codec/v2gEXIDatatypes.o \
+./src/codec/v2gEXIDatatypesDecoder.o \
+./src/codec/v2gEXIDatatypesEncoder.o 
 
 C_DEPS += \
 ./src/codec/AbstractDecoderChannel.d \
@@ -61,26 +49,20 @@ C_DEPS += \
 ./src/codec/ByteDecoderChannel.d \
 ./src/codec/ByteEncoderChannel.d \
 ./src/codec/ByteStream.d \
-./src/codec/DynamicMemory.d \
 ./src/codec/EXIHeaderDecoder.d \
 ./src/codec/EXIHeaderEncoder.d \
 ./src/codec/MethodsBag.d \
-./src/codec/StringNameTable.d \
 ./src/codec/StringValueTable.d \
-./src/codec/UCSString.d \
-./src/codec/main_codec.d \
-./src/codec/v2gEXICoder.d \
-./src/codec/v2gEXIDecoder.d \
-./src/codec/v2gEXIEncoder.d \
-./src/codec/v2gNameTableEntries.d \
-./src/codec/v2gQNames.d 
+./src/codec/v2gEXIDatatypes.d \
+./src/codec/v2gEXIDatatypesDecoder.d \
+./src/codec/v2gEXIDatatypesEncoder.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
 src/codec/%.o: ../src/codec/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -O0 -g3 -pedantic -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 0 - 33
Debug/src/service/subdir.mk

@@ -1,33 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables 
-C_SRCS += \
-../src/service/v2g_dataTypes.c \
-../src/service/v2g_serviceClientStubs.c \
-../src/service/v2g_serviceDataSerialization.c \
-../src/service/v2g_serviceDispatcher.c 
-
-OBJS += \
-./src/service/v2g_dataTypes.o \
-./src/service/v2g_serviceClientStubs.o \
-./src/service/v2g_serviceDataSerialization.o \
-./src/service/v2g_serviceDispatcher.o 
-
-C_DEPS += \
-./src/service/v2g_dataTypes.d \
-./src/service/v2g_serviceClientStubs.d \
-./src/service/v2g_serviceDataSerialization.d \
-./src/service/v2g_serviceDispatcher.d 
-
-
-# Each subdirectory must supply rules for building sources it contributes
-src/service/%.o: ../src/service/%.c
-	@echo 'Building file: $<'
-	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
-	@echo 'Finished building: $<'
-	@echo ' '
-
-

+ 7 - 13
Debug/src/test/subdir.mk

@@ -4,32 +4,26 @@
 
 # Add inputs and outputs from these tool invocations to the build variables 
 C_SRCS += \
-../src/test/evse_server.c \
-../src/test/evse_serviceMethods.c \
 ../src/test/main.c \
-../src/test/pev_service.c \
-../src/test/serviceClientDataTransmitter.c 
+../src/test/main_databinder.c \
+../src/test/main_example.c 
 
 OBJS += \
-./src/test/evse_server.o \
-./src/test/evse_serviceMethods.o \
 ./src/test/main.o \
-./src/test/pev_service.o \
-./src/test/serviceClientDataTransmitter.o 
+./src/test/main_databinder.o \
+./src/test/main_example.o 
 
 C_DEPS += \
-./src/test/evse_server.d \
-./src/test/evse_serviceMethods.d \
 ./src/test/main.d \
-./src/test/pev_service.d \
-./src/test/serviceClientDataTransmitter.d 
+./src/test/main_databinder.d \
+./src/test/main_example.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
 src/test/%.o: ../src/test/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -O0 -g3 -pedantic -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 1 - 1
Debug/src/transport/subdir.mk

@@ -17,7 +17,7 @@ C_DEPS += \
 src/transport/%.o: ../src/transport/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -O0 -g3 -pedantic -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 17 - 2
README.txt

@@ -1,12 +1,11 @@
 -------------------------------------------------------------------------
 OpenV2G - an open source project implementing the basic functionality of the ISO IEC 15118 vehicle to grid (V2G) communication interface 
-Version 0.8, released January, 2014
+Version 0.9, released June 19, 2014
 http://openv2g.sourceforge.net/
 
 Please report bugs via the SourceForge bug tracking system at http://sourceforge.net/tracker/?group_id=350113.
 Thank you.
 
-
 Copyright (C) 2007-2014 Siemens AG
 
 This program is free software: you can redistribute it and/or modify
@@ -22,6 +21,22 @@ 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 <http://www.gnu.org/licenses/>.
 
+-------------------------------------------------------------------------
+CHANGES from version 0.8:
+-------------------------------------------------------------------------
+* large code footprint reduction which resulted in a new API
+  (please take a look at the example in src/test folder)
+* datatype differences w.r.t. arrays, strings, bytes, isUsed, and enum-naming
+* bug-fixes
+* Note: OpenV2G 0.8 and 0.9 are interoperable, meaning that one can generate
+  streams with one and decode with the other or vice-versa
+
+-------------------------------------------------------------------------
+CHANGES from version 0.7:
+-------------------------------------------------------------------------
+* adaption of V2G schema changes (reflects the ISO/IEC 15118-2 FDIS status)
+* bug-fixes
+
 
 -------------------------------------------------------------------------
 CHANGES from version 0.7:

+ 0 - 2
Release/makefile

@@ -10,8 +10,6 @@ RM := rm -rf
 -include sources.mk
 -include src/transport/subdir.mk
 -include src/test/subdir.mk
--include src/service/subdir.mk
--include src/codec/appHandCodec/subdir.mk
 -include src/codec/subdir.mk
 -include src/appHandshake/subdir.mk
 -include subdir.mk

+ 0 - 2
Release/sources.mk

@@ -15,8 +15,6 @@ EXECUTABLES :=
 SUBDIRS := \
 src/transport \
 src/test \
-src/service \
 src/codec \
-src/codec/appHandCodec \
 src/appHandshake \
 

+ 10 - 10
Release/src/appHandshake/subdir.mk

@@ -4,26 +4,26 @@
 
 # Add inputs and outputs from these tool invocations to the build variables 
 C_SRCS += \
-../src/appHandshake/appHand_dataDeserialization.c \
-../src/appHandshake/appHand_dataSerialization.c \
-../src/appHandshake/appHand_dataTypes.c 
+../src/appHandshake/appHandEXIDatatypes.c \
+../src/appHandshake/appHandEXIDatatypesDecoder.c \
+../src/appHandshake/appHandEXIDatatypesEncoder.c 
 
 OBJS += \
-./src/appHandshake/appHand_dataDeserialization.o \
-./src/appHandshake/appHand_dataSerialization.o \
-./src/appHandshake/appHand_dataTypes.o 
+./src/appHandshake/appHandEXIDatatypes.o \
+./src/appHandshake/appHandEXIDatatypesDecoder.o \
+./src/appHandshake/appHandEXIDatatypesEncoder.o 
 
 C_DEPS += \
-./src/appHandshake/appHand_dataDeserialization.d \
-./src/appHandshake/appHand_dataSerialization.d \
-./src/appHandshake/appHand_dataTypes.d 
+./src/appHandshake/appHandEXIDatatypes.d \
+./src/appHandshake/appHandEXIDatatypesDecoder.d \
+./src/appHandshake/appHandEXIDatatypesEncoder.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
 src/appHandshake/%.o: ../src/appHandshake/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -Os -pedantic -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 0 - 36
Release/src/codec/appHandCodec/subdir.mk

@@ -1,36 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables 
-C_SRCS += \
-../src/codec/appHandCodec/appHandEXICoder.c \
-../src/codec/appHandCodec/appHandEXIDecoder.c \
-../src/codec/appHandCodec/appHandEXIEncoder.c \
-../src/codec/appHandCodec/appHandNameTableEntries.c \
-../src/codec/appHandCodec/appHandQNames.c 
-
-OBJS += \
-./src/codec/appHandCodec/appHandEXICoder.o \
-./src/codec/appHandCodec/appHandEXIDecoder.o \
-./src/codec/appHandCodec/appHandEXIEncoder.o \
-./src/codec/appHandCodec/appHandNameTableEntries.o \
-./src/codec/appHandCodec/appHandQNames.o 
-
-C_DEPS += \
-./src/codec/appHandCodec/appHandEXICoder.d \
-./src/codec/appHandCodec/appHandEXIDecoder.d \
-./src/codec/appHandCodec/appHandEXIEncoder.d \
-./src/codec/appHandCodec/appHandNameTableEntries.d \
-./src/codec/appHandCodec/appHandQNames.d 
-
-
-# Each subdirectory must supply rules for building sources it contributes
-src/codec/appHandCodec/%.o: ../src/codec/appHandCodec/%.c
-	@echo 'Building file: $<'
-	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
-	@echo 'Finished building: $<'
-	@echo ' '
-
-

+ 10 - 28
Release/src/codec/subdir.mk

@@ -13,19 +13,13 @@ C_SRCS += \
 ../src/codec/ByteDecoderChannel.c \
 ../src/codec/ByteEncoderChannel.c \
 ../src/codec/ByteStream.c \
-../src/codec/DynamicMemory.c \
 ../src/codec/EXIHeaderDecoder.c \
 ../src/codec/EXIHeaderEncoder.c \
 ../src/codec/MethodsBag.c \
-../src/codec/StringNameTable.c \
 ../src/codec/StringValueTable.c \
-../src/codec/UCSString.c \
-../src/codec/main_codec.c \
-../src/codec/v2gEXICoder.c \
-../src/codec/v2gEXIDecoder.c \
-../src/codec/v2gEXIEncoder.c \
-../src/codec/v2gNameTableEntries.c \
-../src/codec/v2gQNames.c 
+../src/codec/v2gEXIDatatypes.c \
+../src/codec/v2gEXIDatatypesDecoder.c \
+../src/codec/v2gEXIDatatypesEncoder.c 
 
 OBJS += \
 ./src/codec/AbstractDecoderChannel.o \
@@ -37,19 +31,13 @@ OBJS += \
 ./src/codec/ByteDecoderChannel.o \
 ./src/codec/ByteEncoderChannel.o \
 ./src/codec/ByteStream.o \
-./src/codec/DynamicMemory.o \
 ./src/codec/EXIHeaderDecoder.o \
 ./src/codec/EXIHeaderEncoder.o \
 ./src/codec/MethodsBag.o \
-./src/codec/StringNameTable.o \
 ./src/codec/StringValueTable.o \
-./src/codec/UCSString.o \
-./src/codec/main_codec.o \
-./src/codec/v2gEXICoder.o \
-./src/codec/v2gEXIDecoder.o \
-./src/codec/v2gEXIEncoder.o \
-./src/codec/v2gNameTableEntries.o \
-./src/codec/v2gQNames.o 
+./src/codec/v2gEXIDatatypes.o \
+./src/codec/v2gEXIDatatypesDecoder.o \
+./src/codec/v2gEXIDatatypesEncoder.o 
 
 C_DEPS += \
 ./src/codec/AbstractDecoderChannel.d \
@@ -61,26 +49,20 @@ C_DEPS += \
 ./src/codec/ByteDecoderChannel.d \
 ./src/codec/ByteEncoderChannel.d \
 ./src/codec/ByteStream.d \
-./src/codec/DynamicMemory.d \
 ./src/codec/EXIHeaderDecoder.d \
 ./src/codec/EXIHeaderEncoder.d \
 ./src/codec/MethodsBag.d \
-./src/codec/StringNameTable.d \
 ./src/codec/StringValueTable.d \
-./src/codec/UCSString.d \
-./src/codec/main_codec.d \
-./src/codec/v2gEXICoder.d \
-./src/codec/v2gEXIDecoder.d \
-./src/codec/v2gEXIEncoder.d \
-./src/codec/v2gNameTableEntries.d \
-./src/codec/v2gQNames.d 
+./src/codec/v2gEXIDatatypes.d \
+./src/codec/v2gEXIDatatypesDecoder.d \
+./src/codec/v2gEXIDatatypesEncoder.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
 src/codec/%.o: ../src/codec/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -Os -pedantic -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 0 - 33
Release/src/service/subdir.mk

@@ -1,33 +0,0 @@
-################################################################################
-# Automatically-generated file. Do not edit!
-################################################################################
-
-# Add inputs and outputs from these tool invocations to the build variables 
-C_SRCS += \
-../src/service/v2g_dataTypes.c \
-../src/service/v2g_serviceClientStubs.c \
-../src/service/v2g_serviceDataSerialization.c \
-../src/service/v2g_serviceDispatcher.c 
-
-OBJS += \
-./src/service/v2g_dataTypes.o \
-./src/service/v2g_serviceClientStubs.o \
-./src/service/v2g_serviceDataSerialization.o \
-./src/service/v2g_serviceDispatcher.o 
-
-C_DEPS += \
-./src/service/v2g_dataTypes.d \
-./src/service/v2g_serviceClientStubs.d \
-./src/service/v2g_serviceDataSerialization.d \
-./src/service/v2g_serviceDispatcher.d 
-
-
-# Each subdirectory must supply rules for building sources it contributes
-src/service/%.o: ../src/service/%.c
-	@echo 'Building file: $<'
-	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
-	@echo 'Finished building: $<'
-	@echo ' '
-
-

+ 7 - 13
Release/src/test/subdir.mk

@@ -4,32 +4,26 @@
 
 # Add inputs and outputs from these tool invocations to the build variables 
 C_SRCS += \
-../src/test/evse_server.c \
-../src/test/evse_serviceMethods.c \
 ../src/test/main.c \
-../src/test/pev_service.c \
-../src/test/serviceClientDataTransmitter.c 
+../src/test/main_databinder.c \
+../src/test/main_example.c 
 
 OBJS += \
-./src/test/evse_server.o \
-./src/test/evse_serviceMethods.o \
 ./src/test/main.o \
-./src/test/pev_service.o \
-./src/test/serviceClientDataTransmitter.o 
+./src/test/main_databinder.o \
+./src/test/main_example.o 
 
 C_DEPS += \
-./src/test/evse_server.d \
-./src/test/evse_serviceMethods.d \
 ./src/test/main.d \
-./src/test/pev_service.d \
-./src/test/serviceClientDataTransmitter.d 
+./src/test/main_databinder.d \
+./src/test/main_example.d 
 
 
 # Each subdirectory must supply rules for building sources it contributes
 src/test/%.o: ../src/test/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -Os -pedantic -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 1 - 1
Release/src/transport/subdir.mk

@@ -17,7 +17,7 @@ C_DEPS += \
 src/transport/%.o: ../src/transport/%.c
 	@echo 'Building file: $<'
 	@echo 'Invoking: GCC C Compiler'
-	gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
+	gcc -I"../src/codec" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -Os -pedantic -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
 	@echo 'Finished building: $<'
 	@echo ' '
 

+ 64 - 0
src/appHandshake/appHandEXIDatatypes.c

@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
+ * @contact Joerg.Heuer@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "appHandEXIDatatypes.h"
+#include "EXITypes.h"
+
+
+#ifndef EXI_appHand_DATATYPES_C
+#define EXI_appHand_DATATYPES_C
+
+
+
+void init_appHandEXIDocument(struct appHandEXIDocument* exiDoc) {
+	exiDoc->supportedAppProtocolReq_isUsed = 0u;
+	exiDoc->supportedAppProtocolRes_isUsed = 0u;
+}
+
+void init_appHandAppProtocolType(struct appHandAppProtocolType* appHandAppProtocolType) {
+}
+
+void init_appHandAnonType_supportedAppProtocolReq(struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) {
+	appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen = 0u;
+}
+
+void init_appHandAnonType_supportedAppProtocolRes(struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) {
+	appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed = 0u;
+}
+
+
+
+
+
+#endif
+

+ 130 - 0
src/appHandshake/appHandEXIDatatypes.h

@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2007-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
+ * @contact Joerg.Heuer@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_appHand_DATATYPES_H
+#define EXI_appHand_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+typedef enum {
+	responseCodeType_OK_SuccessfulNegotiation = 0,
+	responseCodeType_OK_SuccessfulNegotiationWithMinorDeviation = 1,
+	responseCodeType_Failed_NoNegotiation = 2
+} appHandresponseCodeType;
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+#define appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE 100 /* XML schema facet maxLength for urn:iso:15118:2:2010:AppProtocol,protocolNamespaceType is 100 */
+struct appHandAppProtocolType {
+	/* element: ProtocolNamespace, urn:iso:15118:2:2010:AppProtocol,protocolNamespaceType */
+	struct {
+		exi_string_character_t characters[appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ProtocolNamespace ;
+	/* element: VersionNumberMajor, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t VersionNumberMajor ;
+	/* element: VersionNumberMinor, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t VersionNumberMinor ;
+	/* element: SchemaID, urn:iso:15118:2:2010:AppProtocol,idType */
+	uint8_t SchemaID ;
+	/* element: Priority, urn:iso:15118:2:2010:AppProtocol,priorityType */
+	uint8_t Priority ;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ResponseCode,SchemaID{0-1})',  derivedBy='RESTRICTION'.  */
+struct appHandAnonType_supportedAppProtocolRes {
+	/* element: ResponseCode, urn:iso:15118:2:2010:AppProtocol,responseCodeType */
+	appHandresponseCodeType ResponseCode ;
+	/* element: SchemaID, urn:iso:15118:2:2010:AppProtocol,idType */
+	uint8_t SchemaID ;
+	unsigned int SchemaID_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(AppProtocol{1-20})',  derivedBy='RESTRICTION'.  */
+#define appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE 5
+struct appHandAnonType_supportedAppProtocolReq {
+	/* element: AppProtocol, Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct appHandAppProtocolType array[appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} AppProtocol;
+};
+
+
+
+
+
+/* Possible root elements of EXI Document */
+struct appHandEXIDocument {
+#define USE_UNION_FOR_GLOBAL_ELEMENTS 1
+#ifdef USE_UNION_FOR_GLOBAL_ELEMENTS
+	union {
+#endif
+	struct appHandAnonType_supportedAppProtocolReq supportedAppProtocolReq ;
+	struct appHandAnonType_supportedAppProtocolRes supportedAppProtocolRes ;
+#ifdef USE_UNION_FOR_GLOBAL_ELEMENTS
+	};
+#endif
+	unsigned int supportedAppProtocolReq_isUsed:1;
+	unsigned int supportedAppProtocolRes_isUsed:1;
+
+
+	int _warning_;
+};
+
+/* Initialization methods for structs */
+
+void init_appHandEXIDocument(struct appHandEXIDocument* exiDoc);
+void init_appHandAppProtocolType(struct appHandAppProtocolType* appHandAppProtocolType);
+void init_appHandAnonType_supportedAppProtocolReq(struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq);
+void init_appHandAnonType_supportedAppProtocolRes(struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 898 - 0
src/appHandshake/appHandEXIDatatypesDecoder.c

@@ -0,0 +1,898 @@
+/*
+ * Copyright (C) 2007-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
+ * @contact Joerg.Heuer@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+
+#include "appHandEXIDatatypesDecoder.h"
+
+#include "DecoderChannel.h"
+#include "EXIHeaderDecoder.h"
+
+#include "appHandEXIDatatypes.h"
+#include "ErrorCodes.h"
+
+#ifndef EXI_appHand_DATATYPES_DECODER_C
+#define EXI_appHand_DATATYPES_DECODER_C
+
+/** event-code */
+static uint32_t eventCode;
+static int errn;
+static uint32_t uint32;
+
+
+/* Forward Declarations */
+static int decode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType);
+static int decode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq);
+static int decode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes);
+
+/* Deviant data decoding (skip functions) */
+
+
+
/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+static int decode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType) {
+	int grammarID = 0;
+	int done = 0;
+	
+	init_appHandAppProtocolType(appHandAppProtocolType);
+	
+	while(!done) {
+		switch(grammarID) {
+		case 0:
+			/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[STRING]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeUnsignedInteger16(stream, &appHandAppProtocolType->ProtocolNamespace.charactersLen);
+							if (errn == 0) {
+								errn =  (appHandAppProtocolType->ProtocolNamespace.charactersLen - 2) <= appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE ? 0 : EXI_ERROR_STRINGVALUES_OUT_OF_BOUND;
+							}
+							if (errn == 0) {
+								if (appHandAppProtocolType->ProtocolNamespace.charactersLen >= 2) {
+									appHandAppProtocolType->ProtocolNamespace.charactersLen = (uint16_t)(appHandAppProtocolType->ProtocolNamespace.charactersLen - 2); /* string table miss */
+									errn = decodeCharacters(stream, appHandAppProtocolType->ProtocolNamespace.charactersLen, appHandAppProtocolType->ProtocolNamespace.characters);
+								} else {
+									/* string table hit */
+									errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED;
+								}
+							}
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(ProtocolNamespace) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 1;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 1:
+			/* Element[START_ELEMENT(VersionNumberMajor)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeUnsignedInteger32(stream, &appHandAppProtocolType->VersionNumberMajor);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(VersionNumberMajor) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 2;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 2:
+			/* Element[START_ELEMENT(VersionNumberMinor)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeUnsignedInteger32(stream, &appHandAppProtocolType->VersionNumberMinor);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(VersionNumberMinor) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 3;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 3:
+			/* Element[START_ELEMENT(SchemaID)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 8, &(uint32));
+							appHandAppProtocolType->SchemaID = (uint8_t)(uint32 + 0);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(SchemaID) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 4;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 4:
+			/* Element[START_ELEMENT(Priority)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 5, &(uint32));
+							appHandAppProtocolType->Priority = (uint8_t)(uint32 + 1);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(Priority) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 5;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(AppProtocol{1-20})',  derivedBy='RESTRICTION'.  */
+static int decode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) {
+	int grammarID = 7;
+	int done = 0;
+	
+	init_appHandAnonType_supportedAppProtocolReq(appHandAnonType_supportedAppProtocolReq);
+	
+	while(!done) {
+		switch(grammarID) {
+		case 7:
+			/* FirstStartTag[START_ELEMENT(AppProtocol)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 8;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 8:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 9;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 9:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 10;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 10:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 11;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 11:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 12;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 12:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 13;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 13:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 14;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 14:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 15;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 15:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 16;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 16:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 17;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 17:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 18;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 18:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 19;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 19:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 20;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 20:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 21;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 21:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 22;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 22:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 23;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 23:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 24;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 24:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 25;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 25:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 26;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 26:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) {
+						errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]);
+					} else { 
+						errn = EXI_ERROR_OUT_OF_BOUNDS;
+					}
+					grammarID = 5;
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ResponseCode,SchemaID{0-1})',  derivedBy='RESTRICTION'.  */
+static int decode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) {
+	int grammarID = 27;
+	int done = 0;
+	
+	init_appHandAnonType_supportedAppProtocolRes(appHandAnonType_supportedAppProtocolRes);
+	
+	while(!done) {
+		switch(grammarID) {
+		case 27:
+			/* FirstStartTag[START_ELEMENT(ResponseCode)] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 2, &appHandAnonType_supportedAppProtocolRes->ResponseCode);
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(ResponseCode) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 28;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 28:
+			/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+					if(errn == 0) {
+						if(eventCode == 0) {
+							errn = decodeNBitUnsignedInteger(stream, 8, &(uint32));
+							appHandAnonType_supportedAppProtocolRes->SchemaID = (uint8_t)(uint32 + 0);
+							appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed = 1u;
+						} else {
+							/* Second level event (e.g., xsi:type, xsi:nil, ...) */
+							errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS;
+						}
+					}
+					if(errn == 0) {
+						/* valid EE for simple element START_ELEMENT(SchemaID) ? */
+						errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+						if(eventCode == 0) {
+						grammarID = 5;
+						} else {
+							errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */
+						}
+					}
+					break;
+				case 1:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			errn = decodeNBitUnsignedInteger(stream, 1, &eventCode);
+			if (errn == 0) {
+				switch(eventCode) {
+				case 0:
+					done = 1;
+					grammarID = 6;
+					break;
+				default:
+					errn = EXI_ERROR_UNKOWN_EVENT_CODE;
+					break;
+				}
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+
+
+
+int decode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc) {
+	errn = readEXIHeader(stream);
+
+	if(errn == 0) {
+		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
+		init_appHandEXIDocument(exiDoc);
+		errn = decodeNBitUnsignedInteger(stream, 2, &eventCode);
+		if(errn == 0) {
+			switch(eventCode) {
+			case 0:
+				/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq) */
+				errn = decode_appHandAnonType_supportedAppProtocolReq(stream, &exiDoc->supportedAppProtocolReq);
+				exiDoc->supportedAppProtocolReq_isUsed = 1u;
+				break;
+			case 1:
+				/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes) */
+				errn = decode_appHandAnonType_supportedAppProtocolRes(stream, &exiDoc->supportedAppProtocolRes);
+				exiDoc->supportedAppProtocolRes_isUsed = 1u;
+				break;
+			default:
+				errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
+				break;
+			}
+		}
+
+	}
+
+	return errn;
+}
+
+
+#endif
+

+ 32 - 19
src/codec/appHandCodec/appHandNameTableEntries.h → src/appHandshake/appHandEXIDatatypesDecoder.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,26 +18,40 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifndef EXI_appHand_NAME_TABLE_ENTRIES_H
-#define EXI_appHand_NAME_TABLE_ENTRIES_H
-
-#include "EXITypes.h"
-
-/* ==================================== */
-/* String Table Population */
-
-extern exi_name_table_prepopulated_t exiappHandNameTablePrepopulated;
-
-#endif
-
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_appHand_DATATYPES_DECODER_H
+#define EXI_appHand_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+#include "appHandEXIDatatypes.h"
+
+int decode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 671 - 0
src/appHandshake/appHandEXIDatatypesEncoder.c

@@ -0,0 +1,671 @@
+/*
+ * Copyright (C) 2007-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
+ * @contact Joerg.Heuer@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+
+#include "appHandEXIDatatypesEncoder.h"
+
+#include "EncoderChannel.h"
+#include "EXIHeaderEncoder.h"
+
+#include "appHandEXIDatatypes.h"
+#include "ErrorCodes.h"
+
+#ifndef EXI_appHand_DATATYPES_ENCODER_C
+#define EXI_appHand_DATATYPES_ENCODER_C
+
+static int errn;
+
+/* Forward Declarations */
+static int encode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType);
+static int encode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq);
+static int encode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes);
+
+
+
/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)',  derivedBy='RESTRICTION'.  */
+static int encode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType) {
+	int grammarID = 0;
+	int done = 0;
+	
+	
+	while(!done) {
+		switch(grammarID) {
+		case 0:
+			/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[STRING]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						/* encode string as string table miss (+2 len)*/
+						errn = encodeUnsignedInteger16(stream, (uint16_t)(appHandAppProtocolType->ProtocolNamespace.charactersLen + 2));
+						if (errn == 0) {
+							errn = encodeCharacters(stream, appHandAppProtocolType->ProtocolNamespace.characters, appHandAppProtocolType->ProtocolNamespace.charactersLen);
+						}
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 1;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 1:
+			/* Element[START_ELEMENT(VersionNumberMajor)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeUnsignedInteger32(stream, appHandAppProtocolType->VersionNumberMajor);
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 2;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 2:
+			/* Element[START_ELEMENT(VersionNumberMinor)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeUnsignedInteger32(stream, appHandAppProtocolType->VersionNumberMinor);
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 3;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 3:
+			/* Element[START_ELEMENT(SchemaID)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(appHandAppProtocolType->SchemaID - 0));
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 4;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 4:
+			/* Element[START_ELEMENT(Priority)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 5, (uint32_t)(appHandAppProtocolType->Priority - 1));
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 5;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(AppProtocol{1-20})',  derivedBy='RESTRICTION'.  */
+static int encode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) {
+	int grammarID = 7;
+	int done = 0;
+	
+	unsigned int appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex = 0;
+	
+	while(!done) {
+		switch(grammarID) {
+		case 7:
+			/* FirstStartTag[START_ELEMENT(AppProtocol)] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 8;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 8:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 9;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 9:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 10;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 10:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 11;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 11:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 12;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 12:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 13;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 13:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 14;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 14:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 15;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 15:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 16;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 16:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 17;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 17:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 18;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 18:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 19;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 19:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 20;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 20:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 21;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 21:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 22;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 22:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 23;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 23:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 24;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 24:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 25;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 25:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 26;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 26:
+			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
+			if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]);
+				}
+				grammarID = 5;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(ResponseCode,SchemaID{0-1})',  derivedBy='RESTRICTION'.  */
+static int encode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) {
+	int grammarID = 27;
+	int done = 0;
+	
+	
+	while(!done) {
+		switch(grammarID) {
+		case 27:
+			/* FirstStartTag[START_ELEMENT(ResponseCode)] */
+			if ( 1 == 1 ) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[ENUMERATION]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 2, appHandAnonType_supportedAppProtocolRes->ResponseCode);
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 28;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 28:
+			/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
+			if ( appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed == 1u ) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 0);
+				if(errn == 0) {
+					/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
+					errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					if(errn == 0) {
+						errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(appHandAnonType_supportedAppProtocolRes->SchemaID - 0));
+						/* valid EE */
+						errn = encodeNBitUnsignedInteger(stream, 1, 0);
+					}
+				}
+				grammarID = 5;
+			} else 			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 2, 1);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		case 5:
+			/* Element[END_ELEMENT] */
+			if (1==1) {
+				errn = encodeNBitUnsignedInteger(stream, 1, 0);
+				if(errn == 0) {
+					done = 1;
+				}
+				grammarID = 6;
+			} else {
+				errn = EXI_ERROR_UNKOWN_EVENT;
+			}
+			break;
+		default:
+			errn = EXI_ERROR_UNKOWN_GRAMMAR_ID;
+			break;
+		}
+		if(errn) {
+			done = 1;
+		}
+	}
+	return errn;
+}
+
+
+
+int encode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc) {
+	errn = writeEXIHeader(stream);
+
+	if(errn == 0) {
+		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
+		if ( exiDoc->supportedAppProtocolReq_isUsed == 1u ) { 
+			/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq) */
+			errn = encodeNBitUnsignedInteger(stream, 2, 0);
+			if(errn == 0) {
+				errn = encode_appHandAnonType_supportedAppProtocolReq(stream, &exiDoc->supportedAppProtocolReq );
+			}
+		} else if ( exiDoc->supportedAppProtocolRes_isUsed == 1u ) { 
+			/* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes) */
+			errn = encodeNBitUnsignedInteger(stream, 2, 1);
+			if(errn == 0) {
+				errn = encode_appHandAnonType_supportedAppProtocolRes(stream, &exiDoc->supportedAppProtocolRes );
+			}
+		} else {
+			errn = EXI_ERROR_UNKOWN_EVENT;
+		}
+
+	}
+
+	if(errn == 0) {
+		/* flush any pending bits */
+		errn = encodeFinish(stream);
+	}
+
+	return errn;
+}
+
+
+#endif
+

+ 33 - 19
src/codec/v2gNameTableEntries.h → src/appHandshake/appHandEXIDatatypesEncoder.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,26 +18,41 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_AppProtocol.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifndef EXI_v2g_NAME_TABLE_ENTRIES_H
-#define EXI_v2g_NAME_TABLE_ENTRIES_H
-
-#include "EXITypes.h"
-
-/* ==================================== */
-/* String Table Population */
-
-extern exi_name_table_prepopulated_t exiv2gNameTablePrepopulated;
-
-#endif
-
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_appHand_DATATYPES_ENCODER_H
+#define EXI_appHand_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+#include "appHandEXIDatatypes.h"
+
+
+int encode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 0 - 341
src/appHandshake/appHand_dataDeserialization.c

@@ -1,341 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
- 
- #include "appHand_service.h"
- #include "appHand_dataTypes.h"
- #include "EXITypes.h"
- #include "appHandEXIDecoder.h"
- #include "appHandQNameDefines.h"
- #include "StringValueTable.h"
- #include "StringNameTable.h"
- #include <string.h>
- 
-uint16_t numberOfLocalStringsDecode[EXI_appHandMAX_NUMBER_OF_QNAMES];
- 
-
-
-
- static int _setUnsignedInt32Value(exi_integer_t* iv, uint32_t* int32) {
-	int errn = 0;
-	switch(iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		*int32 = iv->val.uint8;
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		*int32 = iv->val.uint16;
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		if (iv->val.uint32 <= 2147483647) {
-			*int32 = iv->val.uint32;
-		} else {
-			errn = -1;
-		}
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		errn = -1;
-		break;
-	/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		*int32 = iv->val.int8;
-		break;
-	case EXI_INTEGER_16:
-		*int32 = iv->val.int16;
-		break;
-	case EXI_INTEGER_32:
-		*int32 = iv->val.int32;
-		break;
-	case EXI_INTEGER_64:
-		errn = -1;
-		break;
-	}
-	return errn;
-}
- 
- 
-
- /**
- * Deserialize an element or attribute value of the EXI stream and assign it to the
- * service data structure 
- */
-static int deserializeElementAttributeCharacter(struct EXIDatabinder* service)
-{
-
-	switch(service->qnameID) {
-		case 2: /* ProtocolNamespace */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						memcpy(service->exiMsg.supportedAppProtocolReq->AppProtocol[service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol].ProtocolNamespace.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.supportedAppProtocolReq->AppProtocol[service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol].ProtocolNamespace.arraylen.data = service->val.str.miss.len;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 5: /* VersionNumberMajor */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if(_setUnsignedInt32Value(&(service->val.integer),&(service->val.integer.val.uint32)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.supportedAppProtocolReq->AppProtocol[service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol].VersionNumberMajor=service->val.integer.val.uint32;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 6: /* VersionNumberMinor */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if(_setUnsignedInt32Value(&(service->val.integer),&(service->val.integer.val.uint32)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.supportedAppProtocolReq->AppProtocol[service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol].VersionNumberMinor=service->val.integer.val.uint32;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 4: /* SchemaID */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						if( service->idPath.id[0] == 66)
-						{
-							service->exiMsg.supportedAppProtocolRes->SchemaID=service->val.integer.val.uint8;
-							service->exiMsg.supportedAppProtocolRes->isused.SchemaID=1;
-
-						} else if(service->idPath.id[0] == 65)
-						{
-							service->exiMsg.supportedAppProtocolReq->AppProtocol[service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol].SchemaID=service->val.integer.val.uint8;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 1: /* Priority */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						service->exiMsg.supportedAppProtocolReq->AppProtocol[service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol].Priority=service->val.integer.val.uint8;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 3: /* ResponseCode */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.supportedAppProtocolRes->ResponseCode=service->val.enumeration;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-	
-	} 
-	return 0;
-}
- 
-/**
- * Deserialize an element of the EXI stream
- * @return 0 = 0K; -1 = ERROR
- */
-static int deserializeElement(struct EXIDatabinder* service)
-{
-	switch(service->qnameID) {
-			case 0: /* AppProtocol */ 
-						service->exiMsg.supportedAppProtocolReq->arraylen.AppProtocol++;
-	
-			break;
-		case 65: /* supportedAppProtocolReq */ 
-						service->exiMsg.isused.supportedAppProtocolReq=1;
-	
-			break;
-		case 66: /* supportedAppProtocolRes */ 
-						service->exiMsg.isused.supportedAppProtocolRes=1;
-	
-			break;
-	
-	}
-	return 0;
-}
-
-
- 
- 
-/**
-* Deserialize the appHand EXI stream
-* @return 0 = 0K; -1 = ERROR
-*/
-int deserialize_appHand(struct EXIDatabinder* service, uint8_t* inStream, uint16_t sizeInStream, struct EXIDocumentType_appHand* exiDoc)
-{
- 	exi_name_table_runtime_t runtimeTableDecode;
- 	uint32_t inPos;
-	exi_value_table_t stringTableDecode = { 0, EXI_appHandMAX_NUMBER_OF_QNAMES, numberOfLocalStringsDecode};
- 	int noEndOfDocument = 1; /* true */
-	int returnCode=0;
-	
-
-	/* assign inStream data to service EXI structure */
-	inPos = service->transportHeaderOffset;
-	service->inStream.data = inStream;
-	service->inStream.size = sizeInStream+inPos;
-	service->inStream.pos = &inPos;
-	service->inStream.buffer=0;
-	service->inStream.capacity=0;
-
-	init_EXIDocumentType_appHand(exiDoc);
-
-	service->exiMsg=*exiDoc;
-
-	exiInitNameTableRuntime(&runtimeTableDecode);
-	exiappHandInitDecoder(&(service->inStream), &(service->stateDecode), runtimeTableDecode,stringTableDecode);
-
-	do {
-		exiappHandDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event));
-			if (returnCode < 0) {
-				return returnCode;
-			}
-
-			switch (service->event) {
-			case EXI_EVENT_START_DOCUMENT:
-
-				returnCode = exiappHandDecodeStartDocument(&(service->inStream), &(service->stateDecode));
-
-				break;
-			case EXI_EVENT_END_DOCUMENT:
-
-				returnCode = exiappHandDecodeEndDocument(&(service->inStream), &(service->stateDecode));
-				noEndOfDocument = 0; /* false */
-				break;
-			case EXI_EVENT_START_ELEMENT:
-				returnCode = exiappHandDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->qnameID));
-				service->idPath.id[service->idPath.pos++]=service->qnameID;
-				 
-				break;
-			case EXI_EVENT_END_ELEMENT:
-
-				returnCode = exiappHandDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->qnameID));
-				service->idPath.pos--;
-				 
-				returnCode = deserializeElement(service);
-				break;
-			case EXI_EVENT_CHARACTERS:
-				/* decode */
-				returnCode = exiappHandDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
-				 
-				/* assign character data to the v2g message structure */
-				returnCode = deserializeElementAttributeCharacter(service);
-				break;
-			case EXI_EVENT_ATTRIBUTE:
-				/* decode */
-				returnCode = exiappHandDecodeAttribute(&(service->inStream), &(service->stateDecode), &(service->qnameID), &(service->val));
-				returnCode = deserializeElementAttributeCharacter(service);
-				break;
-			default:
-				/* ERROR */
-				return -1;
-			}
-
-		} while (noEndOfDocument);
-		
-		*exiDoc = service->exiMsg;
-
-	return 0;
-}
- 
-  
- 
-/** 
- * \brief   Initialize the appHand deserializer
- * \param	service  struct EXIDatabinder* Basic databinder structure
- * \param	service_bytes   bytes_t Reserved byte structure buffer 
- * \param	service_string   string_ucs_t* Reserved string structure buffer 
- * \return  0 = 0K; -1 = ERROR */
-int init_appHandDeserializer(struct EXIDatabinder* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, uint16_t transportHeaderOffset)
-{
-
-	/* init byte array */
-	 service->val.binary = service_bytes;
-
-	/* init string array */
-	 service->val.str.miss = service_string;
-
-
-	 service->idPath.pos=0;
-
-	 /* init offset for transport protocol */
-	service->transportHeaderOffset=transportHeaderOffset;
-
-
-	return 0;
-}
-
-  

+ 0 - 424
src/appHandshake/appHand_dataSerialization.c

@@ -1,424 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-#include "appHand_service.h"
-#include "appHand_dataTypes.h"
-#include "EXITypes.h"
-#include "StringNameTable.h"
-#include "appHandEXIEncoder.h"
-#include "appHandQNameDefines.h"
-#include <string.h>
-
- uint16_t numberOfLocalStringsEncode[EXI_appHandMAX_NUMBER_OF_QNAMES];
- 
- 
- 
- 
- 
- 
-
-static int serialize_AppProtocolType(struct AppProtocolType* type, struct EXIDatabinder* service)
-{
-		
-
-
-			/* encode start element ProtocolNamespace */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 2)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->ProtocolNamespace.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->ProtocolNamespace.data,type->ProtocolNamespace.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  ProtocolNamespace */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of ProtocolNamespace */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element VersionNumberMajor */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 5)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->VersionNumberMajor;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  VersionNumberMajor */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of VersionNumberMajor */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element VersionNumberMinor */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 6)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->VersionNumberMinor;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  VersionNumberMinor */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of VersionNumberMinor */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SchemaID */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 4)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SchemaID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SchemaID */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SchemaID */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element Priority */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 1)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->Priority;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  Priority */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of Priority */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_SupportedAppProtocolReq(struct SupportedAppProtocolReq* type, struct EXIDatabinder* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.AppProtocol;i_loop++)
-		{
-				
-
-
-			/* encode start element AppProtocol */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 0)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of AppProtocol */
-			if(serialize_AppProtocolType(&(type->AppProtocol[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of AppProtocol */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SupportedAppProtocolRes(struct SupportedAppProtocolRes* type, struct EXIDatabinder* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 3)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.SchemaID)
-		{		
-						
-
-
-			/* encode start element SchemaID */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 4)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SchemaID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SchemaID */	
-			if (exiappHandEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SchemaID */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_EXIDocumentType_appHand(struct EXIDocumentType_appHand* type, struct EXIDatabinder* service)
-{
-
-	if(type->isused.supportedAppProtocolReq)
-		{		
-						
-
-
-			/* encode start element supportedAppProtocolReq */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 65)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of supportedAppProtocolReq */
-			if(serialize_SupportedAppProtocolReq( type->supportedAppProtocolReq,service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of supportedAppProtocolReq */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.supportedAppProtocolRes)
-		{		
-						
-
-
-			/* encode start element supportedAppProtocolRes */	
-			if (exiappHandEncodeStartElement(&(service->outStream), &(service->stateEncode), 66)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of supportedAppProtocolRes */
-			if(serialize_SupportedAppProtocolRes( type->supportedAppProtocolRes,service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of supportedAppProtocolRes */
-			exiappHandEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
- 
- 
- 
- 
- /* serialize data to EXI stream */
-static int serialize_message(struct EXIDatabinder* service)
- { 
-
-	/* encode start document */ 	
-	if (exiappHandEncodeStartDocument(&(service->outStream), &(service->stateEncode)) ) 
-	{
-	 
-		return -1;
-	}
-
- 	
-	if (serialize_EXIDocumentType_appHand(&(service->exiMsg), service))	 
-	 
-	 
-	{
-			 
-		return -1;
-	}
-
-
-	/* encode end document */
-	if (exiappHandEncodeEndDocument(&(service->outStream), &(service->stateEncode))) {
-	 
-	return -1;
-	}	
- 	
- 	return 0;
- 	
- }
-
- 
- 
-int serialize_appHand(struct EXIDatabinder* service, uint8_t* outStream, uint16_t* payloadLength, struct EXIDocumentType_appHand* exiDoc)
-{
- 	exi_name_table_runtime_t runtimeTableEncode;
-
- 	int16_t lerr = 0; /* local error */
- 	exi_value_table_t stringTableEncode = { 0, EXI_appHandMAX_NUMBER_OF_QNAMES, numberOfLocalStringsEncode};
-
- 	uint32_t outPos =service->transportHeaderOffset;
- 
- 	/* assign outStream data to service EXI structure */
-	service->outStream.data = outStream;
-	service->outStream.pos = &outPos;
-	service->outStream.buffer=0;
-	service->outStream.capacity=8;
- 
-  	service->exiMsg = *exiDoc;
- 
-		/* init encoder (write header, set initial state) */
-		exiInitNameTableRuntime(&runtimeTableEncode);
-
-		if(exiappHandInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode,stringTableEncode))
-		{
-			lerr = -1;
-		}
- 
- 		/* serialze message*/
- 		if(serialize_message(service))
- 		{
-	 		lerr = -1;
- 		}
-
- 		outPos -= service->transportHeaderOffset;
- 		*payloadLength = outPos;
-
-
- 	return lerr;
- }
- 
-/* Initialize serializer */
-int init_appHandSerializer(struct EXIDatabinder* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, size_t max_outStream_size, uint16_t transportHeaderOffset)
-{
-
-	/* init byte array */
-	 service->val.binary = service_bytes;
-
-	/* init string array */
-	 service->val.str.miss = service_string;
-
-	 /* init output stream */
-
-	 service->outStream.size=max_outStream_size;
-
-	 service->transportHeaderOffset=transportHeaderOffset;
-
-	return 0;
-}
- 
- 

+ 0 - 57
src/appHandshake/appHand_dataTypes.c

@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-#include "EXITypes.h"
-#include "appHand_dataTypes.h"
-
-
-static  void init_protocolNamespaceType(struct protocolNamespaceType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
- void init_SupportedAppProtocolReq(struct SupportedAppProtocolReq* type)
-{
-		
-	type->arraylen.AppProtocol=0;
-
-}
-
- void init_SupportedAppProtocolRes(struct SupportedAppProtocolRes* type)
-{			
-	type->isused.SchemaID=0;
-
-}
- void init_EXIDocumentType_appHand(struct EXIDocumentType_appHand* type)
-{		
-	type->isused.supportedAppProtocolReq=0;		
-	type->isused.supportedAppProtocolRes=0;
-
-}

+ 0 - 133
src/appHandshake/appHand_dataTypes.h

@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef APPHANDDATATYPES_H
-#define APPHANDDATATYPES_H
-
-#include "EXITypes.h"
-#include "string.h"
-
-
-	
-
-enum responseCodeType_appHand
-{
-	OK_SuccessfulNegotiation_responseCodeType=0, 
-	OK_SuccessfulNegotiationWithMinorDeviation_responseCodeType=1, 
-	Failed_NoNegotiation_responseCodeType=2
-
-}; 
-
-
-
-
-struct arraylen_protocolNamespaceType
-{
-	size_t data;
-
-
-};
-
-struct protocolNamespaceType
-{
-	uint32_t data[100];
-	struct arraylen_protocolNamespaceType arraylen;
-
-};
-
-struct AppProtocolType
-{
-	struct protocolNamespaceType ProtocolNamespace;
-	uint32_t VersionNumberMajor;
-	uint32_t VersionNumberMinor;
-	uint8_t SchemaID;
-	uint8_t Priority;
-
-
-};
-
-struct arraylen_SupportedAppProtocolReq
-{
-	size_t AppProtocol;
-
-
-};
-
-struct SupportedAppProtocolReq
-{
-	struct AppProtocolType AppProtocol[20];
-	struct arraylen_SupportedAppProtocolReq arraylen;
-
-};
-
-struct selection_EXIDocumentType_appHand
-{
-	unsigned int supportedAppProtocolReq:1;
-	unsigned int supportedAppProtocolRes:1;
-
-
-};
-
-struct selection_SupportedAppProtocolRes
-{
-	unsigned int SchemaID:1;
-
-
-};
-
-struct SupportedAppProtocolRes
-{
-	enum responseCodeType_appHand ResponseCode;
-	uint8_t SchemaID;
-	struct selection_SupportedAppProtocolRes isused;
-
-};
-
-struct EXIDocumentType_appHand
-{
-	struct SupportedAppProtocolReq* supportedAppProtocolReq;
-	struct SupportedAppProtocolRes* supportedAppProtocolRes;
-	struct selection_EXIDocumentType_appHand isused;
-
-};
-
-void init_EXIDocumentType_appHand(struct EXIDocumentType_appHand* type);
-void init_SupportedAppProtocolRes(struct SupportedAppProtocolRes* type);
-void init_SupportedAppProtocolReq(struct SupportedAppProtocolReq* type);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 94
src/appHandshake/appHand_service.h

@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_DATABINDER_H_
-#define EXI_DATABINDER_H_
-
-#include "appHand_dataTypes.h"
-
-struct uniqueIDPath2
-{
-	int id[10];
-	size_t pos;
-};
-
-
-struct EXIDatabinder
-{
-	/* in-/ out-stream */
-	bitstream_t inStream;
-	bitstream_t outStream;
-
-	/* EXI */
-	exi_state_t stateDecode;
-	exi_state_t stateEncode;
-	exi_event_t event;
-	uint16_t qnameID;
-	exi_value_t val;
-
-	/* v2g message data structure */
-	struct EXIDocumentType_appHand exiMsg;
-
-	/* unique id for ambiguous elements */
-	struct uniqueIDPath2 idPath;
-
-	/* error code */
-	uint8_t errorCode;
-
-	/* offset for transported header data */
-	uint16_t transportHeaderOffset;
-};
-
-int init_appHandSerializer(struct EXIDatabinder* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, size_t max_outStream_size, uint16_t transportHeaderOffset);
-int serialize_appHand(struct EXIDatabinder* service, uint8_t* outStream, uint16_t* outPos, struct EXIDocumentType_appHand* exiDoc);
-int init_appHandDeserializer(struct EXIDatabinder* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, uint16_t transportHeaderOffset);
-int deserialize_appHand(struct EXIDatabinder* service, uint8_t* inStream, uint16_t sizeInStream, struct EXIDocumentType_appHand* exiDoc);
-void init_EXIDocumentType_appHand(struct EXIDocumentType_appHand* type);
-
-
-/* define error codes */
-#define EXI_NON_VALID_MESSAGE 0x01
-#define EXI_SERIALIZATION_FAILED 0x02
-#define EXI_DESERIALIZATION_FAILED 0x03
-#define EXI_DATATYPE_FAILED 0x04
-#define EXI_VALUE_RANGE_FAILED 0x05
-#define EXI_SERVICE_CALL_FAILED 0x06
-
-#define EXI_UNKNOWN_ERROR 0xFF
-
-#endif /* EXI_DATABINDER_H_ */
-
-#ifdef __cplusplus
-}
-#endif

+ 719 - 644
src/codec/AbstractDecoderChannel.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,651 +18,727 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "DecoderChannel.h"
-
-#include "EXIConfig.h"
-#include "EXIOptions.h"
-#include "BitInputStream.h"
-#include "EXITypes.h"
-#include "MethodsBag.h"
-#include "v2gEXICoder.h"
-#include "ErrorCodes.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-#include "DynamicMemory.h"
-#include "StringValueTable.h"
-#endif /* DYNAMIC_ALLOCATION */
-
-#ifndef ABSTRACT_DECODER_CHANNEL_C
-#define ABSTRACT_DECODER_CHANNEL_C
-
-/* unsigned long == 64 bits, 10 * 7bits = 70 bits */
-#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_64 10
-/* unsigned int == 32 bits, 5 * 7bits = 35 bits */
-#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_32 5
-
-/* buffer for reading (arbitrary) large integer values */
-static uint8_t maskedOctets[MAX_OCTETS_FOR_UNSIGNED_INTEGER_64];
-
-
-static int _decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv, int negative) {
-	int errn = 0;
-	int i = 0;
-	uint8_t b;
-	int k;
-
-	do {
-		/* Read the next octet */
-		errn = decode(stream, &b);
-		if (errn == 0) {
-			if(i < MAX_OCTETS_FOR_UNSIGNED_INTEGER_64) {
-				/* the 7 least significant bits hold the actual value */
-				maskedOctets[i++] = (b & 127);
-			} else {
-				errn = EXI_UNSUPPORTED_INTEGER_VALUE;
-			}
-		}
-	} while( errn == 0 && b >= 128 ); /* no more octets ? */
-
-	if ( errn == 0 ) {
-		/* For negative values, the Unsigned Integer holds the
-		 * magnitude of the value minus 1 */
-
-		switch(i) {
-		case 1: /* 7 bits */
-			if (negative) {
-				iv->val.int8 =  (int8_t)(-( b + 1));
-				iv->type = EXI_INTEGER_8;
-			} else {
-				iv->val.uint8 = b;
-				iv->type = EXI_UNSIGNED_INTEGER_8;
-			}
-			break;
-		case 2: /* 14 bits */
-			iv->val.uint16 = 0;
-			for (k = i-1; k >= 0 ; k--) {
-				iv->val.uint16  = (uint16_t)((iv->val.uint16 << 7) | maskedOctets[k]);
-			}
-			if (negative) {
-				iv->val.int16 = (int16_t)( -( iv->val.uint16 + 1 ));
-				iv->type = EXI_INTEGER_16;
-			} else {
-				iv->type = EXI_UNSIGNED_INTEGER_16;
-			}
-			break;
-		case 3: /* 21 bits */
-		case 4: /* 28 bits */
-			iv->val.uint32 = 0;
-			for (k = i-1; k >= 0 ; k--) {
-				iv->val.uint32 = (iv->val.uint32 << 7) | maskedOctets[k];
-			}
-			if (negative) {
-				iv->val.int32 = (int32_t)(-( iv->val.uint32 + 1));
-				if (iv->val.int32 <= INT16_MAX && iv->val.int32 >= INT16_MIN ) {
-					iv->type = EXI_INTEGER_16;
-				} else {
-					iv->type = EXI_INTEGER_32;
-				}
-			} else {
-				if (iv->val.uint32 <= UINT16_MAX) {
-					iv->type = EXI_UNSIGNED_INTEGER_16;
-				} else {
-					iv->type = EXI_UNSIGNED_INTEGER_32;
-				}
-			}
-			break;
-		case 5: /* 35 bits */
-		case 6: /* 42 bits */
-		case 7: /* 49 bits */
-		case 8: /* 56 bits */
-		case 9: /* 63 bits */
-		case 10: /* 70 bits */
-			iv->val.uint64 = 0;
-			for (k = i-1; k >= 0 ; k--) {
-				iv->val.uint64  = (iv->val.uint64 << 7) | maskedOctets[k];
-			}
-			if (negative) {
-				if (i > 9) {
-					/* too large */
-					return EXI_UNSUPPORTED_INTEGER_VALUE;
-				}
-				iv->val.int64 = (int64_t)(-( iv->val.uint64 + 1));
-				if (iv->val.int64 <= INT32_MAX && iv->val.int64 >= INT32_MIN ) {
-					iv->type = EXI_INTEGER_32;
-				} else {
-					iv->type = EXI_INTEGER_64;
-				}
-			} else {
-				if (iv->val.uint64 <= UINT32_MAX) {
-					iv->type = EXI_UNSIGNED_INTEGER_32;
-					/* iv->val.uint32 = iv->val.uint64;*/
-				} else {
-					iv->type = EXI_UNSIGNED_INTEGER_64;
-				}
-			}
-			break;
-		default:
-			errn = EXI_UNSUPPORTED_INTEGER_VALUE;
-			break;
-		}
-	}
-
-	return errn;
-}
-
-int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) {
-	return _decodeUnsignedInteger(stream, iv, 0);
-}
-
-int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16) {
-	unsigned int mShift = 0;
-	int errn = 0;
-	uint8_t b;
-	*uint16 = 0;
-
-	do {
-		/* 1. Read the next octet */
-		errn = decode(stream, &b);
-		/* 2. Multiply the value of the unsigned number represented by the 7
-		 * least significant
-		 * bits of the octet by the current multiplier and add the result to
-		 * the current value */
-		*uint16 = (uint16_t)(*uint16 + ((b & 127) << mShift));
-		/* 3. Multiply the multiplier by 128 */
-		mShift += 7;
-		/* 4. If the most significant bit of the octet was 1, go back to step 1 */
-	} while (errn == 0 && (b >> 7) == 1);
-
-	return errn;
-}
-
-int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32) {
-	/* 0XXXXXXX ... 1XXXXXXX 1XXXXXXX */
-	unsigned int mShift = 0;
-	int errn = 0;
-	uint8_t b;
-	*uint32 = 0;
-
-	do {
-		/* 1. Read the next octet */
-		errn = decode(stream, &b);
-		/* 2. Multiply the value of the unsigned number represented by the 7
-		 * least significant
-		 * bits of the octet by the current multiplier and add the result to
-		 * the current value */
-		*uint32 += (uint32_t)((b & 127) << mShift);
-		/* 3. Multiply the multiplier by 128 */
-		mShift += 7;
-		/* 4. If the most significant bit of the octet was 1, go back to step 1 */
-	} while (errn == 0 && (b >> 7) == 1);
-
-	return errn;
-}
-
-/**
- * Decode an arbitrary precision non negative integer using a sequence of
- * octets. The most significant bit of the last octet is set to zero to
- * indicate sequence termination. Only seven bits per octet are used to
- * store the integer's value.
- */
-int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64) {
-	unsigned int mShift = 0;
-	int errn = 0;
-	uint8_t b;
-	*uint64 = 0L;
-
-	do {
-		errn = decode(stream, &b);
-		*uint64 += ((uint64_t) (b & 127)) << mShift;
-		mShift += 7;
-	} while (errn == 0 && (b >> 7) == 1);
-
-	return errn;
-}
-
-
-int decodeInteger(bitstream_t* stream, exi_integer_t* iv) {
-	int b;
-	int errn = decodeBoolean(stream, &b);
-	if (errn == 0) {
-		errn = _decodeUnsignedInteger(stream, iv, b);
-	}
-
-	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 decodeInteger16(bitstream_t* stream, int16_t* int16) {
-	int b;
-	uint16_t uint16;
-	int errn = decodeBoolean(stream, &b);
-
-	if (errn == 0) {
-		if (b) {
-			/* For negative values, the Unsigned Integer holds the
-			 * magnitude of the value minus 1 */
-			errn = decodeUnsignedInteger16(stream, &uint16);
-			*int16 = (int16_t)(-(uint16 + 1));
-		} else {
-			/* positive */
-			errn = decodeUnsignedInteger16(stream, &uint16);
-			*int16 = (int16_t)(uint16);
-		}
-	}
-
-	return errn;
-}
-
-/**
- * Decode an arbitrary precision integer using a sign bit followed by a
- * sequence of octets. The most significant bit of the last octet is set to
- * zero to indicate sequence termination. Only seven bits per octet are used
- * to store the integer's value.
- */
-int decodeInteger32(bitstream_t* stream, int32_t* int32) {
-	int b;
-	uint32_t uint32;
-	int errn = decodeBoolean(stream, &b);
-
-	if (errn == 0) {
-		if (b) {
-			/* For negative values, the Unsigned Integer holds the
-			 * magnitude of the value minus 1 */
-			errn = decodeUnsignedInteger32(stream, &uint32);
-			*int32 = (int32_t)(-(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) {
-		if (b) {
-			/* For negative values, the Unsigned Integer holds the
-			 * magnitude of the value minus 1 */
-			errn = decodeUnsignedInteger64(stream, &uint64);
-			*int64 = (int64_t)(-(uint64 + 1));
-		} else {
-			/* positive */
-			errn = decodeUnsignedInteger64(stream, &uint64);
-			*int64 = (int64_t)(uint64);
-		}
-	}
-
-	return errn;
-}
-
-/**
- * Decode a Float datatype as two consecutive Integers.
- * The first Integer represents the mantissa of the floating point
- * number and the second Integer represents the base-10 exponent
- * of the floating point number.
- */
-int decodeFloat(bitstream_t* stream, exi_float_me_t* f) {
-	int errn = decodeInteger64(stream, &f->mantissa);
-	if (errn == 0) {
-		errn = decodeInteger16(stream, &f->exponent);
-	}
-	return errn;
-}
-
-/**
- * Decode a decimal represented as a Boolean sign followed by two Unsigned
- * Integers. A sign value of zero (0) is used to represent positive Decimal
- * values and a sign value of one (1) is used to represent negative Decimal
- * values The first Integer represents the integral portion of the Decimal
- * value. The second positive integer represents the fractional portion of
- * the decimal with the digits in reverse order to preserve leading zeros.
- */
-int decodeDecimal(bitstream_t* stream, exi_decimal_t* d) {
-	int errn = decodeBoolean(stream, &d->negative);
-	if (errn == 0) {
-		errn = decodeUnsignedInteger(stream, &d->integral);
-		if (errn == 0) {
-			errn = decodeUnsignedInteger(stream, &d->reverseFraction);
-		}
-	}
-
-	return errn;
-}
-
-/**
- * Decode a sequence of characters for a given length.
- */
-int decodeStringOnly(bitstream_t* stream, uint16_t len, exi_string_ucs_t* s) {
-	int errn = 0;
-	if (len > s->size) {
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
-#endif /* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-		if(s->size > 0) {
-			errn = exiFreeDynamicStringMemory(s);
-			if(errn) {
-				return errn;
-			}
-		}
-		errn = exiAllocateDynamicStringMemory(s, s->len);
-#endif /* DYNAMIC_ALLOCATION */
-	}
-	if(errn == 0) {
-		errn = decodeCharacters(stream, len, s->codepoints);
-		s->len = len;
-	}
-
-	return errn;
-}
-
-/**
- * Decode a length prefixed sequence of characters.
- */
-int decodeString(bitstream_t* stream, exi_string_ucs_t* s) {
-	int errn = decodeUnsignedInteger16(stream, &s->len);
-	if (errn == 0) {
-		errn = decodeStringOnly(stream, s->len, s);
-	}
-	return errn;
-}
-
-static int _readStringValueLocalHit(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, uint32_t* localID) {
-	int errn;
-	uint16_t codingLength;
-
-	if( state->stringTable.sizeLocalStrings > qnameID ) {
-		errn = exiGetCodingLength(state->stringTable.numberOfLocalStrings[qnameID], &codingLength);
-		if(errn == 0) {
-			errn = decodeNBitUnsignedInteger(stream, codingLength, localID);
-		}
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-
-	return errn;
-}
-
-
-static int _readStringValueGlobalHit(bitstream_t* stream, exi_state_t* state, uint32_t* globalID) {
-	int errn;
-	uint16_t codingLength;
-
-	errn = exiGetCodingLength(state->stringTable.numberOfGlobalStrings, &codingLength);
-	if(errn == 0) {
-		errn = decodeNBitUnsignedInteger(stream, codingLength, globalID);
-	}
-
-	return errn;
-}
-
-int decodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_string_value_t* s) {
-	uint16_t L;
-	int errn = decodeUnsignedInteger16(stream, &L);
-	if (errn == 0) {
-		switch (L) {
-		case 0:
-			/* local value partition */
-			s->type = EXI_STRING_VALUE_LOCAL_HIT;
-			errn = _readStringValueLocalHit(stream, state, qnameID, &s->localID);
-			break;
-		case 1:
-			/* found in global value partition */
-			s->type = EXI_STRING_VALUE_GLOBAL_HIT;
-			errn = _readStringValueGlobalHit(stream, state, &s->globalID);
-			break;
-		default:
-			/* not found in global value (and local value) partition
-			 * ==> string literal is encoded as a String with the length
-			 * incremented by two */
-			s->type = EXI_STRING_VALUE_MISS;
-			s->miss.len = L = (uint16_t)(L - 2);
-			errn = decodeStringOnly(stream, L, &(s->miss));
-			if(errn == 0) {
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-				/* If length L is greater than zero the string S is added */
-				if(L > 0) {
-					/* After encoding the string value, it is added to both the
-					 * associated "local" value string table partition and the global
-					 * value string table partition */
-#if EXI_OPTION_VALUE_MAX_LENGTH < 0
-				errn = exi_v2g_AddStringValue(state, &(s->miss), qnameID);
-# else /* EXI_v2gVALUE_MAX_LENGTH < 0  */
-					if (L <= EXI_OPTION_VALUE_MAX_LENGTH) {
-						errn = exi_v2g_AddStringValue(state, &(s->miss), qnameID);
-					}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
-				}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-			}
-			break;
-		}
-	}
-
-	return errn;
-}
-
-int decodeRCSStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* s) {
-	unsigned int i;
-	uint32_t cp;
-	uint16_t L;
-	int errn = decodeUnsignedInteger16(stream, &L);
-	if (errn == 0) {
-		switch (L) {
-		case 0:
-			/* local value partition */
-			s->type = EXI_STRING_VALUE_LOCAL_HIT;
-			errn = _readStringValueLocalHit(stream, state, qnameID, &s->localID);
-			break;
-		case 1:
-			/* found in global value partition */
-			s->type = EXI_STRING_VALUE_GLOBAL_HIT;
-			errn = _readStringValueGlobalHit(stream, state, &s->globalID);
-			break;
-		default:
-			/* not found in global value (and local value) partition
-			 * ==> string literal is encoded as a String with the length
-			 * incremented by two */
-			s->type = EXI_STRING_VALUE_MISS;
-			s->miss.len = L = (uint16_t)(L - 2);
-
-			if (L > s->miss.size) {
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-				errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
-#endif /* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-				if(s->miss.size > 0) {
-					errn = exiFreeDynamicStringMemory(&(s->miss));
-				}
-				if(errn == 0) {
-					errn = exiAllocateDynamicStringMemory(&(s->miss), L);
-				}
-#endif /* DYNAMIC_ALLOCATION */
-			}
-			if(errn == 0) {
-				for (i = 0; i < L && errn >= 0; i++) {
-					errn = decodeNBitUnsignedInteger(stream, rcs->codingLength, &cp);
-					s->miss.codepoints[i] = rcs->codepoints[cp];
-				}
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-				/* If length L is greater than zero the string S is added */
-				if(errn == 0 && L > 0) {
-					/* After encoding the string value, it is added to both the
-					 * associated "local" value string table partition and the global
-					 * value string table partition */
-#if EXI_OPTION_VALUE_MAX_LENGTH < 0
-					errn = exi_v2g_AddStringValue(state, &(s->miss), qnameID);
-# else /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
-					if (L <= EXI_OPTION_VALUE_MAX_LENGTH) {
-						errn = exi_v2g_AddStringValue(state, &(s->miss), qnameID);
-					}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
-				}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-			}
-			break;
-		}
-	}
-
-	return errn;
-}
-
-/**
- * Decode a sequence of characters according to a given length.
- * Each character is represented by its UCS [ISO/IEC 10646]
- * code point encoded as an Unsigned Integer
- */
-int decodeCharacters(bitstream_t* stream, uint16_t len, uint32_t* chars) {
-	unsigned int i;
-	int errn = 0;
-	for (i = 0; i < len && errn == 0; i++) {
-		errn = decodeUnsignedInteger32(stream, &chars[i]);
-	}
-
-	return errn;
-}
-
-
-/**
- * Decode a binary value as a length-prefixed sequence of octets.
- */
-int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes) {
-	unsigned int i;
-	uint8_t b;
-	int errn = decodeUnsignedInteger16(stream, &bytes->len);
-	if (errn == 0) {
-		if (bytes->len > bytes->size) {
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-			errn = EXI_ERROR_OUT_OF_BYTE_BUFFER;
-#endif /* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-			errn = exiFreeDynamicBinaryMemory(bytes);
-			if(errn == 0) {
-				errn = exiAllocateDynamicBinaryMemory(bytes, bytes->len);
-			}
-#endif /* DYNAMIC_ALLOCATION */
-		}
-
-		for (i = 0; i < bytes->len && errn == 0; i++) {
-			errn = decode(stream, &b);
-			bytes->data[i] = (uint8_t)b;
-		}
-	}
-
-	return errn;
-}
-
-/**
- * Decode Date-Time as sequence of values representing the individual
- * components of the Date-Time.
- */
-int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime) {
-	int errn = 0;
-
-	datetime->type = type;
-
-	datetime->year = 0;
-	datetime->monthDay = 0;
-	datetime->time = 0;
-	datetime->presenceFractionalSecs = 0;
-	datetime->fractionalSecs = 0;
-	datetime->presenceTimezone = 0;
-	datetime->timezone = 0;
-
-	switch (type) {
-	case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */
-		errn = decodeInteger32(stream, &datetime->year);
-		if (errn == 0) {
-			datetime->year += DATETIME_YEAR_OFFSET;
-		}
-		break;
-	case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */
-	case EXI_DATETIME_DATE:
-		errn = decodeInteger32(stream, &datetime->year);
-		if (errn == 0) {
-			datetime->year += DATETIME_YEAR_OFFSET;
-			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay);
-		}
-		break;
-	case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */
-		/* e.g. "0001-01-01T00:00:00.111+00:33"  */
-		errn = decodeInteger32(stream, &datetime->year);
-		if (errn == 0) {
-			datetime->year += DATETIME_YEAR_OFFSET;
-			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay);
-			if (errn != 0) {
-				break;
-			}
-		}
-		/* no break */
-	case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */
-		/* e.g. "12:34:56.135"  */
-		errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, &datetime->time);
-		if (errn == 0) {
-			errn = decodeBoolean(stream, &datetime->presenceFractionalSecs);
-			if (errn == 0) {
-				if (datetime->presenceFractionalSecs) {
-					errn = decodeUnsignedInteger32(stream, &datetime->fractionalSecs);
-				}
-			}
-		}
-		break;
-	case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */
-		/* e.g. "--12" */
-	case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */
-		/* e.g. "--01-28"  */
-	case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */
-		/* "---16"  */
-		errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay );
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_DATETIME_TYPE;
-		break;
-	}
-
-	if(errn == 0) {
-		errn = decodeBoolean(stream, &datetime->presenceTimezone );
-		if (errn == 0 && datetime->presenceTimezone) {
-			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, &datetime->timezone);
-			datetime->timezone -= DATETIME_TIMEZONE_OFFSET_IN_MINUTES;
-		}
-	}
-
-	return errn;
-}
-
-#endif
-
+
+
+#include "DecoderChannel.h"
+
+#include "EXIConfig.h"
+#include "EXIOptions.h"
+#include "BitInputStream.h"
+#include "EXITypes.h"
+#include "MethodsBag.h"
+/*#include "v2gEXICoder.h"*/
+#include "ErrorCodes.h"
+
+#include "StringValueTable.h"
+
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+#include "DynamicMemory.h"
+#endif /* DYNAMIC_ALLOCATION */
+
+#ifndef ABSTRACT_DECODER_CHANNEL_C
+#define ABSTRACT_DECODER_CHANNEL_C
+
+/* unsigned long == 64 bits, 10 * 7bits = 70 bits */
+#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_64 10
+/* unsigned int == 32 bits, 5 * 7bits = 35 bits */
+#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_32 5
+
+/* buffer for reading (arbitrary) large integer values */
+static uint8_t maskedOctets[MAX_OCTETS_FOR_UNSIGNED_INTEGER_64];
+
+
+static int _decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv, int negative) {
+	int errn = 0;
+	int i = 0;
+	uint8_t b;
+	int k;
+
+	do {
+		/* Read the next octet */
+		errn = decode(stream, &b);
+		if (errn == 0) {
+			if(i < MAX_OCTETS_FOR_UNSIGNED_INTEGER_64) {
+				/* the 7 least significant bits hold the actual value */
+				maskedOctets[i++] = (b & 127);
+			} else {
+				errn = EXI_UNSUPPORTED_INTEGER_VALUE;
+			}
+		}
+	} while( errn == 0 && b >= 128 ); /* no more octets ? */
+
+	if ( errn == 0 ) {
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+
+		switch(i) {
+		case 1: /* 7 bits */
+			if (negative) {
+				iv->val.int8 =  (int8_t)(-( b + 1));
+				iv->type = EXI_INTEGER_8;
+			} else {
+				iv->val.uint8 = b;
+				iv->type = EXI_UNSIGNED_INTEGER_8;
+			}
+			break;
+		case 2: /* 14 bits */
+			iv->val.uint16 = 0;
+			for (k = i-1; k >= 0 ; k--) {
+				iv->val.uint16  = (uint16_t)((iv->val.uint16 << 7) | maskedOctets[k]);
+			}
+			if (negative) {
+				iv->val.int16 = (int16_t)( -( iv->val.uint16 + 1 ));
+				iv->type = EXI_INTEGER_16;
+			} else {
+				iv->type = EXI_UNSIGNED_INTEGER_16;
+			}
+			break;
+		case 3: /* 21 bits */
+		case 4: /* 28 bits */
+			iv->val.uint32 = 0;
+			for (k = i-1; k >= 0 ; k--) {
+				iv->val.uint32 = (iv->val.uint32 << 7) | maskedOctets[k];
+			}
+			if (negative) {
+				iv->val.int32 = (int32_t)(-( iv->val.uint32 + 1));
+				if (iv->val.int32 <= INT16_MAX && iv->val.int32 >= INT16_MIN ) {
+					iv->type = EXI_INTEGER_16;
+				} else {
+					iv->type = EXI_INTEGER_32;
+				}
+			} else {
+				if (iv->val.uint32 <= UINT16_MAX) {
+					iv->type = EXI_UNSIGNED_INTEGER_16;
+				} else {
+					iv->type = EXI_UNSIGNED_INTEGER_32;
+				}
+			}
+			break;
+		case 5: /* 35 bits */
+		case 6: /* 42 bits */
+		case 7: /* 49 bits */
+		case 8: /* 56 bits */
+		case 9: /* 63 bits */
+		case 10: /* 70 bits */
+			iv->val.uint64 = 0;
+			for (k = i-1; k >= 0 ; k--) {
+				iv->val.uint64  = (iv->val.uint64 << 7) | maskedOctets[k];
+			}
+			if (negative) {
+				if (i > 9) {
+					/* too large */
+					return EXI_UNSUPPORTED_INTEGER_VALUE;
+				}
+				iv->val.int64 = (int64_t)(-( iv->val.uint64 + 1));
+				if (iv->val.int64 <= INT32_MAX && iv->val.int64 >= INT32_MIN ) {
+					iv->type = EXI_INTEGER_32;
+				} else {
+					iv->type = EXI_INTEGER_64;
+				}
+			} else {
+				if (iv->val.uint64 <= UINT32_MAX) {
+					iv->type = EXI_UNSIGNED_INTEGER_32;
+					/* iv->val.uint32 = iv->val.uint64;*/
+				} else {
+					iv->type = EXI_UNSIGNED_INTEGER_64;
+				}
+			}
+			break;
+		default:
+			errn = EXI_UNSUPPORTED_INTEGER_VALUE;
+			break;
+		}
+	}
+
+	return errn;
+}
+
+int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) {
+	return _decodeUnsignedInteger(stream, iv, 0);
+}
+
+int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16) {
+	unsigned int mShift = 0;
+	int errn = 0;
+	uint8_t b;
+	*uint16 = 0;
+
+	do {
+		/* 1. Read the next octet */
+		errn = decode(stream, &b);
+		/* 2. Multiply the value of the unsigned number represented by the 7
+		 * least significant
+		 * bits of the octet by the current multiplier and add the result to
+		 * the current value */
+		*uint16 = (uint16_t)(*uint16 + ((b & 127) << mShift));
+		/* 3. Multiply the multiplier by 128 */
+		mShift += 7;
+		/* 4. If the most significant bit of the octet was 1, go back to step 1 */
+	} while (errn == 0 && (b >> 7) == 1);
+
+	return errn;
+}
+
+int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32) {
+	/* 0XXXXXXX ... 1XXXXXXX 1XXXXXXX */
+	unsigned int mShift = 0;
+	int errn = 0;
+	uint8_t b;
+	*uint32 = 0;
+
+	do {
+		/* 1. Read the next octet */
+		errn = decode(stream, &b);
+		/* 2. Multiply the value of the unsigned number represented by the 7
+		 * least significant
+		 * bits of the octet by the current multiplier and add the result to
+		 * the current value */
+		*uint32 += (uint32_t)((b & 127) << mShift);
+		/* 3. Multiply the multiplier by 128 */
+		mShift += 7;
+		/* 4. If the most significant bit of the octet was 1, go back to step 1 */
+	} while (errn == 0 && (b >> 7) == 1);
+
+	return errn;
+}
+
+/**
+ * Decode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64) {
+	unsigned int mShift = 0;
+	int errn = 0;
+	uint8_t b;
+	*uint64 = 0L;
+
+	do {
+		errn = decode(stream, &b);
+		*uint64 += ((uint64_t) (b & 127)) << mShift;
+		mShift += 7;
+	} while (errn == 0 && (b >> 7) == 1);
+
+	return errn;
+}
+
+
+int decodeInteger(bitstream_t* stream, exi_integer_t* iv) {
+	int b;
+	int errn = decodeBoolean(stream, &b);
+	if (errn == 0) {
+		errn = _decodeUnsignedInteger(stream, iv, b);
+	}
+
+	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 decodeInteger16(bitstream_t* stream, int16_t* int16) {
+	int b;
+	uint16_t uint16;
+	int errn = decodeBoolean(stream, &b);
+
+	if (errn == 0) {
+		if (b) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+			errn = decodeUnsignedInteger16(stream, &uint16);
+			*int16 = (int16_t)(-(uint16 + 1));
+		} else {
+			/* positive */
+			errn = decodeUnsignedInteger16(stream, &uint16);
+			*int16 = (int16_t)(uint16);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int decodeInteger32(bitstream_t* stream, int32_t* int32) {
+	int b;
+	uint32_t uint32;
+	int errn = decodeBoolean(stream, &b);
+
+	if (errn == 0) {
+		if (b) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+			errn = decodeUnsignedInteger32(stream, &uint32);
+			*int32 = (int32_t)(-(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) {
+		if (b) {
+			/* For negative values, the Unsigned Integer holds the
+			 * magnitude of the value minus 1 */
+			errn = decodeUnsignedInteger64(stream, &uint64);
+			*int64 = (int64_t)(-(uint64 + 1));
+		} else {
+			/* positive */
+			errn = decodeUnsignedInteger64(stream, &uint64);
+			*int64 = (int64_t)(uint64);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a Float datatype as two consecutive Integers.
+ * The first Integer represents the mantissa of the floating point
+ * number and the second Integer represents the base-10 exponent
+ * of the floating point number.
+ */
+int decodeFloat(bitstream_t* stream, exi_float_me_t* f) {
+	int errn = decodeInteger64(stream, &f->mantissa);
+	if (errn == 0) {
+		errn = decodeInteger16(stream, &f->exponent);
+	}
+	return errn;
+}
+
+/**
+ * Decode a decimal represented as a Boolean sign followed by two Unsigned
+ * Integers. A sign value of zero (0) is used to represent positive Decimal
+ * values and a sign value of one (1) is used to represent negative Decimal
+ * values The first Integer represents the integral portion of the Decimal
+ * value. The second positive integer represents the fractional portion of
+ * the decimal with the digits in reverse order to preserve leading zeros.
+ */
+int decodeDecimal(bitstream_t* stream, exi_decimal_t* d) {
+	int errn = decodeBoolean(stream, &d->negative);
+	if (errn == 0) {
+		errn = decodeUnsignedInteger(stream, &d->integral);
+		if (errn == 0) {
+			errn = decodeUnsignedInteger(stream, &d->reverseFraction);
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a sequence of characters for a given length.
+ */
+int decodeStringOnly(bitstream_t* stream, uint16_t len, exi_string_t* s) {
+	int errn = 0;
+	int extraChar = 0;
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	extraChar = 1; /* null terminator */
+#endif /* STRING_REPRESENTATION_ASCII */
+
+	if ( (len + extraChar) > s->size) {
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
+#endif /* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+		if(s->size > 0) {
+			errn = exiFreeDynamicStringMemory(s);
+			if(errn) {
+				return errn;
+			}
+		}
+		errn = exiAllocateDynamicStringMemory(s, s->len);
+#endif /* DYNAMIC_ALLOCATION */
+	}
+	if(errn == 0) {
+		errn = decodeCharacters(stream, len, s->characters);
+		s->len = len;
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a length prefixed sequence of characters.
+ */
+int decodeString(bitstream_t* stream, exi_string_t* s) {
+	int errn = decodeUnsignedInteger16(stream, &s->len);
+	if (errn == 0) {
+		errn = decodeStringOnly(stream, s->len, s);
+	}
+	return errn;
+}
+
+static int _readStringValueLocalHit(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, uint32_t* localID) {
+	int errn;
+	uint16_t codingLength;
+
+	if( state->stringTable.sizeLocalStrings > qnameID ) {
+		errn = exiGetCodingLength(state->stringTable.numberOfLocalStrings[qnameID], &codingLength);
+		if(errn == 0) {
+			errn = decodeNBitUnsignedInteger(stream, codingLength, localID);
+		}
+	} else {
+		errn = EXI_ERROR_OUT_OF_BOUNDS;
+	}
+
+	return errn;
+}
+
+
+static int _readStringValueGlobalHit(bitstream_t* stream, exi_state_t* state, uint32_t* globalID) {
+	int errn;
+	uint16_t codingLength;
+
+	errn = exiGetCodingLength(state->stringTable.numberOfGlobalStrings, &codingLength);
+	if(errn == 0) {
+		errn = decodeNBitUnsignedInteger(stream, codingLength, globalID);
+	}
+
+	return errn;
+}
+
+int decodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_string_value_t* s) {
+	uint16_t L;
+	int errn = decodeUnsignedInteger16(stream, &L);
+	if (errn == 0) {
+		switch (L) {
+		case 0:
+			/* local value partition */
+			s->type = EXI_STRING_VALUE_LOCAL_HIT;
+			errn = _readStringValueLocalHit(stream, state, qnameID, &s->localID);
+			break;
+		case 1:
+			/* found in global value partition */
+			s->type = EXI_STRING_VALUE_GLOBAL_HIT;
+			errn = _readStringValueGlobalHit(stream, state, &s->globalID);
+			break;
+		default:
+			/* not found in global value (and local value) partition
+			 * ==> string literal is encoded as a String with the length
+			 * incremented by two */
+			s->type = EXI_STRING_VALUE_MISS;
+			s->miss.len = L = (uint16_t)(L - 2);
+			errn = decodeStringOnly(stream, L, &(s->miss));
+			if(errn == 0) {
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
+#if EXI_OPTION_VALUE_MAX_LENGTH != 0
+				/* If length L is greater than zero the string S is added */
+				if(L > 0) {
+					/* After encoding the string value, it is added to both the
+					 * associated "local" value string table partition and the global
+					 * value string table partition */
+#if EXI_OPTION_VALUE_MAX_LENGTH < 0
+				errn = exiAddStringValue(&state->stringTable, &(s->miss), qnameID);
+# else /* EXI_v2gVALUE_MAX_LENGTH < 0  */
+					if (L <= EXI_OPTION_VALUE_MAX_LENGTH) {
+						errn = exiAddStringValue(&state->stringTable, &(s->miss), qnameID);
+					}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
+				}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
+			}
+			break;
+		}
+	}
+
+	return errn;
+}
+
+int decodeRCSStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* s) {
+	unsigned int i;
+	uint32_t cp;
+	uint16_t L;
+	int errn = decodeUnsignedInteger16(stream, &L);
+	if (errn == 0) {
+		switch (L) {
+		case 0:
+			/* local value partition */
+			s->type = EXI_STRING_VALUE_LOCAL_HIT;
+			errn = _readStringValueLocalHit(stream, state, qnameID, &s->localID);
+			break;
+		case 1:
+			/* found in global value partition */
+			s->type = EXI_STRING_VALUE_GLOBAL_HIT;
+			errn = _readStringValueGlobalHit(stream, state, &s->globalID);
+			break;
+		default:
+			/* not found in global value (and local value) partition
+			 * ==> string literal is encoded as a String with the length
+			 * incremented by two */
+			s->type = EXI_STRING_VALUE_MISS;
+			s->miss.len = L = (uint16_t)(L - 2);
+
+			if (L > s->miss.size) {
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+				errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
+#endif /* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+				if(s->miss.size > 0) {
+					errn = exiFreeDynamicStringMemory(&(s->miss));
+				}
+				if(errn == 0) {
+					errn = exiAllocateDynamicStringMemory(&(s->miss), L);
+				}
+#endif /* DYNAMIC_ALLOCATION */
+			}
+			if(errn == 0) {
+				for (i = 0; i < L && errn >= 0; i++) {
+					errn = decodeNBitUnsignedInteger(stream, rcs->codingLength, &cp);
+					s->miss.characters[i] = rcs->characters[cp];
+				}
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
+#if EXI_OPTION_VALUE_MAX_LENGTH != 0
+				/* If length L is greater than zero the string S is added */
+				if(errn == 0 && L > 0) {
+					/* After encoding the string value, it is added to both the
+					 * associated "local" value string table partition and the global
+					 * value string table partition */
+#if EXI_OPTION_VALUE_MAX_LENGTH < 0
+					errn = exiAddStringValue(&state->stringTable, &(s->miss), qnameID);
+# else /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
+					if (L <= EXI_OPTION_VALUE_MAX_LENGTH) {
+						errn = exiAddStringValue(&state->stringTable, &(s->miss), qnameID);
+					}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
+				}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
+			}
+			break;
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Decode a sequence of characters according to a given length.
+ * Each character is represented by its UCS [ISO/IEC 10646]
+ * code point encoded as an Unsigned Integer
+ */
+int decodeCharacters(bitstream_t* stream, uint16_t len, exi_string_character_t* chars) {
+	unsigned int i;
+	int errn = 0;
+
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	uint8_t b;
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decode(stream, &b);
+		if(b < 128) {
+			chars[i] = (exi_string_character_t)b;
+		} else {
+			errn = EXI_ERROR_STRINGVALUES_CHARACTER;
+		}
+	}
+	/* null terminator \0 */
+	chars[i] = '\0';
+
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decodeUnsignedInteger32(stream, &chars[i]);
+	}
+#endif /* STRING_REPRESENTATION_UCS */
+
+
+
+
+	return errn;
+}
+
+int decodeRCSCharacters(bitstream_t* stream, uint16_t len, exi_string_character_t* chars, uint16_t rcsCodeLength, uint16_t rcsSize, const exi_string_character_t rcsSet[]) {
+	unsigned int i;
+	int errn = 0;
+	uint32_t uint32;
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+	uint8_t b;
+#endif /* STRING_REPRESENTATION_ASCII */
+
+
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decodeNBitUnsignedInteger(stream, rcsCodeLength, &uint32);
+		if(errn == 0) {
+			if ( uint32 == rcsSize ) {
+				/* RCS deviation */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+				errn = decode(stream, &b);
+				if(b < 128) {
+					chars[i] = (exi_string_character_t)b;
+				} else {
+					errn = EXI_ERROR_STRINGVALUES_CHARACTER;
+				}
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+				errn = decodeUnsignedInteger32(stream, &chars[i]);
+#endif /* STRING_REPRESENTATION_UCS */
+
+			} else {
+				/* RCS match */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+				chars[i] = rcsSet[uint32];
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+				chars[i] = rcsSet[uint32];
+#endif /* STRING_REPRESENTATION_UCS */
+			}
+		}
+	}
+
+	return errn;
+}
+
+
+/**
+ * Decode a binary value as a length-prefixed sequence of octets.
+ */
+int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes) {
+	int errn = decodeUnsignedInteger16(stream, &bytes->len);
+	if (errn == 0) {
+		if (bytes->len > bytes->size) {
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+			errn = EXI_ERROR_OUT_OF_BYTE_BUFFER;
+#endif /* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+			errn = exiFreeDynamicBinaryMemory(bytes);
+			if(errn == 0) {
+				errn = exiAllocateDynamicBinaryMemory(bytes, bytes->len);
+			}
+#endif /* DYNAMIC_ALLOCATION */
+		}
+
+		errn = decodeBytes(stream, bytes->len, bytes->data);
+	}
+
+	return errn;
+}
+
+
+int decodeBytes(bitstream_t* stream, uint16_t len, uint8_t* data) {
+	unsigned int i;
+	int errn = 0;
+	uint8_t b;
+
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = decode(stream, &b);
+		data[i] = (uint8_t)b;
+	}
+
+	return errn;
+}
+
+/**
+ * Decode Date-Time as sequence of values representing the individual
+ * components of the Date-Time.
+ */
+int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime) {
+	int errn = 0;
+
+	datetime->type = type;
+
+	datetime->year = 0;
+	datetime->monthDay = 0;
+	datetime->time = 0;
+	datetime->presenceFractionalSecs = 0;
+	datetime->fractionalSecs = 0;
+	datetime->presenceTimezone = 0;
+	datetime->timezone = 0;
+
+	switch (type) {
+	case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */
+		errn = decodeInteger32(stream, &datetime->year);
+		if (errn == 0) {
+			datetime->year += DATETIME_YEAR_OFFSET;
+		}
+		break;
+	case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */
+	case EXI_DATETIME_DATE:
+		errn = decodeInteger32(stream, &datetime->year);
+		if (errn == 0) {
+			datetime->year += DATETIME_YEAR_OFFSET;
+			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay);
+		}
+		break;
+	case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */
+		/* e.g. "0001-01-01T00:00:00.111+00:33"  */
+		errn = decodeInteger32(stream, &datetime->year);
+		if (errn == 0) {
+			datetime->year += DATETIME_YEAR_OFFSET;
+			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay);
+			if (errn != 0) {
+				break;
+			}
+		}
+		/* no break */
+	case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */
+		/* e.g. "12:34:56.135"  */
+		errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, &datetime->time);
+		if (errn == 0) {
+			errn = decodeBoolean(stream, &datetime->presenceFractionalSecs);
+			if (errn == 0) {
+				if (datetime->presenceFractionalSecs) {
+					errn = decodeUnsignedInteger32(stream, &datetime->fractionalSecs);
+				}
+			}
+		}
+		break;
+	case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */
+		/* e.g. "--12" */
+	case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */
+		/* e.g. "--01-28"  */
+	case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */
+		/* "---16"  */
+		errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay );
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_DATETIME_TYPE;
+		break;
+	}
+
+	if(errn == 0) {
+		errn = decodeBoolean(stream, &datetime->presenceTimezone );
+		if (errn == 0 && datetime->presenceTimezone) {
+			errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, &datetime->timezone);
+			datetime->timezone -= DATETIME_TIMEZONE_OFFSET_IN_MINUTES;
+		}
+	}
+
+	return errn;
+}
+
+#endif
+

+ 630 - 515
src/codec/AbstractEncoderChannel.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,522 +18,638 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "EncoderChannel.h"
-#include "EXIOptions.h"
-#include "BitOutputStream.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-#include "MethodsBag.h"
-#include "v2gEXICoder.h"
-
-#ifndef ABSTRACT_ENCODER_CHANNEL_C
-#define ABSTRACT_ENCODER_CHANNEL_C
-
-int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) {
-	int errn = 0;
-	switch (iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		errn = encodeUnsignedInteger32(stream, iv->val.uint8);
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		errn = encodeUnsignedInteger32(stream, iv->val.uint16);
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		errn = encodeUnsignedInteger32(stream, iv->val.uint32);
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		errn = encodeUnsignedInteger64(stream, iv->val.uint64);
-		break;
-		/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		if (iv->val.int8 < 0) {
-			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
-		}
-		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int8));
-		break;
-	case EXI_INTEGER_16:
-		if (iv->val.int16 < 0) {
-			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
-		}
-		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int16));
-		break;
-	case EXI_INTEGER_32:
-		if (iv->val.int32 < 0) {
-			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
-		}
-		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int32));
-		break;
-	case EXI_INTEGER_64:
-		if (iv->val.int64 < 0) {
-			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
-		}
-		errn = encodeUnsignedInteger64(stream, (uint64_t)(iv->val.int64));
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE;
-		break;
-	}
-
-	return errn;
-}
-
-/**
- * Encode an arbitrary precision non negative integer using a sequence of
- * octets. The most significant bit of the last octet is set to zero to
- * indicate sequence termination. Only seven bits per octet are used to
- * store the integer's value.
- */
-int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n) {
-	int errn = 0;
-	if (n < 128) {
-		/* write byte as is */
-		errn = encode(stream, (uint8_t) n);
-	} else {
-		uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n);
-
-		switch (n7BitBlocks) {
-		case 5:
-			errn = encode(stream, (uint8_t) (128 | n));
-			n = n >> 7;
-			if (errn != 0) {
-				break;
-			}
-			/* no break */
-		case 4:
-			errn = encode(stream, (uint8_t) (128 | n));
-			n = n >> 7;
-			if (errn != 0) {
-				break;
-			}
-			/* no break */
-		case 3:
-			errn = encode(stream, (uint8_t) (128 | n));
-			n = n >> 7;
-			if (errn != 0) {
-				break;
-			}
-			/* no break */
-		case 2:
-			errn = encode(stream, (uint8_t) (128 | n));
-			n = n >> 7;
-			if (errn != 0) {
-				break;
-			}
-			/* no break */
-		case 1:
-			/* 0 .. 7 (last byte) */
-			errn = encode(stream, (uint8_t) (0 | n));
-			/* no break */
-		}
-	}
-
-	return errn;
-}
-
-/**
- * Encode an arbitrary precision non negative integer using a sequence of
- * octets. The most significant bit of the last octet is set to zero to
- * indicate sequence termination. Only seven bits per octet are used to
- * store the integer's value.
- */
-int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n) {
-	int errn = 0;
-	uint8_t lastEncode = (uint8_t) n;
-	n >>= 7;
-
-	while (n != 0 && errn == 0) {
-		errn = encode(stream, lastEncode | 128);
-		lastEncode = (uint8_t) n;
-		n >>= 7;
-	}
-
-	if (errn == 0) {
-		errn = encode(stream, lastEncode);
-	}
-
-	return errn;
-}
-
-int encodeInteger(bitstream_t* stream, exi_integer_t* iv) {
-	int errn = 0;
-	switch (iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		errn = encodeInteger32(stream, iv->val.uint8);
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		errn = encodeInteger32(stream, iv->val.uint16);
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		errn = encodeInteger64(stream, iv->val.uint32);
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		errn = encodeInteger64(stream, (int64_t)(iv->val.uint64));
-		break;
-		/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		errn = encodeInteger32(stream, iv->val.int8);
-		break;
-	case EXI_INTEGER_16:
-		errn = encodeInteger32(stream, iv->val.int16);
-		break;
-	case EXI_INTEGER_32:
-		errn = encodeInteger32(stream, iv->val.int32);
-		break;
-	case EXI_INTEGER_64:
-		errn = encodeInteger64(stream, iv->val.int64);
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE;
-		break;
-	}
-
-	return errn;
-}
-
-/**
- * Encode an arbitrary precision integer using a sign bit followed by a
- * sequence of octets. The most significant bit of the last octet is set to
- * zero to indicate sequence termination. Only seven bits per octet are used
- * to store the integer's value.
- */
-int encodeInteger32(bitstream_t* stream, int32_t n) {
-	int errn;
-	/* signalize sign */
-	if (n < 0) {
-		errn = encodeBoolean(stream, 1);
-		/* For negative values, the Unsigned Integer holds the
-		 * magnitude of the value minus 1 */
-		n = (-n) - 1;
-	} else {
-		errn = encodeBoolean(stream, 0);
-	}
-	if (errn == 0) {
-		errn = encodeUnsignedInteger32(stream, (uint32_t)n);
-	}
-	return errn;
-}
-
-/**
- * Encode an arbitrary precision integer using a sign bit followed by a
- * sequence of octets. The most significant bit of the last octet is set to
- * zero to indicate sequence termination. Only seven bits per octet are used
- * to store the integer's value.
- */
-int 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) {
-		errn = encodeUnsignedInteger64(stream, (uint64_t)n);
-	}
-	return errn;
-}
-
-/**
- * The Float datatype representation is two consecutive Integers.
- * The first Integer represents the mantissa of the floating point
- * number and the second Integer represents the base-10 exponent
- * of the floating point number.
- */
-int encodeFloat(bitstream_t* stream, exi_float_me_t* f) {
-	int errn = encodeInteger64(stream, f->mantissa);
-	if (errn == 0) {
-		errn = encodeInteger32(stream, f->exponent);
-	}
-	return errn;
-}
-
-/**
- * Encode a decimal represented as a Boolean sign followed by two Unsigned
- * Integers. A sign value of zero (0) is used to represent positive Decimal
- * values and a sign value of one (1) is used to represent negative Decimal
- * values The first Integer represents the integral portion of the Decimal
- * value. The second positive integer represents the fractional portion of
- * the decimal with the digits in reverse order to preserve leading zeros.
- */
-int encodeDecimal(bitstream_t* stream, exi_decimal_t* d) {
-	/* sign, integral, reverse fractional */
-	int errn = encodeBoolean(stream, d->negative);
-	if (errn == 0) {
-		errn = encodeUnsignedInteger(stream, &d->integral);
-		if (errn == 0) {
-			errn = encodeUnsignedInteger(stream, &d->reverseFraction);
-		}
-	}
-	return errn;
-}
-
-/**
- * Encode a length prefixed sequence of characters.
- */
-int encodeString(bitstream_t* stream, exi_string_ucs_t* string) {
-	int errn = encodeUnsignedInteger32(stream, string->len);
-	if (errn == 0) {
-		errn = encodeUCSCharacters(stream, string->codepoints, string->len);
-	}
-	return errn;
-}
-
-static int _writeStringValueLocalHit(bitstream_t* stream, exi_state_t* state,
-		uint16_t qnameID, uint32_t localID) {
-	int errn;
-	uint16_t codingLength;
-
-	if(state->stringTable.sizeLocalStrings > qnameID) {
-		errn = exiGetCodingLength(state->stringTable.numberOfLocalStrings[qnameID],
-				&codingLength);
-		if (errn == 0) {
-			errn = encodeNBitUnsignedInteger(stream, codingLength, localID);
-		}
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-
-	return errn;
-}
-
-static int _writeStringValueGlobalHit(bitstream_t* stream, exi_state_t* state,
-		uint32_t globalID) {
-	int errn;
-	uint16_t codingLength;
-
-	errn = exiGetCodingLength(state->stringTable.numberOfGlobalStrings, &codingLength);
-	if (errn == 0) {
-		errn = encodeNBitUnsignedInteger(stream, codingLength, globalID);
-	}
-
-	return errn;
-}
-
-int encodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
-		exi_string_value_t* string) {
-	int errn;
-
-	switch (string->type) {
-	case EXI_STRING_VALUE_LOCAL_HIT:
-		errn = encodeUnsignedInteger32(stream, 0);
-		if (errn == 0) {
-			errn = _writeStringValueLocalHit(stream, state, qnameID,
-					string->localID);
-		}
-		break;
-	case EXI_STRING_VALUE_GLOBAL_HIT:
-		errn = encodeUnsignedInteger32(stream, 1);
-		if (errn == 0) {
-			errn = _writeStringValueGlobalHit(stream, state, string->globalID);
-		}
-		break;
-	case EXI_STRING_VALUE_MISS:
-		/* encode string as string table miss */
-		errn = encodeUnsignedInteger32(stream, (uint32_t)(string->miss.len + 2));
-		if (errn == 0) {
-			errn = encodeUCSCharacters(stream, string->miss.codepoints,
-					string->miss.len);
-			if (errn == 0) {
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-				/* If length L is greater than zero the string S is added */
-				if (string->miss.len > 0) {
-					/* After encoding the string value, it is added to both the
-					 * associated "local" value string table partition and the global
-					 * value string table partition */
-#if EXI_OPTION_VALUE_MAX_LENGTH < 0
-			errn = exi_v2g_AddStringValue(state, &(string->miss), qnameID);
-# else /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
-					if (string->miss.len <= EXI_OPTION_VALUE_MAX_LENGTH) {
-						errn = exi_v2g_AddStringValue(state, &(string->miss),
-								qnameID);
-					}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
-				}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-			}
-		}
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_STRING_VALUE_TYPE;
-		break;
-	}
-
-	return errn;
-}
-
-int encodeRCSStringValue(bitstream_t* stream, exi_state_t* state,
-		uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* string) {
-	unsigned int i;
-	int errn;
-	uint32_t k;
-
-	switch (string->type) {
-	case EXI_STRING_VALUE_LOCAL_HIT:
-		errn = encodeUnsignedInteger32(stream, 0);
-		if (errn == 0) {
-			errn = _writeStringValueLocalHit(stream, state, qnameID,
-					string->localID);
-		}
-		break;
-	case EXI_STRING_VALUE_GLOBAL_HIT:
-		errn = encodeUnsignedInteger32(stream, 1);
-		if (errn == 0) {
-			errn = _writeStringValueGlobalHit(stream, state, string->globalID);
-		}
-		break;
-	case EXI_STRING_VALUE_MISS:
-		/* encode string as string table miss */
-		errn = encodeUnsignedInteger32(stream, (uint32_t)(string->miss.len + 2));
-		if (errn == 0) {
-			for (i = 0; i < string->miss.len && errn == 0; i++) {
-				for (k = 0; k < rcs->size && errn == 0; k++) {
-					if (rcs->codepoints[k] == string->miss.codepoints[i]) {
-						errn = encodeNBitUnsignedInteger(stream, rcs->codingLength,
-								k);
-						break; /* break inner for loop */
-					}
-				}
-			}
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-			/* If length L is greater than zero the string S is added */
-			if (errn == 0 && string->miss.len > 0) {
-				/* After encoding the string value, it is added to both the
-				 * associated "local" value string table partition and the global
-				 * value string table partition */
-#if EXI_OPTION_VALUE_MAX_LENGTH < 0
-				errn = exi_v2g_AddStringValue(state, &(string->miss), qnameID);
-#else /* EXI_OPTION_VALUE_MAX_LENGTH < 0 */
-				if (string->miss.len <= EXI_OPTION_VALUE_MAX_LENGTH) {
-					errn = exi_v2g_AddStringValue(state, &(string->miss),
-							qnameID);
-				}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0 */
-			}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-		}
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_STRING_VALUE_TYPE;
-		break;
-	}
-
-	return errn;
-}
-
-/**
- * Encode a sequence of characters according to a given length.
- * Each character is represented by its UCS [ISO/IEC 10646]
- * code point encoded as an Unsigned Integer
- */
-int encodeUCSCharacters(bitstream_t* stream, uint32_t* chars, uint16_t len) {
-	unsigned int i;
-	int errn = 0;
-	for (i = 0; i < len && errn == 0; i++) {
-		errn = encodeUnsignedInteger32(stream, chars[i]);
-	}
-	return errn;
-}
-
-/**
- * Encode a binary value as a length-prefixed sequence of octets.
- */
-int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes) {
-	unsigned int i;
-	int errn = encodeUnsignedInteger32(stream, bytes->len);
-
-	for (i = 0; i < bytes->len && errn == 0; i++) {
-		errn = encode(stream, bytes->data[i]);
-	}
-	return errn;
-}
-
-/**
- * Encode a datetime representation which is a sequence of values
- * representing the individual components of the Date-Time
- */
-int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime) {
-	int errn = 0;
-	switch (datetime->type) {
-	case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */
-		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
-		break;
-	case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */
-	case EXI_DATETIME_DATE: /* Year, MonthDay, [TimeZone] */
-		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
-		if (errn == 0) {
-			errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
-					datetime->monthDay);
-		}
-		break;
-	case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */
-		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
-		if (errn == 0) {
-			errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
-					datetime->monthDay);
-			if (errn != 0) {
-				break;
-			}
-		}
-		/* no break */
-	case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */
-		errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME,
-				datetime->time);
-		if (errn == 0) {
-			if (datetime->presenceFractionalSecs) {
-				errn = encodeBoolean(stream, 1);
-				if (errn == 0) {
-					errn = encodeUnsignedInteger32(stream, datetime->fractionalSecs);
-				}
-			} else {
-				errn = encodeBoolean(stream, 0);
-			}
-		}
-		break;
-	case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */
-	case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */
-	case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */
-		errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
-				datetime->monthDay);
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_DATETIME_TYPE;
-		break;
-	}
-	if (errn == 0) {
-		/* [TimeZone] */
-		if (datetime->presenceTimezone) {
-			errn = encodeBoolean(stream, 1);
-			if (errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE,
-						datetime->timezone + DATETIME_TIMEZONE_OFFSET_IN_MINUTES);
-			}
-		} else {
-			errn = encodeBoolean(stream, 0);
-		}
-	}
-
-	return errn;
-}
-
-#endif
-
+
+
+#include "EncoderChannel.h"
+#include "EXIOptions.h"
+#include "BitOutputStream.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+#include "MethodsBag.h"
+/*#include "v2gEXICoder.h"*/
+
+#include "StringValueTable.h"
+
+#ifndef ABSTRACT_ENCODER_CHANNEL_C
+#define ABSTRACT_ENCODER_CHANNEL_C
+
+int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) {
+	int errn = 0;
+	switch (iv->type) {
+	/* Unsigned Integer */
+	case EXI_UNSIGNED_INTEGER_8:
+		errn = encodeUnsignedInteger32(stream, iv->val.uint8);
+		break;
+	case EXI_UNSIGNED_INTEGER_16:
+		errn = encodeUnsignedInteger32(stream, iv->val.uint16);
+		break;
+	case EXI_UNSIGNED_INTEGER_32:
+		errn = encodeUnsignedInteger32(stream, iv->val.uint32);
+		break;
+	case EXI_UNSIGNED_INTEGER_64:
+		errn = encodeUnsignedInteger64(stream, iv->val.uint64);
+		break;
+		/* (Signed) Integer */
+	case EXI_INTEGER_8:
+		if (iv->val.int8 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int8));
+		break;
+	case EXI_INTEGER_16:
+		if (iv->val.int16 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int16));
+		break;
+	case EXI_INTEGER_32:
+		if (iv->val.int32 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int32));
+		break;
+	case EXI_INTEGER_64:
+		if (iv->val.int64 < 0) {
+			return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE;
+		}
+		errn = encodeUnsignedInteger64(stream, (uint64_t)(iv->val.int64));
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE;
+		break;
+	}
+
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedInteger16(bitstream_t* stream, uint16_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 3:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 2:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 1:
+			/* 0 .. 7 (last byte) */
+			errn = encode(stream, (uint8_t) (0 | n));
+			/* no break */
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n) {
+	int errn = 0;
+	if (n < 128) {
+		/* write byte as is */
+		errn = encode(stream, (uint8_t) n);
+	} else {
+		uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n);
+
+		switch (n7BitBlocks) {
+		case 5:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 4:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 3:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 2:
+			errn = encode(stream, (uint8_t) (128 | n));
+			n = n >> 7;
+			if (errn != 0) {
+				break;
+			}
+			/* no break */
+		case 1:
+			/* 0 .. 7 (last byte) */
+			errn = encode(stream, (uint8_t) (0 | n));
+			/* no break */
+		}
+	}
+
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision non negative integer using a sequence of
+ * octets. The most significant bit of the last octet is set to zero to
+ * indicate sequence termination. Only seven bits per octet are used to
+ * store the integer's value.
+ */
+int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n) {
+	int errn = 0;
+	uint8_t lastEncode = (uint8_t) n;
+	n >>= 7;
+
+	while (n != 0 && errn == 0) {
+		errn = encode(stream, lastEncode | 128);
+		lastEncode = (uint8_t) n;
+		n >>= 7;
+	}
+
+	if (errn == 0) {
+		errn = encode(stream, lastEncode);
+	}
+
+	return errn;
+}
+
+int encodeInteger(bitstream_t* stream, exi_integer_t* iv) {
+	int errn = 0;
+	switch (iv->type) {
+	/* Unsigned Integer */
+	case EXI_UNSIGNED_INTEGER_8:
+		errn = encodeInteger32(stream, iv->val.uint8);
+		break;
+	case EXI_UNSIGNED_INTEGER_16:
+		errn = encodeInteger32(stream, iv->val.uint16);
+		break;
+	case EXI_UNSIGNED_INTEGER_32:
+		errn = encodeInteger64(stream, iv->val.uint32);
+		break;
+	case EXI_UNSIGNED_INTEGER_64:
+		errn = encodeInteger64(stream, (int64_t)(iv->val.uint64));
+		break;
+		/* (Signed) Integer */
+	case EXI_INTEGER_8:
+		errn = encodeInteger32(stream, iv->val.int8);
+		break;
+	case EXI_INTEGER_16:
+		errn = encodeInteger32(stream, iv->val.int16);
+		break;
+	case EXI_INTEGER_32:
+		errn = encodeInteger32(stream, iv->val.int32);
+		break;
+	case EXI_INTEGER_64:
+		errn = encodeInteger64(stream, iv->val.int64);
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE;
+		break;
+	}
+
+	return errn;
+}
+
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int encodeInteger16(bitstream_t* stream, int16_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 = (int16_t)((-n) - 1);
+	} else {
+		errn = encodeBoolean(stream, 0);
+	}
+	if (errn == 0) {
+		errn = encodeUnsignedInteger16(stream, (uint16_t)n);
+	}
+	return errn;
+}
+
+
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int encodeInteger32(bitstream_t* stream, int32_t n) {
+	int errn;
+	/* signalize sign */
+	if (n < 0) {
+		errn = encodeBoolean(stream, 1);
+		/* For negative values, the Unsigned Integer holds the
+		 * magnitude of the value minus 1 */
+		n = (-n) - 1;
+	} else {
+		errn = encodeBoolean(stream, 0);
+	}
+	if (errn == 0) {
+		errn = encodeUnsignedInteger32(stream, (uint32_t)n);
+	}
+	return errn;
+}
+
+/**
+ * Encode an arbitrary precision integer using a sign bit followed by a
+ * sequence of octets. The most significant bit of the last octet is set to
+ * zero to indicate sequence termination. Only seven bits per octet are used
+ * to store the integer's value.
+ */
+int 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) {
+		errn = encodeUnsignedInteger64(stream, (uint64_t)n);
+	}
+	return errn;
+}
+
+/**
+ * The Float datatype representation is two consecutive Integers.
+ * The first Integer represents the mantissa of the floating point
+ * number and the second Integer represents the base-10 exponent
+ * of the floating point number.
+ */
+int encodeFloat(bitstream_t* stream, exi_float_me_t* f) {
+	int errn = encodeInteger64(stream, f->mantissa);
+	if (errn == 0) {
+		errn = encodeInteger32(stream, f->exponent);
+	}
+	return errn;
+}
+
+/**
+ * Encode a decimal represented as a Boolean sign followed by two Unsigned
+ * Integers. A sign value of zero (0) is used to represent positive Decimal
+ * values and a sign value of one (1) is used to represent negative Decimal
+ * values The first Integer represents the integral portion of the Decimal
+ * value. The second positive integer represents the fractional portion of
+ * the decimal with the digits in reverse order to preserve leading zeros.
+ */
+int encodeDecimal(bitstream_t* stream, exi_decimal_t* d) {
+	/* sign, integral, reverse fractional */
+	int errn = encodeBoolean(stream, d->negative);
+	if (errn == 0) {
+		errn = encodeUnsignedInteger(stream, &d->integral);
+		if (errn == 0) {
+			errn = encodeUnsignedInteger(stream, &d->reverseFraction);
+		}
+	}
+	return errn;
+}
+
+/**
+ * Encode a length prefixed sequence of characters.
+ */
+int encodeString(bitstream_t* stream, exi_string_t* string) {
+	int errn = encodeUnsignedInteger32(stream, string->len);
+	if (errn == 0) {
+		errn = encodeCharacters(stream, string->characters, string->len);
+	}
+	return errn;
+}
+
+static int _writeStringValueLocalHit(bitstream_t* stream, exi_state_t* state,
+		uint16_t qnameID, uint32_t localID) {
+	int errn;
+	uint16_t codingLength;
+
+	if(state->stringTable.sizeLocalStrings > qnameID) {
+		errn = exiGetCodingLength(state->stringTable.numberOfLocalStrings[qnameID],
+				&codingLength);
+		if (errn == 0) {
+			errn = encodeNBitUnsignedInteger(stream, codingLength, localID);
+		}
+	} else {
+		errn = EXI_ERROR_OUT_OF_BOUNDS;
+	}
+
+	return errn;
+}
+
+static int _writeStringValueGlobalHit(bitstream_t* stream, exi_state_t* state,
+		uint32_t globalID) {
+	int errn;
+	uint16_t codingLength;
+
+	errn = exiGetCodingLength(state->stringTable.numberOfGlobalStrings, &codingLength);
+	if (errn == 0) {
+		errn = encodeNBitUnsignedInteger(stream, codingLength, globalID);
+	}
+
+	return errn;
+}
+
+int encodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
+		exi_string_value_t* string) {
+	int errn;
+
+	switch (string->type) {
+	case EXI_STRING_VALUE_LOCAL_HIT:
+		errn = encodeUnsignedInteger32(stream, 0);
+		if (errn == 0) {
+			errn = _writeStringValueLocalHit(stream, state, qnameID,
+					string->localID);
+		}
+		break;
+	case EXI_STRING_VALUE_GLOBAL_HIT:
+		errn = encodeUnsignedInteger32(stream, 1);
+		if (errn == 0) {
+			errn = _writeStringValueGlobalHit(stream, state, string->globalID);
+		}
+		break;
+	case EXI_STRING_VALUE_MISS:
+		/* encode string as string table miss */
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(string->miss.len + 2));
+		if (errn == 0) {
+			errn = encodeCharacters(stream, string->miss.characters,
+					string->miss.len);
+			if (errn == 0) {
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
+#if EXI_OPTION_VALUE_MAX_LENGTH != 0
+				/* If length L is greater than zero the string S is added */
+				if (string->miss.len > 0) {
+					/* After encoding the string value, it is added to both the
+					 * associated "local" value string table partition and the global
+					 * value string table partition */
+#if EXI_OPTION_VALUE_MAX_LENGTH < 0
+			errn = exiAddStringValue(&state->stringTable, &(string->miss), qnameID);
+# else /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
+					if (string->miss.len <= EXI_OPTION_VALUE_MAX_LENGTH) {
+						errn = exiAddStringValue(&state->stringTable, &(string->miss),
+								qnameID);
+					}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0  */
+				}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
+			}
+		}
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_STRING_VALUE_TYPE;
+		break;
+	}
+
+	return errn;
+}
+
+int encodeRCSStringValue(bitstream_t* stream, exi_state_t* state,
+		uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* string) {
+	unsigned int i;
+	int errn;
+	uint32_t k;
+
+	switch (string->type) {
+	case EXI_STRING_VALUE_LOCAL_HIT:
+		errn = encodeUnsignedInteger32(stream, 0);
+		if (errn == 0) {
+			errn = _writeStringValueLocalHit(stream, state, qnameID,
+					string->localID);
+		}
+		break;
+	case EXI_STRING_VALUE_GLOBAL_HIT:
+		errn = encodeUnsignedInteger32(stream, 1);
+		if (errn == 0) {
+			errn = _writeStringValueGlobalHit(stream, state, string->globalID);
+		}
+		break;
+	case EXI_STRING_VALUE_MISS:
+		/* encode string as string table miss */
+		errn = encodeUnsignedInteger32(stream, (uint32_t)(string->miss.len + 2));
+		if (errn == 0) {
+			for (i = 0; i < string->miss.len && errn == 0; i++) {
+				for (k = 0; k < rcs->size && errn == 0; k++) {
+					if (rcs->characters[k] == string->miss.characters[i]) {
+						errn = encodeNBitUnsignedInteger(stream, rcs->codingLength,
+								k);
+						break; /* break inner for loop */
+					}
+				}
+			}
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
+#if EXI_OPTION_VALUE_MAX_LENGTH != 0
+			/* If length L is greater than zero the string S is added */
+			if (errn == 0 && string->miss.len > 0) {
+				/* After encoding the string value, it is added to both the
+				 * associated "local" value string table partition and the global
+				 * value string table partition */
+#if EXI_OPTION_VALUE_MAX_LENGTH < 0
+				errn = exiAddStringValue(&state->stringTable, &(string->miss), qnameID);
+#else /* EXI_OPTION_VALUE_MAX_LENGTH < 0 */
+				if (string->miss.len <= EXI_OPTION_VALUE_MAX_LENGTH) {
+					errn = exiAddStringValue(&state->stringTable, &(string->miss),
+							qnameID);
+				}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH < 0 */
+			}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
+		}
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_STRING_VALUE_TYPE;
+		break;
+	}
+
+	return errn;
+}
+
+/**
+ * Encode a sequence of characters according to a given length.
+ * Each character is represented by its UCS [ISO/IEC 10646]
+ * code point encoded as an Unsigned Integer
+ */
+int encodeCharacters(bitstream_t* stream, exi_string_character_t* chars, uint16_t len) {
+	unsigned int i;
+	int errn = 0;
+	for (i = 0; i < len && errn == 0; i++) {
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+		errn = encode(stream, (uint8_t)chars[i]);
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+		errn = encodeUnsignedInteger32(stream, chars[i]);
+#endif /* STRING_REPRESENTATION_UCS */
+	}
+	return errn;
+}
+
+
+int encodeRCSCharacters(bitstream_t* stream, exi_string_character_t* chars, uint16_t len, uint16_t rcsCodeLength, uint16_t rcsSize, const exi_string_character_t rcsSet[]) {
+	unsigned int i;
+	int k;
+	int errn = 0;
+	int rcsCode = -1;
+
+	for (i = 0; i < len && errn == 0; i++) {
+		/* try to find short code */
+		rcsCode = -1;
+		for(k=0; k<rcsSize && rcsCode < 0; k++) {
+			if(rcsSet[k] == chars[i]) {
+				rcsCode = k;
+			}
+		}
+
+		if( rcsCode < 0) {
+			/* RCS mis-match */
+			errn = encodeNBitUnsignedInteger(stream, rcsCodeLength, rcsSize);
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+			errn = encode(stream, (uint8_t)chars[i]);
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+			errn = encodeUnsignedInteger32(stream, chars[i]);
+#endif /* STRING_REPRESENTATION_UCS */
+
+		} else {
+			/* RCS match */
+			errn = encodeNBitUnsignedInteger(stream, rcsCodeLength, (uint32_t)rcsCode);
+		}
+	}
+	return errn;
+}
+
+/**
+ * Encode a binary value as a length-prefixed sequence of octets.
+ */
+int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes) {
+	int errn = encodeUnsignedInteger32(stream, bytes->len);
+
+	if(errn == 0) {
+		errn = encodeBytes(stream, bytes->data, bytes->len);
+	}
+
+	return errn;
+}
+
+int encodeBytes(bitstream_t* stream, uint8_t* data, uint16_t len) {
+	unsigned int i;
+	int errn = 0;
+
+	for (i = 0; i < len && errn == 0; i++) {
+		errn = encode(stream, data[i]);
+	}
+	return errn;
+}
+
+/**
+ * Encode a datetime representation which is a sequence of values
+ * representing the individual components of the Date-Time
+ */
+int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime) {
+	int errn = 0;
+	switch (datetime->type) {
+	case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */
+		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
+		break;
+	case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */
+	case EXI_DATETIME_DATE: /* Year, MonthDay, [TimeZone] */
+		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
+		if (errn == 0) {
+			errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
+					datetime->monthDay);
+		}
+		break;
+	case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */
+		errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET);
+		if (errn == 0) {
+			errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
+					datetime->monthDay);
+			if (errn != 0) {
+				break;
+			}
+		}
+		/* no break */
+	case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */
+		errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME,
+				datetime->time);
+		if (errn == 0) {
+			if (datetime->presenceFractionalSecs) {
+				errn = encodeBoolean(stream, 1);
+				if (errn == 0) {
+					errn = encodeUnsignedInteger32(stream, datetime->fractionalSecs);
+				}
+			} else {
+				errn = encodeBoolean(stream, 0);
+			}
+		}
+		break;
+	case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */
+	case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */
+	case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */
+		errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY,
+				datetime->monthDay);
+		break;
+	default:
+		errn = EXI_UNSUPPORTED_DATETIME_TYPE;
+		break;
+	}
+	if (errn == 0) {
+		/* [TimeZone] */
+		if (datetime->presenceTimezone) {
+			errn = encodeBoolean(stream, 1);
+			if (errn == 0) {
+				errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE,
+						datetime->timezone + DATETIME_TIMEZONE_OFFSET_IN_MINUTES);
+			}
+		} else {
+			errn = encodeBoolean(stream, 0);
+		}
+	}
+
+	return errn;
+}
+
+#endif
+

+ 52 - 53
src/codec/BitDecoderChannel.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,60 +18,60 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "DecoderChannel.h"
-#include "BitInputStream.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-
-#ifndef BIT_DECODER_CHANNEL_C
-#define BIT_DECODER_CHANNEL_C
-
-
-#if EXI_OPTION_ALIGNMENT == BIT_PACKED
-
-int decode(bitstream_t* stream, uint8_t* b) {
-	uint32_t bb;
-	int errn =  readBits(stream, 8, &bb);
-	if (errn == 0) {
-		if (bb > 256) {
-			errn = EXI_ERROR_UNEXPECTED_BYTE_VALUE;
-		} else {
-			*b = (uint8_t)bb;
-		}
-	}
-
-	return errn;
-}
-
-int decodeBoolean(bitstream_t* stream, int* b) {
-	uint32_t ub;
-	int errn = readBits(stream, 1, &ub);
-	*b = (ub == 0) ? 0 : 1;
-	return errn;
-}
-
-int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32) {
-	int errn = 0;
-	if (nbits == 0) {
-		*uint32 = 0;
-	} else {
-		errn= readBits(stream, nbits, uint32);
-	}
-	return errn;
-}
-
-#endif
-
-#endif
-
+
+
+#include "DecoderChannel.h"
+#include "BitInputStream.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BIT_DECODER_CHANNEL_C
+#define BIT_DECODER_CHANNEL_C
+
+
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+
+int decode(bitstream_t* stream, uint8_t* b) {
+	uint32_t bb;
+	int errn =  readBits(stream, 8, &bb);
+	if (errn == 0) {
+		if (bb > 256) {
+			errn = EXI_ERROR_UNEXPECTED_BYTE_VALUE;
+		} else {
+			*b = (uint8_t)bb;
+		}
+	}
+
+	return errn;
+}
+
+int decodeBoolean(bitstream_t* stream, int* b) {
+	uint32_t ub;
+	int errn = readBits(stream, 1, &ub);
+	*b = (ub == 0) ? 0 : 1;
+	return errn;
+}
+
+int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32) {
+	int errn = 0;
+	if (nbits == 0) {
+		*uint32 = 0;
+	} else {
+		errn= readBits(stream, nbits, uint32);
+	}
+	return errn;
+}
+
+#endif
+
+#endif
+

+ 67 - 68
src/codec/BitEncoderChannel.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,75 +18,75 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "EncoderChannel.h"
-
-#include "EXIOptions.h"
-#include "BitOutputStream.h"
-#include "EXITypes.h"
-
-#ifndef BIT_ENCODER_CHANNEL_C
-#define BIT_ENCODER_CHANNEL_C
-
-#if EXI_OPTION_ALIGNMENT == BIT_PACKED
-
-
-int encode(bitstream_t* stream, uint8_t b) {
-	return writeBits(stream, 8, b);
-}
-
-/**
- * Encode a single boolean value. A false value is encoded as bit 0 and true
- * value is encode as bit 1.
- */
-int encodeBoolean(bitstream_t* stream, int b) {
-	uint8_t val = b ? 1 : 0;
-	return writeBits(stream, 1, val);
-}
-
-
-/**
- * Encode n-bit unsigned integer. The n least significant bits of parameter
- * b starting with the most significant, i.e. from left to right.
- */
-int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val)  {
-	int errn = 0;
-	if (nbits > 0) {
-		errn = writeBits(stream, nbits, val);
-	}
-	return errn;
-}
-
-/**
- * Flush underlying bit output stream.
- */
-int encodeFinish(bitstream_t* stream) {
-	return flush(stream);
-}
-
-
-#endif /* alignment */
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+#include "EncoderChannel.h"
+
+#include "EXIOptions.h"
+#include "BitOutputStream.h"
+#include "EXITypes.h"
+
+#ifndef BIT_ENCODER_CHANNEL_C
+#define BIT_ENCODER_CHANNEL_C
+
+#if EXI_OPTION_ALIGNMENT == BIT_PACKED
+
+
+int encode(bitstream_t* stream, uint8_t b) {
+	return writeBits(stream, 8, b);
+}
+
+/**
+ * Encode a single boolean value. A false value is encoded as bit 0 and true
+ * value is encode as bit 1.
+ */
+int encodeBoolean(bitstream_t* stream, int b) {
+	uint8_t val = b ? 1 : 0;
+	return writeBits(stream, 1, val);
+}
+
+
+/**
+ * Encode n-bit unsigned integer. The n least significant bits of parameter
+ * b starting with the most significant, i.e. from left to right.
+ */
+int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val)  {
+	int errn = 0;
+	if (nbits > 0) {
+		errn = writeBits(stream, nbits, val);
+	}
+	return errn;
+}
+
+/**
+ * Flush underlying bit output stream.
+ */
+int encodeFinish(bitstream_t* stream) {
+	return flush(stream);
+}
+
+
+#endif /* alignment */
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+

+ 80 - 81
src/codec/BitInputStream.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,88 +18,88 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "BitInputStream.h"
-#include "EXIConfig.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-
-#ifndef BIT_INPUT_STREAM_C
-#define BIT_INPUT_STREAM_C
-
-/* internal method to (re)fill buffer */
-static int readBuffer(bitstream_t* stream)
-{
-	int errn = 0;
-	if(stream->capacity==0)
-	{
-#if EXI_STREAM == BYTE_ARRAY
-		if ( (*stream->pos) < stream->size ) {
-			stream->buffer = stream->data[(*stream->pos)++];
-			stream->capacity = BITS_IN_BYTE;
-		} else {
-			errn = EXI_ERROR_INPUT_STREAM_EOF;
-		}
-#endif
-#if EXI_STREAM == FILE_STREAM
-		stream->buffer = (uint8_t)(getc(stream->file));
-		/* EOF cannot be used, 0xFF valid value */
-		if ( feof(stream->file) || ferror(stream->file) ) {
-			errn = EXI_ERROR_INPUT_STREAM_EOF;
-		} else {
-			stream->capacity = BITS_IN_BYTE;
-		}
-#endif
-	}
-	return errn;
-}
-
-int readBits(bitstream_t* stream, uint16_t num_bits, uint32_t* b)
-{
-	int errn = readBuffer(stream);
-	if (errn == 0) {
-		/* read the bits in one step */
-		if(num_bits <= stream->capacity) {
-			stream->capacity = (uint8_t)(stream->capacity - num_bits);
-			*b = (uint32_t)((stream->buffer >> stream->capacity) & (0xff >> (BITS_IN_BYTE - num_bits)));
-		} else {
-			/* read bits as much as possible */
-			*b = (uint32_t)(stream->buffer & (0xff >> (BITS_IN_BYTE - stream->capacity)));
-			num_bits = (uint16_t)(num_bits - stream->capacity);
-			stream->capacity = 0;
-
-			/* read whole bytes */
-			while(errn == 0 && num_bits >= 8)
-			{
-				errn = readBuffer(stream);
-				*b = ((*b) << BITS_IN_BYTE) | stream->buffer;
-				num_bits = (uint16_t)(num_bits - BITS_IN_BYTE);
-				stream->capacity = 0;
-			}
-
-			/* read the spare bits in the buffer */
-			if(errn == 0 && num_bits > 0)
-			{
-				errn = readBuffer(stream);
-				if (errn == 0) {
-					*b = ( (*b) << num_bits) | (uint8_t)(stream->buffer  >> (BITS_IN_BYTE - num_bits)) ;
-					stream->capacity = (uint8_t)(BITS_IN_BYTE - num_bits);
-				}
-			}
-		}
-	}
-
-	return errn;
-}
-
-#endif
+
+
+#include "BitInputStream.h"
+#include "EXIConfig.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BIT_INPUT_STREAM_C
+#define BIT_INPUT_STREAM_C
+
+/* internal method to (re)fill buffer */
+static int readBuffer(bitstream_t* stream)
+{
+	int errn = 0;
+	if(stream->capacity==0)
+	{
+#if EXI_STREAM == BYTE_ARRAY
+		if ( (*stream->pos) < stream->size ) {
+			stream->buffer = stream->data[(*stream->pos)++];
+			stream->capacity = BITS_IN_BYTE;
+		} else {
+			errn = EXI_ERROR_INPUT_STREAM_EOF;
+		}
+#endif
+#if EXI_STREAM == FILE_STREAM
+		stream->buffer = (uint8_t)(getc(stream->file));
+		/* EOF cannot be used, 0xFF valid value */
+		if ( feof(stream->file) || ferror(stream->file) ) {
+			errn = EXI_ERROR_INPUT_STREAM_EOF;
+		} else {
+			stream->capacity = BITS_IN_BYTE;
+		}
+#endif
+	}
+	return errn;
+}
+
+int readBits(bitstream_t* stream, uint16_t num_bits, uint32_t* b)
+{
+	int errn = readBuffer(stream);
+	if (errn == 0) {
+		/* read the bits in one step */
+		if(num_bits <= stream->capacity) {
+			stream->capacity = (uint8_t)(stream->capacity - num_bits);
+			*b = (uint32_t)((stream->buffer >> stream->capacity) & (0xff >> (BITS_IN_BYTE - num_bits)));
+		} else {
+			/* read bits as much as possible */
+			*b = (uint32_t)(stream->buffer & (0xff >> (BITS_IN_BYTE - stream->capacity)));
+			num_bits = (uint16_t)(num_bits - stream->capacity);
+			stream->capacity = 0;
+
+			/* read whole bytes */
+			while(errn == 0 && num_bits >= 8)
+			{
+				errn = readBuffer(stream);
+				*b = ((*b) << BITS_IN_BYTE) | stream->buffer;
+				num_bits = (uint16_t)(num_bits - BITS_IN_BYTE);
+				stream->capacity = 0;
+			}
+
+			/* read the spare bits in the buffer */
+			if(errn == 0 && num_bits > 0)
+			{
+				errn = readBuffer(stream);
+				if (errn == 0) {
+					*b = ( (*b) << num_bits) | (uint8_t)(stream->buffer  >> (BITS_IN_BYTE - num_bits)) ;
+					stream->capacity = (uint8_t)(BITS_IN_BYTE - num_bits);
+				}
+			}
+		}
+	}
+
+	return errn;
+}
+
+#endif

+ 42 - 44
src/codec/BitInputStream.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,51 +18,50 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	BitInputStream.h
- * \brief 	Bit Input Stream
- *
- * 			Read bits and bytes from an underlying input stream.
- *
- */
-
-#include "EXITypes.h"
-
-#ifndef BIT_INPUT_STREAM_H
-#define BIT_INPUT_STREAM_H
-
-/**
- * \brief 		Read bits
- *
- * 				Read the next num_bits bits and returns result an integer.
- *
- * \param       stream   		Input Stream
- * \param       num_bits		Number of bits
- * \param       b		   		Integer value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int readBits(bitstream_t* stream, uint16_t num_bits, uint32_t* b);
-
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
+
+
+/**
+ * \file 	BitInputStream.h
+ * \brief 	Bit Input Stream
+ *
+ * 			Read bits and bytes from an underlying input stream.
+ *
+ */
+
+#ifndef BIT_INPUT_STREAM_H
+#define BIT_INPUT_STREAM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+/**
+ * \brief 		Read bits
+ *
+ * 				Read the next num_bits bits and returns result an integer.
+ *
+ * \param       stream   		Input Stream
+ * \param       num_bits		Number of bits
+ * \param       b		   		Integer value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int readBits(bitstream_t* stream, uint16_t num_bits, uint32_t* b);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 99 - 100
src/codec/BitOutputStream.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,107 +18,107 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "BitOutputStream.h"
-#include "EXIConfig.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-
-#ifndef BIT_OUTPUT_STREAM_C
-#define BIT_OUTPUT_STREAM_C
-
-int writeBits(bitstream_t* stream, uint16_t nbits, uint32_t val) {
-	int errn = 0;
-	/*  is there enough space in the buffer */
-	if (nbits <= stream->capacity) {
-		/* all bits fit into the current buffer */
-		stream->buffer = (uint8_t)(stream->buffer << (nbits)) | (uint8_t)(val & (uint32_t)(0xff >> (uint32_t)(BITS_IN_BYTE - nbits)));
-		stream->capacity = (uint8_t)(stream->capacity - nbits);
-		/* if the buffer is full write byte */
-		if (stream->capacity == 0) {
-#if EXI_STREAM == BYTE_ARRAY
-			if ((*stream->pos) >= stream->size) {
-				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-			} else {
-				stream->data[(*stream->pos)++] = stream->buffer;
-			}
-#endif
-#if EXI_STREAM == FILE_STREAM
-			if ( putc(stream->buffer, stream->file) == EOF ) {
-				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-			}
-#endif
-			stream->capacity = BITS_IN_BYTE;
-			stream->buffer = 0;
-		}
-	} else {
-		/* the buffer is not enough
-		 * fill the buffer */
-		stream->buffer = (uint8_t)(stream->buffer << stream->capacity) |
-				( (uint8_t)(val >> (nbits - stream->capacity)) & (uint8_t)(0xff >> (BITS_IN_BYTE - stream->capacity)) );
-
-		nbits = (uint16_t)(nbits - stream->capacity);
-#if EXI_STREAM == BYTE_ARRAY
-		if ((*stream->pos) >= stream->size) {
-			errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-		} else {
-			stream->data[(*stream->pos)++] = stream->buffer;
-		}
-#endif
-#if EXI_STREAM == FILE_STREAM
-		if ( putc(stream->buffer, stream->file) == EOF ) {
-			errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-		}
-#endif
-		stream->buffer = 0;
-
-		/* write whole bytes */
-		while (errn == 0 && nbits >= BITS_IN_BYTE) {
-			nbits = (uint16_t)(nbits - BITS_IN_BYTE);
-#if EXI_STREAM == BYTE_ARRAY
-			if ((*stream->pos) >= stream->size) {
-				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-			} else {
-				stream->data[(*stream->pos)++] = (val >> (nbits));
-			}
-#endif
-#if EXI_STREAM == FILE_STREAM
-			if ( putc((int)(val >> (nbits)), stream->file) == EOF ) {
-				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-			}
-#endif
-		}
-
-		/* spared bits are kept in the buffer */
-		stream->buffer = (uint8_t)val; /* Note: the high bits will be shifted out during further filling */
-		stream->capacity = (uint8_t)(BITS_IN_BYTE - (nbits));
-	}
-
-	return errn;
-}
-
-/**
- * Flush output
- */
-int flush(bitstream_t* stream) {
-	int errn = 0;
-	if (stream->capacity == BITS_IN_BYTE) {
-		/* nothing to do, no bits in buffer */
-	} else {
-		errn = writeBits(stream, stream->capacity, 0);
-	}
-	return errn;
-}
-
-#endif
-
+
+
+#include "BitOutputStream.h"
+#include "EXIConfig.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BIT_OUTPUT_STREAM_C
+#define BIT_OUTPUT_STREAM_C
+
+int writeBits(bitstream_t* stream, uint16_t nbits, uint32_t val) {
+	int errn = 0;
+	/*  is there enough space in the buffer */
+	if (nbits <= stream->capacity) {
+		/* all bits fit into the current buffer */
+		stream->buffer = (uint8_t)(stream->buffer << (nbits)) | (uint8_t)(val & (uint32_t)(0xff >> (uint32_t)(BITS_IN_BYTE - nbits)));
+		stream->capacity = (uint8_t)(stream->capacity - nbits);
+		/* if the buffer is full write byte */
+		if (stream->capacity == 0) {
+#if EXI_STREAM == BYTE_ARRAY
+			if ((*stream->pos) >= stream->size) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			} else {
+				stream->data[(*stream->pos)++] = stream->buffer;
+			}
+#endif
+#if EXI_STREAM == FILE_STREAM
+			if ( putc(stream->buffer, stream->file) == EOF ) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			}
+#endif
+			stream->capacity = BITS_IN_BYTE;
+			stream->buffer = 0;
+		}
+	} else {
+		/* the buffer is not enough
+		 * fill the buffer */
+		stream->buffer = (uint8_t)(stream->buffer << stream->capacity) |
+				( (uint8_t)(val >> (nbits - stream->capacity)) & (uint8_t)(0xff >> (BITS_IN_BYTE - stream->capacity)) );
+
+		nbits = (uint16_t)(nbits - stream->capacity);
+#if EXI_STREAM == BYTE_ARRAY
+		if ((*stream->pos) >= stream->size) {
+			errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+		} else {
+			stream->data[(*stream->pos)++] = stream->buffer;
+		}
+#endif
+#if EXI_STREAM == FILE_STREAM
+		if ( putc(stream->buffer, stream->file) == EOF ) {
+			errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+		}
+#endif
+		stream->buffer = 0;
+
+		/* write whole bytes */
+		while (errn == 0 && nbits >= BITS_IN_BYTE) {
+			nbits = (uint16_t)(nbits - BITS_IN_BYTE);
+#if EXI_STREAM == BYTE_ARRAY
+			if ((*stream->pos) >= stream->size) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			} else {
+				stream->data[(*stream->pos)++] = (uint8_t)(val >> (nbits));
+			}
+#endif
+#if EXI_STREAM == FILE_STREAM
+			if ( putc((int)(val >> (nbits)), stream->file) == EOF ) {
+				errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+			}
+#endif
+		}
+
+		/* spared bits are kept in the buffer */
+		stream->buffer = (uint8_t)val; /* Note: the high bits will be shifted out during further filling */
+		stream->capacity = (uint8_t)(BITS_IN_BYTE - (nbits));
+	}
+
+	return errn;
+}
+
+/**
+ * Flush output
+ */
+int flush(bitstream_t* stream) {
+	int errn = 0;
+	if (stream->capacity == BITS_IN_BYTE) {
+		/* nothing to do, no bits in buffer */
+	} else {
+		errn = writeBits(stream, stream->capacity, 0);
+	}
+	return errn;
+}
+
+#endif
+

+ 60 - 61
src/codec/BitOutputStream.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,68 +18,68 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	BitOutputStream.h
- * \brief 	Bit Output Stream
- *
- * 			Write bits and bytes to an underlying output stream.
- *
- */
-
-#include <stdint.h>
-
-#include "EXITypes.h"
-
-#ifndef BIT_OUTPUT_STREAM_H
-#define BIT_OUTPUT_STREAM_H
-
-/**
- * \brief 		Write bits
- *
- * 				Write the n least significant bits of parameter b starting
- * 				with the most significant, i.e. from left to right.
- *
- * \param       stream   		Output Stream
- * \param       nbits			Number of bits
- * \param       bits		   	value
- * \return                  	Error-Code <> 0
- *
- */
-int writeBits(bitstream_t* stream, uint16_t nbits, uint32_t bits);
-
-
-/**
- * \brief 		Flush output
- *
- * 				If there are some unwritten bits, pad them if necessary and
- * 				write them out. Note that this method does flush the
- * 				underlying stream.
- *
- * \param       stream   		Output Stream
- * \return                  	Error-Code <> 0
- *
- */
-int flush(bitstream_t* stream);
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
+
+
+/**
+ * \file 	BitOutputStream.h
+ * \brief 	Bit Output Stream
+ *
+ * 			Write bits and bytes to an underlying output stream.
+ *
+ */
+
+#ifndef BIT_OUTPUT_STREAM_H
+#define BIT_OUTPUT_STREAM_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+/**
+ * \brief 		Write bits
+ *
+ * 				Write the n least significant bits of parameter b starting
+ * 				with the most significant, i.e. from left to right.
+ *
+ * \param       stream   		Output Stream
+ * \param       nbits			Number of bits
+ * \param       bits		   	value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int writeBits(bitstream_t* stream, uint16_t nbits, uint32_t bits);
+
+
+/**
+ * \brief 		Flush output
+ *
+ * 				If there are some unwritten bits, pad them if necessary and
+ * 				write them out. Note that this method does flush the
+ * 				underlying stream.
+ *
+ * \param       stream   		Output Stream
+ * \return                  	Error-Code <> 0
+ *
+ */
+int flush(bitstream_t* stream);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+

+ 68 - 69
src/codec/ByteDecoderChannel.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,76 +18,76 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "DecoderChannel.h"
-#include "EXIOptions.h"
-#include "BitInputStream.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-
-#ifndef BYTE_DECODER_CHANNEL_C
-#define BYTE_DECODER_CHANNEL_C
-
-
-#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
-
-int decode(bitstream_t* stream, uint8_t* b) {
-	int errn = 0;
-#if EXI_STREAM == BYTE_ARRAY
-	if ( (*stream->pos) < stream->size ) {
-		*b = stream->data[(*stream->pos)++];
-	} else {
-		errn = EXI_ERROR_INPUT_STREAM_EOF;
-	}
-#endif /* EXI_STREAM == BYTE_ARRAY */
-#if EXI_STREAM == FILE_STREAM
-	*b = (uint8_t)(getc(stream->file));
-	/* EOF cannot be used, 0xFF valid value */
-	if ( feof(stream->file) || ferror(stream->file) ) {
-		errn = EXI_ERROR_INPUT_STREAM_EOF;
-	}
-#endif /* EXI_STREAM == FILE_STREAM */
-
-	return errn;
-}
-
-int decodeBoolean(bitstream_t* stream, int* b) {
-	uint8_t bb;
-	int errn = decode(stream, &bb);
-	*b = (bb == 0) ? 0 : 1;
-	return errn;
-}
-
-/**
- * Decodes and returns an n-bit unsigned integer using the minimum number of
- * bytes required for n bits.
- */
-int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32) {
-	uint16_t bitsRead = 0;
-	uint8_t b;
-	int errn = 0;
-	*uint32 = 0;
-
-	while (errn == 0 && bitsRead < nbits) {
-		errn = decode(stream, &b);
-		*uint32 = *uint32 + (uint32_t)(b << bitsRead);
-		bitsRead = (uint16_t)(bitsRead + 8);
-	}
-
-	return errn;
-}
-
-#endif
-
-#endif
-
+
+
+#include "DecoderChannel.h"
+#include "EXIOptions.h"
+#include "BitInputStream.h"
+#include "EXITypes.h"
+#include "ErrorCodes.h"
+
+#ifndef BYTE_DECODER_CHANNEL_C
+#define BYTE_DECODER_CHANNEL_C
+
+
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+
+int decode(bitstream_t* stream, uint8_t* b) {
+	int errn = 0;
+#if EXI_STREAM == BYTE_ARRAY
+	if ( (*stream->pos) < stream->size ) {
+		*b = stream->data[(*stream->pos)++];
+	} else {
+		errn = EXI_ERROR_INPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == BYTE_ARRAY */
+#if EXI_STREAM == FILE_STREAM
+	*b = (uint8_t)(getc(stream->file));
+	/* EOF cannot be used, 0xFF valid value */
+	if ( feof(stream->file) || ferror(stream->file) ) {
+		errn = EXI_ERROR_INPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == FILE_STREAM */
+
+	return errn;
+}
+
+int decodeBoolean(bitstream_t* stream, int* b) {
+	uint8_t bb;
+	int errn = decode(stream, &bb);
+	*b = (bb == 0) ? 0 : 1;
+	return errn;
+}
+
+/**
+ * Decodes and returns an n-bit unsigned integer using the minimum number of
+ * bytes required for n bits.
+ */
+int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32) {
+	uint16_t bitsRead = 0;
+	uint8_t b;
+	int errn = 0;
+	*uint32 = 0;
+
+	while (errn == 0 && bitsRead < nbits) {
+		errn = decode(stream, &b);
+		*uint32 = *uint32 + (uint32_t)(b << bitsRead);
+		bitsRead = (uint16_t)(bitsRead + 8);
+	}
+
+	return errn;
+}
+
+#endif
+
+#endif
+

+ 118 - 119
src/codec/ByteEncoderChannel.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,126 +18,126 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#include "EncoderChannel.h"
-
-#include "EXIOptions.h"
-#include "BitOutputStream.h"
-#include "EXITypes.h"
-#include "MethodsBag.h"
-#include "ErrorCodes.h"
-
-#ifndef BYTE_ENCODER_CHANNEL_C
-#define BYTE_ENCODER_CHANNEL_C
-
-#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
-
-
-int encode(bitstream_t* stream, uint8_t b) {
-	int errn = 0;
-#if EXI_STREAM == BYTE_ARRAY
-	if ( (*stream->pos) < stream->size ) {
-		stream->data[(*stream->pos)++] = b;
-	} else {
-		errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-	}
-#endif /* EXI_STREAM == BYTE_ARRAY */
-#if EXI_STREAM == FILE_STREAM
-	if ( putc(b, stream->file) == EOF ) {
-		errn = EXI_ERROR_OUTPUT_STREAM_EOF;
-	}
-#endif /* EXI_STREAM == FILE_STREAM */
-	return errn;
-}
-
-/**
- * Encode a single boolean value. A false value is encoded as byte 0 and true
- * value is encode as byte 1.
- */
-int encodeBoolean(bitstream_t* stream, int b) {
-	uint8_t val = b ? 1 : 0;
-	return encode(stream, val);
-}
-
-
-/**
- * Encode n-bit unsigned integer. The n least significant bits of parameter
- * b starting with the most significant, i.e. from left to right.
- */
-int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val)  {
-	int errn = 0;
-	if (nbits > 0) {
-		if (nbits < 9) {
-			/* 1 byte */
-			errn = encode(stream, val & 0xff);
-		} else if (nbits < 17) {
-			/* 2 bytes */
-			errn = encode(stream, val & 0x00ff);
-			if(errn == 0) {
-				errn = encode(stream, (uint8_t)((val & 0xff00) >> 8));
-			}
-		} else if (nbits < 25) {
-			/* 3 bytes */
-			errn = encode(stream, val & 0x0000ff);
-			if(errn == 0) {
-				errn = encode(stream, (uint8_t)((val & 0x00ff00) >> 8));
-				if(errn == 0) {
-					errn = encode(stream, (uint8_t)((val & 0xff0000) >> 16));
-				}
-			}
-		} else if (nbits < 33) {
-			/* 4 bytes */
-			errn = encode(stream, val & 0x000000ff);
-			if(errn == 0) {
-				errn = encode(stream, (uint8_t)((val & 0x0000ff00) >> 8));
-				if(errn == 0) {
-					errn = encode(stream, (uint8_t)((val & 0x00ff0000) >> 16));
-					if(errn == 0) {
-						errn = encode(stream, (uint8_t)((val & 0xff000000) >> 24));
-					}
-				}
-			}
-		} else {
-			/* TODO Currently not more than 4 Bytes allowed for NBitUnsignedInteger */
-			errn = EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH;
-		}
-	}
-	return errn;
-}
-
-
-/**
- * Flush underlying bit output stream.
- */
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
-int encodeFinish(bitstream_t* stream) {
-	/* no pending bits in byte-aligned mode */
-	return 0;
-}
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
-
-#endif /* alignment */
-
-#endif
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+#include "EncoderChannel.h"
+
+#include "EXIOptions.h"
+#include "BitOutputStream.h"
+#include "EXITypes.h"
+#include "MethodsBag.h"
+#include "ErrorCodes.h"
+
+#ifndef BYTE_ENCODER_CHANNEL_C
+#define BYTE_ENCODER_CHANNEL_C
+
+#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT
+
+
+int encode(bitstream_t* stream, uint8_t b) {
+	int errn = 0;
+#if EXI_STREAM == BYTE_ARRAY
+	if ( (*stream->pos) < stream->size ) {
+		stream->data[(*stream->pos)++] = b;
+	} else {
+		errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == BYTE_ARRAY */
+#if EXI_STREAM == FILE_STREAM
+	if ( putc(b, stream->file) == EOF ) {
+		errn = EXI_ERROR_OUTPUT_STREAM_EOF;
+	}
+#endif /* EXI_STREAM == FILE_STREAM */
+	return errn;
+}
+
+/**
+ * Encode a single boolean value. A false value is encoded as byte 0 and true
+ * value is encode as byte 1.
+ */
+int encodeBoolean(bitstream_t* stream, int b) {
+	uint8_t val = b ? 1 : 0;
+	return encode(stream, val);
+}
+
+
+/**
+ * Encode n-bit unsigned integer. The n least significant bits of parameter
+ * b starting with the most significant, i.e. from left to right.
+ */
+int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val)  {
+	int errn = 0;
+	if (nbits > 0) {
+		if (nbits < 9) {
+			/* 1 byte */
+			errn = encode(stream, val & 0xff);
+		} else if (nbits < 17) {
+			/* 2 bytes */
+			errn = encode(stream, val & 0x00ff);
+			if(errn == 0) {
+				errn = encode(stream, (uint8_t)((val & 0xff00) >> 8));
+			}
+		} else if (nbits < 25) {
+			/* 3 bytes */
+			errn = encode(stream, val & 0x0000ff);
+			if(errn == 0) {
+				errn = encode(stream, (uint8_t)((val & 0x00ff00) >> 8));
+				if(errn == 0) {
+					errn = encode(stream, (uint8_t)((val & 0xff0000) >> 16));
+				}
+			}
+		} else if (nbits < 33) {
+			/* 4 bytes */
+			errn = encode(stream, val & 0x000000ff);
+			if(errn == 0) {
+				errn = encode(stream, (uint8_t)((val & 0x0000ff00) >> 8));
+				if(errn == 0) {
+					errn = encode(stream, (uint8_t)((val & 0x00ff0000) >> 16));
+					if(errn == 0) {
+						errn = encode(stream, (uint8_t)((val & 0xff000000) >> 24));
+					}
+				}
+			}
+		} else {
+			/* TODO Currently not more than 4 Bytes allowed for NBitUnsignedInteger */
+			errn = EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH;
+		}
+	}
+	return errn;
+}
+
+
+/**
+ * Flush underlying bit output stream.
+ */
+#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
+int encodeFinish(bitstream_t* stream) {
+	/* no pending bits in byte-aligned mode */
+	return 0;
+}
+#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
+
+#endif /* alignment */
+
+#endif
+
+
+
+
+
+
+
+
+
+
+
+

+ 6 - 7
src/codec/ByteStream.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,11 +18,11 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
@@ -42,7 +41,7 @@
 #ifndef BYTE_STREAM_C
 #define BYTE_STREAM_C
 
-int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint32_t* pos) {
+int readBytesFromFile(const char * filename, uint8_t* data, uint16_t size, uint16_t* pos) {
 	FILE* f;
 	int character;
 	int errn = 0;
@@ -66,7 +65,7 @@ int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint3
 	return errn;
 }
 
-int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename) {
+int writeBytesToFile(uint8_t* data, uint16_t len, const char * filename) {
 	size_t rlen;
 	FILE* f = fopen(filename, "wb+");
 

+ 14 - 15
src/codec/ByteStream.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,23 +18,17 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
 
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXITypes.h"
-
 /**
  * \file 	ByteStream.h
  * \brief 	Byte Stream utilities
@@ -45,6 +38,12 @@ extern "C" {
 #ifndef BYTE_STREAM_H
 #define BYTE_STREAM_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
 /**
  * \brief 		Write bytes to file
  *
@@ -54,7 +53,7 @@ extern "C" {
  * \return                  	Error-Code <> 0
  *
  */
-int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename);
+int writeBytesToFile(uint8_t* data, uint16_t len, const char * filename);
 
 
 /**
@@ -67,10 +66,10 @@ int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename);
  * \return                  	Error-Code <> 0
  *
  */
-int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint32_t* pos);
-
-#endif /* BYTE_STREAM_H */
+int readBytesFromFile(const char * filename, uint8_t* data, uint16_t size, uint16_t* pos);
 
 #ifdef __cplusplus
 }
 #endif
+
+#endif /* BYTE_STREAM_H */

+ 361 - 334
src/codec/DecoderChannel.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,341 +18,369 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	DecoderChannel.h
- * \brief 	EXI Decoder Channel
- *
- */
-
-#include "EXIOptions.h"
-#include "EXITypes.h"
-
-#ifndef DECODER_CHANNEL_H
-#define DECODER_CHANNEL_H
-
-
-/**
- * \brief 		Decode byte value
- *
- * \param       stream   		Input Stream
- * \param       b		   		byte (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decode(bitstream_t* stream, uint8_t* b);
-
-
-/**
- * \brief 		Decode boolean
- *
- * 				Decode a single boolean value. The value false is
- * 				represented by 0, and the value true is represented by 1.
- *
- * \param       stream   		Input Stream
- * \param       b		   		boolean (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeBoolean(bitstream_t* stream, int* b);
-
-
-/**
- * \brief 		Decode n-bit unsigned integer
- *
- * 				Decodes and returns an n-bit unsigned integer.
- *
- * \param       stream   		Input Stream
- * \param       nbits		   	Number of bits
- * \param       uint32		   	Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32);
-
-
-/**
- * \brief 		Decode unsigned integer
- *
- * 				Decode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       iv		   		Unsigned Integer Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv);
-
-
-/**
- * \brief 		Decode unsigned integer
- *
- * 				Decode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       uint16		   	Unsigned Integer Value 16 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16);
-
-
-/**
- * \brief 		Decode unsigned integer
- *
- * 				Decode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       uint32		   	Unsigned Integer Value 32 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32);
-
-
-/**
- * \brief 		Decode unsigned integer
- *
- * 				Decode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       uint64		   	Unsigned Integer Value 64 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64);
-
-
-/**
- * \brief 		Decode integer
- *
- * 				Decode an arbitrary precision integer using a sign bit
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       iv		   		Integer Value 64 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeInteger(bitstream_t* stream, exi_integer_t* iv);
-
-
-/**
- * \brief 		Decode integer
- *
- * 				Decode an arbitrary precision integer using a sign bit
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       int16		   	Integer Value 16 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeInteger16(bitstream_t* stream, int16_t* int16);
-
-
-/**
- * \brief 		Decode integer
- *
- * 				Decode an arbitrary precision integer using a sign bit
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       int32		   	Integer Value 32 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeInteger32(bitstream_t* stream, int32_t* int32);
-
-
-/**
- * \brief 		Decode integer
- *
- * 				Decode an arbitrary precision integer using a sign bit
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Input Stream
- * \param       int64		   	Integer Value 64 bits (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeInteger64(bitstream_t* stream, int64_t* int64);
-
-
-/**
- * \brief 		Decode float
- *
- * 				Decode a Float datatype as two consecutive Integers. The
- * 				first Integer represents the mantissa of the floating point
- * 				number and the second Integer represents the base-10 exponent
- * 				of the floating point number.
- *
- * \param       stream   		Input Stream
- * \param       f			   	Float Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeFloat(bitstream_t* stream, exi_float_me_t* f);
-
-
-/**
- * \brief 		Decode decimal
- *
- * 				Decode a decimal represented as a Boolean sign followed by two
- * 				Unsigned Integers. A sign value of zero (0) is used to represent
- * 				positive Decimal values and a sign value of one (1) is used to
- * 				represent negative Decimal values The first Integer represents
- * 				the integral portion of the Decimal value. The second positive
- * 				integer represents the fractional portion of the decimal with
- * 				the digits in reverse order to preserve leading zeros.
- *
- * \param       stream   		Input Stream
- * \param       d			   	Decimal Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeDecimal(bitstream_t* stream, exi_decimal_t* d);
-
-
-/**
- * \brief 		Decode String (no length prefix)
- *
- * 				Decode a sequence of characters for a given length.
- *
- * \param       stream   		Input Stream
- * \param       len			   	Characters length
- * \param       s			   	String Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeStringOnly(bitstream_t* stream, uint16_t len, exi_string_ucs_t* s);
-
-
-/**
- * \brief 		Decode String
- *
- * 				Decode a length prefixed sequence of characters.
- *
- * \param       stream   		Input Stream
- * \param       s			   	String Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeString(bitstream_t* stream, exi_string_ucs_t* s);
-
-
-
-/**
- * \brief 		Decode String value
- *
- * 				Decode a length prefixed sequence of characters in the sense of string tables.
- * 				length == 0: local value partition hit.
- * 				length == 1: global value partition hit.
- * 				length > 1: string literal is encoded as a String with the length incremented by two
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       s			   	String Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_string_value_t* s);
-
-
-/**
- * \brief 		Decode Restricted characters set string value
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       rcs		   		Restricted character set
- * \param       s			   	String Value (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeRCSStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* s);
-
-
-/**
- * \brief 		Decode characters
- *
- * 				Decode a sequence of characters according to a given length.
- *
- * \param       stream   		Input Stream
- * \param       len		   		Length
- * \param       chars   		Characters (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeCharacters(bitstream_t* stream, uint16_t len, uint32_t* chars);
-
-
-/**
- * \brief 		Decode Binary
- *
- * 				Decode a binary value as a length-prefixed sequence of octets.
- *
- * \param       stream   		Input Stream
- * \param       bytes   		Bytes (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes);
-
-
-/**
- * \brief 		Decode DateTime
- *
- * 				Decode Date-Time as sequence of values representing the
- * 				individual components of the Date-Time.
- *
- * \param       stream   		Input Stream
- * \param       type   			Datetime type
- * \param       datetime   		Datetime (out)
- * \return                  	Error-Code <> 0
- *
- */
-int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime);
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif
-
+
+
+/**
+ * \file 	DecoderChannel.h
+ * \brief 	EXI Decoder Channel
+ *
+ */
+
+#ifndef DECODER_CHANNEL_H
+#define DECODER_CHANNEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXIOptions.h"
+#include "EXITypes.h"
+
+/**
+ * \brief 		Decode byte value
+ *
+ * \param       stream   		Input Stream
+ * \param       b		   		byte (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decode(bitstream_t* stream, uint8_t* b);
+
+
+/**
+ * \brief 		Decode boolean
+ *
+ * 				Decode a single boolean value. The value false is
+ * 				represented by 0, and the value true is represented by 1.
+ *
+ * \param       stream   		Input Stream
+ * \param       b		   		boolean (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeBoolean(bitstream_t* stream, int* b);
+
+
+/**
+ * \brief 		Decode n-bit unsigned integer
+ *
+ * 				Decodes and returns an n-bit unsigned integer.
+ *
+ * \param       stream   		Input Stream
+ * \param       nbits		   	Number of bits
+ * \param       uint32		   	Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t* uint32);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       iv		   		Unsigned Integer Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       uint16		   	Unsigned Integer Value 16 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       uint32		   	Unsigned Integer Value 32 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32);
+
+
+/**
+ * \brief 		Decode unsigned integer
+ *
+ * 				Decode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       uint64		   	Unsigned Integer Value 64 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       iv		   		Integer Value 64 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       int16		   	Integer Value 16 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger16(bitstream_t* stream, int16_t* int16);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       int32		   	Integer Value 32 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger32(bitstream_t* stream, int32_t* int32);
+
+
+/**
+ * \brief 		Decode integer
+ *
+ * 				Decode an arbitrary precision integer using a sign bit
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Input Stream
+ * \param       int64		   	Integer Value 64 bits (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeInteger64(bitstream_t* stream, int64_t* int64);
+
+
+/**
+ * \brief 		Decode float
+ *
+ * 				Decode a Float datatype as two consecutive Integers. The
+ * 				first Integer represents the mantissa of the floating point
+ * 				number and the second Integer represents the base-10 exponent
+ * 				of the floating point number.
+ *
+ * \param       stream   		Input Stream
+ * \param       f			   	Float Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeFloat(bitstream_t* stream, exi_float_me_t* f);
+
+
+/**
+ * \brief 		Decode decimal
+ *
+ * 				Decode a decimal represented as a Boolean sign followed by two
+ * 				Unsigned Integers. A sign value of zero (0) is used to represent
+ * 				positive Decimal values and a sign value of one (1) is used to
+ * 				represent negative Decimal values The first Integer represents
+ * 				the integral portion of the Decimal value. The second positive
+ * 				integer represents the fractional portion of the decimal with
+ * 				the digits in reverse order to preserve leading zeros.
+ *
+ * \param       stream   		Input Stream
+ * \param       d			   	Decimal Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeDecimal(bitstream_t* stream, exi_decimal_t* d);
+
+
+/**
+ * \brief 		Decode String (no length prefix)
+ *
+ * 				Decode a sequence of characters for a given length.
+ *
+ * \param       stream   		Input Stream
+ * \param       len			   	Characters length
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeStringOnly(bitstream_t* stream, uint16_t len, exi_string_t* s);
+
+
+/**
+ * \brief 		Decode String
+ *
+ * 				Decode a length prefixed sequence of characters.
+ *
+ * \param       stream   		Input Stream
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeString(bitstream_t* stream, exi_string_t* s);
+
+
+
+/**
+ * \brief 		Decode String value
+ *
+ * 				Decode a length prefixed sequence of characters in the sense of string tables.
+ * 				length == 0: local value partition hit.
+ * 				length == 1: global value partition hit.
+ * 				length > 1: string literal is encoded as a String with the length incremented by two
+ *
+ * \param       stream   		Input Stream
+ * \param       state   		Codec state
+ * \param       qnameID   		Qualified Name ID
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_string_value_t* s);
+
+
+/**
+ * \brief 		Decode Restricted characters set string value
+ *
+ * \param       stream   		Input Stream
+ * \param       state   		Codec state
+ * \param       qnameID   		Qualified Name ID
+ * \param       rcs		   		Restricted character set
+ * \param       s			   	String Value (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeRCSStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* s);
+
+
+/**
+ * \brief 		Decode characters
+ *
+ * 				Decode a sequence of characters according to a given length.
+ *
+ * \param       stream   		Input Stream
+ * \param       len		   		Length
+ * \param       chars   		Characters (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeCharacters(bitstream_t* stream, uint16_t len, exi_string_character_t* chars);
+
+
+/**
+ * \brief 		Decode restricted character set characters
+ *
+ * 				Decode a sequence of characters according to a given length and rcs code-length, size and set.
+ *
+ * \param       stream   		Input Stream
+ * \param       len		   		Length
+ * \param       chars   		Characters (out)
+ * \param       rcsCodeLength   RCS code-length
+ * \param       rcsCodeLength   RCS size
+ * \param       rcsCodeLength   RCS set
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeRCSCharacters(bitstream_t* stream, uint16_t len, exi_string_character_t* chars, uint16_t rcsCodeLength, uint16_t rcsSize, const exi_string_character_t rcsSet[]);
+
+
+
+/**
+ * \brief 		Decode Binary
+ *
+ * 				Decode a binary value as a length-prefixed sequence of octets.
+ *
+ * \param       stream   		Input Stream
+ * \param       bytes   		Bytes (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes);
+
+/**
+ * \brief 		Decode Binary data
+ *
+ * 				Decode a sequence of octets.
+ *
+ * \param       stream   		Input Stream
+ * \param       len		   		Length
+ * \param       data	   		Bytes (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeBytes(bitstream_t* stream, uint16_t len, uint8_t* data);
+
+/**
+ * \brief 		Decode DateTime
+ *
+ * 				Decode Date-Time as sequence of values representing the
+ * 				individual components of the Date-Time.
+ *
+ * \param       stream   		Input Stream
+ * \param       type   			Datetime type
+ * \param       datetime   		Datetime (out)
+ * \return                  	Error-Code <> 0
+ *
+ */
+int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 0 - 101
src/codec/DynamicMemory.c

@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#include "DynamicMemory.h"
-
-#include <string.h>
-
-#include "EXIConfig.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-#include <stdlib.h>
-
-#ifndef DYNAMIC_MEMORY_C
-#define DYNAMIC_MEMORY_C
-
-
-int exiAllocateDynamicStringMemory(exi_string_ucs_t* s, uint16_t length) {
-	int errn = 0;
-	/* allocate dynamic memory */
-	s->size = length; /* length << 1; */ /* length * 2 */
-	s->codepoints = (uint32_t*) malloc(s->size * sizeof(uint32_t));
-
-	if(NULL == s->codepoints) {
-		s->size = 0;
-		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
-	}
-
-	return errn;
-}
-
-int exiAllocateDynamicBinaryMemory(exi_bytes_t* b, uint16_t length) {
-	int errn = 0;
-	/* allocate dynamic memory */
-	b->size = length; /* length << 1; */ /* length * 2 */
-	b->data = (uint8_t*) malloc(b->size * sizeof(uint8_t));
-
-	if(NULL == b->data) {
-		b->size = 0;
-		errn = EXI_ERROR_OUT_OF_BYTE_BUFFER;
-	}
-
-	return errn;
-}
-
-
-
-int exiFreeDynamicStringMemory(exi_string_ucs_t* s) {
-	/* free previous allocated memory, if any */
-	if(s->size != 0) {
-		s->size = 0;
-		free(s->codepoints);
-	}
-
-	return 0;
-}
-
-int exiFreeDynamicBinaryMemory(exi_bytes_t* b) {
-	/* free previous allocated memory, if any */
-	if(b->size != 0) {
-		b->size = 0;
-		free(b->data);
-	}
-
-	return 0;
-}
-
-
-#endif
-
-#endif /* DYNAMIC_ALLOCATION */

+ 0 - 101
src/codec/DynamicMemory.h

@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXIConfig.h"
-#include "EXITypes.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-
-/**
- * \file 	DynamicMemory.h
- * \brief 	Utilities to allocate and free EXI datatypes memory
- *
- */
-
-#ifndef DYNAMIC_MEMORY_H
-#define DYNAMIC_MEMORY_H
-
-/**
- * \brief 		Allocates memory for at least the length of the string
- *
- * \param       s				UCS String to allocate memory for
- * \param       length			Length
- * \return                  	Error-Code <> 0
- *
- */
-int exiAllocateDynamicStringMemory(exi_string_ucs_t* s, uint16_t length);
-
-
-/**
- * \brief 		Allocates memory for at least the length of the string
- *
- * \param       b				Binary to allocate memory for
- * \param      	length			Length
- * \return                  	Error-Code <> 0
- *
- */
-int exiAllocateDynamicBinaryMemory(exi_bytes_t* b, uint16_t length);
-
-
-/**
- * \brief 		Free String Memory (if any)
- *
- * \param       s				UCS String
- * \return                  	Error-Code <> 0
- *
- */
-int exiFreeDynamicStringMemory(exi_string_ucs_t* s);
-
-
-/**
- * \brief 		Free Binary Memory (if any)
- *
- * \param       s				UCS String
- * \return                  	Error-Code <> 0
- *
- */
-int exiFreeDynamicBinaryMemory(exi_bytes_t* b);
-
-
-
-#endif
-
-#endif /* DYNAMIC_ALLOCATION */
-
-
-#ifdef __cplusplus
-}
-#endif

+ 21 - 29
src/codec/EXIConfig.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,23 +18,17 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
 
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
 /**
  * \file 	EXIConfig.h
  * \brief 	EXI Configurations for the EXI Codec
@@ -45,10 +38,9 @@ extern "C" {
 #ifndef EXI_CONFIG_H
 #define EXI_CONFIG_H
 
-
-
-
-
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
 /** EXI stream - Option Byte Array */
@@ -78,26 +70,26 @@ extern "C" {
 
 
 
+/** String representation ASCII */
+#define STRING_REPRESENTATION_ASCII 1
+/** String representation Universal Character Set (UCS) */
+#define STRING_REPRESENTATION_UCS 2
+/** */
+/** \brief 	String representation mode
+ *
+ * 			ASCII or UCS
+ * */
+#define STRING_REPRESENTATION STRING_REPRESENTATION_UCS
+
 
 
 /** Maximum number of cascading elements, XML tree depth */
 #define EXI_ELEMENT_STACK_SIZE 24
 
 
-
-
-
-
-
-
-
-
-
-
-
-#endif /* EXI_CONFIG_H */
-
-
 #ifdef __cplusplus
 }
 #endif
+
+#endif /* EXI_CONFIG_H */
+

+ 8 - 32
src/codec/EXIHeaderDecoder.c

@@ -1,34 +1,4 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
+/* $EXI_SOURCE_PREAMBLE$ */
 
 #include "EXIHeaderDecoder.h"
 #include "BitInputStream.h"
@@ -39,8 +9,14 @@
 #define EXI_HEADER_DECODER_C
 
 int readEXIHeader(bitstream_t* stream) {
+	int errn;
 	uint32_t header = 0;
-	int errn = readBits(stream, 8, &header);
+
+	/* init stream */
+	stream->buffer = 0;
+	stream->capacity = 0;
+
+	errn = readBits(stream, 8, &header);
 	if (errn == 0) {
 		if(header == '$') {
 			/*	we do not support "EXI Cookie" */

+ 12 - 14
src/codec/EXIHeaderDecoder.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,23 +18,17 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
 
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXITypes.h"
-
 /**
  * \file 	EXIHeaderDecoder.h
  * \brief 	EXI Header Decoder
@@ -45,6 +38,12 @@ extern "C" {
 #ifndef EXI_HEADER_DECODER_H
 #define EXI_HEADER_DECODER_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
 /**
  * \brief 		Reads EXI header
  *
@@ -54,9 +53,8 @@ extern "C" {
  */
 int readEXIHeader(bitstream_t* stream);
 
-#endif
-
-
 #ifdef __cplusplus
 }
 #endif
+
+#endif

+ 5 - 31
src/codec/EXIHeaderEncoder.c

@@ -1,34 +1,4 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
+/* $EXI_SOURCE_PREAMBLE$ */
 
 #include "EXIHeaderEncoder.h"
 #include "BitOutputStream.h"
@@ -38,6 +8,10 @@
 #define EXI_HEADER_ENCODER_C
 
 int writeEXIHeader(bitstream_t* stream) {
+	/* init stream */
+	stream->buffer = 0;
+	stream->capacity = 8;
+
 	return writeBits(stream, 8, 128);
 }
 

+ 12 - 14
src/codec/EXIHeaderEncoder.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,23 +18,17 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
 
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXITypes.h"
-
 /**
  * \file 	EXIHeaderEncoder.h
  * \brief 	EXI Header Encoder
@@ -45,6 +38,12 @@ extern "C" {
 #ifndef EXI_HEADER_ENCODER_H
 #define EXI_HEADER_ENCODER_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
 
 /**
  * \brief 		Writes EXI header
@@ -55,9 +54,8 @@ extern "C" {
  */
 int writeEXIHeader(bitstream_t* stream);
 
-#endif
-
-
 #ifdef __cplusplus
 }
 #endif
+
+#endif

+ 68 - 71
src/codec/EXIOptions.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,78 +18,76 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-
-/**
- * \file 	EXIOptions.h
- * \brief 	EXI Options for the EXI Codec
- *
- */
-
-#ifndef EXI_OPTIONS_H
-#define EXI_OPTIONS_H
-
-
-/** EXI alignment - Option bit-packed */
-#define BIT_PACKED 1
-/** EXI alignment - Option byte-packed */
-#define BYTE_ALIGNMENT  2
-/** EXI alignment */
-/**
- * \brief 		EXI Option 'alignment'
- *
- *				The alignment option is used to control the alignment of event codes and content items.
- *				Default Value: bit-packed
- */
-#define EXI_OPTION_ALIGNMENT BIT_PACKED
-
-
-
-/**
- * \brief 		EXI Option 'strict'
- *
- *				Strict interpretation of schemas is used to achieve better compactness.
- *				Default Value: false
- */
-#define EXI_OPTION_STRICT 0
-
-
-/**
- * \brief 		EXI Option 'valueMaxLength'
- *
- *				Specifies the maximum string length of value content items to be
- *				considered for addition to the string table.
- *				Default Value: unbounded (-1)
- */
-#define EXI_OPTION_VALUE_MAX_LENGTH -1
-
-
-/**
- * \brief 		EXI Option 'valuePartitionCapacity'
- *
- *				Specifies the total capacity of value partitions in a string table.
- *				Default Value: unbounded (-1)
- */
-#define EXI_OPTION_VALUE_PARTITION_CAPACITY 0
-
-#endif /* EXI_OPTIONS_H */
-
-
-#ifdef __cplusplus
-}
-#endif
+
+
+/**
+ * \file 	EXIOptions.h
+ * \brief 	EXI Options for the EXI Codec
+ *
+ */
+
+#ifndef EXI_OPTIONS_H
+#define EXI_OPTIONS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/** EXI alignment - Option bit-packed */
+#define BIT_PACKED 1
+/** EXI alignment - Option byte-packed */
+#define BYTE_ALIGNMENT  2
+/** EXI alignment */
+/**
+ * \brief 		EXI Option 'alignment'
+ *
+ *				The alignment option is used to control the alignment of event codes and content items.
+ *				Default Value: bit-packed
+ */
+#define EXI_OPTION_ALIGNMENT BIT_PACKED
+
+
+
+/**
+ * \brief 		EXI Option 'strict'
+ *
+ *				Strict interpretation of schemas is used to achieve better compactness.
+ *				Default Value: false
+ */
+#define EXI_OPTION_STRICT 0
+
+
+/**
+ * \brief 		EXI Option 'valueMaxLength'
+ *
+ *				Specifies the maximum string length of value content items to be
+ *				considered for addition to the string table.
+ *				Default Value: unbounded (-1)
+ */
+#define EXI_OPTION_VALUE_MAX_LENGTH -1
+
+
+/**
+ * \brief 		EXI Option 'valuePartitionCapacity'
+ *
+ *				Specifies the total capacity of value partitions in a string table.
+ *				Default Value: unbounded (-1)
+ */
+#define EXI_OPTION_VALUE_PARTITION_CAPACITY 0
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* EXI_OPTIONS_H */

+ 567 - 532
src/codec/EXITypes.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,539 +18,575 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	EXITypes.h
- * \brief 	Basic type definitions and structs
- *
- */
-
-#include <stdint.h>
-#include "EXIConfig.h"
-#if EXI_STREAM == FILE_STREAM
-#include <stdio.h>
-#endif
-
-#ifndef EXI_TYPES_H
-#define EXI_TYPES_H
-
-/** Number of bits for each byte */
-#define BITS_IN_BYTE 8
-
-/** EXI Date-Time offset for year */
-#define DATETIME_YEAR_OFFSET 2000
-/** EXI Date-Time number of bits for monthDay */
-#define DATETIME_NUMBER_BITS_MONTHDAY 9
-/** EXI Date-Time number of bits for time */
-#define DATETIME_NUMBER_BITS_TIME 17
-/** EXI Date-Time number of bits for timezone */
-#define DATETIME_NUMBER_BITS_TIMEZONE 11
-/** EXI Date-Time month multiplicator */
-#define DATETIME_MONTH_MULTIPLICATOR 32
-/** EXI Date-Time offset for timzone minutes */
-#define DATETIME_TIMEZONE_OFFSET_IN_MINUTES 896
-
-/** Maximum integer value for uint */
-#define UINT_MAX_VALUE 65535
-
-
-/** EXI Float exponent special values */
-#define FLOAT_EXPONENT_SPECIAL_VALUES -16384
-/** EXI Float mantissa infinity */
-#define FLOAT_MANTISSA_INFINITY 1
-/** EXI Float minus mantissa infinity */
-#define FLOAT_MANTISSA_MINUS_INFINITY -1
-/** EXI Float not a number */
-#define FLOAT_MANTISSA_NOT_A_NUMBER 0
-
-/** \brief EXI Events */
-typedef enum {
-	/** Start Document SD */
-	EXI_EVENT_START_DOCUMENT,
-	/** End Document ED */
-	EXI_EVENT_END_DOCUMENT,
-	/** Start Element SE(qname) */
-	EXI_EVENT_START_ELEMENT,
-	/** Start Element SE(uri:*) */
-	EXI_EVENT_START_ELEMENT_NS,
-	/** Start Element SE(*) generic */
-	EXI_EVENT_START_ELEMENT_GENERIC,
-	/** Start Element SE(*) generic undeclared */
-	EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED,
-	/** End Element EE */
-	EXI_EVENT_END_ELEMENT,
-	/** End Element EE undeclared*/
-	EXI_EVENT_END_ELEMENT_UNDECLARED,
-	/** Characters CH */
-	EXI_EVENT_CHARACTERS,
-	/** Characters CH generic */
-	EXI_EVENT_CHARACTERS_GENERIC,
-	/** Characters CH generic undeclared */
-	EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED,
-	/** Attribute AT(xsi:type) */
-	EXI_EVENT_ATTRIBUTE_XSI_TYPE,
-	/** Attribute AT(xsi:nil) */
-	EXI_EVENT_ATTRIBUTE_XSI_NIL,
-	/** Attribute AT(qname) */
-	EXI_EVENT_ATTRIBUTE,
-	/** Attribute AT(uri:*) */
-	EXI_EVENT_ATTRIBUTE_NS,
-	/** Attribute AT(*) generic */
-	EXI_EVENT_ATTRIBUTE_GENERIC,
-	/** Attribute AT(*) invalid value */
-	EXI_EVENT_ATTRIBUTE_INVALID_VALUE,
-	/** Attribute AT(*) any invalid value */
-	EXI_EVENT_ATTRIBUTE_ANY_INVALID_VALUE,
-	/** Attribute AT(*) generic undeclared */
-	EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED,
-	/* error state */
-	EXI_EVENT_ERROR
-} exi_event_t;
-
-
-/**
- * \brief 	Bit stream container
- *
- *			Structure for byteArray/file stream.
- */
-typedef struct {
-#if EXI_STREAM == BYTE_ARRAY
-	/**	byte array size */
-	uint32_t size;
-	/**	byte array data */
-	uint8_t* data;
-	/**	byte array next position in array */
-	uint32_t* pos;
-#endif
-#if EXI_STREAM == FILE_STREAM
-	/** file pointer */
-	FILE *file;
-#endif
-	/** Current byte buffer*/
-	uint8_t buffer;
-	/** Remaining bit capacity in current byte buffer*/
-	uint8_t capacity;
-} bitstream_t;
-
-
-/** \brief EXI Value Datatypes */
-typedef enum {
-	/** Binary Base64 */
-	EXI_DATATYPE_BINARY_BASE64,
-	/** Binary Hex */
-	EXI_DATATYPE_BINARY_HEX,
-	/** Boolean */
-	EXI_DATATYPE_BOOLEAN,
-	/** Boolean with Facets */
-	EXI_DATATYPE_BOOLEAN_FACET,
-	/** Decimal */
-	EXI_DATATYPE_DECIMAL,
-	/** Float & Double */
-	EXI_DATATYPE_FLOAT,
-	/** N-Bit Unsigned Integer */
-	EXI_DATATYPE_NBIT_UNSIGNED_INTEGER,
-	/** Unsigned Integer */
-	EXI_DATATYPE_UNSIGNED_INTEGER,
-	/** (Signed) Integer */
-	EXI_DATATYPE_INTEGER,
-	/** Datetime */
-	EXI_DATATYPE_DATETIME,
-	/** String */
-	EXI_DATATYPE_STRING,
-	/** Restricted Character Set String */
-	EXI_DATATYPE_RCS_STRING,
-	/** Enumeration */
-	EXI_DATATYPE_ENUMERATION,
-	/** List */
-	EXI_DATATYPE_LIST,
-	/** QName (e.g. xsi:type) */
-	EXI_DATATYPE_QNAME
-} exi_datatype_t;
-
-
-/** \brief EXI Integer Value types */
-typedef enum {
-	/** Unsigned Integer 8 bits */
-	EXI_UNSIGNED_INTEGER_8,
-	/** Unsigned Integer 16 bits */
-	EXI_UNSIGNED_INTEGER_16,
-	/** Unsigned Integer 32 bits */
-	EXI_UNSIGNED_INTEGER_32,
-	/** Unsigned Integer 64 bits */
-	EXI_UNSIGNED_INTEGER_64,
-	/** (Signed) Integer 8 bits */
-	EXI_INTEGER_8,
-	/** (Signed) Integer 16 bits */
-	EXI_INTEGER_16,
-	/** (Signed) Integer 32 bits */
-	EXI_INTEGER_32,
-	/** (Signed) Integer 64 bits */
-	EXI_INTEGER_64
-} exi_integer_type_t;
-
-
-/** \brief EXI Datetime types */
-typedef enum {
-	/** gYear */
-	EXI_DATETIME_GYEAR,
-	/** gYearMonth */
-	EXI_DATETIME_GYEARMONTH,
-	/** date */
-	EXI_DATETIME_DATE,
-	/** datetime */
-	EXI_DATETIME_DATETIME,
-	/** gMonth */
-	EXI_DATETIME_GMONTH,
-	/** gMonthDay */
-	EXI_DATETIME_GMONTHDAY,
-	/** gDay */
-	EXI_DATETIME_GDAY,
-	/** time */
-	EXI_DATETIME_TIME
-} exi_datetime_type_t;
-
-
-/** \brief String value type */
-typedef enum {
-	/** value miss */
-	EXI_STRING_VALUE_MISS,
-	/** value local-hit */
-	EXI_STRING_VALUE_LOCAL_HIT,
-	/** value global-hit */
-	EXI_STRING_VALUE_GLOBAL_HIT
-} exi_string_value_type_t;
-
-
-/** \brief Universal Character Set (UCS) strings */
-typedef struct {
-	/** UCS size  */
-	uint16_t size;
-	/** UCS character container */
-	uint32_t* codepoints;
-	/** UCS  current length == number of code-points, (len <= size) */
-	uint16_t len;
-} exi_string_ucs_t;
-
-
-/** \brief String value */
-typedef struct {
-	/** value type (e.g., miss, local-hit, global-hit) */
-	exi_string_value_type_t type;
-	/** miss entry */
-	exi_string_ucs_t miss;
-	/** (local) hit entry */
-	uint32_t localID;
-	/** (global) hit entry */
-	uint32_t globalID;
-} exi_string_value_t;
-
-
-/** \brief Restricted Characeter Set */
-typedef struct {
-	/** size */
-	uint16_t size;
-	/** rcs codepoints */
-	uint32_t* codepoints;
-	/** character coding length (less than 256 characters) */
-	uint8_t codingLength;
-} exi_rcs_t;
-
-
-/** \brief Byte value container */
-typedef struct {
-	/** bytes array size */
-	uint16_t size;
-	/** bytes array data container */
-	uint8_t* data;
-	/** bytes array length (len <= size) */
-	uint16_t len;
-} exi_bytes_t;
-
-
-/** \brief Integer value container */
-typedef struct {
-	/** type */
-	exi_integer_type_t type;
-	union {
-		/* (signed) values */
-		/** (signed) int 8 bits */
-		int8_t int8;
-		/** (signed) int 16 bits */
-		int16_t int16;
-		/** (signed) int 32 bits */
-		int32_t int32;
-		/** (signed) int 64 bits */
-		int64_t int64;
-		/* unsigned values */
-		/** unsigned int 8 bits */
-		uint8_t uint8;
-		/** unsigned int 16 bits */
-		uint16_t uint16;
-		/** unsigned int 32 bits */
-		uint32_t uint32;
-		/** unsigned int 64 bits */
-		uint64_t uint64;
-	} val;
-} exi_integer_t;
-
-
-/** \brief Float value container */
-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 */
-	int16_t exponent; /* base-10 */
-} exi_float_me_t;
-
-
-/** \brief Decimal value container */
-typedef struct {
-	/** a sign value */
-	int negative;
-	/** represents the integral portion of the Decimal */
-	exi_integer_t integral;
-	/** represents the fractional portion of the Decimal with the digits in reverse order to preserve leading zeros */
-	exi_integer_t reverseFraction;
-} exi_decimal_t;
-
-
-/** \brief Datetime value container */
-typedef struct {
-	/** datetime type */
-	exi_datetime_type_t type;
-	/** Datetime value for year */
-	int32_t year;
-	/** Datetime value for monthDay */
-	uint32_t monthDay;
-	/** Datetime value for time */
-	uint32_t time;
-	/** Datetime value for presenceFractionalSecs */
-	int presenceFractionalSecs;
-	/** Datetime value for fractionalSecs */
-	uint32_t fractionalSecs;
-	/** Datetime value for presenceTimezone */
-	int presenceTimezone;
-	/** Datetime value for timezone */
-	uint32_t timezone;
-} exi_datetime_t;
-
-
-/** \brief List value container */
-typedef struct {
-	/** list item type */
-	exi_datatype_t type;
-	/** number of items */
-	uint16_t len;
-	/* Special datatype: integer */
-	/* exi_integer_type_t intType;*/
-	/** Special datatype: datetime */
-	exi_datetime_type_t datetimeType;
-} exi_list_t;
-
-
-/** \brief Efficient qname */
-typedef struct {
-	/** namespace URI ID*/
-	uint16_t namespaceURI;
-	/** local name ID*/
-	uint16_t localPart;
-} exi_eqname_t;
-
-
-/** \brief Name entry type */
-typedef enum {
-	/** As known IDs */
-	EXI_NAME_ENTRY_TYPE_ID,
-	/** As String */
-	EXI_NAME_ENTRY_TYPE_STRING_AND_ID
-} exi_name_entry_type_t;
-
-
-/** \brief Name entry */
-typedef struct {
-	/** type */
-	exi_name_entry_type_t type;
-	/** entry ID */
-	uint16_t id;
-	/** entry string */
-	exi_string_ucs_t str;
-} exi_name_entry_t;
-
-
-/** \brief Qualified name */
-typedef struct {
-	/** Uri */
-	exi_name_entry_t uri;
-	/** LocalName */
-	exi_name_entry_t localName;
-} exi_qname_t;
-
-
-/*TODO Doxygen Documentation */
-
-
-
-
-
-
-/* ==================================== */
-/* URI and LocalName Entries */
-typedef struct exiNameTablePrepopulated {
-	/* number of namespaces AND length name-partitions array */
-	uint16_t len;
-	/* number of localName entries divided by URI */
-	uint16_t * localNames;
-} exi_name_table_prepopulated_t;
-
-#define EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES 25
-
-typedef enum {
-	EXI_NAME_PARTITION_URI, EXI_NAME_PARTITION_LOCALNAME
-} exi_name_partition_type_t;
-
-typedef struct {
-	char* uri;
-	uint16_t uriID;
-} exi_uri_partition_t;
-
-typedef struct {
-	char* localName;
-	uint16_t localNameID;
-	uint16_t uriID;
-} exi_localname_partition_t;
-
-typedef struct {
-	exi_name_partition_type_t namePartitionType;
-	struct {
-		exi_uri_partition_t uriPartition;
-		exi_localname_partition_t localNamePartition;
-	} entry;
-} exi_name_partition_t;
-
-typedef struct exiNameTableRuntime {
-	/* maximum number of characters in the name partitions entries PLUS null terminators */
-	/* char characters[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS + EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES]; */
-	/* uint16_t numberOfUsedCharacters; *//* initially zero <= EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS */
-	/* maximum number of name partitions entries. Name partitions entries consist in all uri, and local-name partition entries */
-	exi_name_partition_t
-			namePartitionsEntries[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES];
-	/* uint16_t numberOfUsedNamePartitions; *//* initially zero */
-	/* added entries */
-	uint16_t addedUriEntries; /* initially zero */
-	uint16_t addedLocalNameEntries; /* initially zero */
-} exi_name_table_runtime_t;
-
-
-/* StartTagContent grammar initially empty */
-/* ElementContent grammar has EE per default */
-typedef struct {
-	uint16_t qnameID;
-	uint16_t numberOfProductions;
-	int hasXsiType; /* StartTagContent only */
-	int hasEE; /* ElementContentper default TRUE */
-} exi_runtime_element_t;
-
-/* Note: We do have twice as many runtime grammars (StartTagContent and ElementContent)*/
-#define MAX_NUMBER_OF_RUNTIME_ELEMENTS 80
-
-
-
-/* ==================================== */
-/* Value string table */
-typedef struct exiValueStringTableEntry {
-	/** Qualified name ID */
-	uint16_t qnameID;
-	/** Local Value ID */
-	uint16_t localValueID;
-	/** String */
-	exi_string_ucs_t str;
-} exi_value_string_table_entry_t;
-
-typedef struct exiValueStringTable {
-	/** maximum number of global string table entry size */
-	uint16_t size;
-	/** string table entry array container */
-	exi_value_string_table_entry_t* strs;
-	/** current number of string table entries (len <= size) */
-	uint16_t len;
-} exi_value_string_table_t;
-
-typedef struct {
-	/** number of global strings */
-	uint16_t numberOfGlobalStrings;
-	/** size of local-names container */
-	uint16_t sizeLocalStrings;
-	/** number of local strings container */
-	uint16_t* numberOfLocalStrings;
-	/** string values */
-	exi_value_string_table_t* valueStringTable;
-} exi_value_table_t;
-
-typedef struct {
-	/** stack of grammar states */
-	int16_t grammarStack[EXI_ELEMENT_STACK_SIZE];
-	/** stack of grammar elements / qnameIDs */
-	uint16_t elementStack[EXI_ELEMENT_STACK_SIZE];
-	/** stack index for both stacks */
-	uint16_t stackIndex;
-
-	/** event-code */
-	uint32_t eventCode;
-
-	/** name table entries, pre-populated */
-	exi_name_table_prepopulated_t nameTablePrepopulated;
-	/** name table entries, at runtime */
-	exi_name_table_runtime_t nameTableRuntime;
-
-	/** next qname ID */
-	uint16_t nextQNameID;
-
-	/** string table entries */
-	exi_value_table_t stringTable;
-
-	/** runtime built-in element grammars - numbers */
-	uint16_t numberOfRuntimeGrammars;
-	/** runtime built-in element grammars */
-	exi_runtime_element_t runtimeGrammars[MAX_NUMBER_OF_RUNTIME_ELEMENTS * 2];
-} exi_state_t;
-
-typedef struct {
-	/* type of value */
-	exi_datatype_t type;
-
-	/* base types */
-	int boolean;
-	uint32_t enumeration;
-
-	/* complex types: Integers, Bytes, Strings and Lists are not native types anymore */
-	exi_integer_t integer;
-	exi_bytes_t binary;
-	exi_string_value_t str;
-	exi_float_me_t float_me;
-	exi_decimal_t decimal;
-	exi_datetime_t datetime;
-	exi_list_t list;
-	exi_eqname_t eqname;
-} exi_value_t;
-
-
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
+
+
+/**
+ * \file 	EXITypes.h
+ * \brief 	Basic type definitions and structs
+ *
+ */
+
+#ifndef EXI_TYPES_H
+#define EXI_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include "EXIConfig.h"
+#if EXI_STREAM == FILE_STREAM
+#include <stdio.h>
+#endif
+
+
+/** Number of bits for each byte */
+#define BITS_IN_BYTE 8
+
+/** EXI Date-Time offset for year */
+#define DATETIME_YEAR_OFFSET 2000
+/** EXI Date-Time number of bits for monthDay */
+#define DATETIME_NUMBER_BITS_MONTHDAY 9
+/** EXI Date-Time number of bits for time */
+#define DATETIME_NUMBER_BITS_TIME 17
+/** EXI Date-Time number of bits for timezone */
+#define DATETIME_NUMBER_BITS_TIMEZONE 11
+/** EXI Date-Time month multiplicator */
+#define DATETIME_MONTH_MULTIPLICATOR 32
+/** EXI Date-Time offset for timzone minutes */
+#define DATETIME_TIMEZONE_OFFSET_IN_MINUTES 896
+
+/** Maximum integer value for uint */
+#define UINT_MAX_VALUE 65535
+
+
+/** EXI Float exponent special values */
+#define FLOAT_EXPONENT_SPECIAL_VALUES -16384
+/** EXI Float mantissa infinity */
+#define FLOAT_MANTISSA_INFINITY 1
+/** EXI Float minus mantissa infinity */
+#define FLOAT_MANTISSA_MINUS_INFINITY -1
+/** EXI Float not a number */
+#define FLOAT_MANTISSA_NOT_A_NUMBER 0
+
+/** \brief EXI Events */
+typedef enum {
+	/** Start Document SD */
+	EXI_EVENT_START_DOCUMENT,
+	/** End Document ED */
+	EXI_EVENT_END_DOCUMENT,
+	/** Start Element SE(qname) */
+	EXI_EVENT_START_ELEMENT,
+	/** Start Element SE(uri:*) */
+	EXI_EVENT_START_ELEMENT_NS,
+	/** Start Element SE(*) generic */
+	EXI_EVENT_START_ELEMENT_GENERIC,
+	/** Start Element SE(*) generic undeclared */
+	EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED,
+	/** End Element EE */
+	EXI_EVENT_END_ELEMENT,
+	/** End Element EE undeclared*/
+	EXI_EVENT_END_ELEMENT_UNDECLARED,
+	/** Characters CH */
+	EXI_EVENT_CHARACTERS,
+	/** Characters CH generic */
+	EXI_EVENT_CHARACTERS_GENERIC,
+	/** Characters CH generic undeclared */
+	EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED,
+	/** Attribute AT(xsi:type) */
+	EXI_EVENT_ATTRIBUTE_XSI_TYPE,
+	/** Attribute AT(xsi:nil) */
+	EXI_EVENT_ATTRIBUTE_XSI_NIL,
+	/** Attribute AT(qname) */
+	EXI_EVENT_ATTRIBUTE,
+	/** Attribute AT(uri:*) */
+	EXI_EVENT_ATTRIBUTE_NS,
+	/** Attribute AT(*) generic */
+	EXI_EVENT_ATTRIBUTE_GENERIC,
+	/** Attribute AT(*) invalid value */
+	EXI_EVENT_ATTRIBUTE_INVALID_VALUE,
+	/** Attribute AT(*) any invalid value */
+	EXI_EVENT_ATTRIBUTE_ANY_INVALID_VALUE,
+	/** Attribute AT(*) generic undeclared */
+	EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED,
+	/* error state */
+	EXI_EVENT_ERROR
+} exi_event_t;
+
+
+/**
+ * \brief 	Bit stream container
+ *
+ *	Structure for byteArray/file stream.
+ *
+ *	# General
+ *	.size defines the maximum size of the byte array (see .data)
+ *
+ *	.data points to the input/output array of bytes (unsigned char*).
+ *
+ *	.pos has to be set to an pointer to an 32 bit long unsigned integer (uint32_t *)
+ *	 as this variable is read/write.
+ *	 Therefore it is best practice to declare the variable itself and use the &-operator
+ *	 to assign the address. The value of that variable points to the position inside the
+ *	 buffer where the stream begins. Which is usually the first (0th) byte but can also be
+ *	 another value if there more information transferred in that stream.
+ *	 After processing .pos points to the next "available" byte (if any left).
+ *
+ *	.buffer has to be set to 0 for internal use only (single byte buffer)
+ *
+ *	# Receiving data (input)
+ *	.capacity is used for addressing single bits in the actual byte (see .buffer)
+ *	 and has to be set to 0, which means there are 0 bits read so far and a new
+ *	 byte needs to be read from the input stream/data-array to the current byte buffer.
+ *
+ *	# Sending data (output)
+ *	.capacity is used for addressing single bits in the actual byte (see .buffer)
+ *	 and has to be set to 8, which means there are still 8 bits left to fill up
+ *	 the current byte buffer before writing the final byte to the output stream/data-array.
+ *
+ */
+typedef struct {
+#if EXI_STREAM == BYTE_ARRAY
+	/**	byte array size */
+	uint16_t size;
+	/**	byte array data */
+	uint8_t* data;
+	/**	byte array next position in array */
+	uint16_t* pos;
+#endif
+#if EXI_STREAM == FILE_STREAM
+	/** file pointer */
+	FILE *file;
+#endif
+	/** Current byte buffer*/
+	uint8_t buffer;
+	/** Remaining bit capacity in current byte buffer*/
+	uint8_t capacity;
+} bitstream_t;
+
+
+/** \brief EXI Value Datatypes */
+typedef enum {
+	/** Binary Base64 */
+	EXI_DATATYPE_BINARY_BASE64,
+	/** Binary Hex */
+	EXI_DATATYPE_BINARY_HEX,
+	/** Boolean */
+	EXI_DATATYPE_BOOLEAN,
+	/** Boolean with Facets */
+	EXI_DATATYPE_BOOLEAN_FACET,
+	/** Decimal */
+	EXI_DATATYPE_DECIMAL,
+	/** Float & Double */
+	EXI_DATATYPE_FLOAT,
+	/** N-Bit Unsigned Integer */
+	EXI_DATATYPE_NBIT_UNSIGNED_INTEGER,
+	/** Unsigned Integer */
+	EXI_DATATYPE_UNSIGNED_INTEGER,
+	/** (Signed) Integer */
+	EXI_DATATYPE_INTEGER,
+	/** Datetime */
+	EXI_DATATYPE_DATETIME,
+	/** String */
+	EXI_DATATYPE_STRING,
+	/** Restricted Character Set String */
+	EXI_DATATYPE_RCS_STRING,
+	/** Enumeration */
+	EXI_DATATYPE_ENUMERATION,
+	/** List */
+	EXI_DATATYPE_LIST,
+	/** QName (e.g. xsi:type) */
+	EXI_DATATYPE_QNAME
+} exi_datatype_t;
+
+
+/** \brief EXI Integer Value types */
+typedef enum {
+	/** Unsigned Integer 8 bits */
+	EXI_UNSIGNED_INTEGER_8,
+	/** Unsigned Integer 16 bits */
+	EXI_UNSIGNED_INTEGER_16,
+	/** Unsigned Integer 32 bits */
+	EXI_UNSIGNED_INTEGER_32,
+	/** Unsigned Integer 64 bits */
+	EXI_UNSIGNED_INTEGER_64,
+	/** (Signed) Integer 8 bits */
+	EXI_INTEGER_8,
+	/** (Signed) Integer 16 bits */
+	EXI_INTEGER_16,
+	/** (Signed) Integer 32 bits */
+	EXI_INTEGER_32,
+	/** (Signed) Integer 64 bits */
+	EXI_INTEGER_64
+} exi_integer_type_t;
+
+
+/** \brief EXI Datetime types */
+typedef enum {
+	/** gYear */
+	EXI_DATETIME_GYEAR,
+	/** gYearMonth */
+	EXI_DATETIME_GYEARMONTH,
+	/** date */
+	EXI_DATETIME_DATE,
+	/** datetime */
+	EXI_DATETIME_DATETIME,
+	/** gMonth */
+	EXI_DATETIME_GMONTH,
+	/** gMonthDay */
+	EXI_DATETIME_GMONTHDAY,
+	/** gDay */
+	EXI_DATETIME_GDAY,
+	/** time */
+	EXI_DATETIME_TIME
+} exi_datetime_type_t;
+
+
+/** \brief String value type */
+typedef enum {
+	/** value miss */
+	EXI_STRING_VALUE_MISS,
+	/** value local-hit */
+	EXI_STRING_VALUE_LOCAL_HIT,
+	/** value global-hit */
+	EXI_STRING_VALUE_GLOBAL_HIT
+} exi_string_value_type_t;
+
+/** \brief EXI string character */
+/* Note: define whether you wan't to support ASCII only or UCS */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII
+typedef char exi_string_character_t;
+#endif /* STRING_REPRESENTATION_ASCII */
+#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS
+typedef uint32_t exi_string_character_t;
+#endif /* STRING_REPRESENTATION_UCS */
+
+
+
+/** \brief Universal Character Set (UCS) strings */
+typedef struct {
+	/** container size  */
+	uint16_t size;
+	/** string character container */
+	exi_string_character_t* characters;
+	/** current string length == number of code-points, (len <= size) */
+	uint16_t len;
+} exi_string_t;
+
+
+/** \brief String value */
+typedef struct {
+	/** value type (e.g., miss, local-hit, global-hit) */
+	exi_string_value_type_t type;
+	/** miss entry */
+	exi_string_t miss;
+	/** (local) hit entry */
+	uint32_t localID;
+	/** (global) hit entry */
+	uint32_t globalID;
+} exi_string_value_t;
+
+
+/** \brief Restricted Characeter Set */
+typedef struct {
+	/** size */
+	uint16_t size;
+	/** rcs codepoints */
+	exi_string_character_t* characters;
+	/** character coding length (less than 256 characters) */
+	uint8_t codingLength;
+} exi_rcs_t;
+
+
+/** \brief Byte value container */
+typedef struct {
+	/** bytes array size */
+	uint16_t size;
+	/** bytes array data container */
+	uint8_t* data;
+	/** bytes array length (len <= size) */
+	uint16_t len;
+} exi_bytes_t;
+
+
+/** \brief Integer value container */
+typedef struct {
+	/** type */
+	exi_integer_type_t type;
+	union {
+		/* (signed) values */
+		/** (signed) int 8 bits */
+		int8_t int8;
+		/** (signed) int 16 bits */
+		int16_t int16;
+		/** (signed) int 32 bits */
+		int32_t int32;
+		/** (signed) int 64 bits */
+		int64_t int64;
+		/* unsigned values */
+		/** unsigned int 8 bits */
+		uint8_t uint8;
+		/** unsigned int 16 bits */
+		uint16_t uint16;
+		/** unsigned int 32 bits */
+		uint32_t uint32;
+		/** unsigned int 64 bits */
+		uint64_t uint64;
+	} val;
+} exi_integer_t;
+
+
+/** \brief Float value container */
+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 */
+	int16_t exponent; /* base-10 */
+} exi_float_me_t;
+
+
+/** \brief Decimal value container */
+typedef struct {
+	/** a sign value */
+	int negative;
+	/** represents the integral portion of the Decimal */
+	exi_integer_t integral;
+	/** represents the fractional portion of the Decimal with the digits in reverse order to preserve leading zeros */
+	exi_integer_t reverseFraction;
+} exi_decimal_t;
+
+
+/** \brief Datetime value container */
+typedef struct {
+	/** datetime type */
+	exi_datetime_type_t type;
+	/** Datetime value for year */
+	int32_t year;
+	/** Datetime value for monthDay */
+	uint32_t monthDay;
+	/** Datetime value for time */
+	uint32_t time;
+	/** Datetime value for presenceFractionalSecs */
+	int presenceFractionalSecs;
+	/** Datetime value for fractionalSecs */
+	uint32_t fractionalSecs;
+	/** Datetime value for presenceTimezone */
+	int presenceTimezone;
+	/** Datetime value for timezone */
+	uint32_t timezone;
+} exi_datetime_t;
+
+
+/** \brief List value container */
+typedef struct {
+	/** list item type */
+	exi_datatype_t type;
+	/** number of items */
+	uint16_t len;
+	/* Special datatype: integer */
+	/* exi_integer_type_t intType;*/
+	/** Special datatype: datetime */
+	exi_datetime_type_t datetimeType;
+} exi_list_t;
+
+
+/** \brief Efficient qname */
+typedef struct {
+	/** namespace URI ID*/
+	uint16_t namespaceURI;
+	/** local name ID*/
+	uint16_t localPart;
+} exi_eqname_t;
+
+
+/** \brief Name entry type */
+typedef enum {
+	/** As known IDs */
+	EXI_NAME_ENTRY_TYPE_ID,
+	/** As String */
+	EXI_NAME_ENTRY_TYPE_STRING_AND_ID
+} exi_name_entry_type_t;
+
+
+/** \brief Name entry */
+typedef struct {
+	/** type */
+	exi_name_entry_type_t type;
+	/** entry ID */
+	uint16_t id;
+	/** entry string */
+	exi_string_t str;
+} exi_name_entry_t;
+
+
+/** \brief Qualified name */
+typedef struct {
+	/** Uri */
+	exi_name_entry_t uri;
+	/** LocalName */
+	exi_name_entry_t localName;
+} exi_qname_t;
+
+
+/*TODO Doxygen Documentation */
+
+
+
+
+
+
+/* ==================================== */
+/* URI and LocalName Entries */
+typedef struct exiNameTablePrepopulated {
+	/* number of namespaces AND length name-partitions array */
+	uint16_t len;
+	/* number of localName entries divided by URI */
+	uint16_t * localNames;
+} exi_name_table_prepopulated_t;
+
+#define EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES 25
+
+typedef enum {
+	EXI_NAME_PARTITION_URI, EXI_NAME_PARTITION_LOCALNAME
+} exi_name_partition_type_t;
+
+typedef struct {
+	char* uri;
+	uint16_t uriID;
+} exi_uri_partition_t;
+
+typedef struct {
+	char* localName;
+	uint16_t localNameID;
+	uint16_t uriID;
+} exi_localname_partition_t;
+
+typedef struct {
+	exi_name_partition_type_t namePartitionType;
+	struct {
+		exi_uri_partition_t uriPartition;
+		exi_localname_partition_t localNamePartition;
+	} entry;
+} exi_name_partition_t;
+
+typedef struct exiNameTableRuntime {
+	/* maximum number of characters in the name partitions entries PLUS null terminators */
+	/* char characters[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS + EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES]; */
+	/* uint16_t numberOfUsedCharacters; *//* initially zero <= EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS */
+	/* maximum number of name partitions entries. Name partitions entries consist in all uri, and local-name partition entries */
+	exi_name_partition_t
+			namePartitionsEntries[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES];
+	/* uint16_t numberOfUsedNamePartitions; *//* initially zero */
+	/* added entries */
+	uint16_t addedUriEntries; /* initially zero */
+	uint16_t addedLocalNameEntries; /* initially zero */
+} exi_name_table_runtime_t;
+
+
+/* StartTagContent grammar initially empty */
+/* ElementContent grammar has EE per default */
+typedef struct {
+	uint16_t qnameID;
+	uint16_t numberOfProductions;
+	int hasXsiType; /* StartTagContent only */
+	int hasEE; /* ElementContentper default TRUE */
+} exi_runtime_element_t;
+
+/* Note: We do have twice as many runtime grammars (StartTagContent and ElementContent)*/
+#define MAX_NUMBER_OF_RUNTIME_ELEMENTS 80
+
+
+
+/* ==================================== */
+/* Value string table */
+typedef struct exiValueStringTableEntry {
+	/** Qualified name ID */
+	uint16_t qnameID;
+	/** Local Value ID */
+	uint16_t localValueID;
+	/** String */
+	exi_string_t str;
+} exi_value_string_table_entry_t;
+
+typedef struct exiValueStringTable {
+	/** maximum number of global string table entry size */
+	uint16_t size;
+	/** string table entry array container */
+	exi_value_string_table_entry_t* strs;
+	/** current number of string table entries (len <= size) */
+	uint16_t len;
+} exi_value_string_table_t;
+
+typedef struct {
+	/** number of global strings */
+	uint16_t numberOfGlobalStrings;
+	/** size of local-names container */
+	uint16_t sizeLocalStrings;
+	/** number of local strings container */
+	uint16_t* numberOfLocalStrings;
+	/** string values */
+	exi_value_string_table_t* valueStringTable;
+} exi_value_table_t;
+
+typedef struct {
+	/** stack of grammar states */
+	int16_t grammarStack[EXI_ELEMENT_STACK_SIZE];
+	/** stack of grammar elements / qnameIDs */
+	uint16_t elementStack[EXI_ELEMENT_STACK_SIZE];
+	/** stack index for both stacks */
+	uint16_t stackIndex;
+
+	/** event-code */
+	uint32_t eventCode;
+
+	/** name table entries, pre-populated */
+	exi_name_table_prepopulated_t nameTablePrepopulated;
+	/** name table entries, at runtime */
+	exi_name_table_runtime_t nameTableRuntime;
+
+	/** next qname ID */
+	uint16_t nextQNameID;
+
+	/** string table entries */
+	exi_value_table_t stringTable;
+
+	/** runtime built-in element grammars - numbers */
+	uint16_t numberOfRuntimeGrammars;
+	/** runtime built-in element grammars */
+	exi_runtime_element_t runtimeGrammars[MAX_NUMBER_OF_RUNTIME_ELEMENTS * 2];
+} exi_state_t;
+
+typedef struct {
+	/* type of value */
+	exi_datatype_t type;
+
+	/* base types */
+	int boolean;
+	uint32_t enumeration;
+
+	/* complex types: Integers, Bytes, Strings and Lists are not native types anymore */
+	exi_integer_t integer;
+	exi_bytes_t binary;
+	exi_string_value_t str;
+	exi_float_me_t float_me;
+	exi_decimal_t decimal;
+	exi_datetime_t datetime;
+	exi_list_t list;
+	exi_eqname_t eqname;
+} exi_value_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 362 - 298
src/codec/EncoderChannel.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,305 +18,370 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXITypes.h"
-
-/**
- * \file 	EncoderChannel.h
- * \brief 	EXI Encoder Channel
- *
- */
-
-#ifndef ENCODER_CHANNEL_H
-#define ENCODER_CHANNEL_H
-
-/**
- * \brief 		Encode byte value
- *
- * \param       stream   		Output Stream
- * \param       b		   		byte
- * \return                  	Error-Code <> 0
- *
- */
-int encode(bitstream_t* stream, uint8_t b);
-
-
-/**
- * \brief 		Encode a single boolean value
- *
- * 				A false value is encoded as 0 and true value is encode as 1.
- *
- * \param       stream   		Output Stream
- * \param       b		   		boolean
- * \return                  	Error-Code <> 0
- *
- */
-int encodeBoolean(bitstream_t* stream, int b);
-
-
-/**
- * \brief 		Encode n-bit unsigned integer
- *
- * 				The n least significant bits of parameter b starting with the
- * 				most significant, i.e. from left to right.
- *
- * \param       stream   		Output Stream
- * \param       nbits		   	number of bits
- * \param       val		   		value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val);
-
-
-/**
- * \brief 		Encode unsigned integer
- *
- * 				Encode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Output Stream
- * \param       iv		   		Unsigned integer value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv);
-
-
-/**
- * \brief 		Encode unsigned integer
- *
- * 				Encode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Output Stream
- * \param       n		   		Unsigned integer value 32 bits
- * \return                  	Error-Code <> 0
- *
- */
-int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n);
-
-
-/**
- * \brief 		Encode unsigned integer
- *
- * 				Encode an arbitrary precision non negative integer using
- * 				a sequence of octets. The most significant bit of the last
- * 				octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Output Stream
- * \param       n		   		Unsigned integer value 64 bits
- * \return                  	Error-Code <> 0
- *
- */
-int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n);
-
-
-/**
- * \brief 		Encode integer
- *
- * 				Encode an arbitrary precision integer using a sign boolean
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Output Stream
- * \param       iv		   		Integer value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeInteger(bitstream_t* stream, exi_integer_t* iv);
-
-
-/**
- * \brief 		Encode integer
- *
- * 				Encode an arbitrary precision integer using a sign boolean
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Output Stream
- * \param       n		   		Integer value 32 bits
- * \return                  	Error-Code <> 0
- *
- */
-int encodeInteger32(bitstream_t* stream, int32_t n);
-
-
-/**
- * \brief 		Encode integer
- *
- * 				Encode an arbitrary precision integer using a sign boolean
- * 				followed by a sequence of octets. The most significant bit
- * 				of the last octet is set to zero to indicate sequence termination.
- * 				Only seven bits per octet are used to store the integer's value.
- *
- * \param       stream   		Output Stream
- * \param       n		   		Integer value 64 bits
- * \return                  	Error-Code <> 0
- *
- */
-int encodeInteger64(bitstream_t* stream, int64_t n);
-
-
-/**
- * \brief 		Encode float
- *
- * 				Encode a Float datatype as two consecutive Integers. The first
- * 				Integer represents the mantissa of the floating point number
- * 				and the second Integer represents the base-10 exponent of the
- * 				floating point number.
- *
- * \param       stream   		Output Stream
- * \param       f		   		Float value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeFloat(bitstream_t* stream, exi_float_me_t* f);
-
-
-/**
- * \brief 		Encode decimal
- *
- * 				Encode a decimal represented as a Boolean sign followed by two
- * 				Unsigned Integers. A sign value of zero (0) is used to represent
- * 				positive Decimal values and a sign value of one (1) is used to
- * 				represent negative Decimal values The first Integer represents
- * 				the integral portion of the Decimal value. The second positive
- * 				integer represents the fractional portion of the decimal with
- * 				the digits in reverse order to preserve leading zeros.
- *
- * \param       stream   		Output Stream
- * \param       d		   		Decimal value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeDecimal(bitstream_t* stream, exi_decimal_t* d);
-
-
-/**
- * \brief 		Encode string
- *
- * 				Encode a length prefixed sequence of characters.
- *
- * \param       stream   		Output Stream
- * \param       string		   	String
- * \return                  	Error-Code <> 0
- *
- */
-int encodeString(bitstream_t* stream, exi_string_ucs_t* string);
-
-
-/**
- * \brief 		Encode string value
- *
- * 				 Encode a length prefixed sequence of characters
- * 				 in the sense of string tables
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       string		   	String value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
-		exi_string_value_t* string);
-
-
-/**
- * \brief 		Encode restricted character set value
- *
- * 				 Encode a length prefixed sequence of characters
- * 				 in the sense of string tables
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       rcs   			Restricted character set
- * \param       string		   	String value
- * \return                  	Error-Code <> 0
- *
- */
-int encodeRCSStringValue(bitstream_t* stream, exi_state_t* state,
-		uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* string);
-
-
-/**
- * \brief 		Encode characters
- *
- * 				Encode a sequence of characters according to a given length.
- * 				Each character is represented by its UCS [ISO/IEC 10646]
- * 				code point encoded as an Unsigned Integer.
- *
- * \param       stream   		Output Stream
- * \param       chars   		Characters
- * \param       len				Numbr of characters
- * \return                  	Error-Code <> 0
- *
- */
-int encodeUCSCharacters(bitstream_t* stream, uint32_t* chars, uint16_t len);
-
-
-/**
- * \brief 		Encode binary
- *
- * 				Encode a binary value as a length-prefixed sequence of octets.
- *
- * \param       stream   		Output Stream
- * \param       bytes   		Byte values
- * \return                  	Error-Code <> 0
- *
- */
-int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes);
-
-
-/**
- * \brief 		Encode datetime
- *
- * 				Encode a datetime representation which is a sequence of values
- * 				representing the individual components of the Date-Time.
- *
- * \param       stream   		Output Stream
- * \param       datetime   		Datetime values
- * \return                  	Error-Code <> 0
- *
- */
-int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime);
-
-
-/**
- * \brief 		Flush underlying bit output stream
- *
- * \param       stream   		Output Stream
- * \return                  	Error-Code <> 0
- *
- */
-int encodeFinish(bitstream_t* stream);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
+
+
+/**
+ * \file 	EncoderChannel.h
+ * \brief 	EXI Encoder Channel
+ *
+ */
+
+#ifndef ENCODER_CHANNEL_H
+#define ENCODER_CHANNEL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "EXITypes.h"
+
+
+/**
+ * \brief 		Encode byte value
+ *
+ * \param       stream   		Output Stream
+ * \param       b		   		byte
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encode(bitstream_t* stream, uint8_t b);
+
+
+/**
+ * \brief 		Encode a single boolean value
+ *
+ * 				A false value is encoded as 0 and true value is encode as 1.
+ *
+ * \param       stream   		Output Stream
+ * \param       b		   		boolean
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeBoolean(bitstream_t* stream, int b);
+
+
+/**
+ * \brief 		Encode n-bit unsigned integer
+ *
+ * 				The n least significant bits of parameter b starting with the
+ * 				most significant, i.e. from left to right.
+ *
+ * \param       stream   		Output Stream
+ * \param       nbits		   	number of bits
+ * \param       val		   		value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeNBitUnsignedInteger(bitstream_t* stream, uint16_t nbits, uint32_t val);
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       iv		   		Unsigned integer value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Unsigned integer value 16 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger16(bitstream_t* stream, uint16_t n);
+
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Unsigned integer value 32 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n);
+
+
+/**
+ * \brief 		Encode unsigned integer
+ *
+ * 				Encode an arbitrary precision non negative integer using
+ * 				a sequence of octets. The most significant bit of the last
+ * 				octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Unsigned integer value 64 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n);
+
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       iv		   		Integer value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger(bitstream_t* stream, exi_integer_t* iv);
+
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Integer value 16 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger16(bitstream_t* stream, int16_t n);
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Integer value 32 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger32(bitstream_t* stream, int32_t n);
+
+
+/**
+ * \brief 		Encode integer
+ *
+ * 				Encode an arbitrary precision integer using a sign boolean
+ * 				followed by a sequence of octets. The most significant bit
+ * 				of the last octet is set to zero to indicate sequence termination.
+ * 				Only seven bits per octet are used to store the integer's value.
+ *
+ * \param       stream   		Output Stream
+ * \param       n		   		Integer value 64 bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeInteger64(bitstream_t* stream, int64_t n);
+
+
+/**
+ * \brief 		Encode float
+ *
+ * 				Encode a Float datatype as two consecutive Integers. The first
+ * 				Integer represents the mantissa of the floating point number
+ * 				and the second Integer represents the base-10 exponent of the
+ * 				floating point number.
+ *
+ * \param       stream   		Output Stream
+ * \param       f		   		Float value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeFloat(bitstream_t* stream, exi_float_me_t* f);
+
+
+/**
+ * \brief 		Encode decimal
+ *
+ * 				Encode a decimal represented as a Boolean sign followed by two
+ * 				Unsigned Integers. A sign value of zero (0) is used to represent
+ * 				positive Decimal values and a sign value of one (1) is used to
+ * 				represent negative Decimal values The first Integer represents
+ * 				the integral portion of the Decimal value. The second positive
+ * 				integer represents the fractional portion of the decimal with
+ * 				the digits in reverse order to preserve leading zeros.
+ *
+ * \param       stream   		Output Stream
+ * \param       d		   		Decimal value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeDecimal(bitstream_t* stream, exi_decimal_t* d);
+
+
+/**
+ * \brief 		Encode string
+ *
+ * 				Encode a length prefixed sequence of characters.
+ *
+ * \param       stream   		Output Stream
+ * \param       string		   	String
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeString(bitstream_t* stream, exi_string_t* string);
+
+
+/**
+ * \brief 		Encode string value
+ *
+ * 				 Encode a length prefixed sequence of characters
+ * 				 in the sense of string tables
+ *
+ * \param       stream   		Output Stream
+ * \param       state   		Codec state
+ * \param       qnameID   		Qualified Name ID
+ * \param       string		   	String value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeStringValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
+		exi_string_value_t* string);
+
+
+/**
+ * \brief 		Encode restricted character set value
+ *
+ * 				 Encode a length prefixed sequence of characters
+ * 				 in the sense of string tables
+ *
+ * \param       stream   		Output Stream
+ * \param       state   		Codec state
+ * \param       qnameID   		Qualified Name ID
+ * \param       rcs   			Restricted character set
+ * \param       string		   	String value
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeRCSStringValue(bitstream_t* stream, exi_state_t* state,
+		uint16_t qnameID, exi_rcs_t* rcs, exi_string_value_t* string);
+
+
+/**
+ * \brief 		Encode characters
+ *
+ * 				Encode a sequence of characters according to a given length.
+ * 				Each character is represented by its UCS [ISO/IEC 10646]
+ * 				code point encoded as an Unsigned Integer.
+ *
+ * \param       stream   		Output Stream
+ * \param       chars   		Characters
+ * \param       len				Numbr of characters
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeCharacters(bitstream_t* stream, exi_string_character_t* chars, uint16_t len);
+
+
+/**
+ * \brief 		Encode characters
+ *
+ * 				Encode a sequence of characters according to a given length.
+ * 				Each character is represented by its UCS [ISO/IEC 10646]
+ * 				code point encoded as an Unsigned Integer.
+ *
+ * \param       stream   		Output Stream
+ * \param       chars   		Characters
+ * \param       len				Numbr of characters
+ *  \param       rcsCodeLength   RCS code-length
+ * \param       rcsCodeLength   RCS size
+ * \param       rcsCodeLength   RCS set
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeRCSCharacters(bitstream_t* stream, exi_string_character_t* chars, uint16_t len, uint16_t rcsCodeLength, uint16_t rcsSize, const exi_string_character_t rcsSet[]);
+
+
+
+/**
+ * \brief 		Encode binary
+ *
+ * 				Encode a binary value as a length-prefixed sequence of octets.
+ *
+ * \param       stream   		Output Stream
+ * \param       bytes   		Byte values
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes);
+
+
+/**
+ * \brief 		Encode binary data
+ *
+ * 				Encode a sequence of octets.
+ *
+ * \param       stream   		Output Stream
+ * \param       data	   		Byte values
+ * \param       len		   		Length
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeBytes(bitstream_t* stream, uint8_t* data, uint16_t len);
+
+/**
+ * \brief 		Encode datetime
+ *
+ * 				Encode a datetime representation which is a sequence of values
+ * 				representing the individual components of the Date-Time.
+ *
+ * \param       stream   		Output Stream
+ * \param       datetime   		Datetime values
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime);
+
+
+/**
+ * \brief 		Flush underlying bit output stream
+ *
+ * \param       stream   		Output Stream
+ * \return                  	Error-Code <> 0
+ *
+ */
+int encodeFinish(bitstream_t* stream);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 95 - 92
src/codec/ErrorCodes.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,107 +10,110 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
+
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	ErrorCodes.h
- * \brief 	Error Codes descriptions
- *
- */
-
-#ifndef EXI_ERROR_CODES_H
-#define EXI_ERROR_CODES_H
-
-
-#define EXI_ERROR_INPUT_STREAM_EOF -10
-#define EXI_ERROR_OUTPUT_STREAM_EOF -11
-#define EXI_ERROR_INPUT_FILE_HANDLE -12
-#define EXI_ERROR_OUTPUT_FILE -13
-
-#define EXI_ERROR_OUT_OF_BOUNDS -100
-#define EXI_ERROR_OUT_OF_STRING_BUFFER -101
-/*#define EXI_ERROR_OUT_OF_ASCII_BUFFER -102 */
-#define EXI_ERROR_OUT_OF_BYTE_BUFFER -103
-#define EXI_ERROR_OUT_OF_GRAMMAR_STACK -104
-#define EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK -105
-#define EXI_ERROR_OUT_OF_QNAMES -106
-
-#define EXI_ERROR_UNKOWN_EVENT -109
-#define EXI_ERROR_UNKOWN_EVENT_CODE -110
-#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL1 -111
-#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL2 -112
-
-#define EXI_ERROR_UNEXPECTED_START_DOCUMENT -113
-#define EXI_ERROR_UNEXPECTED_END_DOCUMENT -114
-#define EXI_ERROR_UNEXPECTED_START_ELEMENT -115
-#define EXI_ERROR_UNEXPECTED_START_ELEMENT_NS -116
-#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC -117
-#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC_UNDECLARED -118
-#define EXI_ERROR_UNEXPECTED_END_ELEMENT -119
-#define EXI_ERROR_UNEXPECTED_CHARACTERS -120
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE -121
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS -122
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC -123
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED -124
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE -125
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL -126
-#define EXI_ERROR_UNEXPECTED_GRAMMAR_ID -127
-#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE -128
-
-#define EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH -132
-#define EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS -133
-#define EXI_UNSUPPORTED_INTEGER_VALUE -134
-#define EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE -135
-#define EXI_UNSUPPORTED_LIST_VALUE_TYPE -136
-#define EXI_UNSUPPORTED_HEADER_COOKIE -137
-#define EXI_UNSUPPORTED_HEADER_OPTIONS -138
-
-#define EXI_UNSUPPORTED_GLOBAL_ATTRIBUTE_VALUE_TYPE -139
-#define EXI_UNSUPPORTED_STRING_VALUE_TYPE -140
-#define EXI_UNSUPPORTED_INTEGER_VALUE_TYPE -141
-#define EXI_UNSUPPORTED_DATETIME_TYPE -142
-
-#define EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH -150
-
-/* string values */
-#define EXI_ERROR_STRINGVALUES_NOT_SUPPORTED -160
-#define EXI_ERROR_STRINGVALUES_OUT_OF_ENTRIES -161
-#define EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY 162
-#define EXI_ERROR_STRINGVALUES_OUT_OF_BOUND 163
-
-#define EXI_ERROR_UNEXPECTED_BYTE_VALUE -200
-
-
-#define EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS -300
-#define EXI_ERROR_CONVERSION_TYPE_TO_STRING -301
-
-
-#define EXI_DEVIANT_SUPPORT_NOT_DEPLOYED -500
-
-
-#endif /* EXI_ERROR_CODES_H */
-
-#ifdef __cplusplus
-}
-#endif
+
+
+/**
+ * \file 	ErrorCodes.h
+ * \brief 	Error Codes descriptions
+ *
+ */
+
+#ifndef EXI_ERROR_CODES_H
+#define EXI_ERROR_CODES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define EXI_ERROR_INPUT_STREAM_EOF -10
+#define EXI_ERROR_OUTPUT_STREAM_EOF -11
+#define EXI_ERROR_INPUT_FILE_HANDLE -12
+#define EXI_ERROR_OUTPUT_FILE -13
+
+#define EXI_ERROR_OUT_OF_BOUNDS -100
+#define EXI_ERROR_OUT_OF_STRING_BUFFER -101
+/*#define EXI_ERROR_OUT_OF_ASCII_BUFFER -102 */
+#define EXI_ERROR_OUT_OF_BYTE_BUFFER -103
+#define EXI_ERROR_OUT_OF_GRAMMAR_STACK -104
+#define EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK -105
+#define EXI_ERROR_OUT_OF_QNAMES -106
+
+#define EXI_ERROR_UNKOWN_GRAMMAR_ID -108
+#define EXI_ERROR_UNKOWN_EVENT -109
+#define EXI_ERROR_UNKOWN_EVENT_CODE -110
+#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL1 -111
+#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL2 -112
+
+#define EXI_ERROR_UNEXPECTED_START_DOCUMENT -113
+#define EXI_ERROR_UNEXPECTED_END_DOCUMENT -114
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT -115
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT_NS -116
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC -117
+#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC_UNDECLARED -118
+#define EXI_ERROR_UNEXPECTED_END_ELEMENT -119
+#define EXI_ERROR_UNEXPECTED_CHARACTERS -120
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE -121
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS -122
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC -123
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED -124
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE -125
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL -126
+#define EXI_ERROR_UNEXPECTED_GRAMMAR_ID -127
+#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE -128
+
+#define EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH -132
+#define EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS -133
+#define EXI_UNSUPPORTED_INTEGER_VALUE -134
+#define EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE -135
+#define EXI_UNSUPPORTED_LIST_VALUE_TYPE -136
+#define EXI_UNSUPPORTED_HEADER_COOKIE -137
+#define EXI_UNSUPPORTED_HEADER_OPTIONS -138
+
+#define EXI_UNSUPPORTED_GLOBAL_ATTRIBUTE_VALUE_TYPE -139
+#define EXI_UNSUPPORTED_DATATYPE -140
+#define EXI_UNSUPPORTED_STRING_VALUE_TYPE -141
+#define EXI_UNSUPPORTED_INTEGER_VALUE_TYPE -142
+#define EXI_UNSUPPORTED_DATETIME_TYPE -143
+
+#define EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH -150
+
+/* string values */
+#define EXI_ERROR_STRINGVALUES_NOT_SUPPORTED -160
+#define EXI_ERROR_STRINGVALUES_OUT_OF_ENTRIES -161
+#define EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY -162
+#define EXI_ERROR_STRINGVALUES_OUT_OF_BOUND -163
+#define EXI_ERROR_STRINGVALUES_CHARACTER -164
+
+#define EXI_ERROR_UNEXPECTED_BYTE_VALUE -200
+
+
+#define EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS -300
+#define EXI_ERROR_CONVERSION_TYPE_TO_STRING -301
+
+
+#define EXI_DEVIANT_SUPPORT_NOT_DEPLOYED -500
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* EXI_ERROR_CODES_H */
+

+ 92 - 93
src/codec/MethodsBag.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,100 +18,100 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifndef METHODS_BAG_C
-#define METHODS_BAG_C
-
-#include "MethodsBag.h"
-#include "ErrorCodes.h"
-
-static const uint16_t smallLengths[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4,
-		4, 4, 4 };
-
-int exiGetCodingLength(uint16_t characteristics, uint16_t* codingLength) {
-	/* Note: we could use range expressions in switch statements but those are non-standard */
-	/* e.g., case 1 ... 5: */
-	int errn = 0;
-	if (characteristics < 17) {
-		*codingLength = smallLengths[characteristics];
-	} else if (characteristics < 33) {
-		/* 17 .. 32 */
-		*codingLength = 5;
-	} else if (characteristics < 65) {
-		/* 33 .. 64 */
-		*codingLength = 6;
-	} else if (characteristics < 129) {
-		/* 65 .. 128 */
-		*codingLength = 7;
-	} else if (characteristics < 257) {
-		/* 129 .. 256 */
-		*codingLength = 8;
-	} else if (characteristics < 513) {
-		/* 257 .. 512 */
-		*codingLength = 9;
-	} else if (characteristics < 1025) {
-		/* 513 .. 1024 */
-		*codingLength = 10;
-	} else if (characteristics < 2049) {
-		/* 1025 .. 2048 */
-		*codingLength = 11;
-	} else if (characteristics < 4097) {
-		/* 2049 .. 4096 */
-		*codingLength = 12;
-	} else if (characteristics < 8193) {
-		/* 4097 .. 8192 */
-		*codingLength = 13;
-	} else if (characteristics < 16385) {
-		/* 8193 .. 16384 */
-		*codingLength = 14;
-	} else if (characteristics < 32769) {
-		/* 16385 .. 32768 */
-		*codingLength = 15;
-	} else {
-		/* 32769 .. 65536 */
-		*codingLength = 16;
-	}
-	return errn;
-}
-
-
-uint8_t numberOf7BitBlocksToRepresent(uint32_t n) {
-	/* assert (n >= 0); */
-
-	/* 7 bits */
-	if (n < 128) {
-		return 1;
-	}
-	/* 14 bits */
-	else if (n < 16384) {
-		return 2;
-	}
-	/* 21 bits */
-	else if (n < 2097152) {
-		return 3;
-	}
-	/* 28 bits */
-	else if (n < 268435456) {
-		return 4;
-	}
-	/* 35 bits */
-	else {
-		/* int, 32 bits */
-		return 5;
-	}
-}
-
-
-
-#endif
-
+
+
+#ifndef METHODS_BAG_C
+#define METHODS_BAG_C
+
+#include "MethodsBag.h"
+#include "ErrorCodes.h"
+
+static const uint16_t smallLengths[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4,
+		4, 4, 4 };
+
+int exiGetCodingLength(uint16_t characteristics, uint16_t* codingLength) {
+	/* Note: we could use range expressions in switch statements but those are non-standard */
+	/* e.g., case 1 ... 5: */
+	int errn = 0;
+	if (characteristics < 17) {
+		*codingLength = smallLengths[characteristics];
+	} else if (characteristics < 33) {
+		/* 17 .. 32 */
+		*codingLength = 5;
+	} else if (characteristics < 65) {
+		/* 33 .. 64 */
+		*codingLength = 6;
+	} else if (characteristics < 129) {
+		/* 65 .. 128 */
+		*codingLength = 7;
+	} else if (characteristics < 257) {
+		/* 129 .. 256 */
+		*codingLength = 8;
+	} else if (characteristics < 513) {
+		/* 257 .. 512 */
+		*codingLength = 9;
+	} else if (characteristics < 1025) {
+		/* 513 .. 1024 */
+		*codingLength = 10;
+	} else if (characteristics < 2049) {
+		/* 1025 .. 2048 */
+		*codingLength = 11;
+	} else if (characteristics < 4097) {
+		/* 2049 .. 4096 */
+		*codingLength = 12;
+	} else if (characteristics < 8193) {
+		/* 4097 .. 8192 */
+		*codingLength = 13;
+	} else if (characteristics < 16385) {
+		/* 8193 .. 16384 */
+		*codingLength = 14;
+	} else if (characteristics < 32769) {
+		/* 16385 .. 32768 */
+		*codingLength = 15;
+	} else {
+		/* 32769 .. 65536 */
+		*codingLength = 16;
+	}
+	return errn;
+}
+
+
+uint8_t numberOf7BitBlocksToRepresent(uint32_t n) {
+	/* assert (n >= 0); */
+
+	/* 7 bits */
+	if (n < 128) {
+		return 1;
+	}
+	/* 14 bits */
+	else if (n < 16384) {
+		return 2;
+	}
+	/* 21 bits */
+	else if (n < 2097152) {
+		return 3;
+	}
+	/* 28 bits */
+	else if (n < 268435456) {
+		return 4;
+	}
+	/* 35 bits */
+	else {
+		/* int, 32 bits */
+		return 5;
+	}
+}
+
+
+
+#endif
+

+ 45 - 45
src/codec/MethodsBag.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,52 +18,53 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifndef METHODS_BAG_H
-#define METHODS_BAG_H
-
-/**
-* \file 	MethodsBag.h
-* \brief 	Method bag for bit and octet functions
-*
-*/
-
-
-#include <stdint.h>
-
-
-/**
- * \brief  	Returns the number of bits to identify the characteristics.
- *
- * \param       characteristics	number of characteristics
- * \param       codingLength   	number of bits
- * \return                  	Error-Code <> 0
- *
- */
-int exiGetCodingLength(uint16_t characteristics, uint16_t* codingLength);
-
-
-/**
- * \brief  	Returns the least number of 7 bit-blocks that is needed to represent the passed integer value
- *
- *			Note: Returns 1 if passed parameter is 0.
- *
- * \param       n				integer value
- * \return                  	Error-Code <> 0
- *
- */
-uint8_t numberOf7BitBlocksToRepresent(uint32_t n);
-
-
-#endif
-
+
+
+/**
+* \file 	MethodsBag.h
+* \brief 	Method bag for bit and octet functions
+*
+*/
+
+#ifndef METHODS_BAG_H
+#define METHODS_BAG_H
+
+
+
+#include <stdint.h>
+
+
+/**
+ * \brief  	Returns the number of bits to identify the characteristics.
+ *
+ * \param       characteristics	number of characteristics
+ * \param       codingLength   	number of bits
+ * \return                  	Error-Code <> 0
+ *
+ */
+int exiGetCodingLength(uint16_t characteristics, uint16_t* codingLength);
+
+
+/**
+ * \brief  	Returns the least number of 7 bit-blocks that is needed to represent the passed integer value
+ *
+ *			Note: Returns 1 if passed parameter is 0.
+ *
+ * \param       n				integer value
+ * \return                  	Error-Code <> 0
+ *
+ */
+uint8_t numberOf7BitBlocksToRepresent(uint32_t n);
+
+
+#endif
+

+ 0 - 118
src/codec/StringNameTable.c

@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef STRING_NAME_TABLE_C
-#define STRING_NAME_TABLE_C
-
-#include <string.h>
-
-#include "StringNameTable.h"
-#include "v2gNameTableEntries.h"
-#include "ErrorCodes.h"
-
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'runtimeTable' */
-#endif /* __GNUC__ */
-int exiGetUriSize(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable, uint16_t* uriLength) {
-	*uriLength = prepopulatedTable->len;
-	return 0;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'runtimeTable' */
-#endif /* __GNUC__ */
-
-
-int exiGetLocalNameSize(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable,
-		uint16_t uriID, uint16_t* localNameLength) {
-	int errn = 0;
-	*localNameLength = 0;
-	/* 1. pre-populated entries*/
-	if (uriID < prepopulatedTable->len) {
-		(*localNameLength) = (uint16_t)(*localNameLength + prepopulatedTable->localNames[uriID]);
-	} else {
-		/* range check */
-		if (uriID >= ( prepopulatedTable->len + runtimeTable->addedUriEntries )) {
-			errn = EXI_ERROR_OUT_OF_BOUNDS;
-		}
-	}
-	/* 2. runtime entries */
-	if (errn == 0 && runtimeTable->addedLocalNameEntries > 0 ) {
-		int i;
-		for(i=0; i<(runtimeTable->addedUriEntries+runtimeTable->addedLocalNameEntries); i++) {
-			if ( runtimeTable->namePartitionsEntries[i].namePartitionType == EXI_NAME_PARTITION_LOCALNAME &&
-					runtimeTable->namePartitionsEntries[i].entry.localNamePartition.uriID == uriID ) {
-				(*localNameLength)++;
-			}
-		}
-	}
-
-	return errn;
-}
-
-
-/* inline */
-/*
-static int _max(int a, int b) {
-	return (a > b) ? a : b;
-}
-*/
-
-int exiInitNameTableRuntime(exi_name_table_runtime_t* runtimeTable) {
-	/*runtimeTable->numberOfUsedCharacters = 0;*/
-	runtimeTable->addedLocalNameEntries = 0;
-	runtimeTable->addedUriEntries = 0;
-	return 0;
-}
-
-int exiAddUri(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable) {
-	uint16_t index = (uint16_t)(runtimeTable->addedUriEntries + runtimeTable->addedLocalNameEntries);
-	runtimeTable->namePartitionsEntries[index].namePartitionType = EXI_NAME_PARTITION_URI;
-	runtimeTable->namePartitionsEntries[index].entry.uriPartition.uriID = (uint16_t)(prepopulatedTable->len + runtimeTable->addedUriEntries);
-	runtimeTable->addedUriEntries++;
-	return 0;
-}
-
-int exiAddLocalName(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable, uint16_t uriID, uint16_t* localNameID) {
-	uint16_t index = (uint16_t)(runtimeTable->addedUriEntries + runtimeTable->addedLocalNameEntries);
-	int errn = exiGetLocalNameSize(prepopulatedTable, runtimeTable, uriID, localNameID);
-	if (errn == 0) {
-		runtimeTable->namePartitionsEntries[index].namePartitionType = EXI_NAME_PARTITION_LOCALNAME;
-		runtimeTable->namePartitionsEntries[index].entry.localNamePartition.localNameID = *localNameID;
-		runtimeTable->namePartitionsEntries[index].entry.localNamePartition.uriID = uriID;
-		runtimeTable->addedLocalNameEntries++;
-	}
-	return errn;
-}
-
-#endif
-

+ 0 - 119
src/codec/StringNameTable.h

@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	StringNameTable.h
- * \brief 	String table count implementation
- *
- */
-
-#ifndef STRING_NAME_TABLE_H
-#define STRING_NAME_TABLE_H
-
-#include "EXITypes.h"
-
-
-/**
- * \brief  		Init name table
- *
- * 				Inits counter et cetera
- *
- * \param       runtimeTable	Runtime Table
- * \return                  	Error-Code <> 0
- *
- */
-int exiInitNameTableRuntime(exi_name_table_runtime_t* runtimeTable);
-
-
-/**
- * \brief  		Get Uri Size
- *
- * \param       prepopulatedTable	Pre-Populated Table
- * \param       runtimeTable		Runtime Table
- * \param       uriLength			Uri Size (out)
- * \return                  		Error-Code <> 0
- *
- */
-int exiGetUriSize(exi_name_table_prepopulated_t* prepopulatedTable,
-		exi_name_table_runtime_t* runtimeTable, uint16_t* uriLength);
-
-
-/**
- * \brief  		Get LocalName Size
- *
- * \param       prepopulatedTable	Pre-Populated Table
- * \param       runtimeTable		Runtime Table
- * \param       uriID				Uri ID for local-name
- * \param       localNameLength		Local-Name Size (out)
- * \return                  		Error-Code <> 0
- *
- */
-int exiGetLocalNameSize(exi_name_table_prepopulated_t* prepopulatedTable,
-		exi_name_table_runtime_t* runtimeTable, uint16_t uriID,
-		uint16_t* localNameLength);
-
-
-/**
- * \brief  		Add runtime URI entry
- *
- * \param       prepopulatedTable	Pre-Populated Table
- * \param       runtimeTable		Runtime Table
- * \return                  		Error-Code <> 0
- *
- */
-int exiAddUri(exi_name_table_prepopulated_t* prepopulatedTable,
-		exi_name_table_runtime_t* runtimeTable);
-
-
-/**
- * \brief  		Add runtime local-name entry
- *
- * \param       prepopulatedTable	Pre-Populated Table
- * \param       runtimeTable		Runtime Table
- * \param       uriID				Uri ID for local-name
- * \param       localNameID			LocalName ID (out)
- * \return                  		Error-Code <> 0
- *
- */
-int exiAddLocalName(exi_name_table_prepopulated_t* prepopulatedTable,
-		exi_name_table_runtime_t* runtimeTable, uint16_t uriID, uint16_t* localNameID);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

+ 202 - 170
src/codec/StringValueTable.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,177 +18,210 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifndef STRING_VALUE_TABLE_C
-#define STRING_VALUE_TABLE_C
-
-#include <string.h>
-
-#include "StringValueTable.h"
-
-#include "EXIConfig.h"
-#include "ErrorCodes.h"
-#include "EXIOptions.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-#include "DynamicMemory.h"
-#include <stdlib.h>
-#endif /* DYNAMIC_ALLOCATION */
-
-#define STRING_TABLE_INIT_VALUE_ENTRY_SIZE 16
-
-int exiInitValueStrings(exi_value_table_t* valueTable) {
-	/* int i; */
-	int errn = 0;
-
-	valueTable->numberOfGlobalStrings = 0;
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-	for(i=0; i<(valueTable->sizeLocalStrings); i++) {
-		valueTable->numberOfLocalStrings[i] = 0;
-	}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-
-	valueTable->valueStringTable->len = 0;
-
-	return errn;
-}
-
-
-int exiAddStringValue(exi_value_table_t* valueTable,
-		exi_string_ucs_t* sv, uint16_t qnameID) {
-	int currLen;
-	int errn;
-
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-	exi_value_string_table_entry_t* oldStrs;
-	int i;
-#endif /* DYNAMIC_ALLOCATION */
-
-	errn = 0;
-	currLen = valueTable->valueStringTable->len;
-
-	if( valueTable->valueStringTable->size == currLen ) {
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-		/* no memory left to handle this string */
-		errn = EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY;
-#endif/* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-		/* expand entries */
-		if (valueTable->valueStringTable->size == 0) {
-			valueTable->valueStringTable->size  = STRING_TABLE_INIT_VALUE_ENTRY_SIZE;
-		} else {
-			valueTable->valueStringTable->size = (uint16_t)(currLen << 1); /* length * 2 */
-		}
-
-		/* old data */
-		oldStrs = valueTable->valueStringTable->strs;
-		valueTable->valueStringTable->strs = (exi_value_string_table_entry_t*) malloc(valueTable->valueStringTable->size * sizeof(exi_value_string_table_entry_t));
-
-		if(currLen > 0) {
-			/* copy old data */
-			for(i=0; i<currLen; i++) {
-				valueTable->valueStringTable->strs[i].localValueID =  oldStrs[i].localValueID;
-				valueTable->valueStringTable->strs[i].qnameID =  oldStrs[i].qnameID;
-				valueTable->valueStringTable->strs[i].str.size = oldStrs[i].str.size;
-				valueTable->valueStringTable->strs[i].str.len =  oldStrs[i].str.len;
-				valueTable->valueStringTable->strs[i].str.codepoints =  oldStrs[i].str.codepoints;
-			}
-			/*free old data */
-			free(oldStrs);
-		}
-#endif /* DYNAMIC_ALLOCATION */
-	}
-
-	if (errn == 0) {
-		valueTable->valueStringTable->strs[currLen].qnameID = qnameID;
-		valueTable->valueStringTable->strs[currLen].localValueID = valueTable->numberOfLocalStrings[qnameID];
-
-
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-		/* make sure the str length fits into existing buffer */
-		if ( sv->len > valueTable->valueStringTable->strs[currLen].str.size ) {
-			errn = EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY;
-		}
-		/* set new length */
-		valueTable->valueStringTable->strs[currLen].str.len = sv->len;
-#endif/* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-		/* allocate codepoints memory */
-		errn = exiAllocateDynamicStringMemory(&valueTable->valueStringTable->strs[currLen].str, sv->len);
-		valueTable->valueStringTable->strs[currLen].str.len = sv->len;
-#endif /* DYNAMIC_ALLOCATION */
-
-		if(errn == 0) {
-			/* copy codepoints */
-			if ( memcpy(valueTable->valueStringTable->strs[currLen].str.codepoints, sv->codepoints, sv->len*sizeof(uint32_t)) == NULL ) {
-				errn = EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY;
-			}
-
-			valueTable->valueStringTable->len++;
-		}
-	}
-
-
-	return errn;
-}
-
-
-int exiGetNumberOfLocalStringValueEntries(exi_value_table_t* valueTable,
-		uint16_t qnameID, uint16_t* numberOfEntries) {
-	/* TODO number of local entries and next id must not match, e.g, if string-table is restricted in number of entries */
-	int i;
-	int errn = 0;
-	*numberOfEntries = 0;
-	for(i=0; i<valueTable->valueStringTable->len; i++) {
-		if( valueTable->valueStringTable->strs[i].qnameID == qnameID ) {
-			(*numberOfEntries)++;
-		}
-	}
-
-	return errn;
-}
-
-int exiGetGlobalStringValue(exi_value_table_t* valueTable,
-		uint16_t globalID, exi_string_ucs_t* sv) {
-	int errn = 0;
-
-	if( valueTable->valueStringTable->len > globalID) {
-		*sv = valueTable->valueStringTable->strs[globalID].str;
-	} else {
-		errn = EXI_ERROR_STRINGVALUES_OUT_OF_BOUND;
-	}
-	return errn;
-}
-
-int exiGetLocalStringValue(exi_value_table_t* valueTable,
-		uint16_t qnameID, uint16_t localID, exi_string_ucs_t* sv) {
-	int i;
-	int errn = EXI_ERROR_STRINGVALUES_OUT_OF_BOUND;
-
-	/* walk over all entries. Note that if number of entries is restricted the local ID may be larger than the number of global entries */
-	for(i=0; i<valueTable->valueStringTable->len && errn != 0; i++) {
-		if( valueTable->valueStringTable->strs[i].qnameID == qnameID && valueTable->valueStringTable->strs[i].localValueID == localID  ) {
-			*sv = valueTable->valueStringTable->strs[i].str;
-			errn = 0;
-		}
-	}
-
-	return errn;
-}
-
-
-#endif
-
+
+
+#ifndef STRING_VALUE_TABLE_C
+#define STRING_VALUE_TABLE_C
+
+#include <string.h>
+
+#include "StringValueTable.h"
+
+#include "EXIConfig.h"
+#include "ErrorCodes.h"
+#include "EXIOptions.h"
+
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+#include "DynamicMemory.h"
+#include <stdlib.h>
+#endif /* DYNAMIC_ALLOCATION */
+
+#define STRING_TABLE_INIT_VALUE_ENTRY_SIZE 16
+
+int exiInitValueStrings(exi_value_table_t* valueTable) {
+	int i;
+	int errn = 0;
+
+	valueTable->numberOfGlobalStrings = 0;
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
+#if EXI_OPTION_VALUE_MAX_LENGTH != 0
+	for(i=0; i<(valueTable->sizeLocalStrings); i++) {
+		valueTable->numberOfLocalStrings[i] = 0;
+	}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
+
+	valueTable->valueStringTable->len = 0;
+
+	return errn;
+}
+
+
+static int __exiAddStringValue(exi_value_table_t* valueTable,
+		exi_string_t* sv, uint16_t qnameID) {
+	int currLen;
+	int errn;
+
+
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+	exi_value_string_table_entry_t* oldStrs;
+	int i;
+#endif /* DYNAMIC_ALLOCATION */
+
+	errn = 0;
+	currLen = valueTable->valueStringTable->len;
+
+	if( valueTable->valueStringTable->size == currLen ) {
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+		/* no memory left to handle this string */
+		errn = EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY;
+#endif/* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+		/* expand entries */
+		if (valueTable->valueStringTable->size == 0) {
+			valueTable->valueStringTable->size  = STRING_TABLE_INIT_VALUE_ENTRY_SIZE;
+		} else {
+			valueTable->valueStringTable->size = (uint16_t)(currLen << 1); /* length * 2 */
+		}
+
+		/* old data */
+		oldStrs = valueTable->valueStringTable->strs;
+		valueTable->valueStringTable->strs = (exi_value_string_table_entry_t*) malloc(valueTable->valueStringTable->size * sizeof(exi_value_string_table_entry_t));
+
+		if(currLen > 0) {
+			/* copy old data */
+			for(i=0; i<currLen; i++) {
+				valueTable->valueStringTable->strs[i].localValueID =  oldStrs[i].localValueID;
+				valueTable->valueStringTable->strs[i].qnameID =  oldStrs[i].qnameID;
+				valueTable->valueStringTable->strs[i].str.size = oldStrs[i].str.size;
+				valueTable->valueStringTable->strs[i].str.len =  oldStrs[i].str.len;
+				valueTable->valueStringTable->strs[i].str.characters =  oldStrs[i].str.characters;
+			}
+			/*free old data */
+			free(oldStrs);
+		}
+#endif /* DYNAMIC_ALLOCATION */
+	}
+
+	if (errn == 0) {
+		valueTable->valueStringTable->strs[currLen].qnameID = qnameID;
+		valueTable->valueStringTable->strs[currLen].localValueID = valueTable->numberOfLocalStrings[qnameID];
+
+
+#if MEMORY_ALLOCATION == STATIC_ALLOCATION
+		/* make sure the str length fits into existing buffer */
+		if ( sv->len > valueTable->valueStringTable->strs[currLen].str.size ) {
+			errn = EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY;
+		}
+		/* set new length */
+		valueTable->valueStringTable->strs[currLen].str.len = sv->len;
+#endif/* STATIC_ALLOCATION */
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+		/* allocate codepoints memory */
+		errn = exiAllocateDynamicStringMemory(&valueTable->valueStringTable->strs[currLen].str, sv->len);
+		valueTable->valueStringTable->strs[currLen].str.len = sv->len;
+#endif /* DYNAMIC_ALLOCATION */
+
+		if(errn == 0) {
+			/* copy codepoints */
+			if ( memcpy(valueTable->valueStringTable->strs[currLen].str.characters, sv->characters, sv->len*sizeof(uint32_t)) == NULL ) {
+				errn = EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY;
+			}
+
+			valueTable->valueStringTable->len++;
+		}
+	}
+
+
+	return errn;
+}
+
+
+
+int exiAddStringValue(exi_value_table_t* valueTable, exi_string_t* sv, uint16_t qnameID) {
+	int errn = 0;
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
+#if EXI_OPTION_VALUE_MAX_LENGTH != 0
+	/* increment global string count */
+#if EXI_OPTION_VALUE_PARTITION_CAPACITY < 0
+	valueTable->numberOfGlobalStrings++;
+#else /* EXI_OPTION_VALUE_PARTITION_CAPACITY < 0 */
+	if (valueTable->numberOfGlobalStrings < EXI_OPTION_VALUE_PARTITION_CAPACITY) {
+		valueTable->numberOfGlobalStrings++;
+	}
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY < 0 */
+	/* increment local string count */
+	if (qnameID < valueTable->sizeLocalStrings) {
+#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
+		errn = __exiAddStringValue(valueTable, sv, qnameID);
+#endif /* DYNAMIC_ALLOCATION */
+		valueTable->numberOfLocalStrings[qnameID]++;
+		/* printf("\tSV %d:  lv=%d  and gv=%d \n", qnameID, state->numberOfLocalStrings[qnameID], state->numberOfGlobalStrings);*/
+	} else {
+		/* currently we do support a set of qnames only */
+		errn = EXI_ERROR_OUT_OF_QNAMES;
+	}
+#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
+#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
+
+	return errn;
+}
+
+
+
+
+int exiGetNumberOfLocalStringValueEntries(exi_value_table_t* valueTable,
+		uint16_t qnameID, uint16_t* numberOfEntries) {
+	/* TODO number of local entries and next id must not match, e.g, if string-table is restricted in number of entries */
+	int i;
+	int errn = 0;
+	*numberOfEntries = 0;
+	for(i=0; i<valueTable->valueStringTable->len; i++) {
+		if( valueTable->valueStringTable->strs[i].qnameID == qnameID ) {
+			(*numberOfEntries)++;
+		}
+	}
+
+	return errn;
+}
+
+int exiGetGlobalStringValue(exi_value_table_t* valueTable,
+		uint16_t globalID, exi_string_t* sv) {
+	int errn = 0;
+
+	if( valueTable->valueStringTable->len > globalID) {
+		*sv = valueTable->valueStringTable->strs[globalID].str;
+	} else {
+		errn = EXI_ERROR_STRINGVALUES_OUT_OF_BOUND;
+	}
+	return errn;
+}
+
+int exiGetLocalStringValue(exi_value_table_t* valueTable,
+		uint16_t qnameID, uint16_t localID, exi_string_t* sv) {
+	int i;
+	int errn = EXI_ERROR_STRINGVALUES_OUT_OF_BOUND;
+
+	/* walk over all entries. Note that if number of entries is restricted the local ID may be larger than the number of global entries */
+	for(i=0; i<valueTable->valueStringTable->len && errn != 0; i++) {
+		if( valueTable->valueStringTable->strs[i].qnameID == qnameID && valueTable->valueStringTable->strs[i].localValueID == localID  ) {
+			*sv = valueTable->valueStringTable->strs[i].str;
+			errn = 0;
+		}
+	}
+
+	return errn;
+}
+
+
+#endif
+

+ 94 - 95
src/codec/StringValueTable.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2013 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,102 +18,102 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
  *
  *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * \file 	StringValueTable.h
- * \brief 	Value string table implementation
- *
- */
-
-#ifndef STRING_VALUE_TABLE_H
-#define STRING_VALUE_TABLE_H
-
-#include "EXITypes.h"
-
-
-/**
- * \brief  		Init value string tables & partitions
- *
- * 				Resets string value entries
- *
- * \param       valueTable			Value Table
- * \return                  		Error-Code <> 0
- *
- */
-int exiInitValueStrings(exi_value_table_t* valueTable);
-
-
-/**
- * \brief  		Add string value
- *
- * \param       valueTable			Value Table
- * \param       sv					String value to add
- * \param       qnameID				Qualified Name ID
- * \return                  		Error-Code <> 0
- *
- */
-int exiAddStringValue(exi_value_table_t* valueTable,
-		exi_string_ucs_t* sv, uint16_t qnameID);
-
-
-/**
- * \brief  		Get number of local string values
- *
- * \param       valueTable			Value Table
- * \param       qnameID				Qualified Name ID
- * \param       numberOfEntries		Number of local entries for given qname ID
- * \return                  		Error-Code <> 0
- *
- */
-int exiGetNumberOfLocalStringValueEntries(exi_value_table_t* valueTable,
-		uint16_t qnameID, uint16_t* numberOfEntries);
-
-
-/**
- * \brief  		Get global string value hit
- *
- * \param       valueTable			Value Table
- * \param       globalID			Global Value ID
- * \param       sv					Returned Global String value
- * \return                  		Error-Code <> 0
- *
- */
-int exiGetGlobalStringValue(exi_value_table_t* valueTable,
-		uint16_t globalID, exi_string_ucs_t* sv);
-
-
-/**
- * \brief  		Get local string value hit
- *
- * \param       valueTable			Value Table
- * \param       qnameID				Qualified Name ID
- * \param       localID				Local Value ID
- * \param       sv					Returned Local String value
- * \return                  		Error-Code <> 0
- *
- */
-int exiGetLocalStringValue(exi_value_table_t* valueTable,
-		uint16_t qnameID, uint16_t localID, exi_string_ucs_t* sv);
-
-
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
+
+
+/**
+ * \file 	StringValueTable.h
+ * \brief 	Value string table implementation
+ *
+ */
+
+#ifndef STRING_VALUE_TABLE_H
+#define STRING_VALUE_TABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include "EXITypes.h"
+
+
+/**
+ * \brief  		Init value string tables & partitions
+ *
+ * 				Resets string value entries
+ *
+ * \param       valueTable			Value Table
+ * \return                  		Error-Code <> 0
+ *
+ */
+int exiInitValueStrings(exi_value_table_t* valueTable);
+
+
+/**
+ * \brief  		Add string value
+ *
+ * \param       valueTable			Value Table
+ * \param       sv					String value to add
+ * \param       qnameID				Qualified Name ID
+ * \return                  		Error-Code <> 0
+ *
+ */
+int exiAddStringValue(exi_value_table_t* valueTable,
+		exi_string_t* sv, uint16_t qnameID);
+
+
+/**
+ * \brief  		Get number of local string values
+ *
+ * \param       valueTable			Value Table
+ * \param       qnameID				Qualified Name ID
+ * \param       numberOfEntries		Number of local entries for given qname ID
+ * \return                  		Error-Code <> 0
+ *
+ */
+int exiGetNumberOfLocalStringValueEntries(exi_value_table_t* valueTable,
+		uint16_t qnameID, uint16_t* numberOfEntries);
+
+
+/**
+ * \brief  		Get global string value hit
+ *
+ * \param       valueTable			Value Table
+ * \param       globalID			Global Value ID
+ * \param       sv					Returned Global String value
+ * \return                  		Error-Code <> 0
+ *
+ */
+int exiGetGlobalStringValue(exi_value_table_t* valueTable,
+		uint16_t globalID, exi_string_t* sv);
+
+
+/**
+ * \brief  		Get local string value hit
+ *
+ * \param       valueTable			Value Table
+ * \param       qnameID				Qualified Name ID
+ * \param       localID				Local Value ID
+ * \param       sv					Returned Local String value
+ * \return                  		Error-Code <> 0
+ *
+ */
+int exiGetLocalStringValue(exi_value_table_t* valueTable,
+		uint16_t qnameID, uint16_t localID, exi_string_t* sv);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

+ 0 - 95
src/codec/UCSString.c

@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#include <string.h>
-
-#include "UCSString.h"
-
-#include "EXIConfig.h"
-#include "DecoderChannel.h"
-#include "BitInputStream.h"
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-#include "DynamicMemory.h"
-#endif /* DYNAMIC_ALLOCATION */
-
-#ifndef UCS_STRING_C
-#define UCS_STRING_C
-
-
-int toUCSString(char* chars, exi_string_ucs_t* s) {
-	int errn = 0;
-	unsigned int i;
-	s->len = (uint16_t)strlen(chars);
-
-	if (s->len > s->size) {
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-		errn = EXI_ERROR_OUT_OF_STRING_BUFFER;
-#endif /* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-		errn = exiFreeDynamicStringMemory(s);
-		if(errn == 0) {
-			errn = exiAllocateDynamicStringMemory(s, s->len);
-		}
-
-#endif /* DYNAMIC_ALLOCATION */
-	}
-	if(errn == 0) {
-		for(i=0; i<s->len; i++) {
-			s->codepoints[i] = (uint32_t)chars[i];
-		}
-	}
-
-	return errn;
-}
-
-/* Note A: fails if string contains non ASCII characters */
-/* Note B: causes harm if char array is not sufficiently long */
-int toASCIIString(exi_string_ucs_t* string, char* outASCII) {
-	int errn = 0;
-	unsigned int i;
-	for(i=0; i<string->len && errn == 0; i++) {
-		if( string->codepoints[i] < 128 ) {
-			outASCII[i] = (char)string->codepoints[i];
-		} else {
-			errn = -1;
-		}
-	}
-	outASCII[string->len] = '\0';
-
-	return errn;
-}
-
-#endif
-

+ 0 - 78
src/codec/UCSString.h

@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXITypes.h"
-
-/**
- * \file 	UCSString.h
- * \brief 	UCS String utilities
- *
- */
-
-#ifndef UCS_STRING_H
-#define UCS_STRING_H
-
-/**
- * \brief 		Converts characters to USC string
- *
- * \param       chars	   		Characters
- * \param       s				UCS String
- * \return                  	Error-Code <> 0
- *
- */
-int toUCSString(char* chars, exi_string_ucs_t* s);
-
-
-/**
- * \brief 		Converts String to ASCII characters
- *
- * 				Note: fails if string contains non ASCII characters.
- * 				Note: Make also sure that the char array is large enough.
- *
- * \param       string			UCS String
- * \param       string	   		Input String
- * \param       outASCII	   	ASCII Characters (out)
- * \return                  	Error-Code <> 0
- *
- */
-int toASCIIString(exi_string_ucs_t* string, char* outASCII);
-
-#endif
-
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 722
src/codec/appHandCodec/appHandEXICoder.c

@@ -1,722 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_appHand_CODER_C
-#define EXI_appHand_CODER_C
-
-#include "appHandEXICoder.h"
-
-#include "EXIConfig.h"
-#include "EXITypes.h"
-#include "EXIOptions.h"
-#include "BitInputStream.h"
-#include "DecoderChannel.h"
-#include "ErrorCodes.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-#include "StringValueTable.h"
-#endif /* DYNAMIC_ALLOCATION */
-
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'qnameID' */
-#endif /* __GNUC__ */
-int exi_appHand_AddStringValue(exi_state_t* state, exi_string_ucs_t* sv, uint16_t qnameID) {
-	int errn = 0;
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-	/* increment global string count */
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY < 0
-	state->stringTable.numberOfGlobalStrings++;
-#else /* EXI_OPTION_VALUE_PARTITION_CAPACITY < 0 */
-	if (state->stringTable.numberOfGlobalStrings < EXI_OPTION_VALUE_PARTITION_CAPACITY) {
-		state->stringTable.numberOfGlobalStrings++;
-	}
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY < 0 */
-	/* increment local string count */
-	if (qnameID < state->stringTable.sizeLocalStrings) {
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-		errn = exiAddStringValue(&(state->stringTable), sv, qnameID);
-#endif /* DYNAMIC_ALLOCATION */
-		state->stringTable.numberOfLocalStrings[qnameID]++;
-		/* printf("\tSV %d:  lv=%d  and gv=%d \n", qnameID, state->numberOfLocalStrings[qnameID], state->numberOfGlobalStrings);*/
-	} else {
-		/* currently we do support a set of qnames only */
-		errn = EXI_ERROR_OUT_OF_QNAMES;
-	}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'qnameID' */
-#endif /* __GNUC__ */
-
-
-int exi_appHand_PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID) {
-	int errn = 0;
-	/* eqname_t* eqn*/
-	if ((state->stackIndex + 1) < EXI_ELEMENT_STACK_SIZE) {
-		state->grammarStack[++state->stackIndex] = newState;
-		/* qname */
-		state->elementStack[state->stackIndex] = qnameID;
-	} else {
-		errn = EXI_ERROR_OUT_OF_GRAMMAR_STACK;
-	}
-
-	return errn;
-}
-
-int exi_appHand_PopStack(exi_state_t* state) {
-	int errn = 0;
-	if (state->stackIndex >= 1) {
-		state->stackIndex--;
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-	return errn;
-}
-
-int exi_appHand_HandleXsiNilTrue(exi_state_t* state) {
-	switch (state->grammarStack[state->stackIndex]) {
-
-	}
-
-	return EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL;
-}
-
-int exi_appHand_HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType) {
-	switch(xsiType->namespaceURI) {
-	case 0:
-		switch(xsiType->localPart) {
-		}
-		break;
-	case 1:
-		switch(xsiType->localPart) {
-		}
-		break;
-	case 2:
-		switch(xsiType->localPart) {
-		}
-		break;
-	case 3:
-		switch(xsiType->localPart) {
-		case 0:
-			/* {3}0,ENTITIES */
-			state->grammarStack[state->stackIndex] = 47;
-			break;
-		case 1:
-			/* {3}1,ENTITY */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 2:
-			/* {3}2,ID */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 3:
-			/* {3}3,IDREF */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 4:
-			/* {3}4,IDREFS */
-			state->grammarStack[state->stackIndex] = 47;
-			break;
-		case 5:
-			/* {3}5,NCName */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 6:
-			/* {3}6,NMTOKEN */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 7:
-			/* {3}7,NMTOKENS */
-			state->grammarStack[state->stackIndex] = 47;
-			break;
-		case 8:
-			/* {3}8,NOTATION */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 9:
-			/* {3}9,Name */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 10:
-			/* {3}10,QName */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 11:
-			/* {3}11,anySimpleType */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 12:
-			/* {3}12,anyType */
-			state->grammarStack[state->stackIndex] = 49;
-			break;
-		case 13:
-			/* {3}13,anyURI */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 14:
-			/* {3}14,base64Binary */
-			state->grammarStack[state->stackIndex] = 51;
-			break;
-		case 15:
-			/* {3}15,boolean */
-			state->grammarStack[state->stackIndex] = 53;
-			break;
-		case 16:
-			/* {3}16,byte */
-			state->grammarStack[state->stackIndex] = 55;
-			break;
-		case 17:
-			/* {3}17,date */
-			state->grammarStack[state->stackIndex] = 57;
-			break;
-		case 18:
-			/* {3}18,dateTime */
-			state->grammarStack[state->stackIndex] = 59;
-			break;
-		case 19:
-			/* {3}19,decimal */
-			state->grammarStack[state->stackIndex] = 61;
-			break;
-		case 20:
-			/* {3}20,double */
-			state->grammarStack[state->stackIndex] = 63;
-			break;
-		case 21:
-			/* {3}21,duration */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 22:
-			/* {3}22,float */
-			state->grammarStack[state->stackIndex] = 63;
-			break;
-		case 23:
-			/* {3}23,gDay */
-			state->grammarStack[state->stackIndex] = 65;
-			break;
-		case 24:
-			/* {3}24,gMonth */
-			state->grammarStack[state->stackIndex] = 67;
-			break;
-		case 25:
-			/* {3}25,gMonthDay */
-			state->grammarStack[state->stackIndex] = 69;
-			break;
-		case 26:
-			/* {3}26,gYear */
-			state->grammarStack[state->stackIndex] = 71;
-			break;
-		case 27:
-			/* {3}27,gYearMonth */
-			state->grammarStack[state->stackIndex] = 73;
-			break;
-		case 28:
-			/* {3}28,hexBinary */
-			state->grammarStack[state->stackIndex] = 75;
-			break;
-		case 29:
-			/* {3}29,int */
-			state->grammarStack[state->stackIndex] = 77;
-			break;
-		case 30:
-			/* {3}30,integer */
-			state->grammarStack[state->stackIndex] = 77;
-			break;
-		case 31:
-			/* {3}31,language */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 32:
-			/* {3}32,long */
-			state->grammarStack[state->stackIndex] = 77;
-			break;
-		case 33:
-			/* {3}33,negativeInteger */
-			state->grammarStack[state->stackIndex] = 77;
-			break;
-		case 34:
-			/* {3}34,nonNegativeInteger */
-			state->grammarStack[state->stackIndex] = 79;
-			break;
-		case 35:
-			/* {3}35,nonPositiveInteger */
-			state->grammarStack[state->stackIndex] = 77;
-			break;
-		case 36:
-			/* {3}36,normalizedString */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 37:
-			/* {3}37,positiveInteger */
-			state->grammarStack[state->stackIndex] = 79;
-			break;
-		case 38:
-			/* {3}38,short */
-			state->grammarStack[state->stackIndex] = 77;
-			break;
-		case 39:
-			/* {3}39,string */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 40:
-			/* {3}40,time */
-			state->grammarStack[state->stackIndex] = 80;
-			break;
-		case 41:
-			/* {3}41,token */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 42:
-			/* {3}42,unsignedByte */
-			state->grammarStack[state->stackIndex] = 13;
-			break;
-		case 43:
-			/* {3}43,unsignedInt */
-			state->grammarStack[state->stackIndex] = 79;
-			break;
-		case 44:
-			/* {3}44,unsignedLong */
-			state->grammarStack[state->stackIndex] = 79;
-			break;
-		case 45:
-			/* {3}45,unsignedShort */
-			state->grammarStack[state->stackIndex] = 79;
-			break;
-		}
-		break;
-	case 4:
-		switch(xsiType->localPart) {
-		case 0:
-			/* {4}0,AppProtocolType */
-			state->grammarStack[state->stackIndex] = 3;
-			break;
-		case 1:
-			/* {4}1,idType */
-			state->grammarStack[state->stackIndex] = 13;
-			break;
-		case 2:
-			/* {4}2,priorityType */
-			state->grammarStack[state->stackIndex] = 16;
-			break;
-		case 3:
-			/* {4}3,protocolNameType */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 4:
-			/* {4}4,protocolNamespaceType */
-			state->grammarStack[state->stackIndex] = 4;
-			break;
-		case 5:
-			/* {4}5,responseCodeType */
-			state->grammarStack[state->stackIndex] = 41;
-			break;
-		}
-		break;
-	}
-
-
-	return 0;
-}
-
-
-int exi_appHand_RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID) {
-	int errn = EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK;
-	int i;
-	int found = 1;
-
-	/* schema-informed global element --> Stack ID */
-	switch(qnameID) {
-	case 65:
-		errn = exi_appHand_PushStack(state, 2, 65);
-		break;
-	case 66:
-		errn = exi_appHand_PushStack(state, 40, 66);
-		break;
-
-	default:
-		found = 0;
-		break;
-	}
-
-	if (!found) {
-		/* retrieve existing grammar for qname if any available */
-		for(i=0; i<state->numberOfRuntimeGrammars && !found; i+=2) {
-			if( state->runtimeGrammars[i].qnameID == qnameID ) {
-				/* runtime grammar exists already */
-
-				/* push element stack */
-				errn = exi_appHand_PushStack(state, (int16_t)((i+1) * (-1)), qnameID);
-				found = 1;
-			}
-		}
-
-		/* create new runtime grammars if possible and not found already */
-		if(!found && (state->numberOfRuntimeGrammars + 2) < (MAX_NUMBER_OF_RUNTIME_ELEMENTS * 2) ) {
-			/* StartTagContent StackIds: -1, -3, -5, ... */
-			state->runtimeGrammars[state->numberOfRuntimeGrammars].qnameID = qnameID;
-			state->runtimeGrammars[state->numberOfRuntimeGrammars].numberOfProductions = 0;
-			state->runtimeGrammars[state->numberOfRuntimeGrammars].hasXsiType = 0;
-			state->runtimeGrammars[state->numberOfRuntimeGrammars].hasEE = 0;
-			/* ElementContent StackIds: -2, -4, -6, ... */
-			state->runtimeGrammars[state->numberOfRuntimeGrammars+1].qnameID = qnameID;
-			state->runtimeGrammars[state->numberOfRuntimeGrammars+1].numberOfProductions = 1;
-			state->runtimeGrammars[state->numberOfRuntimeGrammars+1].hasXsiType = 0;
-			state->runtimeGrammars[state->numberOfRuntimeGrammars+1].hasEE = 1;
-
-			/* push element stack */
-			errn = exi_appHand_PushStack(state, (int16_t)((state->numberOfRuntimeGrammars+1) * (-1)), qnameID);
-
-			state->numberOfRuntimeGrammars = (uint16_t)(state->numberOfRuntimeGrammars + 2);
-		}
-	}
-
-	return errn;
-}
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'qnameID' */
-#endif /* __GNUC__ */
-int exi_appHand_LearnAttribute(exi_state_t* state, uint16_t uriID, uint16_t localID) {
-	int errn = 0;
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	int16_t runtimeID;
-
-	if (currentID < 0) {
-		runtimeID = (int16_t)((currentID+1)*(-1));
-
-		if (uriID == 2 && localID == 1 ) {
-			/* xsi:type: learned just once */
-			if(!state->runtimeGrammars[runtimeID].hasXsiType) {
-				/* hasXsiType stores production position PLUS 1 (one) */
-				state->runtimeGrammars[runtimeID].hasXsiType = ++state->runtimeGrammars[runtimeID].numberOfProductions;
-			}
-		} else {
-			/* increment production count */
-			++state->runtimeGrammars[runtimeID].numberOfProductions;
-			/* TODO store production information. Note: not necessary in restricted profile */
-		}
-	} else {
-		/* schema-informed grammar do no evolve */
-	}
-
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'qnameID' */
-#endif /* __GNUC__ */
-
-int exi_appHand_LearnEndElement(exi_state_t* state) {
-	int errn = 0;
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	int16_t runtimeID;
-
-	if (currentID < 0) {
-		if( exi_appHand_IsStartContent(currentID) ) {
-			/* check whether EE with an event code of length 1 does not exist in the current element grammar already */
-			runtimeID = (int16_t)((currentID+1)*(-1));
-
-			if(!state->runtimeGrammars[runtimeID].hasEE) {
-				/* hasXsiType stores production position PLUS 1 (one) */
-				state->runtimeGrammars[runtimeID].hasEE = ++state->runtimeGrammars[runtimeID].numberOfProductions;
-			}
-		} else {
-			/* ElementContent disposes already of an EE event */
-		}
-	} else {
-		/* schema-informed grammar do no evolve */
-	}
-
-	return errn;
-}
-
-
-/*
- * RUNTIME RULES
- * each rule has 2 ids and counts backwards from -1, -2, ...
- * 1) StartTagContent (e.g., -1, -3, -5, ...)
- * 2) ElementContent (e.g., -2, -4, -6)
- *
- */
-
-int exi_appHand_IsStartContent(int16_t ruleID) {
-	/* Note: only for built-in element grammars */
-	return (ruleID % 2 != 0);
-}
-
-int exi_appHand_MoveToElementContentRule(exi_state_t* state) {
-	int errn = 0;
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	int found = 1;
-
-
-	switch (currentID) {
-	case 65:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 66;
-		break;
-	case 41:
-		/* FirstStartTag[CHARACTERS[ENUMERATION]] --> Element[CHARACTERS[ENUMERATION]] */
-		state->grammarStack[state->stackIndex] = 42;
-		break;
-	case 40:
-		/* FirstStartTag[START_ELEMENT(ResponseCode)] --> Element[START_ELEMENT(ResponseCode)] */
-		state->grammarStack[state->stackIndex] = 44;
-		break;
-	case 4:
-		/* FirstStartTag[CHARACTERS[STRING]] --> Element[CHARACTERS[STRING]] */
-		state->grammarStack[state->stackIndex] = 7;
-		break;
-	case 77:
-		/* FirstStartTag[CHARACTERS[INTEGER]] --> Element[CHARACTERS[INTEGER]] */
-		state->grammarStack[state->stackIndex] = 78;
-		break;
-	case 2:
-		/* FirstStartTag[START_ELEMENT(AppProtocol)] --> Element[START_ELEMENT(AppProtocol)] */
-		state->grammarStack[state->stackIndex] = 38;
-		break;
-	case 75:
-		/* FirstStartTag[CHARACTERS[BINARY_HEX]] --> Element[CHARACTERS[BINARY_HEX]] */
-		state->grammarStack[state->stackIndex] = 76;
-		break;
-	case 0:
-		/* Document[START_DOCUMENT] --> Document[START_DOCUMENT] */
-	case 1:
-		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] --> DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
-	case 5:
-		/* Element[END_ELEMENT] --> Element[END_ELEMENT] */
-	case 6:
-		/* Element[] --> Element[] */
-	case 7:
-		/* Element[CHARACTERS[STRING]] --> Element[CHARACTERS[STRING]] */
-	case 8:
-		/* Element[START_ELEMENT(VersionNumberMajor)] --> Element[START_ELEMENT(VersionNumberMajor)] */
-	case 10:
-		/* Element[CHARACTERS[UNSIGNED_INTEGER]] --> Element[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 11:
-		/* Element[START_ELEMENT(VersionNumberMinor)] --> Element[START_ELEMENT(VersionNumberMinor)] */
-	case 12:
-		/* Element[START_ELEMENT(SchemaID)] --> Element[START_ELEMENT(SchemaID)] */
-	case 14:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] --> Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 15:
-		/* Element[START_ELEMENT(Priority)] --> Element[START_ELEMENT(Priority)] */
-	case 17:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] --> Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 18:
-		/* Element[START_ELEMENT(ProtocolNamespace)] --> Element[START_ELEMENT(ProtocolNamespace)] */
-	case 19:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 20:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 21:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 22:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 23:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 24:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 25:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 26:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 27:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 28:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 29:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 30:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 31:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 32:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 33:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 34:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 35:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 36:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 37:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] --> Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 38:
-		/* Element[START_ELEMENT(AppProtocol)] --> Element[START_ELEMENT(AppProtocol)] */
-	case 39:
-		/* DocEnd[END_DOCUMENT] --> DocEnd[END_DOCUMENT] */
-	case 42:
-		/* Element[CHARACTERS[ENUMERATION]] --> Element[CHARACTERS[ENUMERATION]] */
-	case 43:
-		/* Element[START_ELEMENT(SchemaID), END_ELEMENT] --> Element[START_ELEMENT(SchemaID), END_ELEMENT] */
-	case 44:
-		/* Element[START_ELEMENT(ResponseCode)] --> Element[START_ELEMENT(ResponseCode)] */
-	case 45:
-		/* Fragment[START_DOCUMENT] --> Fragment[START_DOCUMENT] */
-	case 46:
-		/* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] --> FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */
-	case 48:
-		/* Element[CHARACTERS[LIST]] --> Element[CHARACTERS[LIST]] */
-	case 50:
-		/* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] --> Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-	case 52:
-		/* Element[CHARACTERS[BINARY_BASE64]] --> Element[CHARACTERS[BINARY_BASE64]] */
-	case 54:
-		/* Element[CHARACTERS[BOOLEAN]] --> Element[CHARACTERS[BOOLEAN]] */
-	case 56:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] --> Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 58:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 60:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 62:
-		/* Element[CHARACTERS[DECIMAL]] --> Element[CHARACTERS[DECIMAL]] */
-	case 64:
-		/* Element[CHARACTERS[FLOAT]] --> Element[CHARACTERS[FLOAT]] */
-	case 66:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 68:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 70:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 72:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 74:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-	case 76:
-		/* Element[CHARACTERS[BINARY_HEX]] --> Element[CHARACTERS[BINARY_HEX]] */
-	case 78:
-		/* Element[CHARACTERS[INTEGER]] --> Element[CHARACTERS[INTEGER]] */
-	case 81:
-		/* Element[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		break;
-	case 51:
-		/* FirstStartTag[CHARACTERS[BINARY_BASE64]] --> Element[CHARACTERS[BINARY_BASE64]] */
-		state->grammarStack[state->stackIndex] = 52;
-		break;
-	case 73:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 74;
-		break;
-	case 80:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 81;
-		break;
-	case 9:
-		/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] --> Element[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 79:
-		/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] --> Element[CHARACTERS[UNSIGNED_INTEGER]] */
-		state->grammarStack[state->stackIndex] = 10;
-		break;
-	case 67:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 68;
-		break;
-	case 47:
-		/* FirstStartTag[CHARACTERS[LIST]] --> Element[CHARACTERS[LIST]] */
-		state->grammarStack[state->stackIndex] = 48;
-		break;
-	case 13:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] --> Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		state->grammarStack[state->stackIndex] = 14;
-		break;
-	case 63:
-		/* FirstStartTag[CHARACTERS[FLOAT]] --> Element[CHARACTERS[FLOAT]] */
-		state->grammarStack[state->stackIndex] = 64;
-		break;
-	case 3:
-		/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] --> Element[START_ELEMENT(ProtocolNamespace)] */
-		state->grammarStack[state->stackIndex] = 18;
-		break;
-	case 53:
-		/* FirstStartTag[CHARACTERS[BOOLEAN]] --> Element[CHARACTERS[BOOLEAN]] */
-		state->grammarStack[state->stackIndex] = 54;
-		break;
-	case 16:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] --> Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		state->grammarStack[state->stackIndex] = 17;
-		break;
-	case 59:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 60;
-		break;
-	case 55:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] --> Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		state->grammarStack[state->stackIndex] = 56;
-		break;
-	case 69:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 70;
-		break;
-	case 61:
-		/* FirstStartTag[CHARACTERS[DECIMAL]] --> Element[CHARACTERS[DECIMAL]] */
-		state->grammarStack[state->stackIndex] = 62;
-		break;
-	case 49:
-		/* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] --> Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		state->grammarStack[state->stackIndex] = 50;
-		break;
-	case 57:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 58;
-		break;
-	case 71:
-		/* FirstStartTag[CHARACTERS[DATETIME]] --> Element[CHARACTERS[DATETIME]] */
-		state->grammarStack[state->stackIndex] = 72;
-		break;
-
-	default:
-		found = 0;
-		break;
-	}
-
-	if(!found) {
-		if (currentID < 0) {
-			if(exi_appHand_IsStartContent(currentID)) {
-				state->grammarStack[state->stackIndex] = (int16_t)(currentID - 1);
-			}
-		} else {
-			errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE;
-		}
-	}
-
-	return errn;
-}
-
-
-#endif
-

+ 0 - 74
src/codec/appHandCodec/appHandEXICoder.h

@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_appHand_CODER_H
-#define EXI_appHand_CODER_H
-
-#include "EXITypes.h"
-
-#define DOCUMENT 0
-#define DOC_CONTENT 1
-#define DOC_END 39
-
-
-/* increments global and local string count */
-/* in case of dynamic memory string is collected */
-int exi_appHand_AddStringValue(exi_state_t* state, exi_string_ucs_t* sv, uint16_t qnameID);
-
-int exi_appHand_PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID);
-
-int exi_appHand_PopStack(exi_state_t* state);
-
-int exi_appHand_HandleXsiNilTrue(exi_state_t* state);
-
-int exi_appHand_HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType);
-
-int exi_appHand_RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID);
-
-int exi_appHand_LearnAttribute(exi_state_t* state, uint16_t uriID, uint16_t localID);
-
-int exi_appHand_LearnEndElement(exi_state_t* state);
-
-int exi_appHand_IsStartContent(int16_t ruleID);
-
-int exi_appHand_MoveToElementContentRule(exi_state_t* state);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

+ 0 - 1746
src/codec/appHandCodec/appHandEXIDecoder.c

@@ -1,1746 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_appHand_DECODER_C
-#define EXI_appHand_DECODER_C
-
-
-#include "appHandEXIDecoder.h"
-
-#include "EXIOptions.h"
-#include "EXITypes.h"
-#include "BitInputStream.h"
-#include "DecoderChannel.h"
-
-#include "StringNameTable.h"
-#include "appHandNameTableEntries.h"
-#include "MethodsBag.h"
-
-#include "appHandEXICoder.h"
-#include "EXIHeaderDecoder.h"
-#include "ErrorCodes.h"
-
-#include "appHandQNames.h"
-#include "appHandQNameDefines.h"
-
-
-
-/* local variables */
-static uint32_t xsi;
-static uint32_t bits;
-static int errn;
-static exi_event_t currEvent;
-
-#define URI_CODEPOINTS_SIZE 35
-#define LOCALNAME_CODEPOINTS_SIZE 25
-
-uint32_t codepointsUri[URI_CODEPOINTS_SIZE];
-uint32_t codepointsLocalName[LOCALNAME_CODEPOINTS_SIZE];
-
-static exi_qname_t _qname = {
-		{EXI_NAME_ENTRY_TYPE_ID, 0, {URI_CODEPOINTS_SIZE, codepointsUri, 0}},
-		{EXI_NAME_ENTRY_TYPE_ID, 0, {LOCALNAME_CODEPOINTS_SIZE, codepointsLocalName, 0}}
-};
-
-
-static int _decodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) {
-	int errn;
-	uint32_t val;
-	int32_t val2;
-
-	/* at most 8 bits */
-	errn = decodeNBitUnsignedInteger(stream, nbits, &val);
-	if(errn == 0) {
-		val2 = (int32_t)val + lowerBound;
-		if(val2 < 0) {
-			/* negative */
-			/* TODO map integer value more fine-grained */
-			iv->type = EXI_INTEGER_32;
-			iv->val.int32 = (int32_t)val2;
-		} else {
-			/* positive */
-			if (val2 < 0x100) {
-				/* 8 bit */
-				iv->type = EXI_UNSIGNED_INTEGER_8;
-				iv->val.uint8 = (uint8_t)val2;
-			} else if (val2 < 0x10000) {
-				/* 16 bit */
-				iv->type = EXI_UNSIGNED_INTEGER_16;
-				iv->val.uint16 = (uint16_t)val2;
-			} else {
-				iv->type = EXI_UNSIGNED_INTEGER_32;
-				iv->val.uint32 = (uint32_t)val2;
-			}
-		}
-	}
-
-	return (errn);
-}
-
-
-
-static int exiDecodeNext2Event(bitstream_t* stream, exi_state_t* state,
-		exi_event_t* nextEvent) {
-	
-	uint32_t eventCode2 = 0;
-	int16_t ruleID = state->grammarStack[state->stackIndex];
-	errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
-
-	switch (ruleID) {
-	case 5:
-		/* Element[END_ELEMENT] */
-	case 19:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 20:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 21:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 22:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 23:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 24:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 25:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 26:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 27:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 28:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 29:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 30:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 31:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 32:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 33:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 34:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 35:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 36:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 37:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 43:
-		/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
-	case 50:
-		/* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2);
-		switch (eventCode2) {
-		case 0:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
-			break;
-		}
-		break;
-	case 49:
-		/* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2);
-		switch (eventCode2) {
-		case 0:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL;
-			break;
-		case 2:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED;
-			break;
-		case 3:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE;
-			errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode);
-			state->eventCode -= 1;
-			break;
-		case 4:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
-			break;
-		case 5:
-			*nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
-			break;
-		}
-		break;
-	case 7:
-		/* Element[CHARACTERS[STRING]] */
-	case 8:
-		/* Element[START_ELEMENT(VersionNumberMajor)] */
-	case 10:
-		/* Element[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 11:
-		/* Element[START_ELEMENT(VersionNumberMinor)] */
-	case 12:
-		/* Element[START_ELEMENT(SchemaID)] */
-	case 14:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 15:
-		/* Element[START_ELEMENT(Priority)] */
-	case 17:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 18:
-		/* Element[START_ELEMENT(ProtocolNamespace)] */
-	case 38:
-		/* Element[START_ELEMENT(AppProtocol)] */
-	case 42:
-		/* Element[CHARACTERS[ENUMERATION]] */
-	case 44:
-		/* Element[START_ELEMENT(ResponseCode)] */
-	case 48:
-		/* Element[CHARACTERS[LIST]] */
-	case 52:
-		/* Element[CHARACTERS[BINARY_BASE64]] */
-	case 54:
-		/* Element[CHARACTERS[BOOLEAN]] */
-	case 56:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 58:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 60:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 62:
-		/* Element[CHARACTERS[DECIMAL]] */
-	case 64:
-		/* Element[CHARACTERS[FLOAT]] */
-	case 66:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 68:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 70:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 72:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 74:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 76:
-		/* Element[CHARACTERS[BINARY_HEX]] */
-	case 78:
-		/* Element[CHARACTERS[INTEGER]] */
-	case 81:
-		/* Element[CHARACTERS[DATETIME]] */
-		errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2);
-		switch (eventCode2) {
-		case 0:
-			*nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
-			break;
-		case 2:
-			*nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
-			break;
-		}
-		break;
-	case 2:
-		/* FirstStartTag[START_ELEMENT(AppProtocol)] */
-	case 3:
-		/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
-	case 4:
-		/* FirstStartTag[CHARACTERS[STRING]] */
-	case 9:
-		/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 13:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 16:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 40:
-		/* FirstStartTag[START_ELEMENT(ResponseCode)] */
-	case 41:
-		/* FirstStartTag[CHARACTERS[ENUMERATION]] */
-	case 47:
-		/* FirstStartTag[CHARACTERS[LIST]] */
-	case 51:
-		/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
-	case 53:
-		/* FirstStartTag[CHARACTERS[BOOLEAN]] */
-	case 55:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 57:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 59:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 61:
-		/* FirstStartTag[CHARACTERS[DECIMAL]] */
-	case 63:
-		/* FirstStartTag[CHARACTERS[FLOAT]] */
-	case 65:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 67:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 69:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 71:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 73:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 75:
-		/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
-	case 77:
-		/* FirstStartTag[CHARACTERS[INTEGER]] */
-	case 79:
-		/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 80:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-		errn = decodeNBitUnsignedInteger(stream, 3, &eventCode2);
-		switch (eventCode2) {
-		case 0:
-			*nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_XSI_TYPE;
-			break;
-		case 2:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_XSI_NIL;
-			break;
-		case 3:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED;
-			break;
-		case 4:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_INVALID_VALUE;
-			errn = decodeNBitUnsignedInteger(stream, 0, &state->eventCode);
-			state->eventCode -= 1;
-			break;
-		case 5:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
-			break;
-		case 6:
-			*nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL2;
-			break;
-		}
-		break;
-
-	default:
-		if (ruleID < 0) {
-			/* built-in element grammar */
-			if ( exi_appHand_IsStartContent(ruleID) ) {
-				/* TODO generate 2nd level productions */
-
-				/* StartTagContent grammar */
-				errn = decodeNBitUnsignedInteger(stream, 2, &eventCode2);
-				if(errn == 0) {
-					switch(eventCode2) {
-					case 0:
-						/* 0: EE */
-						*nextEvent = EXI_EVENT_END_ELEMENT_UNDECLARED;
-						break;
-					case 1:
-						/* 1: AT(*) */
-						*nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED;
-						break;
-					case 2:
-						/* 2: SE(*) */
-						*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
-						break;
-					case 3:
-						/* 3: CH */
-						*nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
-						break;
-					default:
-						errn = (EXI_ERROR_UNEXPECTED_EVENT_LEVEL2);
-						break;
-					}
-				}
-			} else {
-				/* TODO generate 2nd level productions */
-
-				/* ElementContent grammar */
-				errn = decodeNBitUnsignedInteger(stream, 1, &eventCode2);
-				if(errn == 0) {
-					switch(eventCode2) {
-					case 0:
-						/* 0: SE(*) */
-						*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED;
-						break;
-					case 1:
-						/* 1: CH */
-						*nextEvent = EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED;
-						break;
-					default:
-						errn = (EXI_ERROR_UNEXPECTED_EVENT_LEVEL2);
-						break;
-					}
-				}
-			}
-		} else {
-			*nextEvent = EXI_EVENT_ERROR;
-			errn = (EXI_ERROR_UNEXPECTED_EVENT_LEVEL2);
-		}
-		break;
-	}
-
-	return (errn);
-	
-}
-
-
-
-static int _exiDecodeNamespaceUri(bitstream_t* stream, exi_state_t* state,
-		exi_name_entry_t* uri) {
-	uint16_t uriSize, uriCodingLength;
-	uint32_t uriID;
-
-	errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize);
-	if (errn == 0) {
-		/* URI Entries + 1 */
-		errn = exiGetCodingLength((uint16_t)(uriSize + 1u), &uriCodingLength);
-		if (errn == 0) {
-			errn = decodeNBitUnsignedInteger(stream, uriCodingLength, &uriID);
-			if (errn == 0) {
-				if (uriID == 0) {
-					/* uri string value was not found */
-					/* ==> zero (0) as an n-nit unsigned integer */
-					/* followed by uri encoded as string */
-					
-					uri->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID;
-					errn = decodeString(stream, &uri->str);
-					if (errn) {
-						return (errn);
-					}
-					/* after encoding string value is added to table */
-					errn = exiAddUri(&state->nameTablePrepopulated, &state->nameTableRuntime); /*, namespaceURI->chars); */
-					if (errn) {
-						return (errn);
-					}
-					uri->id = uriSize;
-					
-				} else {
-					/* uri string value found */
-					/* ==> value(i+1) is encoded as n-bit unsigned integer */
-					uri->type = EXI_NAME_ENTRY_TYPE_ID;
-					uri->id = (uint16_t)(uriID - 1);
-				}
-			}
-		}
-	}
-
-	return (errn);
-}
-
-static int _exiDecodeLocalName(bitstream_t* stream, exi_state_t* state,
-		uint16_t uriID, exi_name_entry_t* localName) {
-
-	uint32_t localNameID;
-	uint16_t slen;
-	uint16_t localNameSize;
-	uint16_t localNameCodingLength;
-
-	errn = decodeUnsignedInteger16(stream, &slen);
-	if (errn == 0) {
-		if (slen > 0) {
-			/* string value was not found in local partition */
-			/* ==> string literal is encoded as a String */
-			/* with the length of the string incremented by one */
-			
-			localName->type = EXI_NAME_ENTRY_TYPE_STRING_AND_ID;
-			if (slen-- >= (localName->str.size) ) {
-				errn = (EXI_ERROR_OUT_OF_BOUNDS);
-			} else {
-				localName->str.len = slen;
-				errn = decodeCharacters(stream, slen, localName->str.codepoints);
-				if (errn == 0) {
-					/* After encoding the string value, it is added to the string table */
-					/* partition and assigned the next available compact identifier */
-					errn = exiAddLocalName(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localName->id);
-				}
-			}
-			
-		} else {
-			/* string value found in local partition */
-			/* ==> string value is represented as zero (0) encoded as an */
-			/* Unsigned Integer */
-			/* followed by an the compact identifier of the string value as an */
-			/* n-bit unsigned integer */
-			/* n is log2 m and m is the number of entries in the string table */
-			/* partition */
-			localName->type = EXI_NAME_ENTRY_TYPE_ID;
-			errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize); /* uriID, &localNameSize); */
-			if (errn == 0) {
-				errn = exiGetCodingLength(localNameSize, &localNameCodingLength);
-				if (errn == 0) {
-					errn = decodeNBitUnsignedInteger(stream, localNameCodingLength, &localNameID); /*  localNameID);*/
-					localName->id = (uint16_t)(localNameID);
-				}
-			}
-		}
-	}
-
-	return (errn);
-}
-
-static int _exiDecodeQName(bitstream_t* stream, exi_state_t* state,
-		uint16_t* qnameID,  exi_qname_t* qname) {
-
-	/* uri */
-	errn = _exiDecodeNamespaceUri(stream, state, &qname->uri);
-	if (errn == 0) {
-		/* localName */
-		errn = _exiDecodeLocalName(stream, state, qname->uri.id, &qname->localName);
-		if (errn == 0) {
-			if (_qname.localName.type == EXI_NAME_ENTRY_TYPE_STRING_AND_ID) {
-				errn = exiappHandAddEQName(state, qnameID, qname->uri.id, qname->localName.id);
-			} else {
-				/* IDs known --> retrieve qnameID */
-				errn = exiappHandGetQNameID(state, qname->uri.id, qname->localName.id, qnameID);
-			}
-		}
-	}
-
-	return (errn);
-}
-
-
-static int _exiDecodeStartElement(exi_state_t* state, uint16_t qnameID,
-		uint16_t stackId, int16_t newState) {
-
-	/* move on */
-	state->grammarStack[state->stackIndex] = (int16_t)stackId;
-	/* push element on stack */
-	return (exi_appHand_PushStack(state, newState, qnameID));
-}
-
-
-int exiappHandGetLastQName(exi_qname_t** qname) {
-	*qname = &_qname;
-	return (0);
-}
-
-
-int exiappHandDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) {
-	uint32_t uint32;
-
-	val->type = lt.type;
-
-	switch(lt.type) {
-	case EXI_DATATYPE_BINARY_BASE64:
-	case EXI_DATATYPE_BINARY_HEX:
-		errn = decodeBinary(stream, &val->binary);
-		break;
-	case EXI_DATATYPE_BOOLEAN:
-		errn = decodeBoolean(stream, &val->boolean);
-		break;
-	case EXI_DATATYPE_BOOLEAN_FACET:
-		errn = decodeNBitUnsignedInteger(stream, 2, &uint32);
-		val->boolean = uint32 > 1;
-		break;
-	case EXI_DATATYPE_DECIMAL:
-		errn = decodeDecimal(stream, &val->decimal);
-		break;
-	case EXI_DATATYPE_FLOAT:
-		errn = decodeFloat(stream, &val->float_me);
-		break;
-	case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER:
-		errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE;
-		break;
-	case EXI_DATATYPE_UNSIGNED_INTEGER:
-		errn = decodeUnsignedInteger(stream, &val->integer);
-		break;
-	case EXI_DATATYPE_INTEGER:
-		errn = decodeInteger(stream, &val->integer);
-		break;
-	case EXI_DATATYPE_DATETIME:
-		errn = decodeDateTime(stream,lt.datetimeType, &val->datetime);
-		break;
-	case EXI_DATATYPE_STRING:
-		errn = decodeStringValue(stream, state, qnameID, &val->str);
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE;
-		break;
-	}
-
-	return (errn);
-}
-
-
-
-
-int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state,
-		exi_name_table_runtime_t runtimeTable, exi_value_table_t stringTable) {
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-	int i;
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-	/* init grammar state */
-	state->stackIndex = 0;
-	state->grammarStack[0] = DOCUMENT;
-	/* name table */
-	state->nameTablePrepopulated = exiappHandNameTablePrepopulated;
-	state->nameTableRuntime = runtimeTable;
-	/* next qname ID */
-	state->nextQNameID = EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES;
-	/* string table */
-	state->stringTable = stringTable;
-	state->stringTable.numberOfGlobalStrings = 0;
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-	for(i=0; i<(state->stringTable.sizeLocalStrings); i++) {
-		state->stringTable.numberOfLocalStrings[i] = 0;
-	}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-
-	/* runtime grammars */
-	state->numberOfRuntimeGrammars = 0;
-
-	/* Avoid warning: Unused declaration of variable 'name' */
-	xsi = 0;
-	bits = 0;
-
-	/* decode header */
-	return (readEXIHeader(stream));
-}
-
-int exiappHandDecodeNextEvent(bitstream_t* stream, exi_state_t* state,
-		exi_event_t* nextEvent) {
-	uint16_t codingLength;
-	uint16_t numberOfProductions;
-	uint32_t eventCode1;
-	int16_t ruleID = state->grammarStack[state->stackIndex];
-	state->eventCode = 0;
-	errn = 0;
-
-	switch (ruleID) {
-	case 19:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 20:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 21:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 22:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 23:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 24:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 25:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 26:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 27:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 28:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 29:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 30:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 31:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 32:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 33:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 34:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 35:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 36:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 37:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 43:
-		/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
-		errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-			*nextEvent = EXI_EVENT_START_ELEMENT;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_END_ELEMENT;
-			break;
-		case 2:
-			/* 2nd level events */
-			errn = exiDecodeNext2Event(stream, state, nextEvent);
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 2:
-		/* FirstStartTag[START_ELEMENT(AppProtocol)] */
-	case 3:
-		/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
-	case 8:
-		/* Element[START_ELEMENT(VersionNumberMajor)] */
-	case 11:
-		/* Element[START_ELEMENT(VersionNumberMinor)] */
-	case 12:
-		/* Element[START_ELEMENT(SchemaID)] */
-	case 15:
-		/* Element[START_ELEMENT(Priority)] */
-	case 18:
-		/* Element[START_ELEMENT(ProtocolNamespace)] */
-	case 38:
-		/* Element[START_ELEMENT(AppProtocol)] */
-	case 40:
-		/* FirstStartTag[START_ELEMENT(ResponseCode)] */
-	case 44:
-		/* Element[START_ELEMENT(ResponseCode)] */
-		errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-			*nextEvent = EXI_EVENT_START_ELEMENT;
-			break;
-		case 1:
-			/* 2nd level events */
-			errn = exiDecodeNext2Event(stream, state, nextEvent);
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 0:
-		/* Document[START_DOCUMENT] */
-	case 45:
-		/* Fragment[START_DOCUMENT] */
-		*nextEvent = EXI_EVENT_START_DOCUMENT;
-		break;
-	case 46:
-		/* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */
-		errn = decodeNBitUnsignedInteger(stream, 4, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-		case 1:
-		case 2:
-		case 3:
-		case 4:
-		case 5:
-		case 6:
-		case 7:
-		case 8:
-			*nextEvent = EXI_EVENT_START_ELEMENT;
-			break;
-		case 9:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
-			break;
-		case 10:
-			*nextEvent = EXI_EVENT_END_DOCUMENT;
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 39:
-		/* DocEnd[END_DOCUMENT] */
-		*nextEvent = EXI_EVENT_END_DOCUMENT;
-		break;
-	case 49:
-		/* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		errn = decodeNBitUnsignedInteger(stream, 3, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-			*nextEvent = EXI_EVENT_ATTRIBUTE_GENERIC;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
-			break;
-		case 2:
-			*nextEvent = EXI_EVENT_END_ELEMENT;
-			break;
-		case 3:
-			*nextEvent = EXI_EVENT_CHARACTERS_GENERIC;
-			break;
-		case 4:
-			/* 2nd level events */
-			errn = exiDecodeNext2Event(stream, state, nextEvent);
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 4:
-		/* FirstStartTag[CHARACTERS[STRING]] */
-	case 7:
-		/* Element[CHARACTERS[STRING]] */
-	case 9:
-		/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 10:
-		/* Element[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 13:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 14:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 16:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 17:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 41:
-		/* FirstStartTag[CHARACTERS[ENUMERATION]] */
-	case 42:
-		/* Element[CHARACTERS[ENUMERATION]] */
-	case 47:
-		/* FirstStartTag[CHARACTERS[LIST]] */
-	case 48:
-		/* Element[CHARACTERS[LIST]] */
-	case 51:
-		/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
-	case 52:
-		/* Element[CHARACTERS[BINARY_BASE64]] */
-	case 53:
-		/* FirstStartTag[CHARACTERS[BOOLEAN]] */
-	case 54:
-		/* Element[CHARACTERS[BOOLEAN]] */
-	case 55:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 56:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-	case 57:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 58:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 59:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 60:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 61:
-		/* FirstStartTag[CHARACTERS[DECIMAL]] */
-	case 62:
-		/* Element[CHARACTERS[DECIMAL]] */
-	case 63:
-		/* FirstStartTag[CHARACTERS[FLOAT]] */
-	case 64:
-		/* Element[CHARACTERS[FLOAT]] */
-	case 65:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 66:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 67:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 68:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 69:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 70:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 71:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 72:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 73:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 74:
-		/* Element[CHARACTERS[DATETIME]] */
-	case 75:
-		/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
-	case 76:
-		/* Element[CHARACTERS[BINARY_HEX]] */
-	case 77:
-		/* FirstStartTag[CHARACTERS[INTEGER]] */
-	case 78:
-		/* Element[CHARACTERS[INTEGER]] */
-	case 79:
-		/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
-	case 80:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-	case 81:
-		/* Element[CHARACTERS[DATETIME]] */
-		errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-			*nextEvent = EXI_EVENT_CHARACTERS;
-			break;
-		case 1:
-			/* 2nd level events */
-			errn = exiDecodeNext2Event(stream, state, nextEvent);
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 5:
-		/* Element[END_ELEMENT] */
-		errn = decodeNBitUnsignedInteger(stream, 1, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-			*nextEvent = EXI_EVENT_END_ELEMENT;
-			break;
-		case 1:
-			/* 2nd level events */
-			errn = exiDecodeNext2Event(stream, state, nextEvent);
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 1:
-		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
-		errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-		case 1:
-			*nextEvent = EXI_EVENT_START_ELEMENT;
-			break;
-		case 2:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-	case 50:
-		/* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		errn = decodeNBitUnsignedInteger(stream, 2, &state->eventCode);
-		switch (state->eventCode) {
-		case 0:
-			*nextEvent = EXI_EVENT_START_ELEMENT_GENERIC;
-			break;
-		case 1:
-			*nextEvent = EXI_EVENT_END_ELEMENT;
-			break;
-		case 2:
-			*nextEvent = EXI_EVENT_CHARACTERS_GENERIC;
-			break;
-		case 3:
-			/* 2nd level events */
-			errn = exiDecodeNext2Event(stream, state, nextEvent);
-			break;
-		default:
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-			break;
-		}
-		break;
-
-	default:
-		
-		if(ruleID < 0)  {
-			/* built-in element grammar */
-			numberOfProductions = state->runtimeGrammars[(ruleID + 1)*(-1)].numberOfProductions;
-			if(numberOfProductions > 0) {
-				/* decode 1st level event code */
-				errn = exiGetCodingLength((uint16_t)(numberOfProductions + 1u), &codingLength);
-				if(errn == 0) {
-					errn = decodeNBitUnsignedInteger(stream, codingLength, &eventCode1);
-					if(errn == 0) {
-						if(eventCode1 == numberOfProductions) {
-							/* 2nd level */
-							errn = exiDecodeNext2Event(stream, state, nextEvent);
-						} else {
-							/* 1st level event not supported in profile */
-							errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-						}
-					}
-				}
-			} else {
-				errn = exiDecodeNext2Event(stream, state, nextEvent);
-			}
-		} else {
-			*nextEvent = EXI_EVENT_ERROR;
-			errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1;
-		}
-		
-		break;
-	}
-
-	currEvent = *nextEvent;
-	return (errn);
-}
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-int exiappHandDecodeStartDocument(bitstream_t* stream, exi_state_t* state) {
-	errn = 0;
-	switch(state->grammarStack[state->stackIndex]) {
-	case 0:
-		/* move on */
-		state->grammarStack[state->stackIndex] = 1;
-		break;
-	case 45:
-		/* move on */
-		state->grammarStack[state->stackIndex] = 46;
-		break;
-
-	default:
-		errn =(EXI_ERROR_UNEXPECTED_START_DOCUMENT);
-		break;
-	}
-
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-int exiappHandDecodeEndDocument(bitstream_t* stream, exi_state_t* state) {
-	errn = 0;
-	switch(state->grammarStack[state->stackIndex]) {
-	case 39:
-		break;
-	case 46:
-		break;
-
-	default:
-		errn =(EXI_ERROR_UNEXPECTED_END_DOCUMENT);
-		break;
-	}
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-
-
-int exiappHandDecodeStartElement(bitstream_t* stream, exi_state_t* state,
-		uint16_t* qnameID) {
-	errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
-
-	switch(currEvent) {
-	case EXI_EVENT_START_ELEMENT:
-		switch (state->grammarStack[state->stackIndex]) {
-		case 1:
-			/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 65, 39, 2);
-				break;
-			case 1:
-				errn = _exiDecodeStartElement(state, *qnameID = 66, 39, 40);
-				break;
-			}
-			break;
-		case 2:
-			/* FirstStartTag[START_ELEMENT(AppProtocol)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 19, 3);
-				break;
-			}
-			break;
-		case 3:
-			/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 2, 8, 4);
-				break;
-			}
-			break;
-		case 8:
-			/* Element[START_ELEMENT(VersionNumberMajor)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 5, 11, 9);
-				break;
-			}
-			break;
-		case 11:
-			/* Element[START_ELEMENT(VersionNumberMinor)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 6, 12, 9);
-				break;
-			}
-			break;
-		case 12:
-			/* Element[START_ELEMENT(SchemaID)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 4, 15, 13);
-				break;
-			}
-			break;
-		case 15:
-			/* Element[START_ELEMENT(Priority)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 1, 5, 16);
-				break;
-			}
-			break;
-		case 18:
-			/* Element[START_ELEMENT(ProtocolNamespace)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 2, 8, 4);
-				break;
-			}
-			break;
-		case 19:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 20, 3);
-				break;
-			}
-			break;
-		case 20:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 21, 3);
-				break;
-			}
-			break;
-		case 21:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 22, 3);
-				break;
-			}
-			break;
-		case 22:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 23, 3);
-				break;
-			}
-			break;
-		case 23:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 24, 3);
-				break;
-			}
-			break;
-		case 24:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 25, 3);
-				break;
-			}
-			break;
-		case 25:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 26, 3);
-				break;
-			}
-			break;
-		case 26:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 27, 3);
-				break;
-			}
-			break;
-		case 27:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 28, 3);
-				break;
-			}
-			break;
-		case 28:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 29, 3);
-				break;
-			}
-			break;
-		case 29:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 30, 3);
-				break;
-			}
-			break;
-		case 30:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 31, 3);
-				break;
-			}
-			break;
-		case 31:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 32, 3);
-				break;
-			}
-			break;
-		case 32:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 33, 3);
-				break;
-			}
-			break;
-		case 33:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 34, 3);
-				break;
-			}
-			break;
-		case 34:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 35, 3);
-				break;
-			}
-			break;
-		case 35:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 36, 3);
-				break;
-			}
-			break;
-		case 36:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 37, 3);
-				break;
-			}
-			break;
-		case 37:
-			/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 5, 3);
-				break;
-			}
-			break;
-		case 38:
-			/* Element[START_ELEMENT(AppProtocol)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 19, 3);
-				break;
-			}
-			break;
-		case 40:
-			/* FirstStartTag[START_ELEMENT(ResponseCode)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 3, 43, 41);
-				break;
-			}
-			break;
-		case 43:
-			/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 4, 5, 13);
-				break;
-			}
-			break;
-		case 44:
-			/* Element[START_ELEMENT(ResponseCode)] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 3, 43, 41);
-				break;
-			}
-			break;
-		case 46:
-			/* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */
-			switch(state->eventCode) {
-			case 0:
-				errn = _exiDecodeStartElement(state, *qnameID = 0, 46, 3);
-				break;
-			case 1:
-				errn = _exiDecodeStartElement(state, *qnameID = 1, 46, 16);
-				break;
-			case 2:
-				errn = _exiDecodeStartElement(state, *qnameID = 2, 46, 4);
-				break;
-			case 3:
-				errn = _exiDecodeStartElement(state, *qnameID = 3, 46, 41);
-				break;
-			case 4:
-				errn = _exiDecodeStartElement(state, *qnameID = 4, 46, 13);
-				break;
-			case 5:
-				errn = _exiDecodeStartElement(state, *qnameID = 5, 46, 9);
-				break;
-			case 6:
-				errn = _exiDecodeStartElement(state, *qnameID = 6, 46, 9);
-				break;
-			case 7:
-				errn = _exiDecodeStartElement(state, *qnameID = 65, 46, 2);
-				break;
-			case 8:
-				errn = _exiDecodeStartElement(state, *qnameID = 66, 46, 40);
-				break;
-			}
-			break;
-
-		}
-		break;
-	case EXI_EVENT_START_ELEMENT_NS:
-		errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
-		break;
-	case EXI_EVENT_START_ELEMENT_GENERIC:
-		errn = _exiDecodeQName(stream, state, qnameID,
-				&_qname);
-		if (errn == 0) {
-			/* update current rule, according next SE(*) grammar */
-			switch (state->grammarStack[state->stackIndex]) {
-			case 1:
-				/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] --> DocEnd[END_DOCUMENT] */
-				state->grammarStack[state->stackIndex] = 39;
-				break;
-			case 46:
-				/* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] --> FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */
-				state->grammarStack[state->stackIndex] = 46;
-				break;
-			case 49:
-				/* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] --> Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-				state->grammarStack[state->stackIndex] = 50;
-				break;
-			case 50:
-				/* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] --> Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-				state->grammarStack[state->stackIndex] = 50;
-				break;
-
-			default:
-				errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
-				break;
-			}
-			if (errn == 0) {
-				/* retrieve global grammar(existing OR runtime) and push it stack */
-				errn = exi_appHand_RetrieveAndPushGlobalGrammar(state, *qnameID);
-			}
-		}
-		break;
-	case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED:
-		errn = _exiDecodeQName(stream, state, qnameID,
-				&_qname);
-		if (errn == 0) {
-			/* update current rule --> element content rule (if not already) */
-			errn = exi_appHand_MoveToElementContentRule(state);
-			if (errn == 0) {
-				/* retrieve global grammar(existing OR runtime) and push it stack */
-				errn = exi_appHand_RetrieveAndPushGlobalGrammar(state, *qnameID);
-			}
-		}
-		break;
-	default:
-		errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
-		break;
-	}
-
-	return (errn);
-}
-
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-int exiappHandDecodeEndElement(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID) {
-	int16_t currentID;
-	errn = 0;
-	switch(currEvent) {
-	case EXI_EVENT_END_ELEMENT_UNDECLARED:
-		currentID = state->grammarStack[state->stackIndex];
-		if (currentID < 0) {
-			
-			/* runtime grammars do have IDs smaller than 0 */
-			/* learn EE event */
-			errn = exi_appHand_LearnEndElement(state);
-			
-		}
-		if(errn == 0) {
-			/* copy IDs */
-			*qnameID = state->elementStack[state->stackIndex];
-			errn = (exi_appHand_PopStack(state));
-		}
-		break;
-	default:
-		/* copy IDs */
-		*qnameID = state->elementStack[state->stackIndex];
-		errn = (exi_appHand_PopStack(state));
-		break;
-	}
-
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-
-
-int exiappHandDecodeCharacters(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-	int16_t moveOnID = 0;
-	errn = EXI_ERROR_UNEXPECTED_CHARACTERS;
-
-	switch(currEvent) {
-	case EXI_EVENT_CHARACTERS:
-	case EXI_EVENT_CHARACTERS_GENERIC:
-		switch (state->grammarStack[state->stackIndex]) {
-		case 73:
-			/* DATETIME */
-		case 74:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_GYEARMONTH, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 59:
-			/* DATETIME */
-		case 60:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_DATETIME, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 80:
-			/* DATETIME */
-		case 81:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_TIME, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 75:
-			/* BINARY_HEX */
-		case 76:
-			/* BINARY_HEX */
-			val->type = EXI_DATATYPE_BINARY_HEX;
-			errn = decodeBinary(stream, &val->binary);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 53:
-			/* BOOLEAN */
-		case 54:
-			/* BOOLEAN */
-			val->type = EXI_DATATYPE_BOOLEAN;
-			errn = decodeBoolean(stream, &val->boolean);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 57:
-			/* DATETIME */
-		case 58:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_DATE, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 65:
-			/* DATETIME */
-		case 66:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_GDAY, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 55:
-			/* NBIT_UNSIGNED_INTEGER */
-		case 56:
-			/* NBIT_UNSIGNED_INTEGER */
-			val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-			errn = _decodeNBitIntegerValue(stream, &val->integer, 8, -128);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 9:
-			/* UNSIGNED_INTEGER */
-		case 10:
-			/* UNSIGNED_INTEGER */
-		case 79:
-			/* UNSIGNED_INTEGER */
-			val->type = EXI_DATATYPE_UNSIGNED_INTEGER;
-			errn = decodeUnsignedInteger(stream, &val->integer);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 16:
-			/* NBIT_UNSIGNED_INTEGER */
-		case 17:
-			/* NBIT_UNSIGNED_INTEGER */
-			val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-			errn = _decodeNBitIntegerValue(stream, &val->integer, 5, 1);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 51:
-			/* BINARY_BASE64 */
-		case 52:
-			/* BINARY_BASE64 */
-			val->type = EXI_DATATYPE_BINARY_BASE64;
-			errn = decodeBinary(stream, &val->binary);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 67:
-			/* DATETIME */
-		case 68:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_GMONTH, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 41:
-			/* ENUMERATION */
-		case 42:
-			/* ENUMERATION */
-			val->type = EXI_DATATYPE_ENUMERATION;
-			errn = decodeNBitUnsignedInteger(stream, 2, &val->enumeration);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 49:
-			/* STRING */
-		case 50:
-			/* STRING */
-			val->type = EXI_DATATYPE_STRING;
-			errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			moveOnID = 50; /* move on ID */
-			break;
-		case 63:
-			/* FLOAT */
-		case 64:
-			/* FLOAT */
-			val->type = EXI_DATATYPE_FLOAT;
-			errn = decodeFloat(stream, &val->float_me);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 47:
-			/* LIST */
-		case 48:
-			/* LIST */
-			val->type = EXI_DATATYPE_LIST;
-			val->list.type = EXI_DATATYPE_STRING;
-			errn = decodeUnsignedInteger16(stream, &val->list.len);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 69:
-			/* DATETIME */
-		case 70:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_GMONTHDAY, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 61:
-			/* DECIMAL */
-		case 62:
-			/* DECIMAL */
-			val->type = EXI_DATATYPE_DECIMAL;
-			errn = decodeDecimal(stream, &val->decimal);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 13:
-			/* NBIT_UNSIGNED_INTEGER */
-		case 14:
-			/* NBIT_UNSIGNED_INTEGER */
-			val->type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-			errn = _decodeNBitIntegerValue(stream, &val->integer, 8, 0);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 77:
-			/* INTEGER */
-		case 78:
-			/* INTEGER */
-			val->type = EXI_DATATYPE_INTEGER;
-			errn = decodeInteger(stream, &val->integer);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 71:
-			/* DATETIME */
-		case 72:
-			/* DATETIME */
-			val->type = EXI_DATATYPE_DATETIME;
-			errn = decodeDateTime(stream, EXI_DATETIME_GYEAR, &val->datetime);
-			moveOnID = 5; /* move on ID */
-			break;
-		case 4:
-			/* STRING */
-		case 7:
-			/* STRING */
-			val->type = EXI_DATATYPE_STRING;
-			errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			moveOnID = 5; /* move on ID */
-			break;
-
-		}
-		if (errn == 0) {
-			/* move on */
-			state->grammarStack[state->stackIndex] = moveOnID;
-		}
-		break;
-	case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED:
-		if (state->grammarStack[state->stackIndex] < 0) {
-			/* runtime grammars do have IDs smaller than 0 */
-			errn = (EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH);
-		} else {
-			/* update current rule --> element content rule (if not already) */
-			errn = exi_appHand_MoveToElementContentRule(state);
-			if (errn == 0) {
-				/* read content value as STRING */
-				val->type = EXI_DATATYPE_STRING;
-				errn = decodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			}
-		}
-		break;
-	default:
-		errn = EXI_ERROR_UNEXPECTED_CHARACTERS;
-		break;
-	}
-
-	return (errn);
-}
-
-
-int exiappHandDecodeAttributeGenericValue(bitstream_t* stream, exi_state_t* state, uint16_t* qnameID, exi_value_t* val) {
-	int16_t currentID;
-
-	if (_qname.uri.id == 2 && _qname.localName.id == 1 ) {
-		/* xsi:type --> QName type */
-		errn = exiappHandDecodeAttributeXsiType(stream, state, val);
-	} else {
-		currentID = state->grammarStack[state->stackIndex];
-		if (currentID >= 0) {
-			/* if schema-informed value type according global attribute */
-			switch(*qnameID) {
-
-			default:
-				val->type = EXI_DATATYPE_STRING;
-				errn = decodeStringValue(stream, state, *qnameID, &val->str);
-				break;
-			}
-
-		} else {
-			val->type = EXI_DATATYPE_STRING;
-			errn = decodeStringValue(stream, state, *qnameID, &val->str);
-		}
-	}
-
-	return (errn);
-}
-
-int exiappHandDecodeAttribute(bitstream_t* stream, exi_state_t* state,
-		uint16_t* qnameID, exi_value_t* val) {
-	int16_t moveOnID = 0;
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE;
-
-	switch(currEvent) {
-	case EXI_EVENT_ATTRIBUTE:
-	case EXI_EVENT_ATTRIBUTE_INVALID_VALUE:
-		switch (currentID) {
-
-		}
-
-		if (errn == 0) {
-			/* move on */
-			state->grammarStack[state->stackIndex] = moveOnID;
-		}
-		break;
-	case EXI_EVENT_ATTRIBUTE_GENERIC:
-	case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED:
-		errn = _exiDecodeQName(stream, state, qnameID, &_qname);
-		if (errn == 0) {
-			/* learn attribute ? */
-			errn = exi_appHand_LearnAttribute(state, _qname.uri.id,  _qname.localName.id);
-			if (errn == 0) {
-				/* decode attribute value */
-				errn = exiappHandDecodeAttributeGenericValue(stream, state, qnameID, val);
-			}
-		}
-		break;
-	default:
-		errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE;
-		break;
-	}
-
-	return (errn);
-}
-
-
-
-int exiappHandDecodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-	errn = decodeBoolean(stream, &val->boolean);
-	if (errn == 0 && val->boolean) {
-		/* handle xsi:nil == true */
-		 errn = exi_appHand_HandleXsiNilTrue(state);
-	}
-	return (errn);
-}
-
-
-int exiappHandDecodeAttributeXsiType(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-
-	/* uri */
-	errn =_exiDecodeNamespaceUri(stream, state, &_qname.uri);
-	if (errn == 0) {
-		/* localName */
-		errn = _exiDecodeLocalName(stream, state, _qname.uri.id, &_qname.localName);
-		if (errn == 0) {
-			val->type = EXI_DATATYPE_QNAME;
-			val->eqname.namespaceURI = _qname.uri.id;
-			val->eqname.localPart = _qname.localName.id;
-
-			/* handle xsi type cast */
-			errn = exi_appHand_HandleXsiType(state, &val->eqname);
-		}
-	}
-
-	return (errn);
-}
-
-
-
-#endif
-

+ 0 - 225
src/codec/appHandCodec/appHandEXIDecoder.h

@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_appHand_DECODER_H
-#define EXI_appHand_DECODER_H
-
-/**
-* \file 	EXIDecoder.h
-* \brief 	EXI Decoder
-*
-*/
-
-#include "EXITypes.h"
-
-/**
- * \brief 		Initialize EXI decoder
- *
- *         		Resets & initializes the EXI decoder.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       runtimeTable   	Runtime name-tables
- * \param       stringTable   	String table
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandInitDecoder(bitstream_t* stream, exi_state_t* state,
-		exi_name_table_runtime_t runtimeTable, exi_value_table_t stringTable);
-
-
-/**
- * \brief 		Reports last decoded qualified name
- *
- *         		Note: Qualified name only available for previously unknown qname. Otherwise make use of name table entries.
- *
- * \param       qname   		Qualified name
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandGetLastQName(exi_qname_t** qname);
-
-
-/**
- * \brief 		Decodes next event
- *
- * 				Inspects EXI stream and decodes next EXI event.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       nextEvent   	Next event
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeNextEvent(bitstream_t* stream,
-		exi_state_t* state, exi_event_t* nextEvent);
-
-
-/**
- * \brief 		Decodes StartDocument (SD) event
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeStartDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief 		Decodes EndDocument (ED) event
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeEndDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief 		Decodes StartElement (SE) event
- *
- * 				Note: The first time a qnameID is larger than schema-informed NUMBER_OF_QNAMES it is possible to retrieve the qname by calling GetLastQName(...).
- * 				It is up to the caller to track qnames.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \return                  	Error-Code <> 0
- *
- */
-int
-exiappHandDecodeStartElement(bitstream_t* stream,
-		exi_state_t* state, uint16_t* qnameID);
-
-
-/**
- * \brief 		Decodes EndElement (EE) event
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeEndElement(bitstream_t* stream,
-		exi_state_t* state, uint16_t* qnameID);
-
-
-/**
- * \brief 		Decodes Characters (CH) event.
- *
- * 				Reports characters value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeCharacters(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes Attribute (AT) event.
- *
- * 				Reports attribute qname and value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeAttribute(bitstream_t* stream,
-		exi_state_t* state, uint16_t* qnameID, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes attribute xsi:nil
- *
- * 				Reports value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeAttributeXsiNil(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes attribute xsi:type
- *
- * 				Reports value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeAttributeXsiType(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes attribute/characters list value
- *
- * 				List values are special and are processed one by one.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       val		   		List value
- * \param       lt		   		List type
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
-		exi_value_t* val, exi_list_t lt);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

+ 0 - 1425
src/codec/appHandCodec/appHandEXIEncoder.c

@@ -1,1425 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_appHand_ENCODER_C
-#define EXI_appHand_ENCODER_C
-
-#include "EXITypes.h"
-#include "EXIOptions.h"
-#include "BitOutputStream.h"
-#include "EncoderChannel.h"
-
-#include "StringNameTable.h"
-#include "appHandNameTableEntries.h"
-#include "MethodsBag.h"
-
-#include "EXIOptions.h"
-
-#include "appHandEXICoder.h"
-#include "EXIHeaderEncoder.h"
-#include "ErrorCodes.h"
-#include "appHandQNames.h"
-#include "appHandQNameDefines.h"
-
-
-
-
-/* local variables */
-static uint32_t bits;
-static int errn;
-
-/* ==================================== */
-
-static int _encodeNBitIntegerValue(bitstream_t* stream, exi_integer_t* iv, uint16_t nbits, int32_t lowerBound) {
-	uint32_t val;
-	errn = 0;
-	switch(iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		val = (uint32_t)(iv->val.int8 - lowerBound);
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		val = (uint32_t)(iv->val.int16 - lowerBound);
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		val = (uint32_t)(iv->val.int32 - lowerBound);
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		val = (uint32_t)(iv->val.int64 - lowerBound);
-		break;
-	/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		val = (uint32_t)(iv->val.uint8 - lowerBound);
-		break;
-	case EXI_INTEGER_16:
-		val = (uint32_t)(iv->val.uint16 - lowerBound);
-		break;
-	case EXI_INTEGER_32:
-		val = (uint32_t)(iv->val.uint32 - (int64_t)lowerBound);
-		break;
-	case EXI_INTEGER_64:
-		val = (uint32_t)((int64_t)iv->val.uint64 - (int64_t)lowerBound);
-		break;
-	default:
-		errn = (EXI_UNSUPPORTED_INTEGER_VALUE_TYPE);
-		break;
-	}
-
-	if(errn == 0) {
-		errn = encodeNBitUnsignedInteger(stream, nbits, val);
-	}
-
-	return (errn);
-}
-
-
-static int _exiEncodeNamespaceUriHit(bitstream_t* stream, exi_state_t* state, uint16_t uriID) {
-	uint16_t uriCodingLength;
-	uint16_t uriSize;
-
-	errn = exiGetUriSize(&state->nameTablePrepopulated, &state->nameTableRuntime, &uriSize);
-	if (errn == 0) {
-		/* URI Entries + 1 */
-		errn = exiGetCodingLength( (uint16_t)(uriSize + 1), &uriCodingLength);
-		if (errn == 0) {
-			/* uri string value found */
-			/* ==> value(i+1) is encoded as n-bit unsigned integer */
-			errn = encodeNBitUnsignedInteger(stream, uriCodingLength, (uint32_t)(uriID+1));
-		}
-	}
-
-	return errn;
-}
-
-
-static int _exiEncodeLocalNameHit(bitstream_t* stream, exi_state_t* state,
-		uint16_t uriID, uint16_t localNameID) {
-	uint16_t localNameSize;
-	uint16_t localNameCodingLength;
-
-	/* string value found in local partition */
-	/* ==> string value is represented as zero (0) encoded as an */
-	errn = encodeUnsignedInteger32(stream, 0 );
-	if (errn == 0) {
-		/* Unsigned Integer followed by an the compact identifier of the */
-		/* string value as an n-bit unsigned integer n is log2 m and m is */
-		/* the number of entries in the string table partition */
-		errn = exiGetLocalNameSize(&state->nameTablePrepopulated, &state->nameTableRuntime, uriID, &localNameSize);
-		if (errn == 0) {
-			errn = exiGetCodingLength(localNameSize, &localNameCodingLength);
-			if (errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, localNameCodingLength, localNameID);
-			}
-		}
-	}
-
-	return (errn);
-}
-
-
-static int _encodeAttributeXsiTypeContent(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-
-	/* encode qname */
-	errn = _exiEncodeNamespaceUriHit(stream, state, val->eqname.namespaceURI);
-	if (errn == 0) {
-		errn = _exiEncodeLocalNameHit(stream, state, val->eqname.namespaceURI, val->eqname.localPart);
-		if (errn == 0) {
-			/* handle xsi type cast */
-			errn = exi_appHand_HandleXsiType(state, &val->eqname);
-		}
-	}
-
-	return (errn);
-}
-
-
-static int _exiEncodeStartElement(bitstream_t* stream, uint16_t nbits,
-		uint32_t val, exi_state_t* state, uint16_t qnameID, int16_t stackId,
-		int16_t newState) {
-	/* event-code */
-	errn = encodeNBitUnsignedInteger(stream, nbits, val);
-	if (errn == 0) {
-		/* move on */
-		state->grammarStack[state->stackIndex] = stackId;
-		/* push element on stack */
-		errn = (exi_appHand_PushStack(state, newState, qnameID));
-	}
-
-	return (errn);
-}
-
-
-static int _encode2ndLevelAttribute(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
-		exi_value_t* val) {
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-}
-
-
-int exiappHandEncodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt) {
-
-	switch(lt.type) {
-	case EXI_DATATYPE_BINARY_BASE64:
-	case EXI_DATATYPE_BINARY_HEX:
-		errn = encodeBinary(stream, &val->binary);
-		break;
-	case EXI_DATATYPE_BOOLEAN:
-		errn = encodeBoolean(stream, val->boolean);
-		break;
-	case EXI_DATATYPE_BOOLEAN_FACET:
-		errn = encodeNBitUnsignedInteger(stream, 2, val->boolean ? 2 : 0);
-		break;
-	case EXI_DATATYPE_DECIMAL:
-		errn = encodeDecimal(stream, &val->decimal);
-		break;
-	case EXI_DATATYPE_FLOAT:
-		errn = encodeFloat(stream, &val->float_me);
-		break;
-	case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER:
-		errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE;
-		break;
-	case EXI_DATATYPE_UNSIGNED_INTEGER:
-		errn = encodeUnsignedInteger(stream, &val->integer);
-		break;
-	case EXI_DATATYPE_INTEGER:
-		errn = encodeInteger(stream, &val->integer);
-		break;
-	case EXI_DATATYPE_DATETIME:
-		errn = encodeDateTime(stream, &val->datetime);
-		break;
-	case EXI_DATATYPE_STRING:
-		errn = encodeStringValue(stream, state, qnameID, &val->str);
-		break;
-	default:
-		errn = EXI_UNSUPPORTED_LIST_VALUE_TYPE;
-		break;
-	}
-
-	return (errn);
-}
-
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-int exiappHandEncodeStartDocument(bitstream_t* stream, exi_state_t* state) {
-	errn = 0;
-	switch(state->grammarStack[state->stackIndex]) {
-	case 0:
-		/* move on */
-		state->grammarStack[state->stackIndex] = 1;
-		break;
-	case 45:
-		/* move on */
-		state->grammarStack[state->stackIndex] = 46;
-		break;
-
-	default:
-		errn =(EXI_ERROR_UNEXPECTED_START_DOCUMENT);
-		break;
-	}
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-
-
-#ifndef __GNUC__
-#pragma warning( disable : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-int exiappHandEncodeEndDocument(bitstream_t* stream, exi_state_t* state) {
-	switch(state->grammarStack[state->stackIndex]) {
-	case 39:
-		errn = encodeFinish(stream);
-		break;
-	case 46:
-		errn = encodeFinish(stream);
-		break;
-
-	default:
-		errn =(EXI_ERROR_UNEXPECTED_END_DOCUMENT);
-		break;
-	}
-	return errn;
-}
-#ifndef __GNUC__
-#pragma warning( default : 4100 ) /* warning unreferenced parameter 'stream' */
-#endif /* __GNUC__ */
-
-
-int exiappHandInitEncoder(bitstream_t* stream, exi_state_t* state,
-		exi_name_table_runtime_t runtimeTable, exi_value_table_t stringTable) {
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-	int i;
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-	/* init grammar state */
-	state->stackIndex = 0;
-	state->grammarStack[0] = DOCUMENT;
-	/* name tables */
-	state->nameTablePrepopulated = exiappHandNameTablePrepopulated;
-	state->nameTableRuntime = runtimeTable;
-	/* next qname ID */
-	state->nextQNameID = EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES;
-	/* string tables */
-	state->stringTable = stringTable;
-	state->stringTable.numberOfGlobalStrings = 0;
-#if EXI_OPTION_VALUE_PARTITION_CAPACITY != 0
-#if EXI_OPTION_VALUE_MAX_LENGTH != 0
-	for(i=0; i<(state->stringTable.sizeLocalStrings); i++) {
-		state->stringTable.numberOfLocalStrings[i] = 0;
-	}
-#endif /* EXI_OPTION_VALUE_MAX_LENGTH != 0 */
-#endif /* EXI_OPTION_VALUE_PARTITION_CAPACITY != 0 */
-
-	/* runtime grammars */
-	state->numberOfRuntimeGrammars = 0;
-
-	/* Avoid warning: Unused declaration of variable 'name' */
-	bits = 0;
-
-	/* encode header */
-	return (writeEXIHeader(stream));
-}
-
-
-
-int exiappHandEncodeStartElement(bitstream_t* stream, exi_state_t* state, uint16_t qnameID) {
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	errn = EXI_ERROR_UNEXPECTED_START_ELEMENT;
-
-	switch (currentID) {
-	case 1:
-		/* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ 
-		switch(qnameID) {
-		case 65:
-			/* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 39, 2);
-			break;
-		case 66:
-			/* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes ) */
-			errn = _exiEncodeStartElement(stream, 2, 1, state, qnameID, 39, 40);
-			break;
-		}
-		break;
-	case 2:
-		/* FirstStartTag[START_ELEMENT(AppProtocol)] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 19, 3);
-			break;
-		}
-		break;
-	case 3:
-		/* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ 
-		switch(qnameID) {
-		case 2:
-			/* SE( ProtocolNamespace ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 8, 4);
-			break;
-		}
-		break;
-	case 8:
-		/* Element[START_ELEMENT(VersionNumberMajor)] */ 
-		switch(qnameID) {
-		case 5:
-			/* SE( VersionNumberMajor ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 11, 9);
-			break;
-		}
-		break;
-	case 11:
-		/* Element[START_ELEMENT(VersionNumberMinor)] */ 
-		switch(qnameID) {
-		case 6:
-			/* SE( VersionNumberMinor ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 12, 9);
-			break;
-		}
-		break;
-	case 12:
-		/* Element[START_ELEMENT(SchemaID)] */ 
-		switch(qnameID) {
-		case 4:
-			/* SE( SchemaID ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 15, 13);
-			break;
-		}
-		break;
-	case 15:
-		/* Element[START_ELEMENT(Priority)] */ 
-		switch(qnameID) {
-		case 1:
-			/* SE( Priority ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 5, 16);
-			break;
-		}
-		break;
-	case 18:
-		/* Element[START_ELEMENT(ProtocolNamespace)] */ 
-		switch(qnameID) {
-		case 2:
-			/* SE( ProtocolNamespace ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 8, 4);
-			break;
-		}
-		break;
-	case 19:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 20, 3);
-			break;
-		}
-		break;
-	case 20:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 21, 3);
-			break;
-		}
-		break;
-	case 21:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 22, 3);
-			break;
-		}
-		break;
-	case 22:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 23, 3);
-			break;
-		}
-		break;
-	case 23:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 24, 3);
-			break;
-		}
-		break;
-	case 24:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 25, 3);
-			break;
-		}
-		break;
-	case 25:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 26, 3);
-			break;
-		}
-		break;
-	case 26:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 27, 3);
-			break;
-		}
-		break;
-	case 27:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 28, 3);
-			break;
-		}
-		break;
-	case 28:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 29, 3);
-			break;
-		}
-		break;
-	case 29:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 30, 3);
-			break;
-		}
-		break;
-	case 30:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 31, 3);
-			break;
-		}
-		break;
-	case 31:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 32, 3);
-			break;
-		}
-		break;
-	case 32:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 33, 3);
-			break;
-		}
-		break;
-	case 33:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 34, 3);
-			break;
-		}
-		break;
-	case 34:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 35, 3);
-			break;
-		}
-		break;
-	case 35:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 36, 3);
-			break;
-		}
-		break;
-	case 36:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 37, 3);
-			break;
-		}
-		break;
-	case 37:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 5, 3);
-			break;
-		}
-		break;
-	case 38:
-		/* Element[START_ELEMENT(AppProtocol)] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 19, 3);
-			break;
-		}
-		break;
-	case 40:
-		/* FirstStartTag[START_ELEMENT(ResponseCode)] */ 
-		switch(qnameID) {
-		case 3:
-			/* SE( ResponseCode ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 43, 41);
-			break;
-		}
-		break;
-	case 43:
-		/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ 
-		switch(qnameID) {
-		case 4:
-			/* SE( SchemaID ) */
-			errn = _exiEncodeStartElement(stream, 2, 0, state, qnameID, 5, 13);
-			break;
-		}
-		break;
-	case 44:
-		/* Element[START_ELEMENT(ResponseCode)] */ 
-		switch(qnameID) {
-		case 3:
-			/* SE( ResponseCode ) */
-			errn = _exiEncodeStartElement(stream, 1, 0, state, qnameID, 43, 41);
-			break;
-		}
-		break;
-	case 46:
-		/* FragmentContent[START_ELEMENT(AppProtocol), START_ELEMENT(Priority), START_ELEMENT(ProtocolNamespace), START_ELEMENT(ResponseCode), START_ELEMENT(SchemaID), START_ELEMENT(VersionNumberMajor), START_ELEMENT(VersionNumberMinor), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC, END_DOCUMENT] */ 
-		switch(qnameID) {
-		case 0:
-			/* SE( AppProtocol ) */
-			errn = _exiEncodeStartElement(stream, 4, 0, state, qnameID, 46, 3);
-			break;
-		case 1:
-			/* SE( Priority ) */
-			errn = _exiEncodeStartElement(stream, 4, 1, state, qnameID, 46, 16);
-			break;
-		case 2:
-			/* SE( ProtocolNamespace ) */
-			errn = _exiEncodeStartElement(stream, 4, 2, state, qnameID, 46, 4);
-			break;
-		case 3:
-			/* SE( ResponseCode ) */
-			errn = _exiEncodeStartElement(stream, 4, 3, state, qnameID, 46, 41);
-			break;
-		case 4:
-			/* SE( SchemaID ) */
-			errn = _exiEncodeStartElement(stream, 4, 4, state, qnameID, 46, 13);
-			break;
-		case 5:
-			/* SE( VersionNumberMajor ) */
-			errn = _exiEncodeStartElement(stream, 4, 5, state, qnameID, 46, 9);
-			break;
-		case 6:
-			/* SE( VersionNumberMinor ) */
-			errn = _exiEncodeStartElement(stream, 4, 6, state, qnameID, 46, 9);
-			break;
-		case 65:
-			/* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq ) */
-			errn = _exiEncodeStartElement(stream, 4, 7, state, qnameID, 46, 2);
-			break;
-		case 66:
-			/* SE( {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes ) */
-			errn = _exiEncodeStartElement(stream, 4, 8, state, qnameID, 46, 40);
-			break;
-		}
-		break;
-
-	default:
-		/* element qname not expected */
-		return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-	}
-
-	return (errn);
-}
-
-
-
-int exiappHandEncodeStartElementNS(bitstream_t* stream,
-		exi_state_t* state, uint16_t namespaceUriID,
-		exi_string_ucs_t* localName) {
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-}
-
-
-int exiappHandEncodeStartElementGeneric(bitstream_t* stream,
-		exi_state_t* state, exi_string_ucs_t* namespaceUri,
-		exi_string_ucs_t* localName) {
-
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-
-	errn = EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC;
-
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-	return (errn);
-}
-
-
-
-int exiappHandEncodeEndElement(bitstream_t* stream, exi_state_t* state) {
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	switch (currentID) {
-	case 49:
-		/* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		errn = encodeNBitUnsignedInteger(stream, 3, 2);
-		break;
-	case 19:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 20:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 21:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 22:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 23:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 24:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 25:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 26:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 27:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 28:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 29:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 30:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 31:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 32:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 33:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 34:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 35:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 36:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 37:
-		/* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */
-	case 43:
-		/* Element[START_ELEMENT(SchemaID), END_ELEMENT] */
-	case 50:
-		/* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		errn = encodeNBitUnsignedInteger(stream, 2, 1);
-		break;
-	case 5:
-		/* Element[END_ELEMENT] */
-		errn = encodeNBitUnsignedInteger(stream, 1, 0);
-		break;
-
-	default:
-		return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-	}
-
-	if (errn == 0) {
-		/* pop item */
-		errn = exi_appHand_PopStack(state);
-	}
-
-	return (errn);
-}
-
-
-
-int exiappHandEncodeCharacters(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-	int16_t moveOnID = 0;
-	int deviantChars = 0;
-	int16_t currentID = state->grammarStack[state->stackIndex];
-
-	errn = EXI_ERROR_UNEXPECTED_CHARACTERS;
-
-	switch (currentID) {
-	case 48:
-		/* Element[CHARACTERS[LIST]] */
-		if (val->type == EXI_DATATYPE_LIST) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeUnsignedInteger32(stream, val->list.len);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 17:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = _encodeNBitIntegerValue(stream, &val->integer, 5, 1);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 63:
-		/* FirstStartTag[CHARACTERS[FLOAT]] */
-		if (val->type == EXI_DATATYPE_FLOAT) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeFloat(stream, &val->float_me);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 56:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 57:
-	case 59:
-	case 65:
-	case 67:
-	case 69:
-	case 71:
-	case 73:
-	case 80:
-		/* FirstStartTag[CHARACTERS[DATETIME]] */
-		if (val->type == EXI_DATATYPE_DATETIME) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeDateTime(stream, &val->datetime);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 75:
-		/* FirstStartTag[CHARACTERS[BINARY_HEX]] */
-		if (val->type == EXI_DATATYPE_BINARY_HEX) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeBinary(stream, &val->binary);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 41:
-		/* FirstStartTag[CHARACTERS[ENUMERATION]] */
-		if (val->type == EXI_DATATYPE_ENUMERATION) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 55:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = _encodeNBitIntegerValue(stream, &val->integer, 8, -128);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 78:
-		/* Element[CHARACTERS[INTEGER]] */
-		if (val->type == EXI_DATATYPE_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeInteger(stream, &val->integer);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 61:
-		/* FirstStartTag[CHARACTERS[DECIMAL]] */
-		if (val->type == EXI_DATATYPE_DECIMAL) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeDecimal(stream, &val->decimal);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 9:
-		/* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeUnsignedInteger(stream, &val->integer);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 62:
-		/* Element[CHARACTERS[DECIMAL]] */
-		if (val->type == EXI_DATATYPE_DECIMAL) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeDecimal(stream, &val->decimal);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 77:
-		/* FirstStartTag[CHARACTERS[INTEGER]] */
-		if (val->type == EXI_DATATYPE_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeInteger(stream, &val->integer);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 49:
-		/* FirstStartTag[ATTRIBUTE_GENERIC, START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		if (val->type == EXI_DATATYPE_STRING) {
-			errn = encodeNBitUnsignedInteger(stream, 3, 3);
-			if(errn == 0) {
-				errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			}
-			moveOnID = 50;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 3, 4);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 5);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 76:
-		/* Element[CHARACTERS[BINARY_HEX]] */
-		if (val->type == EXI_DATATYPE_BINARY_HEX) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeBinary(stream, &val->binary);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 52:
-		/* Element[CHARACTERS[BINARY_BASE64]] */
-		if (val->type == EXI_DATATYPE_BINARY_BASE64) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeBinary(stream, &val->binary);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 14:
-		/* Element[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 16:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = _encodeNBitIntegerValue(stream, &val->integer, 5, 1);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 7:
-		/* Element[CHARACTERS[STRING]] */
-		if (val->type == EXI_DATATYPE_STRING) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 58:
-	case 60:
-	case 66:
-	case 68:
-	case 70:
-	case 72:
-	case 74:
-	case 81:
-		/* Element[CHARACTERS[DATETIME]] */
-		if (val->type == EXI_DATATYPE_DATETIME) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeDateTime(stream, &val->datetime);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 53:
-		/* FirstStartTag[CHARACTERS[BOOLEAN]] */
-		if (val->type == EXI_DATATYPE_BOOLEAN) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeBoolean(stream, val->boolean);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 10:
-		/* Element[CHARACTERS[UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeUnsignedInteger(stream, &val->integer);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 54:
-		/* Element[CHARACTERS[BOOLEAN]] */
-		if (val->type == EXI_DATATYPE_BOOLEAN) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeBoolean(stream, val->boolean);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 79:
-		/* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeUnsignedInteger(stream, &val->integer);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 50:
-		/* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */
-		if (val->type == EXI_DATATYPE_STRING) {
-			errn = encodeNBitUnsignedInteger(stream, 2, 2);
-			if(errn == 0) {
-				errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			}
-			moveOnID = 50;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 2, 3);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 1, 1);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 13:
-		/* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */
-		if (val->type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = _encodeNBitIntegerValue(stream, &val->integer, 8, 0);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 51:
-		/* FirstStartTag[CHARACTERS[BINARY_BASE64]] */
-		if (val->type == EXI_DATATYPE_BINARY_BASE64) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeBinary(stream, &val->binary);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 47:
-		/* FirstStartTag[CHARACTERS[LIST]] */
-		if (val->type == EXI_DATATYPE_LIST) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeUnsignedInteger32(stream, val->list.len);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 42:
-		/* Element[CHARACTERS[ENUMERATION]] */
-		if (val->type == EXI_DATATYPE_ENUMERATION) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, val->enumeration);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 4:
-		/* FirstStartTag[CHARACTERS[STRING]] */
-		if (val->type == EXI_DATATYPE_STRING) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeStringValue(stream, state, state->elementStack[state->stackIndex], &val->str);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 3, 6);
-				deviantChars = 1;
-			}
-		}
-		break;
-	case 64:
-		/* Element[CHARACTERS[FLOAT]] */
-		if (val->type == EXI_DATATYPE_FLOAT) {
-			errn = encodeNBitUnsignedInteger(stream, 1, 0);
-			if(errn == 0) {
-				errn = encodeFloat(stream, &val->float_me);
-			}
-			moveOnID = 5;
-		} else { 
-			/* deviant characters */ 
-			errn = encodeNBitUnsignedInteger(stream, 1, 1);
-			if(errn == 0) {
-				errn = encodeNBitUnsignedInteger(stream, 2, 2);
-				deviantChars = 1;
-			}
-		}
-		break;
-
-	default:
-		errn = (EXI_ERROR_UNEXPECTED_CHARACTERS);
-		break;
-	}
-
-	if(errn == 0) {
-		if (currentID < 0) {
-			/* TODO runtime rules */
-			errn = EXI_ERROR_UNEXPECTED_CHARACTERS;
-		} else if (deviantChars) {
-			return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-		} else {
-			/* move on */
-			state->grammarStack[state->stackIndex] = moveOnID;
-		}
-	}
-
-	return (errn);
-}
-
-
-int exiappHandEncodeAttribute(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
-		exi_value_t* val) {
-	int16_t moveOnID = 0;
-	int16_t currentID = state->grammarStack[state->stackIndex];
-	errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE;
-
-	switch (currentID) {
-
-	}
-
-	/* no expected attribute */
-	if (currentID < 0) {
-		/* runtime element */
-		errn = _encode2ndLevelAttribute(stream, state, qnameID, val);
-	} else {
-		if(moveOnID == 0) {
-			/* no action yet */
-#if EXI_OPTION_STRICT != 0
-			/* no 2nd level events in strict mode for schema-informed grammars */
-			errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE;
-#else /* EXI_appHandSTRICT != 0 */
-			errn = _encode2ndLevelAttribute(stream, state, qnameID, val);
-#endif /* EXI_appHandSTRICT != 0 */
-		} else {
-			state->grammarStack[state->stackIndex] = moveOnID;
-		}
-	}
-
-	return (errn);
-}
-
-
-int exiappHandEncodeAttributeNS(bitstream_t* stream,
-		exi_state_t* state, uint16_t namespaceUriID,
-		exi_string_ucs_t* localName, exi_value_t* val) {
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-
-	errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS;
-
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-
-	return (errn);
-}
-
-int exiappHandEncodeAttributeGeneric(bitstream_t* stream,
-		exi_state_t* state, exi_string_ucs_t* namespaceUri,
-		exi_string_ucs_t* localName, exi_value_t* val) {
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-
-	errn = EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED;
-
-	return EXI_DEVIANT_SUPPORT_NOT_DEPLOYED;
-
-	return (errn);
-}
-
-
-int exiappHandEncodeAttributeXsiNil(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-
-	switch (state->grammarStack[state->stackIndex]) {
-
-	}
-
-	if (errn == 0) {
-		errn = encodeBoolean(stream, val->boolean);
-		if (errn == 0 && val->boolean) {
-			/* handle xsi:nil == true */
-			 errn = exi_appHand_HandleXsiNilTrue(state);
-		}
-	}
-
-	return (errn);
-}
-
-
-
-int exiappHandEncodeAttributeXsiType(bitstream_t* stream, exi_state_t* state,
-		exi_value_t* val) {
-	/* encode xsi:type event code */
-	switch (state->grammarStack[state->stackIndex]) {
-	case 9:
-		errn = encodeNBitUnsignedInteger(stream, 1, 1);
-		if(errn == 0) {
-			errn = encodeNBitUnsignedInteger(stream, 3, 1);
-		}
-		break;
-
-	default:
-		errn = (EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE);
-		break;
-	}
-	if (errn == 0) {
-		/* encode qname */
-		errn = _encodeAttributeXsiTypeContent(stream, state, val);
-	}
-
-	return (errn);
-}
-
-
-
-
-#endif
-

+ 0 - 274
src/codec/appHandCodec/appHandEXIEncoder.h

@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_appHand_ENCODER_H
-#define EXI_appHand_ENCODER_H
-
-/**
-* \file 	EXIEncoder.h
-* \brief 	EXI Encoder
-*
-*/
-
-#include "EXITypes.h"
-#include "appHandEXIEncoder.h"
-
-/**
- * \brief 	Initialize EXI encoder
- *
- *         	Resets & initializes the EXI encoder.
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       runtimeTable   	Runtime name-tables
- * \param       stringTable   	String table
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandInitEncoder(bitstream_t* stream, exi_state_t* state,
-		exi_name_table_runtime_t runtimeTable, exi_value_table_t stringTable);
-
-/**
- * \brief  	Reports the beginning of a set of XML events
- *
- *			see EXI StartDocument (SD) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeStartDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief  	Reports the end of a set of XML events
- *
- *			see EXI EndDocument (ED) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeEndDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief  	Supplies the start of a known element
- *
- *			Provides access to the namespace URI and local name of the start tag by providing qnameID.
- *			Note: Both, namespace URI and local name are known (schema-informed) or have been encoded before.
- *			see EXI StartElement (SE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		qualified name ID
- * \return                  	Error-Code <> 0
- *
- */
-int
-exiappHandEncodeStartElement(bitstream_t* stream,
-		exi_state_t* state, uint16_t qnameID);
-
-/**
- * \brief  	Supplies the start of an element where the namespace is known
- *
- *			Note: Namespace URI is known (schema-informed) or has been encoded before while local name is unknown.
- *			see EXI StartElement (SE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUriID  namespace URI ID
- * \param       localName  		local name as string
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeStartElementNS(bitstream_t* stream,
-		exi_state_t* state, uint16_t namespaceUriID,
-		exi_string_ucs_t* localName);
-
-/**
- * \brief  	Supplies the start of an element where the namespace and the local name is unknown
- *
- *			Note: Neither namespace URI nor local name is known.
- *			see EXI StartElement (SE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUri  	namespace URI as string
- * \param       localName  		local name as string
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeStartElementGeneric(bitstream_t* stream,
-		exi_state_t* state, exi_string_ucs_t* namespaceUri,
-		exi_string_ucs_t* localName);
-
-/**
- * \brief  	Supplies the end tag of an element
- *
- *			see EXI EndElement (EE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeEndElement(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief  	Supplies characters value
- *
- *			Note: Special handling for list value.
- *			see EXI Characters (CH) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       val   			Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeCharacters(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-/**
- * \brief  	Supplies an attribute qname and value
- *
- *			Note: Special handling for list value.
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		qualified name ID
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeAttribute(bitstream_t* stream,
-		exi_state_t* state, uint16_t qnameID, exi_value_t* val);
-
-
-
-
-/**
- * \brief  	Supplies an attribute qname and value where the namespace is known
- *
- *			Note: Special handling for list value.
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUriID  Qualified namespace URI ID
- * \param       localName  		Qualified localname as String
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeAttributeNS(bitstream_t* stream,
-		exi_state_t* state, uint16_t namespaceUriID,
-		exi_string_ucs_t* localName, exi_value_t* val);
-
-
-/**
- * \brief  	Supplies an attribute qname and value where the namespace and the local name is unknown
- *
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUri  	namespace URI as string
- * \param       localName  		local name as string
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeAttributeGeneric(bitstream_t* stream,
-		exi_state_t* state, exi_string_ucs_t* namespaceUri,
-		exi_string_ucs_t* localName, exi_value_t* val);
-
-
-
-/**
- * \brief  	Supplies an xsi:nil attribute
- *
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeAttributeXsiNil(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-/**
- * \brief  	Supplies an xsi:type attribute
- *
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeAttributeXsiType(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-/**
- * \brief  	Supplies list value for characters and attribute event
- *
- *			List values are special given that first the number and type of entry needs to be passed (element/attribute event) and then one by one the actual values.
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		qualified name ID
- * \param       val   			one list value
- * \param       lt   			list type
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandEncodeListValue(bitstream_t* stream,
-		exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

+ 0 - 101
src/codec/appHandCodec/appHandNameTableEntries.c

@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_appHand_NAME_TABLE_ENTRIES_C
-#define EXI_appHand_NAME_TABLE_ENTRIES_C
-
-#include "appHandNameTableEntries.h"
-
-
-
-/* ==================================== */
-/* String Table Population */
-
-/* localName entries for URI '', id = 0 */
-/* 
-  "AppProtocol",  "Priority",  "ProtocolNamespace",  "ResponseCode",  "SchemaID",
-  "VersionNumberMajor",  "VersionNumberMinor"
- */
-
-/* localName entries for URI 'http://www.w3.org/XML/1998/namespace', id = 1 */
-/* 
-  "base",  "id",  "lang",  "space"
- */
-
-/* localName entries for URI 'http://www.w3.org/2001/XMLSchema-instance', id = 2 */
-/* 
-  "nil",  "type"
- */
-
-/* localName entries for URI 'http://www.w3.org/2001/XMLSchema', id = 3 */
-/* 
-  "ENTITIES",  "ENTITY",  "ID",  "IDREF",  "IDREFS",
-  "NCName",  "NMTOKEN",  "NMTOKENS",  "NOTATION",  "Name",
-  "QName",  "anySimpleType",  "anyType",  "anyURI",  "base64Binary",
-  "boolean",  "byte",  "date",  "dateTime",  "decimal",
-  "double",  "duration",  "float",  "gDay",  "gMonth",
-  "gMonthDay",  "gYear",  "gYearMonth",  "hexBinary",  "int",
-  "integer",  "language",  "long",  "negativeInteger",  "nonNegativeInteger",
-  "nonPositiveInteger",  "normalizedString",  "positiveInteger",  "short",  "string",
-  "time",  "token",  "unsignedByte",  "unsignedInt",  "unsignedLong",
-  "unsignedShort"
- */
-
-/* localName entries for URI 'urn:iso:15118:2:2010:AppProtocol', id = 4 */
-/* 
-  "AppProtocolType",  "idType",  "priorityType",  "protocolNameType",  "protocolNamespaceType",
-  "responseCodeType",  "supportedAppProtocolReq",  "supportedAppProtocolRes"
- */
-
-
-/* number of local-name entries per URI */
-static uint16_t localNames[5] = {
-	/* '' */
-	7,
-	/* 'http://www.w3.org/XML/1998/namespace' */
-	4,
-	/* 'http://www.w3.org/2001/XMLSchema-instance' */
-	2,
-	/* 'http://www.w3.org/2001/XMLSchema' */
-	46,
-	/* 'urn:iso:15118:2:2010:AppProtocol' */
-	8
-};
-
-
-exi_name_table_prepopulated_t exiappHandNameTablePrepopulated = { 5, localNames };
-
-
-
-
-#endif
-

+ 0 - 54
src/codec/appHandCodec/appHandQNameDefines.h

@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_appHand_QNAME_DEFINES_H
-#define EXI_appHand_QNAME_DEFINES_H
-
-/** Number of pre-populated qnames */
-#define EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES 67
-
-/** Number of runtime qnames */
-#define EXI_appHandMAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES 100
-
-/** Number of overall qnames (pre-populated from schema and runtime qnames) */
-#define EXI_appHandMAX_NUMBER_OF_QNAMES (EXI_appHandNUMBER_OF_PREPOPULATED_QNAMES + EXI_appHandMAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES)
-
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 227
src/codec/appHandCodec/appHandQNames.c

@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_appHand_QNAMES_C
-#define EXI_appHand_QNAMES_C
-
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-#include "appHandQNameDefines.h"
-
-/* qname is a composition of namespaceURI(ID) and localPart(ID) */
-static exi_eqname_t qnames[EXI_appHandMAX_NUMBER_OF_QNAMES] = {
-	/* qnameID == 0: AppProtocol */
-	{0, 0},
-	/* qnameID == 1: Priority */
-	{0, 1},
-	/* qnameID == 2: ProtocolNamespace */
-	{0, 2},
-	/* qnameID == 3: ResponseCode */
-	{0, 3},
-	/* qnameID == 4: SchemaID */
-	{0, 4},
-	/* qnameID == 5: VersionNumberMajor */
-	{0, 5},
-	/* qnameID == 6: VersionNumberMinor */
-	{0, 6},
-	/* qnameID == 7: {http://www.w3.org/XML/1998/namespace}base */
-	{1, 0},
-	/* qnameID == 8: {http://www.w3.org/XML/1998/namespace}id */
-	{1, 1},
-	/* qnameID == 9: {http://www.w3.org/XML/1998/namespace}lang */
-	{1, 2},
-	/* qnameID == 10: {http://www.w3.org/XML/1998/namespace}space */
-	{1, 3},
-	/* qnameID == 11: {http://www.w3.org/2001/XMLSchema-instance}nil */
-	{2, 0},
-	/* qnameID == 12: {http://www.w3.org/2001/XMLSchema-instance}type */
-	{2, 1},
-	/* qnameID == 13: {http://www.w3.org/2001/XMLSchema}ENTITIES */
-	{3, 0},
-	/* qnameID == 14: {http://www.w3.org/2001/XMLSchema}ENTITY */
-	{3, 1},
-	/* qnameID == 15: {http://www.w3.org/2001/XMLSchema}ID */
-	{3, 2},
-	/* qnameID == 16: {http://www.w3.org/2001/XMLSchema}IDREF */
-	{3, 3},
-	/* qnameID == 17: {http://www.w3.org/2001/XMLSchema}IDREFS */
-	{3, 4},
-	/* qnameID == 18: {http://www.w3.org/2001/XMLSchema}NCName */
-	{3, 5},
-	/* qnameID == 19: {http://www.w3.org/2001/XMLSchema}NMTOKEN */
-	{3, 6},
-	/* qnameID == 20: {http://www.w3.org/2001/XMLSchema}NMTOKENS */
-	{3, 7},
-	/* qnameID == 21: {http://www.w3.org/2001/XMLSchema}NOTATION */
-	{3, 8},
-	/* qnameID == 22: {http://www.w3.org/2001/XMLSchema}Name */
-	{3, 9},
-	/* qnameID == 23: {http://www.w3.org/2001/XMLSchema}QName */
-	{3, 10},
-	/* qnameID == 24: {http://www.w3.org/2001/XMLSchema}anySimpleType */
-	{3, 11},
-	/* qnameID == 25: {http://www.w3.org/2001/XMLSchema}anyType */
-	{3, 12},
-	/* qnameID == 26: {http://www.w3.org/2001/XMLSchema}anyURI */
-	{3, 13},
-	/* qnameID == 27: {http://www.w3.org/2001/XMLSchema}base64Binary */
-	{3, 14},
-	/* qnameID == 28: {http://www.w3.org/2001/XMLSchema}boolean */
-	{3, 15},
-	/* qnameID == 29: {http://www.w3.org/2001/XMLSchema}byte */
-	{3, 16},
-	/* qnameID == 30: {http://www.w3.org/2001/XMLSchema}date */
-	{3, 17},
-	/* qnameID == 31: {http://www.w3.org/2001/XMLSchema}dateTime */
-	{3, 18},
-	/* qnameID == 32: {http://www.w3.org/2001/XMLSchema}decimal */
-	{3, 19},
-	/* qnameID == 33: {http://www.w3.org/2001/XMLSchema}double */
-	{3, 20},
-	/* qnameID == 34: {http://www.w3.org/2001/XMLSchema}duration */
-	{3, 21},
-	/* qnameID == 35: {http://www.w3.org/2001/XMLSchema}float */
-	{3, 22},
-	/* qnameID == 36: {http://www.w3.org/2001/XMLSchema}gDay */
-	{3, 23},
-	/* qnameID == 37: {http://www.w3.org/2001/XMLSchema}gMonth */
-	{3, 24},
-	/* qnameID == 38: {http://www.w3.org/2001/XMLSchema}gMonthDay */
-	{3, 25},
-	/* qnameID == 39: {http://www.w3.org/2001/XMLSchema}gYear */
-	{3, 26},
-	/* qnameID == 40: {http://www.w3.org/2001/XMLSchema}gYearMonth */
-	{3, 27},
-	/* qnameID == 41: {http://www.w3.org/2001/XMLSchema}hexBinary */
-	{3, 28},
-	/* qnameID == 42: {http://www.w3.org/2001/XMLSchema}int */
-	{3, 29},
-	/* qnameID == 43: {http://www.w3.org/2001/XMLSchema}integer */
-	{3, 30},
-	/* qnameID == 44: {http://www.w3.org/2001/XMLSchema}language */
-	{3, 31},
-	/* qnameID == 45: {http://www.w3.org/2001/XMLSchema}long */
-	{3, 32},
-	/* qnameID == 46: {http://www.w3.org/2001/XMLSchema}negativeInteger */
-	{3, 33},
-	/* qnameID == 47: {http://www.w3.org/2001/XMLSchema}nonNegativeInteger */
-	{3, 34},
-	/* qnameID == 48: {http://www.w3.org/2001/XMLSchema}nonPositiveInteger */
-	{3, 35},
-	/* qnameID == 49: {http://www.w3.org/2001/XMLSchema}normalizedString */
-	{3, 36},
-	/* qnameID == 50: {http://www.w3.org/2001/XMLSchema}positiveInteger */
-	{3, 37},
-	/* qnameID == 51: {http://www.w3.org/2001/XMLSchema}short */
-	{3, 38},
-	/* qnameID == 52: {http://www.w3.org/2001/XMLSchema}string */
-	{3, 39},
-	/* qnameID == 53: {http://www.w3.org/2001/XMLSchema}time */
-	{3, 40},
-	/* qnameID == 54: {http://www.w3.org/2001/XMLSchema}token */
-	{3, 41},
-	/* qnameID == 55: {http://www.w3.org/2001/XMLSchema}unsignedByte */
-	{3, 42},
-	/* qnameID == 56: {http://www.w3.org/2001/XMLSchema}unsignedInt */
-	{3, 43},
-	/* qnameID == 57: {http://www.w3.org/2001/XMLSchema}unsignedLong */
-	{3, 44},
-	/* qnameID == 58: {http://www.w3.org/2001/XMLSchema}unsignedShort */
-	{3, 45},
-	/* qnameID == 59: {urn:iso:15118:2:2010:AppProtocol}AppProtocolType */
-	{4, 0},
-	/* qnameID == 60: {urn:iso:15118:2:2010:AppProtocol}idType */
-	{4, 1},
-	/* qnameID == 61: {urn:iso:15118:2:2010:AppProtocol}priorityType */
-	{4, 2},
-	/* qnameID == 62: {urn:iso:15118:2:2010:AppProtocol}protocolNameType */
-	{4, 3},
-	/* qnameID == 63: {urn:iso:15118:2:2010:AppProtocol}protocolNamespaceType */
-	{4, 4},
-	/* qnameID == 64: {urn:iso:15118:2:2010:AppProtocol}responseCodeType */
-	{4, 5},
-	/* qnameID == 65: {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq */
-	{4, 6},
-	/* qnameID == 66: {urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes */
-	{4, 7}
-
-};
-
-
-int exiappHandGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart) {
-	int errn = 0;
-	/* EXI_appHandNUMBER_OF_QNAMES */
-	if (qnameID < state->nextQNameID) {
-		*namespaceURI = qnames[qnameID].namespaceURI;
-		*localPart = qnames[qnameID].localPart;
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-	return errn;
-}
-
-
-int exiappHandGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID) {
-	uint16_t i;
-	int errn = EXI_ERROR_OUT_OF_BOUNDS;
-	/* TODO Do something more efficient than just walk over the entire list */
-	/* EXI_appHandNUMBER_OF_QNAMES */
-	for(i=0; i<state->nextQNameID && errn != 0; i++) {
-		if(qnames[i].localPart == localPart && qnames[i].namespaceURI == namespaceURI) {
-			*qnameID = i;
-			errn = 0;
-		}
-	}
-
-	return errn;
-}
-
-
-int exiappHandAddEQName(exi_state_t* state, uint16_t* qnameID, uint16_t namespaceURI, uint16_t localPart) {
-	int errn = 0;
-	if(state->nextQNameID < (EXI_appHandMAX_NUMBER_OF_QNAMES -1)) {
-		/* store IDs */
-		qnames[state->nextQNameID].namespaceURI = namespaceURI;
-		qnames[state->nextQNameID].localPart = localPart;
-		/* increment counter */
-		*qnameID = state->nextQNameID++;
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-
-
-	return errn;
-}
-
-
-#endif
-

+ 0 - 77
src/codec/appHandCodec/appHandQNames.h

@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/appHandshake/V2G_CI_AppProtocol.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_appHand_QNAMES_H
-#define EXI_appHand_QNAMES_H
-
-#include "EXITypes.h"
-
-/**
- * \brief  	Returns efficient qname (namespaceURI & localName) IDs for qnameID
- *
- * \param       state		   	Codec state
- * \param       qnameID		   	Qualified name ID
- * \param       namespaceURI	QName namespace URI ID
- * \param       localPart		QName local name ID
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart);
-
-
-/**
- * \brief  	Returns qnameID for qname namespaceURI & localName
- *
- * \param       state		   	Codec state
- * \param       namespaceURI	QName namespace URI ID
- * \param       localPart		QName local name ID
- * \param       qnameID		   	QName ID (out)
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID);
-
-
-/**
- * \brief  	Add  efficient qname (namespaceURI & localName) IDs for qnameID
- *
- * \param       state		   	Codec state
- * \param       qnameID		   	Qualified name ID
- * \param       namespaceURI	QName namespace URI ID
- * \param       localPart		QName local name ID
- * \return                  	Error-Code <> 0
- *
- */
-int exiappHandAddEQName(exi_state_t* state, uint16_t* qnameID, uint16_t namespaceURI, uint16_t localPart);
-
-#endif
-

+ 0 - 604
src/codec/main_codec.c

@@ -1,604 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-/*******************************************************************
- *
- * <p>Sample program to illustrate how to read an EXI stream and
- *  directly write it again to an output</p>
- *
- *  <p>e.g., <executable> in.exi out.exi</p>
- ********************************************************************/
-
-/* Avoid VS warning, put before your included header files */
-/* warning C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. */
-#define _CRT_SECURE_NO_DEPRECATE
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include "EXIConfig.h"
-#include "v2gEXIDecoder.h"
-#include "StringNameTable.h"
-#include "v2gEXIEncoder.h"
-#include "EXITypes.h"
-#include "ByteStream.h"
-#include "ErrorCodes.h"
-#include "v2gQNameDefines.h"
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-#include "DynamicMemory.h"
-#include "StringValueTable.h"
-#endif /* DYNAMIC_ALLOCATION */
-
-/** EXI Debug mode */
-#define EXI_DEBUG 0
-
-
-#if EXI_STREAM == BYTE_ARRAY
-/* 64 kilobytes = 65 536 bytes */
-/* 1 megabyte = 1 048 576 bytes*/
-/* 4 megabytes = 4 194 304 bytes */
-#define BUFFER_SIZE 4194304
-uint8_t bufferIn[BUFFER_SIZE];
-uint8_t bufferOut[BUFFER_SIZE];
-#endif /* EXI_STREAM == BYTE_ARRAY */
-
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-/* avoids warning: initializer element is not computable at load time */
-#define ARRAY_SIZE_BYTES 300
-uint8_t bytesData[ARRAY_SIZE_BYTES];
-#define ARRAY_SIZE_STRINGS 30000
-uint32_t codepoints[ARRAY_SIZE_STRINGS];
-#endif /* STATIC_ALLOCATION */
-
-/* String table memory setup */
-uint16_t numberOfLocalStringsDecode[EXI_v2gMAX_NUMBER_OF_QNAMES];
-uint16_t numberOfLocalStringsEncode[EXI_v2gMAX_NUMBER_OF_QNAMES];
-
-#if EXI_DEBUG == 0
-# define DEBUG_PRINTF(x) printf x
-#else
-# define DEBUG_PRINTF(x) do {} while (0)
-#endif
-
-static void debugValue(exi_value_t* val, exi_value_table_t* valueTable, uint16_t qnameID);
-
-
-int main_codec(int argc, char *argv[]) {
-
-	int errn = 0;
-	int noEndOfDocument;
-
-	unsigned int k;
-
-	bitstream_t iStream, oStream;
-#if EXI_STREAM == BYTE_ARRAY
-	uint32_t posDecode;
-	uint32_t posEncode;
-#endif /* EXI_STREAM == BYTE_ARRAY */
-
-	/* EXI set-up */
-	exi_state_t stateDecode;
-	exi_state_t stateEncode;
-	exi_event_t event;
-	uint16_t qnameID = 0; /* qname */
-	uint16_t lastKnownQNameID = EXI_v2gNUMBER_OF_PREPOPULATED_QNAMES - 1;
-	exi_qname_t* qname;
-	exi_value_t val;
-
-	exi_name_table_runtime_t runtimeTableDecode;
-	exi_name_table_runtime_t runtimeTableEncode;
-
-	exi_value_table_t stringTableDecode = { 0, EXI_v2gMAX_NUMBER_OF_QNAMES, numberOfLocalStringsDecode, NULL };
-	exi_value_table_t stringTableEncode = { 0, EXI_v2gMAX_NUMBER_OF_QNAMES, numberOfLocalStringsEncode, NULL };
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-	exi_value_string_table_t stringTableValuesDecode;
-	exi_value_string_table_t stringTableValuesEncode;
-
-	stringTableValuesDecode.size = 0;
-	stringTableValuesDecode.len = 0;
-	stringTableValuesEncode.size = 0;
-	stringTableValuesEncode.len = 0;
-
-	/** string values */
-	stringTableDecode.valueStringTable = &stringTableValuesDecode;
-	stringTableEncode.valueStringTable = &stringTableValuesEncode;
-#endif /* DYNAMIC_ALLOCATION */
-
-
-	/* BINARY memory setup */
-	val.binary.len = 0;
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-	val.binary.size = ARRAY_SIZE_BYTES;
-	val.binary.data = bytesData;
-#endif /* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-	val.binary.size = 0;
-	val.binary.data = NULL;
-#endif /* DYNAMIC_ALLOCATION */
-
-	/* STRING miss memory setup */
-	val.str.type = EXI_STRING_VALUE_MISS;
-	val.str.miss.len = 0;
-#if MEMORY_ALLOCATION == STATIC_ALLOCATION
-	val.str.miss.size = ARRAY_SIZE_STRINGS;
-	val.str.miss.codepoints = codepoints;
-#endif /* STATIC_ALLOCATION */
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-	val.str.miss.size = 0;
-	val.str.miss.codepoints = NULL;
-#endif /* DYNAMIC_ALLOCATION */
-
-#if EXI_DEBUG == 1
-	/* The Eclipse console has buffering problems on Windows e.g, Debug mode */
-	setvbuf(stdout, NULL, _IONBF, 0);
-	setvbuf(stderr, NULL, _IONBF, 0);
-#endif /*EXI_DEBUG*/
-
-	if (argc != 3) {
-		printf("Usage: %s exiInput exiOutput\n", argv[0]);
-		return -1;
-	}
-
-
-#if EXI_STREAM == BYTE_ARRAY
-	/* input pos */
-	posDecode = 0;
-	/* parse EXI stream to internal byte structures  */
-	errn = readBytesFromFile(argv[1], bufferIn, BUFFER_SIZE, &posDecode);
-	if (errn != 0) {
-		printf("Problems while reading file into buffer\n");
-		return errn;
-	}
-	posDecode = 0; /* reset position */
-#endif /* EXI_STREAM == BYTE_ARRAY */
-
-	/* setup input stream */
-#if EXI_STREAM == BYTE_ARRAY
-	iStream.size = BUFFER_SIZE;
-	iStream.data = bufferIn;
-	iStream.pos = &posDecode;
-#endif /* EXI_STREAM == BYTE_ARRAY */
-#if EXI_STREAM == FILE_STREAM
-	iStream.file = fopen(argv[1], "rb");
-#endif /* EXI_STREAM == FILE_STREAM */
-
-	iStream.buffer = 0;
-	iStream.capacity = 0;
-
-
-#if EXI_STREAM == BYTE_ARRAY
-	/* setup output stream */
-	posEncode = 0;
-	oStream.size = BUFFER_SIZE;
-	oStream.data = bufferOut;
-	oStream.pos = &posEncode;
-#endif
-#if EXI_STREAM == FILE_STREAM
-	oStream.file = fopen(argv[2], "wb");
-#endif /* EXI_STREAM == FILE_STREAM */
-	oStream.buffer = 0;
-	oStream.capacity = 8;
-
-	noEndOfDocument = 1; /* true */
-
-	/* init decoder (read header, set initial state) */
-	/* init runtime table */
-	errn = exiInitNameTableRuntime(&runtimeTableDecode);
-	exiv2gInitDecoder(&iStream, &stateDecode, runtimeTableDecode, stringTableDecode);
-
-	/* init encoder (write header, set initial state) */
-	errn = exiInitNameTableRuntime(&runtimeTableEncode);
-	exiv2gInitEncoder(&oStream, &stateEncode, runtimeTableEncode, stringTableEncode);
-
-	DEBUG_PRINTF(("[DECODE] >>> EXI  >>> [ENCODE] \n"));
-
-	do {
-		if (errn) {
-			DEBUG_PRINTF(("[Encode-ERROR] %d \n", errn));
-			return errn;
-		}
-
-		errn = exiv2gDecodeNextEvent(&iStream, &stateDecode,
-				&event);
-		if (errn) {
-			DEBUG_PRINTF(("[Decode-ERROR] %d \n", errn));
-			return errn;
-		}
-
-		switch (event) {
-		case EXI_EVENT_START_DOCUMENT:
-			/* decode */
-			errn = exiv2gDecodeStartDocument(&iStream,
-					&stateDecode);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-SD] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((">> START_DOCUMENT \n"));
-			/* encode */
-			errn = exiv2gEncodeStartDocument(&oStream,
-					&stateEncode);
-			break;
-		case EXI_EVENT_END_DOCUMENT:
-			/* decode */
-			errn = exiv2gDecodeEndDocument(&iStream,
-					&stateDecode);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-ED] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((">> END_DOCUMENT \n"));
-			/* encode */
-			errn = exiv2gEncodeEndDocument(&oStream,
-					&stateEncode);
-			/* signalize end of document */
-			noEndOfDocument = 0; /* false */
-			break;
-		case EXI_EVENT_START_ELEMENT:
-		case EXI_EVENT_START_ELEMENT_GENERIC:
-		case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED:
-			/* decode */
-			errn = exiv2gDecodeStartElement(&iStream,
-					&stateDecode, &qnameID);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-SE] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((">> SE (%d) \n", qnameID));
-			/* encode */
-			if(qnameID > lastKnownQNameID) {
-				/* new qname */
-				lastKnownQNameID = qnameID;
-				/* URI or LocalName known ? */
-				errn = exiv2gGetLastQName(&qname);
-				if(qname->uri.type == EXI_NAME_ENTRY_TYPE_ID) {
-					/* local name only new */
-					errn = exiv2gEncodeStartElementNS(&oStream,
-							&stateEncode, qname->uri.id, &qname->localName.str);
-				} else {
-					/* both, uri and localname new */
-					errn = exiv2gEncodeStartElementGeneric(&oStream,
-							&stateEncode, &qname->uri.str, &qname->localName.str);
-				}
-			} else {
-				errn = exiv2gEncodeStartElement(&oStream,
-						&stateEncode, qnameID);
-			}
-			break;
-		case EXI_EVENT_END_ELEMENT:
-		case EXI_EVENT_END_ELEMENT_UNDECLARED:
-			/* decode */
-			errn = exiv2gDecodeEndElement(&iStream,
-					&stateDecode, &qnameID);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-EE] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF(("<< EE \n"));
-			/* encode */
-			errn = exiv2gEncodeEndElement(&oStream,
-							&stateEncode);
-			break;
-		case EXI_EVENT_CHARACTERS:
-		case EXI_EVENT_CHARACTERS_GENERIC:
-		case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED:
-			/* decode */
-			errn = exiv2gDecodeCharacters(&iStream,
-					&stateDecode, &val);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-CH] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((" CH: "));
-			debugValue(&val, &stringTableDecode, stateDecode.elementStack[stateDecode.stackIndex]);
-			/* encode */
-			errn = exiv2gEncodeCharacters(&oStream,
-						&stateEncode, &val);
-
-			/* list value: special behavior */
-			if (val.type == EXI_DATATYPE_LIST) {
-				for(k=0; k<val.list.len; k++) {
-					errn = exiv2gDecodeListValue(&iStream, &stateDecode, qnameID, &val, val.list);
-					if (errn) {
-						DEBUG_PRINTF(("[Decode-ERROR-CH_LIST] %d \n", errn));
-						return errn;
-					}
-					DEBUG_PRINTF((" CH: "));
-					debugValue(&val, &stringTableDecode, stateDecode.elementStack[stateDecode.stackIndex]);
-					/* encode list value */
-					errn = exiv2gEncodeListValue(&oStream, &stateEncode, qnameID,
-									&val, val.list);
-				}
-			}
-			break;
-		case EXI_EVENT_ATTRIBUTE:
-		case EXI_EVENT_ATTRIBUTE_GENERIC:
-		case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED:
-		case EXI_EVENT_ATTRIBUTE_INVALID_VALUE:
-			/* decode */
-			errn = exiv2gDecodeAttribute(&iStream, &stateDecode,
-					&qnameID, &val);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-AT] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((" AT (%d): ", qnameID));
-			debugValue(&val, &stringTableDecode, qnameID);
-			/* encode */
-			if(qnameID > lastKnownQNameID) {
-				/* new qname */
-				lastKnownQNameID = qnameID;
-				/* URI or LocalName known ? */
-				errn = exiv2gGetLastQName(&qname);
-				if(qname->uri.type == EXI_NAME_ENTRY_TYPE_ID) {
-					/* local name only new */
-					errn = exiv2gEncodeAttributeNS(&oStream,
-							&stateEncode, qname->uri.id, &qname->localName.str, &val);
-				} else {
-					/* both, uri and localname new */
-					errn = exiv2gEncodeAttributeGeneric(&oStream,
-							&stateEncode, &qname->uri.str, &qname->localName.str, &val);
-				}
-			} else {
-				errn = exiv2gEncodeAttribute(&oStream, &stateEncode,
-						qnameID, &val);
-			}
-			break;
-		case EXI_EVENT_ATTRIBUTE_XSI_NIL:
-			/* decode */
-			errn = exiv2gDecodeAttributeXsiNil(&iStream,
-					&stateDecode, &val);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-AT-NIL] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((" AT {xsi}nil == %i \n", val.boolean));
-			/* encode */
-			errn = exiv2gEncodeAttributeXsiNil(&oStream,
-					&stateEncode, &val);
-			break;
-		case EXI_EVENT_ATTRIBUTE_XSI_TYPE:
-			/* decode */
-			errn = exiv2gDecodeAttributeXsiType(&iStream,
-					&stateDecode, &val);
-			if (errn) {
-				DEBUG_PRINTF(("[Decode-ERROR-AT-TYPE] %d \n", errn));
-				return errn;
-			}
-			DEBUG_PRINTF((" AT {type}type == {%d}%d \n", val.eqname.namespaceURI, val.eqname.localPart));
-			/* encode */
-			errn = exiv2gEncodeAttributeXsiType(&oStream,
-					&stateEncode, &val);
-			break;
-		default:
-			/* ERROR */
-			DEBUG_PRINTF(("[Unknown-Event] %d \n", event));
-			return EXI_ERROR_UNKOWN_EVENT;
-		}
-
-	} while (noEndOfDocument);
-
-#if EXI_STREAM == BYTE_ARRAY
-	/* write to file */
-	writeBytesToFile(oStream.data, posEncode, argv[2]);
-#endif
-#if EXI_STREAM == FILE_STREAM
-	fclose(iStream.file);
-	fclose(oStream.file);
-#endif
-
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-	/* free memory if any */
-	exiFreeDynamicStringMemory(&val.str.miss);
-	exiFreeDynamicBinaryMemory(&val.binary);
-#endif /* DYNAMIC_ALLOCATION */
-
-
-
-	return 0;
-}
-
-
-
-static void debugValueInteger(exi_integer_t* integer) {
-	switch (integer->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		printf("uint8 : %d \n", integer->val.uint8);
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		printf("uint16 : %d \n", integer->val.uint16);
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		printf("uint32 : %d \n", integer->val.uint32);
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		printf("uint64 : %ld \n",
-				(long unsigned int) integer->val.uint64);
-		break;
-		/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		printf("int8 : %d \n", integer->val.int8);
-		break;
-	case EXI_INTEGER_16:
-		printf("int16 : %d \n", integer->val.int16);
-		break;
-	case EXI_INTEGER_32:
-		printf("int32 : %d \n", integer->val.int32);
-		break;
-	case EXI_INTEGER_64:
-		printf("int64 : %ld \n", (long int) integer->val.int64);
-		break;
-	}
-}
-
-static void debugValue(exi_value_t* val, exi_value_table_t* valueTable, uint16_t qnameID) {
-	exi_string_ucs_t sv;
-
-#if EXI_DEBUG == 1
-	int i;
-	switch (val->type) {
-	case EXI_DATATYPE_NBIT_UNSIGNED_INTEGER:
-	case EXI_DATATYPE_UNSIGNED_INTEGER:
-	case EXI_DATATYPE_INTEGER:
-		debugValueInteger(&(val->integer));
-		break;
-	case EXI_DATATYPE_BINARY_BASE64:
-	case EXI_DATATYPE_BINARY_HEX:
-		printf("Binary (len == %d) : ", val->binary.len);
-		for (i = 0; i < val->binary.len; i++) {
-			printf(" [%d]", val->binary.data[i]);
-		}
-		printf("\n");
-		break;
-	case EXI_DATATYPE_BOOLEAN:
-		printf("Boolean : %d \n", val->boolean);
-		break;
-	case EXI_DATATYPE_DECIMAL:
-		/* Note: reversed fractional part */
-		printf("Decimal : negative: %d followed by integral and reversed fractional part \n", val->decimal.negative);
-		debugValueInteger(&(val->decimal.integral));
-		debugValueInteger(&(val->decimal.reverseFraction));
-		break;
-	case EXI_DATATYPE_FLOAT:
-		if(val->float_me.exponent == FLOAT_EXPONENT_SPECIAL_VALUES) {
-			if (val->float_me.mantissa == FLOAT_MANTISSA_INFINITY) {
-				printf("Float Special: INF \n");
-			} else if (val->float_me.mantissa == FLOAT_MANTISSA_MINUS_INFINITY) {
-				printf("Float Special: -INF \n");
-			} else {
-				printf("Float Special: NaN \n");
-			}
-		} else {
-			printf("Float : %ld E %d \n", (long int) val->float_me.mantissa, val->float_me.exponent);
-		}
-		break;
-	case EXI_DATATYPE_STRING:
-	case EXI_DATATYPE_RCS_STRING:
-		switch(val->str.type) {
-		case EXI_STRING_VALUE_MISS:
-			printf("String Miss (len==%d) : '", val->str.miss.len);
-			for (i = 0; i < val->str.miss.len; i++) {
-				printf("%c", (char) val->str.miss.codepoints[i]);
-			}
-			printf("'\n");
-			break;
-		case EXI_STRING_VALUE_LOCAL_HIT:
-			printf("String LocalHit: %d", val->str.localID);
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-			if( exiGetLocalStringValue(valueTable, qnameID, (uint16_t)(val->str.localID), &sv)) {
-				printf("ERROR when retrieving localvalue hit \n");
-			} else {
-				printf(" --> '");
-				for (i = 0; i < sv.len; i++) {
-					printf("%c", (char) sv.codepoints[i]);
-				}
-				printf("'");
-			}
-#endif /* DYNAMIC_ALLOCATION */
-			printf("\n");
-			break;
-		case EXI_STRING_VALUE_GLOBAL_HIT:
-			printf("String GlobalHit: %d ", val->str.globalID);
-#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION
-			if( exiGetGlobalStringValue(valueTable, (uint16_t)(val->str.globalID), &sv)) {
-				printf("ERROR when retrieving global value hit \n");
-			} else {
-				printf(" --> '");
-				for (i = 0; i < sv.len; i++) {
-					printf("%c", (char) sv.codepoints[i]);
-				}
-				printf("'");
-			}
-#endif /* DYNAMIC_ALLOCATION */
-			printf("\n");
-			break;
-		}
-		break;
-	case EXI_DATATYPE_DATETIME:
-		switch(val->datetime.type) {
-		case EXI_DATETIME_GYEAR:
-			printf("Datetime gYear: %d", val->datetime.year);
-			break;
-		case EXI_DATETIME_GYEARMONTH:
-			printf("Datetime gYearMonth: Year=%d, MonthDay=%d", val->datetime.year, val->datetime.monthDay);
-			break;
-		case EXI_DATETIME_DATE:
-			printf("Datetime date: Year=%d, MonthDay=%d", val->datetime.year, val->datetime.monthDay);
-			break;
-		case EXI_DATETIME_DATETIME:
-			printf("Datetime dateTime: Year=%d, MonthDay=%d, Time=%d", val->datetime.year, val->datetime.monthDay, val->datetime.time);
-			break;
-		case EXI_DATETIME_GMONTH:
-			printf("Datetime gMonth: MonthDay=%d", val->datetime.monthDay);
-			break;
-		case EXI_DATETIME_GMONTHDAY:
-			printf("Datetime gMonthDay: MonthDay=%d", val->datetime.monthDay);
-			break;
-		case EXI_DATETIME_GDAY:
-			printf("Datetime gDay: MonthDay=%d", val->datetime.monthDay);
-			break;
-		case EXI_DATETIME_TIME:
-			printf("Datetime time: Time=%d", val->datetime.time);
-			break;
-		default:
-			printf("Datetime ?Type?");
-			break;
-		}
-		if(val->datetime.presenceFractionalSecs) {
-			printf(", FractionalSecs=%d", val->datetime.fractionalSecs);
-		}
-		if(val->datetime.presenceTimezone) {
-			printf(", TimeZone=%d", val->datetime.timezone);
-		}
-		printf("\n");
-		break;
-	case EXI_DATATYPE_ENUMERATION:
-		printf("Enumeration (id==%d) \n", val->enumeration);
-		break;
-	case EXI_DATATYPE_LIST:
-		printf("List (len==%d) \n", val->list.len);
-		break;
-	case EXI_DATATYPE_QNAME:
-		printf("QName (uri==%d, localName=%d) \n", val->eqname.namespaceURI, val->eqname.localPart);
-		break;
-	default:
-		printf(" ?Value-Type? \n");
-		break;
-	}
-#endif /*EXI_DEBUG*/
-}
-
-

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1325
src/codec/v2gEXICoder.c


+ 0 - 74
src/codec/v2gEXICoder.h

@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_v2g_CODER_H
-#define EXI_v2g_CODER_H
-
-#include "EXITypes.h"
-
-#define DOCUMENT 0
-#define DOC_CONTENT 1
-#define DOC_END 22
-
-
-/* increments global and local string count */
-/* in case of dynamic memory string is collected */
-int exi_v2g_AddStringValue(exi_state_t* state, exi_string_ucs_t* sv, uint16_t qnameID);
-
-int exi_v2g_PushStack(exi_state_t* state, int16_t newState, uint16_t qnameID);
-
-int exi_v2g_PopStack(exi_state_t* state);
-
-int exi_v2g_HandleXsiNilTrue(exi_state_t* state);
-
-int exi_v2g_HandleXsiType(exi_state_t* state, exi_eqname_t* xsiType);
-
-int exi_v2g_RetrieveAndPushGlobalGrammar(exi_state_t* state, uint16_t qnameID);
-
-int exi_v2g_LearnAttribute(exi_state_t* state, uint16_t uriID, uint16_t localID);
-
-int exi_v2g_LearnEndElement(exi_state_t* state);
-
-int exi_v2g_IsStartContent(int16_t ruleID);
-
-int exi_v2g_MoveToElementContentRule(exi_state_t* state);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

+ 634 - 0
src/codec/v2gEXIDatatypes.c

@@ -0,0 +1,634 @@
+/*
+ * Copyright (C) 2007-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
+ * @contact Joerg.Heuer@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+#include <stdint.h>
+
+#include "v2gEXIDatatypes.h"
+#include "EXITypes.h"
+
+
+#ifndef EXI_v2g_DATATYPES_C
+#define EXI_v2g_DATATYPES_C
+
+
+
+void init_v2gEXIDocument(struct v2gEXIDocument* exiDoc) {
+	exiDoc->V2G_Message_isUsed = 0u;
+	exiDoc->ServiceDiscoveryReq_isUsed = 0u;
+	exiDoc->ServiceDiscoveryRes_isUsed = 0u;
+	exiDoc->MeteringReceiptReq_isUsed = 0u;
+	exiDoc->PaymentDetailsReq_isUsed = 0u;
+	exiDoc->MeteringReceiptRes_isUsed = 0u;
+	exiDoc->PaymentDetailsRes_isUsed = 0u;
+	exiDoc->SessionSetupReq_isUsed = 0u;
+	exiDoc->SessionSetupRes_isUsed = 0u;
+	exiDoc->CableCheckReq_isUsed = 0u;
+	exiDoc->CableCheckRes_isUsed = 0u;
+	exiDoc->CertificateInstallationReq_isUsed = 0u;
+	exiDoc->CertificateInstallationRes_isUsed = 0u;
+	exiDoc->WeldingDetectionReq_isUsed = 0u;
+	exiDoc->WeldingDetectionRes_isUsed = 0u;
+	exiDoc->CertificateUpdateReq_isUsed = 0u;
+	exiDoc->CertificateUpdateRes_isUsed = 0u;
+	exiDoc->PaymentServiceSelectionReq_isUsed = 0u;
+	exiDoc->PowerDeliveryReq_isUsed = 0u;
+	exiDoc->PaymentServiceSelectionRes_isUsed = 0u;
+	exiDoc->PowerDeliveryRes_isUsed = 0u;
+	exiDoc->ChargingStatusReq_isUsed = 0u;
+	exiDoc->ChargingStatusRes_isUsed = 0u;
+	exiDoc->BodyElement_isUsed = 0u;
+	exiDoc->CurrentDemandReq_isUsed = 0u;
+	exiDoc->PreChargeReq_isUsed = 0u;
+	exiDoc->CurrentDemandRes_isUsed = 0u;
+	exiDoc->PreChargeRes_isUsed = 0u;
+	exiDoc->SessionStopReq_isUsed = 0u;
+	exiDoc->AuthorizationReq_isUsed = 0u;
+	exiDoc->SessionStopRes_isUsed = 0u;
+	exiDoc->AuthorizationRes_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryReq_isUsed = 0u;
+	exiDoc->ChargeParameterDiscoveryRes_isUsed = 0u;
+	exiDoc->ServiceDetailReq_isUsed = 0u;
+	exiDoc->ServiceDetailRes_isUsed = 0u;
+	exiDoc->DC_EVSEStatus_isUsed = 0u;
+	exiDoc->RelativeTimeInterval_isUsed = 0u;
+	exiDoc->SalesTariffEntry_isUsed = 0u;
+	exiDoc->DC_EVPowerDeliveryParameter_isUsed = 0u;
+	exiDoc->SASchedules_isUsed = 0u;
+	exiDoc->AC_EVChargeParameter_isUsed = 0u;
+	exiDoc->SAScheduleList_isUsed = 0u;
+	exiDoc->DC_EVStatus_isUsed = 0u;
+	exiDoc->EVStatus_isUsed = 0u;
+	exiDoc->DC_EVChargeParameter_isUsed = 0u;
+	exiDoc->DC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->EVSEStatus_isUsed = 0u;
+	exiDoc->TimeInterval_isUsed = 0u;
+	exiDoc->EVPowerDeliveryParameter_isUsed = 0u;
+	exiDoc->EVSEChargeParameter_isUsed = 0u;
+	exiDoc->AC_EVSEStatus_isUsed = 0u;
+	exiDoc->Entry_isUsed = 0u;
+	exiDoc->AC_EVSEChargeParameter_isUsed = 0u;
+	exiDoc->PMaxScheduleEntry_isUsed = 0u;
+	exiDoc->EVChargeParameter_isUsed = 0u;
+	exiDoc->SignatureProperty_isUsed = 0u;
+	exiDoc->DSAKeyValue_isUsed = 0u;
+	exiDoc->SignatureProperties_isUsed = 0u;
+	exiDoc->KeyValue_isUsed = 0u;
+	exiDoc->Transforms_isUsed = 0u;
+	exiDoc->DigestMethod_isUsed = 0u;
+	exiDoc->Signature_isUsed = 0u;
+	exiDoc->RetrievalMethod_isUsed = 0u;
+	exiDoc->Manifest_isUsed = 0u;
+	exiDoc->Reference_isUsed = 0u;
+	exiDoc->CanonicalizationMethod_isUsed = 0u;
+	exiDoc->RSAKeyValue_isUsed = 0u;
+	exiDoc->Transform_isUsed = 0u;
+	exiDoc->PGPData_isUsed = 0u;
+	exiDoc->MgmtData_isUsed = 0u;
+	exiDoc->SignatureMethod_isUsed = 0u;
+	exiDoc->KeyInfo_isUsed = 0u;
+	exiDoc->SPKIData_isUsed = 0u;
+	exiDoc->X509Data_isUsed = 0u;
+	exiDoc->SignatureValue_isUsed = 0u;
+	exiDoc->KeyName_isUsed = 0u;
+	exiDoc->DigestValue_isUsed = 0u;
+	exiDoc->SignedInfo_isUsed = 0u;
+	exiDoc->Object_isUsed = 0u;
+}
+
+void init_v2gServiceDetailResType(struct v2gServiceDetailResType* v2gServiceDetailResType) {
+	v2gServiceDetailResType->ServiceParameterList_isUsed = 0u;
+}
+
+void init_v2gSPKIDataType(struct v2gSPKIDataType* v2gSPKIDataType) {
+	v2gSPKIDataType->SPKISexp.arrayLen = 0u;
+}
+
+void init_v2gAuthorizationResType(struct v2gAuthorizationResType* v2gAuthorizationResType) {
+}
+
+void init_v2gBodyType(struct v2gBodyType* v2gBodyType) {
+	v2gBodyType->BodyElement_isUsed = 0u;
+	v2gBodyType->SessionSetupReq_isUsed = 0u;
+	v2gBodyType->SessionSetupRes_isUsed = 0u;
+	v2gBodyType->ServiceDiscoveryReq_isUsed = 0u;
+	v2gBodyType->ServiceDiscoveryRes_isUsed = 0u;
+	v2gBodyType->ServiceDetailReq_isUsed = 0u;
+	v2gBodyType->ServiceDetailRes_isUsed = 0u;
+	v2gBodyType->PaymentServiceSelectionReq_isUsed = 0u;
+	v2gBodyType->PaymentServiceSelectionRes_isUsed = 0u;
+	v2gBodyType->PaymentDetailsReq_isUsed = 0u;
+	v2gBodyType->PaymentDetailsRes_isUsed = 0u;
+	v2gBodyType->AuthorizationReq_isUsed = 0u;
+	v2gBodyType->AuthorizationRes_isUsed = 0u;
+	v2gBodyType->ChargeParameterDiscoveryReq_isUsed = 0u;
+	v2gBodyType->ChargeParameterDiscoveryRes_isUsed = 0u;
+	v2gBodyType->PowerDeliveryReq_isUsed = 0u;
+	v2gBodyType->PowerDeliveryRes_isUsed = 0u;
+	v2gBodyType->MeteringReceiptReq_isUsed = 0u;
+	v2gBodyType->MeteringReceiptRes_isUsed = 0u;
+	v2gBodyType->SessionStopReq_isUsed = 0u;
+	v2gBodyType->SessionStopRes_isUsed = 0u;
+	v2gBodyType->CertificateUpdateReq_isUsed = 0u;
+	v2gBodyType->CertificateUpdateRes_isUsed = 0u;
+	v2gBodyType->CertificateInstallationReq_isUsed = 0u;
+	v2gBodyType->CertificateInstallationRes_isUsed = 0u;
+	v2gBodyType->ChargingStatusReq_isUsed = 0u;
+	v2gBodyType->ChargingStatusRes_isUsed = 0u;
+	v2gBodyType->CableCheckReq_isUsed = 0u;
+	v2gBodyType->CableCheckRes_isUsed = 0u;
+	v2gBodyType->PreChargeReq_isUsed = 0u;
+	v2gBodyType->PreChargeRes_isUsed = 0u;
+	v2gBodyType->CurrentDemandReq_isUsed = 0u;
+	v2gBodyType->CurrentDemandRes_isUsed = 0u;
+	v2gBodyType->WeldingDetectionReq_isUsed = 0u;
+	v2gBodyType->WeldingDetectionRes_isUsed = 0u;
+}
+
+void init_v2gPaymentServiceSelectionReqType(struct v2gPaymentServiceSelectionReqType* v2gPaymentServiceSelectionReqType) {
+}
+
+void init_v2gEVSEStatusType(struct v2gEVSEStatusType* v2gEVSEStatusType) {
+}
+
+void init_v2gSelectedServiceType(struct v2gSelectedServiceType* v2gSelectedServiceType) {
+	v2gSelectedServiceType->ParameterSetID_isUsed = 0u;
+}
+
+void init_v2gEntryType(struct v2gEntryType* v2gEntryType) {
+	v2gEntryType->TimeInterval_isUsed = 0u;
+	v2gEntryType->RelativeTimeInterval_isUsed = 0u;
+}
+
+void init_v2gDC_EVSEChargeParameterType(struct v2gDC_EVSEChargeParameterType* v2gDC_EVSEChargeParameterType) {
+	v2gDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed = 0u;
+	v2gDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed = 0u;
+}
+
+void init_v2gSalesTariffType(struct v2gSalesTariffType* v2gSalesTariffType) {
+	v2gSalesTariffType->Id_isUsed = 0u;
+	v2gSalesTariffType->SalesTariffDescription_isUsed = 0u;
+	v2gSalesTariffType->NumEPriceLevels_isUsed = 0u;
+	v2gSalesTariffType->SalesTariffEntry.arrayLen = 0u;
+}
+
+void init_v2gPMaxScheduleType(struct v2gPMaxScheduleType* v2gPMaxScheduleType) {
+	v2gPMaxScheduleType->PMaxScheduleEntry.arrayLen = 0u;
+}
+
+void init_v2gCostType(struct v2gCostType* v2gCostType) {
+	v2gCostType->amountMultiplier_isUsed = 0u;
+}
+
+void init_v2gChargeServiceType(struct v2gChargeServiceType* v2gChargeServiceType) {
+	v2gChargeServiceType->ServiceName_isUsed = 0u;
+	v2gChargeServiceType->ServiceScope_isUsed = 0u;
+}
+
+void init_v2gPMaxScheduleEntryType(struct v2gPMaxScheduleEntryType* v2gPMaxScheduleEntryType) {
+	v2gPMaxScheduleEntryType->TimeInterval_isUsed = 0u;
+	v2gPMaxScheduleEntryType->RelativeTimeInterval_isUsed = 0u;
+}
+
+void init_v2gServiceListType(struct v2gServiceListType* v2gServiceListType) {
+	v2gServiceListType->Service.arrayLen = 0u;
+}
+
+void init_v2gKeyValueType(struct v2gKeyValueType* v2gKeyValueType) {
+	v2gKeyValueType->DSAKeyValue_isUsed = 0u;
+	v2gKeyValueType->RSAKeyValue_isUsed = 0u;
+}
+
+void init_v2gPaymentServiceSelectionResType(struct v2gPaymentServiceSelectionResType* v2gPaymentServiceSelectionResType) {
+}
+
+void init_v2gSignatureMethodType(struct v2gSignatureMethodType* v2gSignatureMethodType) {
+	v2gSignatureMethodType->HMACOutputLength_isUsed = 0u;
+}
+
+void init_v2gMeteringReceiptResType(struct v2gMeteringReceiptResType* v2gMeteringReceiptResType) {
+	v2gMeteringReceiptResType->EVSEStatus_isUsed = 0u;
+	v2gMeteringReceiptResType->AC_EVSEStatus_isUsed = 0u;
+	v2gMeteringReceiptResType->DC_EVSEStatus_isUsed = 0u;
+}
+
+void init_v2gMessageHeaderType(struct v2gMessageHeaderType* v2gMessageHeaderType) {
+	v2gMessageHeaderType->Notification_isUsed = 0u;
+	v2gMessageHeaderType->Signature_isUsed = 0u;
+}
+
+void init_v2gRetrievalMethodType(struct v2gRetrievalMethodType* v2gRetrievalMethodType) {
+	v2gRetrievalMethodType->URI_isUsed = 0u;
+	v2gRetrievalMethodType->Type_isUsed = 0u;
+	v2gRetrievalMethodType->Transforms_isUsed = 0u;
+}
+
+void init_v2gEVChargeParameterType(struct v2gEVChargeParameterType* v2gEVChargeParameterType) {
+	v2gEVChargeParameterType->DepartureTime_isUsed = 0u;
+}
+
+void init_v2gCertificateInstallationReqType(struct v2gCertificateInstallationReqType* v2gCertificateInstallationReqType) {
+}
+
+void init_v2gChargeParameterDiscoveryResType(struct v2gChargeParameterDiscoveryResType* v2gChargeParameterDiscoveryResType) {
+	v2gChargeParameterDiscoveryResType->SASchedules_isUsed = 0u;
+	v2gChargeParameterDiscoveryResType->SAScheduleList_isUsed = 0u;
+	v2gChargeParameterDiscoveryResType->EVSEChargeParameter_isUsed = 0u;
+	v2gChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed = 0u;
+	v2gChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed = 0u;
+}
+
+void init_v2gWeldingDetectionReqType(struct v2gWeldingDetectionReqType* v2gWeldingDetectionReqType) {
+}
+
+void init_v2gCableCheckReqType(struct v2gCableCheckReqType* v2gCableCheckReqType) {
+}
+
+void init_v2gParameterType(struct v2gParameterType* v2gParameterType) {
+	v2gParameterType->boolValue_isUsed = 0u;
+	v2gParameterType->byteValue_isUsed = 0u;
+	v2gParameterType->shortValue_isUsed = 0u;
+	v2gParameterType->intValue_isUsed = 0u;
+	v2gParameterType->physicalValue_isUsed = 0u;
+	v2gParameterType->stringValue_isUsed = 0u;
+}
+
+void init_v2gEVSEChargeParameterType(struct v2gEVSEChargeParameterType* v2gEVSEChargeParameterType) {
+}
+
+void init_v2gManifestType(struct v2gManifestType* v2gManifestType) {
+	v2gManifestType->Id_isUsed = 0u;
+	v2gManifestType->Reference.arrayLen = 0u;
+}
+
+void init_v2gDC_EVStatusType(struct v2gDC_EVStatusType* v2gDC_EVStatusType) {
+}
+
+void init_v2gPaymentDetailsReqType(struct v2gPaymentDetailsReqType* v2gPaymentDetailsReqType) {
+}
+
+void init_v2gSAScheduleListType(struct v2gSAScheduleListType* v2gSAScheduleListType) {
+	v2gSAScheduleListType->SAScheduleTuple.arrayLen = 0u;
+}
+
+void init_v2gRSAKeyValueType(struct v2gRSAKeyValueType* v2gRSAKeyValueType) {
+}
+
+void init_v2gAC_EVSEChargeParameterType(struct v2gAC_EVSEChargeParameterType* v2gAC_EVSEChargeParameterType) {
+}
+
+void init_v2gTransformsType(struct v2gTransformsType* v2gTransformsType) {
+	v2gTransformsType->Transform.arrayLen = 0u;
+}
+
+void init_v2gWeldingDetectionResType(struct v2gWeldingDetectionResType* v2gWeldingDetectionResType) {
+}
+
+void init_v2gConsumptionCostType(struct v2gConsumptionCostType* v2gConsumptionCostType) {
+	v2gConsumptionCostType->Cost.arrayLen = 0u;
+}
+
+void init_v2gChargingStatusResType(struct v2gChargingStatusResType* v2gChargingStatusResType) {
+	v2gChargingStatusResType->EVSEMaxCurrent_isUsed = 0u;
+	v2gChargingStatusResType->MeterInfo_isUsed = 0u;
+	v2gChargingStatusResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_v2gEVStatusType(struct v2gEVStatusType* v2gEVStatusType) {
+}
+
+void init_v2gPGPDataType(struct v2gPGPDataType* v2gPGPDataType) {
+	v2gPGPDataType->PGPKeyID_isUsed = 0u;
+	v2gPGPDataType->PGPKeyPacket_isUsed = 0u;
+}
+
+void init_v2gSessionStopResType(struct v2gSessionStopResType* v2gSessionStopResType) {
+}
+
+void init_v2gServiceDiscoveryReqType(struct v2gServiceDiscoveryReqType* v2gServiceDiscoveryReqType) {
+	v2gServiceDiscoveryReqType->ServiceScope_isUsed = 0u;
+	v2gServiceDiscoveryReqType->ServiceCategory_isUsed = 0u;
+}
+
+void init_v2gAuthorizationReqType(struct v2gAuthorizationReqType* v2gAuthorizationReqType) {
+	v2gAuthorizationReqType->Id_isUsed = 0u;
+	v2gAuthorizationReqType->GenChallenge_isUsed = 0u;
+}
+
+void init_v2gSAScheduleTupleType(struct v2gSAScheduleTupleType* v2gSAScheduleTupleType) {
+	v2gSAScheduleTupleType->SalesTariff_isUsed = 0u;
+}
+
+void init_v2gPhysicalValueType(struct v2gPhysicalValueType* v2gPhysicalValueType) {
+}
+
+void init_v2gDigestMethodType(struct v2gDigestMethodType* v2gDigestMethodType) {
+}
+
+void init_v2gAC_EVSEStatusType(struct v2gAC_EVSEStatusType* v2gAC_EVSEStatusType) {
+}
+
+void init_v2gSessionSetupResType(struct v2gSessionSetupResType* v2gSessionSetupResType) {
+	v2gSessionSetupResType->EVSETimeStamp_isUsed = 0u;
+}
+
+void init_v2gX509IssuerSerialType(struct v2gX509IssuerSerialType* v2gX509IssuerSerialType) {
+}
+
+void init_v2gSessionStopReqType(struct v2gSessionStopReqType* v2gSessionStopReqType) {
+}
+
+void init_v2gDC_EVSEStatusType(struct v2gDC_EVSEStatusType* v2gDC_EVSEStatusType) {
+	v2gDC_EVSEStatusType->EVSEIsolationStatus_isUsed = 0u;
+}
+
+void init_v2gDiffieHellmanPublickeyType(struct v2gDiffieHellmanPublickeyType* v2gDiffieHellmanPublickeyType) {
+}
+
+void init_v2gCertificateUpdateReqType(struct v2gCertificateUpdateReqType* v2gCertificateUpdateReqType) {
+}
+
+void init_v2gBodyBaseType(struct v2gBodyBaseType* v2gBodyBaseType) {
+}
+
+void init_v2gDC_EVChargeParameterType(struct v2gDC_EVChargeParameterType* v2gDC_EVChargeParameterType) {
+	v2gDC_EVChargeParameterType->DepartureTime_isUsed = 0u;
+	v2gDC_EVChargeParameterType->EVMaximumPowerLimit_isUsed = 0u;
+	v2gDC_EVChargeParameterType->EVEnergyCapacity_isUsed = 0u;
+	v2gDC_EVChargeParameterType->EVEnergyRequest_isUsed = 0u;
+	v2gDC_EVChargeParameterType->FullSOC_isUsed = 0u;
+	v2gDC_EVChargeParameterType->BulkSOC_isUsed = 0u;
+}
+
+void init_v2gSubCertificatesType(struct v2gSubCertificatesType* v2gSubCertificatesType) {
+	v2gSubCertificatesType->Certificate.arrayLen = 0u;
+}
+
+void init_v2gSupportedEnergyTransferModeType(struct v2gSupportedEnergyTransferModeType* v2gSupportedEnergyTransferModeType) {
+	v2gSupportedEnergyTransferModeType->EnergyTransferMode.arrayLen = 0u;
+}
+
+void init_v2gChargingStatusReqType(struct v2gChargingStatusReqType* v2gChargingStatusReqType) {
+}
+
+void init_v2gSignaturePropertyType(struct v2gSignaturePropertyType* v2gSignaturePropertyType) {
+	v2gSignaturePropertyType->Id_isUsed = 0u;
+}
+
+void init_v2gContractSignatureEncryptedPrivateKeyType(struct v2gContractSignatureEncryptedPrivateKeyType* v2gContractSignatureEncryptedPrivateKeyType) {
+}
+
+void init_v2gReferenceType(struct v2gReferenceType* v2gReferenceType) {
+	v2gReferenceType->Id_isUsed = 0u;
+	v2gReferenceType->URI_isUsed = 0u;
+	v2gReferenceType->Type_isUsed = 0u;
+	v2gReferenceType->Transforms_isUsed = 0u;
+}
+
+void init_v2gCurrentDemandResType(struct v2gCurrentDemandResType* v2gCurrentDemandResType) {
+	v2gCurrentDemandResType->EVSEMaximumVoltageLimit_isUsed = 0u;
+	v2gCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed = 0u;
+	v2gCurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 0u;
+	v2gCurrentDemandResType->MeterInfo_isUsed = 0u;
+	v2gCurrentDemandResType->ReceiptRequired_isUsed = 0u;
+}
+
+void init_v2gCanonicalizationMethodType(struct v2gCanonicalizationMethodType* v2gCanonicalizationMethodType) {
+}
+
+void init_v2gTransformType(struct v2gTransformType* v2gTransformType) {
+	v2gTransformType->XPath.arrayLen = 0u;
+}
+
+void init_v2gCertificateChainType(struct v2gCertificateChainType* v2gCertificateChainType) {
+	v2gCertificateChainType->Id_isUsed = 0u;
+	v2gCertificateChainType->SubCertificates_isUsed = 0u;
+}
+
+void init_v2gSignatureValueType(struct v2gSignatureValueType* v2gSignatureValueType) {
+	v2gSignatureValueType->Id_isUsed = 0u;
+}
+
+void init_v2gEVPowerDeliveryParameterType(struct v2gEVPowerDeliveryParameterType* v2gEVPowerDeliveryParameterType) {
+}
+
+void init_v2gServiceDetailReqType(struct v2gServiceDetailReqType* v2gServiceDetailReqType) {
+}
+
+void init_v2gPaymentDetailsResType(struct v2gPaymentDetailsResType* v2gPaymentDetailsResType) {
+}
+
+void init_v2gX509DataType(struct v2gX509DataType* v2gX509DataType) {
+	v2gX509DataType->X509IssuerSerial.arrayLen = 0u;
+	v2gX509DataType->X509SKI.arrayLen = 0u;
+	v2gX509DataType->X509SubjectName.arrayLen = 0u;
+	v2gX509DataType->X509Certificate.arrayLen = 0u;
+	v2gX509DataType->X509CRL.arrayLen = 0u;
+}
+
+void init_v2gDSAKeyValueType(struct v2gDSAKeyValueType* v2gDSAKeyValueType) {
+	v2gDSAKeyValueType->P_isUsed = 0u;
+	v2gDSAKeyValueType->Q_isUsed = 0u;
+	v2gDSAKeyValueType->G_isUsed = 0u;
+	v2gDSAKeyValueType->J_isUsed = 0u;
+	v2gDSAKeyValueType->Seed_isUsed = 0u;
+	v2gDSAKeyValueType->PgenCounter_isUsed = 0u;
+}
+
+void init_v2gPowerDeliveryResType(struct v2gPowerDeliveryResType* v2gPowerDeliveryResType) {
+	v2gPowerDeliveryResType->EVSEStatus_isUsed = 0u;
+	v2gPowerDeliveryResType->AC_EVSEStatus_isUsed = 0u;
+	v2gPowerDeliveryResType->DC_EVSEStatus_isUsed = 0u;
+}
+
+void init_v2gChargeParameterDiscoveryReqType(struct v2gChargeParameterDiscoveryReqType* v2gChargeParameterDiscoveryReqType) {
+	v2gChargeParameterDiscoveryReqType->MaxEntriesSAScheduleTuple_isUsed = 0u;
+	v2gChargeParameterDiscoveryReqType->EVChargeParameter_isUsed = 0u;
+	v2gChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed = 0u;
+	v2gChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed = 0u;
+}
+
+void init_v2gParameterSetType(struct v2gParameterSetType* v2gParameterSetType) {
+	v2gParameterSetType->Parameter.arrayLen = 0u;
+}
+
+void init_v2gServiceDiscoveryResType(struct v2gServiceDiscoveryResType* v2gServiceDiscoveryResType) {
+	v2gServiceDiscoveryResType->ServiceList_isUsed = 0u;
+}
+
+void init_v2gAnonType_V2G_Message(struct v2gAnonType_V2G_Message* v2gAnonType_V2G_Message) {
+}
+
+void init_v2gSignatureType(struct v2gSignatureType* v2gSignatureType) {
+	v2gSignatureType->Id_isUsed = 0u;
+	v2gSignatureType->KeyInfo_isUsed = 0u;
+	v2gSignatureType->Object.arrayLen = 0u;
+}
+
+void init_v2gEMAIDType(struct v2gEMAIDType* v2gEMAIDType) {
+}
+
+void init_v2gCertificateInstallationResType(struct v2gCertificateInstallationResType* v2gCertificateInstallationResType) {
+}
+
+void init_v2gCableCheckResType(struct v2gCableCheckResType* v2gCableCheckResType) {
+}
+
+void init_v2gMeterInfoType(struct v2gMeterInfoType* v2gMeterInfoType) {
+	v2gMeterInfoType->MeterReading_isUsed = 0u;
+	v2gMeterInfoType->SigMeterReading_isUsed = 0u;
+	v2gMeterInfoType->MeterStatus_isUsed = 0u;
+	v2gMeterInfoType->TMeter_isUsed = 0u;
+}
+
+void init_v2gAC_EVChargeParameterType(struct v2gAC_EVChargeParameterType* v2gAC_EVChargeParameterType) {
+	v2gAC_EVChargeParameterType->DepartureTime_isUsed = 0u;
+}
+
+void init_v2gServiceParameterListType(struct v2gServiceParameterListType* v2gServiceParameterListType) {
+	v2gServiceParameterListType->ParameterSet.arrayLen = 0u;
+}
+
+void init_v2gCurrentDemandReqType(struct v2gCurrentDemandReqType* v2gCurrentDemandReqType) {
+	v2gCurrentDemandReqType->EVMaximumVoltageLimit_isUsed = 0u;
+	v2gCurrentDemandReqType->EVMaximumCurrentLimit_isUsed = 0u;
+	v2gCurrentDemandReqType->EVMaximumPowerLimit_isUsed = 0u;
+	v2gCurrentDemandReqType->BulkChargingComplete_isUsed = 0u;
+	v2gCurrentDemandReqType->RemainingTimeToFullSoC_isUsed = 0u;
+	v2gCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed = 0u;
+}
+
+void init_v2gSASchedulesType(struct v2gSASchedulesType* v2gSASchedulesType) {
+}
+
+void init_v2gIntervalType(struct v2gIntervalType* v2gIntervalType) {
+}
+
+void init_v2gPreChargeResType(struct v2gPreChargeResType* v2gPreChargeResType) {
+}
+
+void init_v2gSalesTariffEntryType(struct v2gSalesTariffEntryType* v2gSalesTariffEntryType) {
+	v2gSalesTariffEntryType->TimeInterval_isUsed = 0u;
+	v2gSalesTariffEntryType->RelativeTimeInterval_isUsed = 0u;
+	v2gSalesTariffEntryType->EPriceLevel_isUsed = 0u;
+	v2gSalesTariffEntryType->ConsumptionCost.arrayLen = 0u;
+}
+
+void init_v2gPaymentOptionListType(struct v2gPaymentOptionListType* v2gPaymentOptionListType) {
+	v2gPaymentOptionListType->PaymentOption.arrayLen = 0u;
+}
+
+void init_v2gSignedInfoType(struct v2gSignedInfoType* v2gSignedInfoType) {
+	v2gSignedInfoType->Id_isUsed = 0u;
+	v2gSignedInfoType->Reference.arrayLen = 0u;
+}
+
+void init_v2gSessionSetupReqType(struct v2gSessionSetupReqType* v2gSessionSetupReqType) {
+}
+
+void init_v2gSignaturePropertiesType(struct v2gSignaturePropertiesType* v2gSignaturePropertiesType) {
+	v2gSignaturePropertiesType->Id_isUsed = 0u;
+	v2gSignaturePropertiesType->SignatureProperty.arrayLen = 0u;
+}
+
+void init_v2gProfileEntryType(struct v2gProfileEntryType* v2gProfileEntryType) {
+	v2gProfileEntryType->ChargingProfileEntryMaxNumberOfPhasesInUse_isUsed = 0u;
+}
+
+void init_v2gPreChargeReqType(struct v2gPreChargeReqType* v2gPreChargeReqType) {
+}
+
+void init_v2gListOfRootCertificateIDsType(struct v2gListOfRootCertificateIDsType* v2gListOfRootCertificateIDsType) {
+	v2gListOfRootCertificateIDsType->RootCertificateID.arrayLen = 0u;
+}
+
+void init_v2gDC_EVPowerDeliveryParameterType(struct v2gDC_EVPowerDeliveryParameterType* v2gDC_EVPowerDeliveryParameterType) {
+	v2gDC_EVPowerDeliveryParameterType->BulkChargingComplete_isUsed = 0u;
+}
+
+void init_v2gRelativeTimeIntervalType(struct v2gRelativeTimeIntervalType* v2gRelativeTimeIntervalType) {
+	v2gRelativeTimeIntervalType->duration_isUsed = 0u;
+}
+
+void init_v2gChargingProfileType(struct v2gChargingProfileType* v2gChargingProfileType) {
+	v2gChargingProfileType->ProfileEntry.arrayLen = 0u;
+}
+
+void init_v2gCertificateUpdateResType(struct v2gCertificateUpdateResType* v2gCertificateUpdateResType) {
+	v2gCertificateUpdateResType->RetryCounter_isUsed = 0u;
+}
+
+void init_v2gMeteringReceiptReqType(struct v2gMeteringReceiptReqType* v2gMeteringReceiptReqType) {
+	v2gMeteringReceiptReqType->Id_isUsed = 0u;
+	v2gMeteringReceiptReqType->SAScheduleTupleID_isUsed = 0u;
+}
+
+void init_v2gServiceType(struct v2gServiceType* v2gServiceType) {
+	v2gServiceType->ServiceName_isUsed = 0u;
+	v2gServiceType->ServiceScope_isUsed = 0u;
+}
+
+void init_v2gNotificationType(struct v2gNotificationType* v2gNotificationType) {
+	v2gNotificationType->FaultMsg_isUsed = 0u;
+}
+
+void init_v2gKeyInfoType(struct v2gKeyInfoType* v2gKeyInfoType) {
+	v2gKeyInfoType->Id_isUsed = 0u;
+	v2gKeyInfoType->KeyName.arrayLen = 0u;
+	v2gKeyInfoType->KeyValue.arrayLen = 0u;
+	v2gKeyInfoType->RetrievalMethod.arrayLen = 0u;
+	v2gKeyInfoType->X509Data.arrayLen = 0u;
+	v2gKeyInfoType->PGPData.arrayLen = 0u;
+	v2gKeyInfoType->SPKIData.arrayLen = 0u;
+	v2gKeyInfoType->MgmtData.arrayLen = 0u;
+}
+
+void init_v2gSelectedServiceListType(struct v2gSelectedServiceListType* v2gSelectedServiceListType) {
+	v2gSelectedServiceListType->SelectedService.arrayLen = 0u;
+}
+
+void init_v2gPowerDeliveryReqType(struct v2gPowerDeliveryReqType* v2gPowerDeliveryReqType) {
+	v2gPowerDeliveryReqType->ChargingProfile_isUsed = 0u;
+	v2gPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed = 0u;
+	v2gPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed = 0u;
+}
+
+void init_v2gObjectType(struct v2gObjectType* v2gObjectType) {
+	v2gObjectType->Id_isUsed = 0u;
+	v2gObjectType->MimeType_isUsed = 0u;
+	v2gObjectType->Encoding_isUsed = 0u;
+}
+
+
+
+
+
+#endif
+

+ 2225 - 0
src/codec/v2gEXIDatatypes.h

@@ -0,0 +1,2225 @@
+/*
+ * Copyright (C) 2007-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+/*******************************************************************
+ *
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
+ * @contact Joerg.Heuer@siemens.com
+ *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
+ ********************************************************************/
+
+
+
+/**
+ * \file 	EXIDatatypes.h
+ * \brief 	Datatype definitions and structs for given XML Schema definitions and initialization methods
+ *
+ */
+
+#ifndef EXI_v2g_DATATYPES_H
+#define EXI_v2g_DATATYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+
+
+/* Datatype definitions and structs for given XML Schema definitions */
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define v2gSPKIDataType_SPKISexp_BYTES_SIZE 350 
+#define v2gSPKIDataType_SPKISexp_ARRAY_SIZE 0
+struct v2gSPKIDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKISexp, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[v2gSPKIDataType_SPKISexp_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[v2gSPKIDataType_SPKISexp_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKISexp;
+};
+
+typedef enum {
+	DC_EVErrorCodeType_NO_ERROR = 0,
+	DC_EVErrorCodeType_FAILED_RESSTemperatureInhibit = 1,
+	DC_EVErrorCodeType_FAILED_EVShiftPosition = 2,
+	DC_EVErrorCodeType_FAILED_ChargerConnectorLockFault = 3,
+	DC_EVErrorCodeType_FAILED_EVRESSMalfunction = 4,
+	DC_EVErrorCodeType_FAILED_ChargingCurrentdifferential = 5,
+	DC_EVErrorCodeType_FAILED_ChargingVoltageOutOfRange = 6,
+	DC_EVErrorCodeType_Reserved_A = 7,
+	DC_EVErrorCodeType_Reserved_B = 8,
+	DC_EVErrorCodeType_Reserved_C = 9,
+	DC_EVErrorCodeType_FAILED_ChargingSystemIncompatibility = 10,
+	DC_EVErrorCodeType_NoData = 11
+} v2gDC_EVErrorCodeType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID{0-1})',  derivedBy='RESTRICTION'.  */
+struct v2gSelectedServiceType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ParameterSetID ;
+	unsigned int ParameterSetID_isUsed:1;
+};
+
+typedef enum {
+	chargeProgressType_Start = 0,
+	chargeProgressType_Stop = 1,
+	chargeProgressType_Renegotiate = 2
+} v2gchargeProgressType;
+
+typedef enum {
+	isolationLevelType_Invalid = 0,
+	isolationLevelType_Valid = 1,
+	isolationLevelType_Warning = 2,
+	isolationLevelType_Fault = 3,
+	isolationLevelType_No_IMD = 4
+} v2gisolationLevelType;
+
+typedef enum {
+	paymentOptionType_Contract = 0,
+	paymentOptionType_ExternalPayment = 1
+} v2gpaymentOptionType;
+
+typedef enum {
+	responseCodeType_OK = 0,
+	responseCodeType_OK_NewSessionEstablished = 1,
+	responseCodeType_OK_OldSessionJoined = 2,
+	responseCodeType_OK_CertificateExpiresSoon = 3,
+	responseCodeType_FAILED = 4,
+	responseCodeType_FAILED_SequenceError = 5,
+	responseCodeType_FAILED_ServiceIDInvalid = 6,
+	responseCodeType_FAILED_UnknownSession = 7,
+	responseCodeType_FAILED_ServiceSelectionInvalid = 8,
+	responseCodeType_FAILED_PaymentSelectionInvalid = 9,
+	responseCodeType_FAILED_CertificateExpired = 10,
+	responseCodeType_FAILED_SignatureError = 11,
+	responseCodeType_FAILED_NoCertificateAvailable = 12,
+	responseCodeType_FAILED_CertChainError = 13,
+	responseCodeType_FAILED_ChallengeInvalid = 14,
+	responseCodeType_FAILED_ContractCanceled = 15,
+	responseCodeType_FAILED_WrongChargeParameter = 16,
+	responseCodeType_FAILED_PowerDeliveryNotApplied = 17,
+	responseCodeType_FAILED_TariffSelectionInvalid = 18,
+	responseCodeType_FAILED_ChargingProfileInvalid = 19,
+	responseCodeType_FAILED_MeteringSignatureNotValid = 20,
+	responseCodeType_FAILED_NoChargeServiceSelected = 21,
+	responseCodeType_FAILED_WrongEnergyTransferMode = 22,
+	responseCodeType_FAILED_ContactorError = 23,
+	responseCodeType__FAILED_CertificateNotAllowedAtThisEVSE = 24,
+	responseCodeType_FAILED_CertificateRevoked = 25
+} v2gresponseCodeType;
+
+typedef enum {
+	EVSENotificationType_None = 0,
+	EVSENotificationType_StopCharging = 1,
+	EVSENotificationType_ReNegotiation = 2
+} v2gEVSENotificationType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gSignatureMethodType_Algorithm_CHARACTERS_SIZE 50
+struct v2gSignatureMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gSignatureMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":HMACOutputLength, http://www.w3.org/2000/09/xmldsig#,HMACOutputLengthType */
+	int64_t HMACOutputLength ;
+	unsigned int HMACOutputLength_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+struct v2gPaymentServiceSelectionResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+};
+
+typedef enum {
+	valueType_bool = 0,
+	valueType_byte = 1,
+	valueType_short = 2,
+	valueType_int = 3,
+	valueType_physicalValue = 4,
+	valueType_string = 5
+} v2gvalueType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVChargeParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1})',  derivedBy='RESTRICTION'.  */
+struct v2gEVChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	unsigned int DepartureTime_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct v2gEVSEChargeParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+struct v2gDC_EVStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVReady, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVReady ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode, urn:iso:15118:2:2013:MsgDataTypes,DC_EVErrorCodeType */
+	v2gDC_EVErrorCodeType EVErrorCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC, urn:iso:15118:2:2013:MsgDataTypes,percentValueType */
+	int8_t EVRESSSOC ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+#define v2gRSAKeyValueType_Modulus_BYTES_SIZE 350 
+#define v2gRSAKeyValueType_Exponent_BYTES_SIZE 350 
+struct v2gRSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Modulus, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gRSAKeyValueType_Modulus_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Modulus ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Exponent, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gRSAKeyValueType_Exponent_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Exponent ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+#define v2gPGPDataType_PGPKeyID_BYTES_SIZE 350 
+#define v2gPGPDataType_PGPKeyPacket_BYTES_SIZE 350 
+struct v2gPGPDataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyID, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[v2gPGPDataType_PGPKeyID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyID ;
+	unsigned int PGPKeyID_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[v2gPGPDataType_PGPKeyPacket_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PGPKeyPacket ;
+	unsigned int PGPKeyPacket_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVStatusType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct v2gEVStatusType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+struct v2gSessionStopResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+#define v2gAuthorizationReqType_Id_CHARACTERS_SIZE 50
+#define v2gAuthorizationReqType_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2013:MsgDataTypes,genChallengeType is 16 */
+struct v2gAuthorizationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gAuthorizationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":GenChallenge, urn:iso:15118:2:2013:MsgDataTypes,genChallengeType */
+	struct {
+		uint8_t bytes[v2gAuthorizationReqType_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	unsigned int GenChallenge_isUsed:1;
+};
+
+typedef enum {
+	serviceCategoryType_EVCharging = 0,
+	serviceCategoryType_Internet = 1,
+	serviceCategoryType_ContractCertificate = 2,
+	serviceCategoryType_OtherCustom = 3
+} v2gserviceCategoryType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gDigestMethodType_Algorithm_CHARACTERS_SIZE 50
+struct v2gDigestMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gDigestMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+struct v2gAC_EVSEStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENotification, urn:iso:15118:2:2013:MsgDataTypes,EVSENotificationType */
+	v2gEVSENotificationType EVSENotification ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RCD, http://www.w3.org/2001/XMLSchema,boolean */
+	int RCD ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp{0-1})',  derivedBy='EXTENSION'.  */
+#define v2gSessionSetupResType_EVSEID_CHARACTERS_SIZE 37 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+struct v2gSessionSetupResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEID, urn:iso:15118:2:2013:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[v2gSessionSetupResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSETimeStamp, http://www.w3.org/2001/XMLSchema,long */
+	int64_t EVSETimeStamp ;
+	unsigned int EVSETimeStamp_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+#define v2gX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE 50 
+struct v2gX509IssuerSerialType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[v2gX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  X509IssuerName ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SerialNumber, http://www.w3.org/2001/XMLSchema,integer */
+	int64_t X509SerialNumber ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define v2gDiffieHellmanPublickeyType_Id_CHARACTERS_SIZE 50
+#define v2gDiffieHellmanPublickeyType_CONTENT_BYTES_SIZE 350
+struct v2gDiffieHellmanPublickeyType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gDiffieHellmanPublickeyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2013:MsgDataTypes,dHpublickeyType */
+	struct {
+		uint8_t bytes[v2gDiffieHellmanPublickeyType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+typedef enum {
+	costKindType_relativePricePercentage = 0,
+	costKindType_RenewableGenerationPercentage = 1,
+	costKindType_CarbonDioxideEmission = 2
+} v2gcostKindType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct v2gBodyBaseType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	faultCodeType_ParsingError = 0,
+	faultCodeType_NoTLSRootCertificatAvailable = 1,
+	faultCodeType_UnknownError = 2
+} v2gfaultCodeType;
+
+typedef enum {
+	EnergyTransferModeType_AC_single_phase_core = 0,
+	EnergyTransferModeType_AC_three_phase_core = 1,
+	EnergyTransferModeType_DC_core = 2,
+	EnergyTransferModeType_DC_extended = 3,
+	EnergyTransferModeType_DC_combo_core = 4,
+	EnergyTransferModeType_DC_unique = 5
+} v2gEnergyTransferModeType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate{1-4})',  derivedBy='RESTRICTION'.  */
+#define v2gSubCertificatesType_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+#define v2gSubCertificatesType_Certificate_ARRAY_SIZE 4
+struct v2gSubCertificatesType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Certificate, urn:iso:15118:2:2013:MsgDataTypes,certificateType */
+	struct {
+		struct {
+		uint8_t bytes[v2gSubCertificatesType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  array[v2gSubCertificatesType_Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Certificate;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+struct v2gChargingStatusReqType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SupportedEnergyTransferModeType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EnergyTransferMode{1-6})',  derivedBy='RESTRICTION'.  */
+#define v2gSupportedEnergyTransferModeType_EnergyTransferMode_ARRAY_SIZE 5
+struct v2gSupportedEnergyTransferModeType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EnergyTransferMode, urn:iso:15118:2:2013:MsgDataTypes,EnergyTransferModeType */
+	struct {
+		v2gEnergyTransferModeType array[v2gSupportedEnergyTransferModeType_EnergyTransferMode_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} EnergyTransferMode;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define v2gSignaturePropertyType_Target_CHARACTERS_SIZE 50
+#define v2gSignaturePropertyType_Id_CHARACTERS_SIZE 50
+struct v2gSignaturePropertyType {
+	/* attribute: Target {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gSignaturePropertyType_Target_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Target ;
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gSignaturePropertyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+};
+
+typedef enum {
+	chargingSessionType_Terminate = 0,
+	chargingSessionType_Pause = 1
+} v2gchargingSessionType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='privateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define v2gContractSignatureEncryptedPrivateKeyType_Id_CHARACTERS_SIZE 50
+#define v2gContractSignatureEncryptedPrivateKeyType_CONTENT_BYTES_SIZE 350
+struct v2gContractSignatureEncryptedPrivateKeyType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gContractSignatureEncryptedPrivateKeyType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2013:MsgDataTypes,privateKeyType */
+	struct {
+		uint8_t bytes[v2gContractSignatureEncryptedPrivateKeyType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE 50
+struct v2gCanonicalizationMethodType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define v2gTransformType_Algorithm_CHARACTERS_SIZE 50
+#define v2gTransformType_XPath_CHARACTERS_SIZE 50 
+#define v2gTransformType_XPath_ARRAY_SIZE 0
+struct v2gTransformType {
+	/* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gTransformType_Algorithm_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Algorithm ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":XPath, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[v2gTransformType_XPath_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[v2gTransformType_XPath_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} XPath;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+#define v2gCertificateChainType_Id_CHARACTERS_SIZE 50
+#define v2gCertificateChainType_Certificate_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+struct v2gCertificateChainType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gCertificateChainType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Certificate, urn:iso:15118:2:2013:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[v2gCertificateChainType_Certificate_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Certificate ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SubCertificates, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SubCertificatesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate{1-4})',  derivedBy='RESTRICTION'.  */
+	struct v2gSubCertificatesType SubCertificates ;
+	unsigned int SubCertificates_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define v2gSignatureValueType_Id_CHARACTERS_SIZE 50
+#define v2gSignatureValueType_CONTENT_BYTES_SIZE 350
+struct v2gSignatureValueType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gSignatureValueType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* simple content: http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		uint8_t bytes[v2gSignatureValueType_CONTENT_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVPowerDeliveryParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct v2gEVPowerDeliveryParameterType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":GenChallenge,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp)',  derivedBy='EXTENSION'.  */
+#define v2gPaymentDetailsResType_GenChallenge_BYTES_SIZE 16 /* XML schema facet length for urn:iso:15118:2:2013:MsgDataTypes,genChallengeType is 16 */
+struct v2gPaymentDetailsResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":GenChallenge, urn:iso:15118:2:2013:MsgDataTypes,genChallengeType */
+	struct {
+		uint8_t bytes[v2gPaymentDetailsResType_GenChallenge_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  GenChallenge ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSETimeStamp, http://www.w3.org/2001/XMLSchema,long */
+	int64_t EVSETimeStamp ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+struct v2gServiceDetailReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define v2gX509DataType_X509IssuerSerial_ARRAY_SIZE 0
+#define v2gX509DataType_X509SKI_BYTES_SIZE 350 
+#define v2gX509DataType_X509SKI_ARRAY_SIZE 0
+#define v2gX509DataType_X509SubjectName_CHARACTERS_SIZE 50 
+#define v2gX509DataType_X509SubjectName_ARRAY_SIZE 0
+#define v2gX509DataType_X509Certificate_BYTES_SIZE 350 
+#define v2gX509DataType_X509Certificate_ARRAY_SIZE 0
+#define v2gX509DataType_X509CRL_BYTES_SIZE 350 
+#define v2gX509DataType_X509CRL_ARRAY_SIZE 0
+struct v2gX509DataType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gX509IssuerSerialType array[v2gX509DataType_X509IssuerSerial_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509IssuerSerial;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SKI, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[v2gX509DataType_X509SKI_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[v2gX509DataType_X509SKI_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SKI;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509SubjectName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[v2gX509DataType_X509SubjectName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[v2gX509DataType_X509SubjectName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509SubjectName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Certificate, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[v2gX509DataType_X509Certificate_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[v2gX509DataType_X509Certificate_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Certificate;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509CRL, http://www.w3.org/2001/XMLSchema,base64Binary */
+	struct {
+		struct {
+			uint8_t bytes[v2gX509DataType_X509CRL_BYTES_SIZE];
+			uint16_t bytesLen;
+		}  array[v2gX509DataType_X509CRL_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509CRL;
+};
+
+typedef enum {
+	EVSEProcessingType_Finished = 0,
+	EVSEProcessingType_Ongoing = 1,
+	EVSEProcessingType_Ongoing_WaitingForCustomerInteraction = 2
+} v2gEVSEProcessingType;
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+#define v2gDSAKeyValueType_P_BYTES_SIZE 350 
+#define v2gDSAKeyValueType_Q_BYTES_SIZE 350 
+#define v2gDSAKeyValueType_G_BYTES_SIZE 350 
+#define v2gDSAKeyValueType_Y_BYTES_SIZE 350 
+#define v2gDSAKeyValueType_J_BYTES_SIZE 350 
+#define v2gDSAKeyValueType_Seed_BYTES_SIZE 350 
+#define v2gDSAKeyValueType_PgenCounter_BYTES_SIZE 350 
+struct v2gDSAKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":P, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_P_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  P ;
+	unsigned int P_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Q, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_Q_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Q ;
+	unsigned int Q_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":G, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_G_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  G ;
+	unsigned int G_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Y, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_Y_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Y ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":J, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_J_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  J ;
+	unsigned int J_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Seed, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_Seed_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  Seed ;
+	unsigned int Seed_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PgenCounter, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */
+	struct {
+		uint8_t bytes[v2gDSAKeyValueType_PgenCounter_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  PgenCounter ;
+	unsigned int PgenCounter_isUsed:1;
+};
+
+typedef enum {
+	DC_EVSEStatusCodeType_EVSE_NotReady = 0,
+	DC_EVSEStatusCodeType_EVSE_Ready = 1,
+	DC_EVSEStatusCodeType_EVSE_Shutdown = 2,
+	DC_EVSEStatusCodeType_EVSE_UtilityInterruptEvent = 3,
+	DC_EVSEStatusCodeType_EVSE_IsolationMonitoringActive = 4,
+	DC_EVSEStatusCodeType_EVSE_EmergencyShutdown = 5,
+	DC_EVSEStatusCodeType_EVSE_Malfunction = 6,
+	DC_EVSEStatusCodeType_Reserved_8 = 7,
+	DC_EVSEStatusCodeType_Reserved_9 = 8,
+	DC_EVSEStatusCodeType_Reserved_A = 9,
+	DC_EVSEStatusCodeType_Reserved_B = 10,
+	DC_EVSEStatusCodeType_Reserved_C = 11
+} v2gDC_EVSEStatusCodeType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+#define v2gEMAIDType_Id_CHARACTERS_SIZE 50
+#define v2gEMAIDType_CONTENT_CHARACTERS_SIZE 50
+struct v2gEMAIDType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gEMAIDType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* simple content: urn:iso:15118:2:2013:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[v2gEMAIDType_CONTENT_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  CONTENT ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+#define v2gMeterInfoType_MeterID_CHARACTERS_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,meterIDType is 32 */
+#define v2gMeterInfoType_SigMeterReading_BYTES_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sigMeterReadingType is 64 */
+struct v2gMeterInfoType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":MeterID, urn:iso:15118:2:2013:MsgDataTypes,meterIDType */
+	struct {
+		exi_string_character_t characters[v2gMeterInfoType_MeterID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MeterID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":MeterReading, http://www.w3.org/2001/XMLSchema,unsignedLong */
+	uint64_t MeterReading ;
+	unsigned int MeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading, urn:iso:15118:2:2013:MsgDataTypes,sigMeterReadingType */
+	struct {
+		uint8_t bytes[v2gMeterInfoType_SigMeterReading_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SigMeterReading ;
+	unsigned int SigMeterReading_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":MeterStatus, urn:iso:15118:2:2013:MsgDataTypes,meterStatusType */
+	int16_t MeterStatus ;
+	unsigned int MeterStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":TMeter, http://www.w3.org/2001/XMLSchema,long */
+	int64_t TMeter ;
+	unsigned int TMeter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct v2gIntervalType {
+	int noContent; /* avoid warning */
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SASchedulesType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+struct v2gSASchedulesType {
+	int noContent; /* avoid warning */
+};
+
+typedef enum {
+	unitSymbolType_h = 0,
+	unitSymbolType_m = 1,
+	unitSymbolType_s = 2,
+	unitSymbolType_A = 3,
+	unitSymbolType_V = 4,
+	unitSymbolType_W = 5,
+	unitSymbolType_Wh = 6
+} v2gunitSymbolType;
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PaymentOptionListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PaymentOption{1-2})',  derivedBy='RESTRICTION'.  */
+#define v2gPaymentOptionListType_PaymentOption_ARRAY_SIZE 2
+struct v2gPaymentOptionListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PaymentOption, urn:iso:15118:2:2013:MsgDataTypes,paymentOptionType */
+	struct {
+		v2gpaymentOptionType array[v2gPaymentOptionListType_PaymentOption_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PaymentOption;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gSignaturePropertiesType_Id_CHARACTERS_SIZE 50
+#define v2gSignaturePropertiesType_SignatureProperty_ARRAY_SIZE 0
+struct v2gSignaturePropertiesType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gSignaturePropertiesType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureProperty, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gSignaturePropertyType array[v2gSignaturePropertiesType_SignatureProperty_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SignatureProperty;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+#define v2gSessionSetupReqType_EVCCID_BYTES_SIZE 6 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evccIDType is 6 */
+struct v2gSessionSetupReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVCCID, urn:iso:15118:2:2013:MsgDataTypes,evccIDType */
+	struct {
+		uint8_t bytes[v2gSessionSetupReqType_EVCCID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  EVCCID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE 5
+struct v2gListOfRootCertificateIDsType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gX509IssuerSerialType array[v2gListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RootCertificateID;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVPowerDeliveryParameterType',  base type name='EVPowerDeliveryParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ChargingComplete)',  derivedBy='EXTENSION'.  */
+struct v2gDC_EVPowerDeliveryParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+struct v2gRelativeTimeIntervalType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":start, urn:iso:15118:2:2013:MsgDataTypes,#AnonType_startRelativeTimeIntervalType */
+	uint32_t start ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":duration, urn:iso:15118:2:2013:MsgDataTypes,#AnonType_durationRelativeTimeIntervalType */
+	uint32_t duration ;
+	unsigned int duration_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":RetryCounter{0-1})',  derivedBy='EXTENSION'.  */
+struct v2gCertificateUpdateResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gCertificateChainType SAProvisioningCertificateChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gCertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='privateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DHpublickey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gDiffieHellmanPublickeyType DHpublickey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gEMAIDType eMAID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RetryCounter, http://www.w3.org/2001/XMLSchema,short */
+	int16_t RetryCounter ;
+	unsigned int RetryCounter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SessionID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+#define v2gMeteringReceiptReqType_Id_CHARACTERS_SIZE 50
+#define v2gMeteringReceiptReqType_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sessionIDType is 8 */
+struct v2gMeteringReceiptReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gMeteringReceiptReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SessionID, urn:iso:15118:2:2013:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[v2gMeteringReceiptReqType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	unsigned int SAScheduleTupleID_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gMeterInfoType MeterInfo ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+#define v2gServiceType_ServiceName_CHARACTERS_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceNameType is 32 */
+#define v2gServiceType_ServiceScope_CHARACTERS_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+struct v2gServiceType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceName, urn:iso:15118:2:2013:MsgDataTypes,serviceNameType */
+	struct {
+		exi_string_character_t characters[v2gServiceType_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	unsigned int ServiceName_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory, urn:iso:15118:2:2013:MsgDataTypes,serviceCategoryType */
+	v2gserviceCategoryType ServiceCategory ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceScope, urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[v2gServiceType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,NotificationType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":FaultCode,"urn:iso:15118:2:2013:MsgDataTypes":FaultMsg{0-1})',  derivedBy='RESTRICTION'.  */
+#define v2gNotificationType_FaultMsg_CHARACTERS_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,faultMsgType is 64 */
+struct v2gNotificationType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FaultCode, urn:iso:15118:2:2013:MsgDataTypes,faultCodeType */
+	v2gfaultCodeType FaultCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FaultMsg, urn:iso:15118:2:2013:MsgDataTypes,faultMsgType */
+	struct {
+		exi_string_character_t characters[v2gNotificationType_FaultMsg_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  FaultMsg ;
+	unsigned int FaultMsg_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SelectedService{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gSelectedServiceListType_SelectedService_ARRAY_SIZE 5
+struct v2gSelectedServiceListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SelectedService, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gSelectedServiceType array[v2gSelectedServiceListType_SelectedService_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SelectedService;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define v2gObjectType_Id_CHARACTERS_SIZE 50
+#define v2gObjectType_MimeType_CHARACTERS_SIZE 50
+#define v2gObjectType_Encoding_CHARACTERS_SIZE 50
+struct v2gObjectType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gObjectType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: MimeType {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[v2gObjectType_MimeType_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MimeType ;
+	unsigned int MimeType_isUsed:1;
+	/* attribute: Encoding {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gObjectType_Encoding_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Encoding ;
+	unsigned int Encoding_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+struct v2gAuthorizationResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEProcessing, urn:iso:15118:2:2013:MsgDataTypes,EVSEProcessingType */
+	v2gEVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+struct v2gEVSEStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENotification, urn:iso:15118:2:2013:MsgDataTypes,EVSENotificationType */
+	v2gEVSENotificationType EVSENotification ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2013:MsgBody":SelectedServiceList)',  derivedBy='EXTENSION'.  */
+struct v2gPaymentServiceSelectionReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":SelectedPaymentOption, urn:iso:15118:2:2013:MsgDataTypes,paymentOptionType */
+	v2gpaymentOptionType SelectedPaymentOption ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SelectedServiceList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SelectedServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SelectedService{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gSelectedServiceListType SelectedServiceList ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval)',  derivedBy='RESTRICTION'.  */
+struct v2gEntryType {
+	union { /* substitutionGroup */
+		/* element: "urn:iso:15118:2:2013:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct v2gIntervalType TimeInterval ;
+		/* element: "urn:iso:15118:2:2013:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gRelativeTimeIntervalType RelativeTimeInterval ;
+	}; /* union */
+		unsigned int TimeInterval_isUsed:1;
+		unsigned int RelativeTimeInterval_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":costKind,"urn:iso:15118:2:2013:MsgDataTypes":amount,"urn:iso:15118:2:2013:MsgDataTypes":amountMultiplier{0-1})',  derivedBy='RESTRICTION'.  */
+struct v2gCostType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":costKind, urn:iso:15118:2:2013:MsgDataTypes,costKindType */
+	v2gcostKindType costKind ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":amount, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t amount ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":amountMultiplier, urn:iso:15118:2:2013:MsgDataTypes,unitMultiplierType */
+	int8_t amountMultiplier ;
+	unsigned int amountMultiplier_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargeServiceType',  base type name='ServiceType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService),("urn:iso:15118:2:2013:MsgDataTypes":SupportedEnergyTransferMode))',  derivedBy='EXTENSION'.  */
+#define v2gChargeServiceType_ServiceName_CHARACTERS_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceNameType is 32 */
+#define v2gChargeServiceType_ServiceScope_CHARACTERS_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+struct v2gChargeServiceType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceName, urn:iso:15118:2:2013:MsgDataTypes,serviceNameType */
+	struct {
+		exi_string_character_t characters[v2gChargeServiceType_ServiceName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceName ;
+	unsigned int ServiceName_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory, urn:iso:15118:2:2013:MsgDataTypes,serviceCategoryType */
+	v2gserviceCategoryType ServiceCategory ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ServiceScope, urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[v2gChargeServiceType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */
+	int FreeService ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SupportedEnergyTransferMode, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SupportedEnergyTransferModeType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EnergyTransferMode{1-6})',  derivedBy='RESTRICTION'.  */
+	struct v2gSupportedEnergyTransferModeType SupportedEnergyTransferMode ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+#define v2gServiceListType_Service_ARRAY_SIZE 5
+struct v2gServiceListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Service, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gServiceType array[v2gServiceListType_Service_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Service;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+struct v2gKeyValueType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gDSAKeyValueType DSAKeyValue ;
+	unsigned int DSAKeyValue_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)',  derivedBy='RESTRICTION'.  */
+	struct v2gRSAKeyValueType RSAKeyValue ;
+	unsigned int RSAKeyValue_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+#define v2gCertificateInstallationReqType_Id_CHARACTERS_SIZE 50
+#define v2gCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE 800 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,certificateType is 800 */
+struct v2gCertificateInstallationReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gCertificateInstallationReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":OEMProvisioningCert, urn:iso:15118:2:2013:MsgDataTypes,certificateType */
+	struct {
+		uint8_t bytes[v2gCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  OEMProvisioningCert ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+struct v2gCableCheckReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVStatusType DC_EVStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+struct v2gWeldingDetectionReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVStatusType DC_EVStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+#define v2gPaymentDetailsReqType_eMAID_CHARACTERS_SIZE 15 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,eMAIDType is 15 */
+struct v2gPaymentDetailsReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, urn:iso:15118:2:2013:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[v2gPaymentDetailsReqType_eMAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  eMAID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gCertificateChainType ContractSignatureCertChain ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gTransformsType_Transform_ARRAY_SIZE 0
+struct v2gTransformsType {
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transform, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gTransformType array[v2gTransformsType_Transform_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Transform;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgBody":ServiceCategory{0-1})',  derivedBy='EXTENSION'.  */
+#define v2gServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE 64 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType is 64 */
+struct v2gServiceDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceScope, urn:iso:15118:2:2013:MsgDataTypes,serviceScopeType */
+	struct {
+		exi_string_character_t characters[v2gServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  ServiceScope ;
+	unsigned int ServiceScope_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceCategory, urn:iso:15118:2:2013:MsgDataTypes,serviceCategoryType */
+	v2gserviceCategoryType ServiceCategory ;
+	unsigned int ServiceCategory_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+struct v2gPhysicalValueType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Multiplier, urn:iso:15118:2:2013:MsgDataTypes,unitMultiplierType */
+	int8_t Multiplier ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Unit, urn:iso:15118:2:2013:MsgDataTypes,unitSymbolType */
+	v2gunitSymbolType Unit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Value, http://www.w3.org/2001/XMLSchema,short */
+	int16_t Value ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargingSession)',  derivedBy='EXTENSION'.  */
+struct v2gSessionStopReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargingSession, urn:iso:15118:2:2013:MsgDataTypes,chargingSessionType */
+	v2gchargingSessionType ChargingSession ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+struct v2gDC_EVSEStatusType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t NotificationMaxDelay ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENotification, urn:iso:15118:2:2013:MsgDataTypes,EVSENotificationType */
+	v2gEVSENotificationType EVSENotification ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus, urn:iso:15118:2:2013:MsgDataTypes,isolationLevelType */
+	v2gisolationLevelType EVSEIsolationStatus ;
+	unsigned int EVSEIsolationStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode, urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusCodeType */
+	v2gDC_EVSEStatusCodeType EVSEStatusCode ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+#define v2gCertificateUpdateReqType_Id_CHARACTERS_SIZE 50
+#define v2gCertificateUpdateReqType_eMAID_CHARACTERS_SIZE 15 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,eMAIDType is 15 */
+struct v2gCertificateUpdateReqType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gCertificateUpdateReqType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gCertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, urn:iso:15118:2:2013:MsgDataTypes,eMAIDType */
+	struct {
+		exi_string_character_t characters[v2gCertificateUpdateReqType_eMAID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  eMAID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ListOfRootCertificateIDsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":RootCertificateID{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gListOfRootCertificateIDsType ListOfRootCertificateIDs ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2013:MsgDataTypes":BulkSOC{0-1}))',  derivedBy='EXTENSION'.  */
+struct v2gDC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	unsigned int DepartureTime_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaximumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaximumPowerLimit ;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaximumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVEnergyCapacity, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVEnergyCapacity ;
+	unsigned int EVEnergyCapacity_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVEnergyRequest, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVEnergyRequest ;
+	unsigned int EVEnergyRequest_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":FullSOC, urn:iso:15118:2:2013:MsgDataTypes,percentValueType */
+	int8_t FullSOC ;
+	unsigned int FullSOC_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":BulkSOC, urn:iso:15118:2:2013:MsgDataTypes,percentValueType */
+	int8_t BulkSOC ;
+	unsigned int BulkSOC_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+#define v2gReferenceType_Id_CHARACTERS_SIZE 50
+#define v2gReferenceType_URI_CHARACTERS_SIZE 50
+#define v2gReferenceType_Type_CHARACTERS_SIZE 50
+#define v2gReferenceType_DigestValue_BYTES_SIZE 350 
+struct v2gReferenceType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gReferenceType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gReferenceType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gReferenceType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gTransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gDigestMethodType DigestMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":DigestValue, http://www.w3.org/2000/09/xmldsig#,DigestValueType */
+	struct {
+		uint8_t bytes[v2gReferenceType_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2013:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2013:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1})',  derivedBy='EXTENSION'.  */
+#define v2gCurrentDemandResType_EVSEID_CHARACTERS_SIZE 37 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+struct v2gCurrentDemandResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEPresentVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEPresentCurrent ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSECurrentLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSECurrentLimitAchieved ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEVoltageLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEVoltageLimitAchieved ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPowerLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */
+	int EVSEPowerLimitAchieved ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaximumVoltageLimit ;
+	unsigned int EVSEMaximumVoltageLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaximumCurrentLimit ;
+	unsigned int EVSEMaximumCurrentLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaximumPowerLimit ;
+	unsigned int EVSEMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEID, urn:iso:15118:2:2013:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[v2gCurrentDemandResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gMeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+struct v2gPowerDeliveryResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct v2gEVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct v2gAC_EVSEStatusType AC_EVSEStatus ;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	unsigned int DC_EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":PaymentOptionList,"urn:iso:15118:2:2013:MsgBody":ChargeService,"urn:iso:15118:2:2013:MsgBody":ServiceList{0-1})',  derivedBy='EXTENSION'.  */
+struct v2gServiceDiscoveryResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":PaymentOptionList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PaymentOptionListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PaymentOption{1-2})',  derivedBy='RESTRICTION'.  */
+	struct v2gPaymentOptionListType PaymentOptionList ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargeService, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargeServiceType',  base type name='ServiceType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":ServiceID,"urn:iso:15118:2:2013:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2013:MsgDataTypes":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FreeService),("urn:iso:15118:2:2013:MsgDataTypes":SupportedEnergyTransferMode))',  derivedBy='EXTENSION'.  */
+	struct v2gChargeServiceType ChargeService ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Service{1-8})',  derivedBy='RESTRICTION'.  */
+	struct v2gServiceListType ServiceList ;
+	unsigned int ServiceList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID)',  derivedBy='EXTENSION'.  */
+struct v2gCertificateInstallationResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gCertificateChainType SAProvisioningCertificateChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CertificateChainType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Certificate,"urn:iso:15118:2:2013:MsgDataTypes":SubCertificates{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gCertificateChainType ContractSignatureCertChain ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ContractSignatureEncryptedPrivateKeyType',  base type name='privateKeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DHpublickey, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DiffieHellmanPublickeyType',  base type name='dHpublickeyType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gDiffieHellmanPublickeyType DHpublickey ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":eMAID, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EMAIDType',  base type name='eMAIDType',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gEMAIDType eMAID ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+struct v2gCableCheckResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEProcessing, urn:iso:15118:2:2013:MsgDataTypes,EVSEProcessingType */
+	v2gEVSEProcessingType EVSEProcessing ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":EAmount,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2013:MsgDataTypes":EVMinCurrent))',  derivedBy='EXTENSION'.  */
+struct v2gAC_EVChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t DepartureTime ;
+	unsigned int DepartureTime_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EAmount, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EAmount ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaxVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaxVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMaxCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaxCurrent ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVMinCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMinCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2013:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgBody":ChargingComplete,"urn:iso:15118:2:2013:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2013:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage)',  derivedBy='EXTENSION'.  */
+struct v2gCurrentDemandReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVTargetCurrent ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaximumVoltageLimit ;
+	unsigned int EVMaximumVoltageLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaximumCurrentLimit ;
+	unsigned int EVMaximumCurrentLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVMaximumPowerLimit ;
+	unsigned int EVMaximumPowerLimit_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int BulkChargingComplete ;
+	unsigned int BulkChargingComplete_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */
+	int ChargingComplete ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RemainingTimeToFullSoC, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType RemainingTimeToFullSoC ;
+	unsigned int RemainingTimeToFullSoC_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RemainingTimeToBulkSoC, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType RemainingTimeToBulkSoC ;
+	unsigned int RemainingTimeToBulkSoC_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVTargetVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+struct v2gPreChargeResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gSignedInfoType_Id_CHARACTERS_SIZE 50
+#define v2gSignedInfoType_Reference_ARRAY_SIZE 0
+struct v2gSignedInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gSignedInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gCanonicalizationMethodType CanonicalizationMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gSignatureMethodType SignatureMethod ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gReferenceType array[v2gSignedInfoType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ProfileEntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxPower,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxNumberOfPhasesInUse{0-1})',  derivedBy='RESTRICTION'.  */
+struct v2gProfileEntryType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryStart, http://www.w3.org/2001/XMLSchema,unsignedInt */
+	uint32_t ChargingProfileEntryStart ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxPower, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType ChargingProfileEntryMaxPower ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxNumberOfPhasesInUse, urn:iso:15118:2:2013:MsgDataTypes,maxNumPhasesType */
+	int8_t ChargingProfileEntryMaxNumberOfPhasesInUse ;
+	unsigned int ChargingProfileEntryMaxNumberOfPhasesInUse_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+struct v2gPreChargeReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVStatusType',  base type name='EVStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":EVReady,"urn:iso:15118:2:2013:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2013:MsgDataTypes":EVRESSSOC)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVStatusType DC_EVStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVTargetVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVTargetCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ProfileEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gChargingProfileType_ProfileEntry_ARRAY_SIZE 5
+struct v2gChargingProfileType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ProfileEntry, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ProfileEntryType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxPower,"urn:iso:15118:2:2013:MsgDataTypes":ChargingProfileEntryMaxNumberOfPhasesInUse{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gProfileEntryType array[v2gChargingProfileType_ProfileEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ProfileEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargeProgress,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVPowerDeliveryParameter{0-1})',  derivedBy='EXTENSION'.  */
+struct v2gPowerDeliveryReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargeProgress, urn:iso:15118:2:2013:MsgDataTypes,chargeProgressType */
+	v2gchargeProgressType ChargeProgress ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ChargingProfile, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ChargingProfileType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ProfileEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gChargingProfileType ChargingProfile ;
+	unsigned int ChargingProfile_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVPowerDeliveryParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct v2gEVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVPowerDeliveryParameterType',  base type name='EVPowerDeliveryParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ChargingComplete)',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumPowerLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2013:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+struct v2gDC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaximumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaximumPowerLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaximumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumCurrentLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMinimumCurrentLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumVoltageLimit, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMinimumVoltageLimit ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSECurrentRegulationTolerance, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSECurrentRegulationTolerance ;
+	unsigned int EVSECurrentRegulationTolerance_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEPeakCurrentRipple, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEPeakCurrentRipple ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEEnergyToBeDelivered, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEEnergyToBeDelivered ;
+	unsigned int EVSEEnergyToBeDelivered_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":PMax))',  derivedBy='EXTENSION'.  */
+struct v2gPMaxScheduleEntryType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct v2gIntervalType TimeInterval ;
+	unsigned int TimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+	struct v2gRelativeTimeIntervalType RelativeTimeInterval ;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PMax, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType PMax ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+struct v2gMeteringReceiptResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEStatusType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification)',  derivedBy='RESTRICTION'.  */
+	struct v2gEVSEStatusType EVSEStatus ;
+	unsigned int EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct v2gAC_EVSEStatusType AC_EVSEStatus ;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	unsigned int DC_EVSEStatus_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+#define v2gRetrievalMethodType_URI_CHARACTERS_SIZE 50
+#define v2gRetrievalMethodType_Type_CHARACTERS_SIZE 50
+struct v2gRetrievalMethodType {
+	/* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gRetrievalMethodType_URI_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  URI ;
+	unsigned int URI_isUsed:1;
+	/* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */
+	struct {
+		exi_string_character_t characters[v2gRetrievalMethodType_Type_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Type ;
+	unsigned int Type_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gTransformsType Transforms ;
+	unsigned int Transforms_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":boolValue|"urn:iso:15118:2:2013:MsgDataTypes":byteValue|"urn:iso:15118:2:2013:MsgDataTypes":shortValue|"urn:iso:15118:2:2013:MsgDataTypes":intValue|"urn:iso:15118:2:2013:MsgDataTypes":physicalValue|"urn:iso:15118:2:2013:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+#define v2gParameterType_Name_CHARACTERS_SIZE 50
+#define v2gParameterType_stringValue_CHARACTERS_SIZE 50 
+struct v2gParameterType {
+	/* attribute: Name {http://www.w3.org/2001/XMLSchema,string} */
+	struct {
+		exi_string_character_t characters[v2gParameterType_Name_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Name ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":boolValue, http://www.w3.org/2001/XMLSchema,boolean */
+	int boolValue ;
+	unsigned int boolValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":byteValue, http://www.w3.org/2001/XMLSchema,byte */
+	int8_t byteValue ;
+	unsigned int byteValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":shortValue, http://www.w3.org/2001/XMLSchema,short */
+	int16_t shortValue ;
+	unsigned int shortValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":intValue, http://www.w3.org/2001/XMLSchema,int */
+	int32_t intValue ;
+	unsigned int intValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":physicalValue, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType physicalValue ;
+	unsigned int physicalValue_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":stringValue, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		exi_string_character_t characters[v2gParameterType_stringValue_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  stringValue ;
+	unsigned int stringValue_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gManifestType_Id_CHARACTERS_SIZE 50
+#define v2gManifestType_Reference_ARRAY_SIZE 0
+struct v2gManifestType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gManifestType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gReferenceType array[v2gManifestType_Reference_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Reference;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaxCurrent)',  derivedBy='EXTENSION'.  */
+struct v2gAC_EVSEChargeParameterType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct v2gAC_EVSEStatusType AC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSENominalVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSENominalVoltage ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaxCurrent ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+struct v2gWeldingDetectionResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatusCode))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEPresentVoltage ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":startValue,"urn:iso:15118:2:2013:MsgDataTypes":Cost{1-3})',  derivedBy='RESTRICTION'.  */
+#define v2gConsumptionCostType_Cost_ARRAY_SIZE 3
+struct v2gConsumptionCostType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":startValue, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType startValue ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Cost, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,CostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":costKind,"urn:iso:15118:2:2013:MsgDataTypes":amount,"urn:iso:15118:2:2013:MsgDataTypes":amountMultiplier{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gCostType array[v2gConsumptionCostType_Cost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Cost;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2013:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+#define v2gChargingStatusResType_EVSEID_CHARACTERS_SIZE 37 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,evseIDType is 37 */
+struct v2gChargingStatusResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEID, urn:iso:15118:2:2013:MsgDataTypes,evseIDType */
+	struct {
+		exi_string_character_t characters[v2gChargingStatusResType_EVSEID_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  EVSEID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PhysicalValueType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":Multiplier,"urn:iso:15118:2:2013:MsgDataTypes":Unit,"urn:iso:15118:2:2013:MsgDataTypes":Value)',  derivedBy='RESTRICTION'.  */
+	struct v2gPhysicalValueType EVSEMaxCurrent ;
+	unsigned int EVSEMaxCurrent_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,MeterInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":MeterID,"urn:iso:15118:2:2013:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2013:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2013:MsgDataTypes":TMeter{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gMeterInfoType MeterInfo ;
+	unsigned int MeterInfo_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */
+	int ReceiptRequired ;
+	unsigned int ReceiptRequired_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEStatusType',  base type name='EVSEStatusType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2013:MsgDataTypes":EVSENotification),("urn:iso:15118:2:2013:MsgDataTypes":RCD))',  derivedBy='EXTENSION'.  */
+	struct v2gAC_EVSEStatusType AC_EVSEStatus ;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":MaxEntriesSAScheduleTuple{0-1},"urn:iso:15118:2:2013:MsgBody":RequestedEnergyTransferMode,"urn:iso:15118:2:2013:MsgDataTypes":EVChargeParameter)',  derivedBy='EXTENSION'.  */
+struct v2gChargeParameterDiscoveryReqType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":MaxEntriesSAScheduleTuple, http://www.w3.org/2001/XMLSchema,unsignedShort */
+	uint16_t MaxEntriesSAScheduleTuple ;
+	unsigned int MaxEntriesSAScheduleTuple_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgBody":RequestedEnergyTransferMode, urn:iso:15118:2:2013:MsgDataTypes,EnergyTransferModeType */
+	v2gEnergyTransferModeType RequestedEnergyTransferMode ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVChargeParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gEVChargeParameterType EVChargeParameter ;
+	unsigned int EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":EAmount,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2013:MsgDataTypes":EVMinCurrent))',  derivedBy='EXTENSION'.  */
+	struct v2gAC_EVChargeParameterType AC_EVChargeParameter ;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVChargeParameterType',  base type name='EVChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":DepartureTime{0-1}),("urn:iso:15118:2:2013:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2013:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2013:MsgDataTypes":BulkSOC{0-1}))',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVChargeParameterType DC_EVChargeParameter ;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2013:MsgDataTypes":Parameter{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gParameterSetType_Parameter_ARRAY_SIZE 5
+struct v2gParameterSetType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */
+	int16_t ParameterSetID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":Parameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":boolValue|"urn:iso:15118:2:2013:MsgDataTypes":byteValue|"urn:iso:15118:2:2013:MsgDataTypes":shortValue|"urn:iso:15118:2:2013:MsgDataTypes":intValue|"urn:iso:15118:2:2013:MsgDataTypes":physicalValue|"urn:iso:15118:2:2013:MsgDataTypes":stringValue)',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gParameterType array[v2gParameterSetType_Parameter_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Parameter;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSet{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gServiceParameterListType_ParameterSet_ARRAY_SIZE 5
+struct v2gServiceParameterListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ParameterSet, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ParameterSetType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2013:MsgDataTypes":Parameter{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gParameterSetType array[v2gServiceParameterListType_ParameterSet_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ParameterSet;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":EPriceLevel{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ConsumptionCost{0-3}))',  derivedBy='EXTENSION'.  */
+#define v2gSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE 3
+struct v2gSalesTariffEntryType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,IntervalType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct v2gIntervalType TimeInterval ;
+	unsigned int TimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,RelativeTimeIntervalType',  base type name='IntervalType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":start,"urn:iso:15118:2:2013:MsgDataTypes":duration{0-1})',  derivedBy='EXTENSION'.  */
+	struct v2gRelativeTimeIntervalType RelativeTimeInterval ;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EPriceLevel, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t EPriceLevel ;
+	unsigned int EPriceLevel_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":ConsumptionCost, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ConsumptionCostType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":startValue,"urn:iso:15118:2:2013:MsgDataTypes":Cost{1-3})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gConsumptionCostType array[v2gSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} ConsumptionCost;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+#define v2gKeyInfoType_Id_CHARACTERS_SIZE 50
+#define v2gKeyInfoType_KeyName_CHARACTERS_SIZE 50 
+#define v2gKeyInfoType_KeyName_ARRAY_SIZE 0
+#define v2gKeyInfoType_KeyValue_ARRAY_SIZE 0
+#define v2gKeyInfoType_RetrievalMethod_ARRAY_SIZE 0
+#define v2gKeyInfoType_X509Data_ARRAY_SIZE 0
+#define v2gKeyInfoType_PGPData_ARRAY_SIZE 0
+#define v2gKeyInfoType_SPKIData_ARRAY_SIZE 0
+#define v2gKeyInfoType_MgmtData_CHARACTERS_SIZE 50 
+#define v2gKeyInfoType_MgmtData_ARRAY_SIZE 0
+struct v2gKeyInfoType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gKeyInfoType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyName, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[v2gKeyInfoType_KeyName_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[v2gKeyInfoType_KeyName_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyName;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gKeyValueType array[v2gKeyInfoType_KeyValue_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} KeyValue;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gRetrievalMethodType array[v2gKeyInfoType_RetrievalMethod_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} RetrievalMethod;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":X509Data, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gX509DataType array[v2gKeyInfoType_X509Data_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} X509Data;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":PGPData, Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gPGPDataType array[v2gKeyInfoType_PGPData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PGPData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SPKIData, Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gSPKIDataType array[v2gKeyInfoType_SPKIData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SPKIData;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":MgmtData, http://www.w3.org/2001/XMLSchema,string */
+	struct {
+		struct {
+			exi_string_character_t characters[v2gKeyInfoType_MgmtData_CHARACTERS_SIZE];
+			uint16_t charactersLen;
+		}  array[v2gKeyInfoType_MgmtData_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} MgmtData;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":ServiceID,"urn:iso:15118:2:2013:MsgBody":ServiceParameterList{0-1})',  derivedBy='EXTENSION'.  */
+struct v2gServiceDetailResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceID, urn:iso:15118:2:2013:MsgDataTypes,serviceIDType */
+	uint16_t ServiceID ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":ServiceParameterList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,ServiceParameterListType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":ParameterSet{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gServiceParameterListType ServiceParameterList ;
+	unsigned int ServiceParameterList_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2013:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gSalesTariffType_Id_CHARACTERS_SIZE 50
+#define v2gSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,tariffDescriptionType is 32 */
+#define v2gSalesTariffType_SalesTariffEntry_ARRAY_SIZE 5
+struct v2gSalesTariffType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gSalesTariffType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SalesTariffID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffDescription, urn:iso:15118:2:2013:MsgDataTypes,tariffDescriptionType */
+	struct {
+		exi_string_character_t characters[v2gSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  SalesTariffDescription ;
+	unsigned int SalesTariffDescription_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":NumEPriceLevels, http://www.w3.org/2001/XMLSchema,unsignedByte */
+	uint8_t NumEPriceLevels ;
+	unsigned int NumEPriceLevels_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":EPriceLevel{0-1},"urn:iso:15118:2:2013:MsgDataTypes":ConsumptionCost{0-3}))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct v2gSalesTariffEntryType array[v2gSalesTariffType_SalesTariffEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SalesTariffEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE 5
+struct v2gPMaxScheduleType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleEntryType',  base type name='EntryType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='(("urn:iso:15118:2:2013:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2013:MsgDataTypes":PMax))',  derivedBy='EXTENSION'.  */
+	struct {
+		struct v2gPMaxScheduleEntryType array[v2gPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} PMaxScheduleEntry;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariff{0-1})',  derivedBy='RESTRICTION'.  */
+struct v2gSAScheduleTupleType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2013:MsgDataTypes,SAIDType */
+	uint8_t SAScheduleTupleID ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":PMaxSchedule, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,PMaxScheduleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gPMaxScheduleType PMaxSchedule ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SalesTariff, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SalesTariffType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2013:MsgDataTypes":NumEPriceLevels{0-1},"urn:iso:15118:2:2013:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gSalesTariffType SalesTariff ;
+	unsigned int SalesTariff_isUsed:1;
+};
+
+/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+#define v2gSignatureType_Id_CHARACTERS_SIZE 50
+#define v2gSignatureType_Object_ARRAY_SIZE 0
+struct v2gSignatureType {
+	/* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */
+	struct {
+		exi_string_character_t characters[v2gSignatureType_Id_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  Id ;
+	unsigned int Id_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignedInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gSignedInfoType SignedInfo ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":SignatureValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType',  base type name='base64Binary',  content type='SIMPLE',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+	struct v2gSignatureValueType SignatureValue ;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":KeyInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct v2gKeyInfoType KeyInfo ;
+	unsigned int KeyInfo_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Object, Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType',  base type name='anyType',  content type='MIXED',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='((WC[##any])){0-UNBOUNDED}',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gObjectType array[v2gSignatureType_Object_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} Object;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgHeader":SessionID,"urn:iso:15118:2:2013:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+#define v2gMessageHeaderType_SessionID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2013:MsgDataTypes,sessionIDType is 8 */
+struct v2gMessageHeaderType {
+	/* element: "urn:iso:15118:2:2013:MsgHeader":SessionID, urn:iso:15118:2:2013:MsgDataTypes,sessionIDType */
+	struct {
+		uint8_t bytes[v2gMessageHeaderType_SessionID_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  SessionID ;
+	/* element: "urn:iso:15118:2:2013:MsgHeader":Notification, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,NotificationType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":FaultCode,"urn:iso:15118:2:2013:MsgDataTypes":FaultMsg{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gNotificationType Notification ;
+	unsigned int Notification_isUsed:1;
+	/* element: "http://www.w3.org/2000/09/xmldsig#":Signature, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})',  derivedBy='RESTRICTION'.  */
+	struct v2gSignatureType Signature ;
+	unsigned int Signature_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleListType',  base type name='SASchedulesType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTuple{1-3})',  derivedBy='EXTENSION'.  */
+#define v2gSAScheduleListType_SAScheduleTuple_ARRAY_SIZE 3
+struct v2gSAScheduleListType {
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTuple, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleTupleType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2013:MsgDataTypes":SalesTariff{0-1})',  derivedBy='RESTRICTION'.  */
+	struct {
+		struct v2gSAScheduleTupleType array[v2gSAScheduleListType_SAScheduleTuple_ARRAY_SIZE];
+		uint16_t arrayLen;
+	} SAScheduleTuple;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing,"urn:iso:15118:2:2013:MsgDataTypes":SASchedules{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEChargeParameter)',  derivedBy='EXTENSION'.  */
+struct v2gChargeParameterDiscoveryResType {
+	/* element: "urn:iso:15118:2:2013:MsgBody":ResponseCode, urn:iso:15118:2:2013:MsgDataTypes,responseCodeType */
+	v2gresponseCodeType ResponseCode ;
+	/* element: "urn:iso:15118:2:2013:MsgBody":EVSEProcessing, urn:iso:15118:2:2013:MsgDataTypes,EVSEProcessingType */
+	v2gEVSEProcessingType EVSEProcessing ;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SASchedules, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SASchedulesType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct v2gSASchedulesType SASchedules ;
+	unsigned int SASchedules_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":SAScheduleList, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,SAScheduleListType',  base type name='SASchedulesType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":SAScheduleTuple{1-3})',  derivedBy='EXTENSION'.  */
+	struct v2gSAScheduleListType SAScheduleList ;
+	unsigned int SAScheduleList_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":EVSEChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,EVSEChargeParameterType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+	struct v2gEVSEChargeParameterType EVSEChargeParameter ;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,AC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSENominalVoltage,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaxCurrent)',  derivedBy='EXTENSION'.  */
+	struct v2gAC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	/* element: "urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2013:MsgDataTypes,DC_EVSEChargeParameterType',  base type name='EVSEChargeParameterType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumPowerLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2013:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2013:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})',  derivedBy='EXTENSION'.  */
+	struct v2gDC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgBody,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":BodyElement{0-1})',  derivedBy='RESTRICTION'.  */
+struct v2gBodyType {
+	union { /* substitutionGroup */
+		/* element: "urn:iso:15118:2:2013:MsgBody":BodyElement, Complex type name='urn:iso:15118:2:2013:MsgBody,BodyBaseType',  base type name='anyType',  content type='EMPTY',  isAbstract='true',  hasTypeId='false',  final='0',  block='0',  derivedBy='RESTRICTION'.  */
+		struct v2gBodyBaseType BodyElement ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionSetupReq, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":EVCCID)',  derivedBy='EXTENSION'.  */
+		struct v2gSessionSetupReqType SessionSetupReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionSetupRes, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionSetupResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gSessionSetupResType SessionSetupRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDiscoveryReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2013:MsgBody":ServiceCategory{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gServiceDiscoveryReqType ServiceDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDiscoveryRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":PaymentOptionList,"urn:iso:15118:2:2013:MsgBody":ChargeService,"urn:iso:15118:2:2013:MsgBody":ServiceList{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gServiceDiscoveryResType ServiceDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDetailReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ServiceID)',  derivedBy='EXTENSION'.  */
+		struct v2gServiceDetailReqType ServiceDetailReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ServiceDetailRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ServiceDetailResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":ServiceID,"urn:iso:15118:2:2013:MsgBody":ServiceParameterList{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gServiceDetailResType ServiceDetailRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentServiceSelectionReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2013:MsgBody":SelectedServiceList)',  derivedBy='EXTENSION'.  */
+		struct v2gPaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentServiceSelectionRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentServiceSelectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+		struct v2gPaymentServiceSelectionResType PaymentServiceSelectionRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentDetailsReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain)',  derivedBy='EXTENSION'.  */
+		struct v2gPaymentDetailsReqType PaymentDetailsReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PaymentDetailsRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PaymentDetailsResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":GenChallenge,"urn:iso:15118:2:2013:MsgBody":EVSETimeStamp)',  derivedBy='EXTENSION'.  */
+		struct v2gPaymentDetailsResType PaymentDetailsRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":AuthorizationReq, Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":GenChallenge{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gAuthorizationReqType AuthorizationReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":AuthorizationRes, Complex type name='urn:iso:15118:2:2013:MsgBody,AuthorizationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+		struct v2gAuthorizationResType AuthorizationRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargeParameterDiscoveryReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":MaxEntriesSAScheduleTuple{0-1},"urn:iso:15118:2:2013:MsgBody":RequestedEnergyTransferMode,"urn:iso:15118:2:2013:MsgDataTypes":EVChargeParameter)',  derivedBy='EXTENSION'.  */
+		struct v2gChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargeParameterDiscoveryRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargeParameterDiscoveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing,"urn:iso:15118:2:2013:MsgDataTypes":SASchedules{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVSEChargeParameter)',  derivedBy='EXTENSION'.  */
+		struct v2gChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PowerDeliveryReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargeProgress,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2013:MsgDataTypes":EVPowerDeliveryParameter{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gPowerDeliveryReqType PowerDeliveryReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PowerDeliveryRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PowerDeliveryResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct v2gPowerDeliveryResType PowerDeliveryRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":MeteringReceiptReq, Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":SessionID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo)',  derivedBy='EXTENSION'.  */
+		struct v2gMeteringReceiptReqType MeteringReceiptReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":MeteringReceiptRes, Complex type name='urn:iso:15118:2:2013:MsgBody,MeteringReceiptResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgDataTypes":EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct v2gMeteringReceiptResType MeteringReceiptRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionStopReq, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ChargingSession)',  derivedBy='EXTENSION'.  */
+		struct v2gSessionStopReqType SessionStopReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":SessionStopRes, Complex type name='urn:iso:15118:2:2013:MsgBody,SessionStopResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode)',  derivedBy='EXTENSION'.  */
+		struct v2gSessionStopResType SessionStopRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateUpdateReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+		struct v2gCertificateUpdateReqType CertificateUpdateReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateUpdateRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateUpdateResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID,"urn:iso:15118:2:2013:MsgBody":RetryCounter{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gCertificateUpdateResType CertificateUpdateRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateInstallationReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2013:MsgBody":ListOfRootCertificateIDs)',  derivedBy='EXTENSION'.  */
+		struct v2gCertificateInstallationReqType CertificateInstallationReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CertificateInstallationRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CertificateInstallationResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":SAProvisioningCertificateChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2013:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2013:MsgBody":DHpublickey,"urn:iso:15118:2:2013:MsgBody":eMAID)',  derivedBy='EXTENSION'.  */
+		struct v2gCertificateInstallationResType CertificateInstallationRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargingStatusReq, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusReqType',  base type name='BodyBaseType',  content type='EMPTY',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  derivedBy='EXTENSION'.  */
+		struct v2gChargingStatusReqType ChargingStatusReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":ChargingStatusRes, Complex type name='urn:iso:15118:2:2013:MsgBody,ChargingStatusResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1},"urn:iso:15118:2:2013:MsgBody":AC_EVSEStatus)',  derivedBy='EXTENSION'.  */
+		struct v2gChargingStatusResType ChargingStatusRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CableCheckReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+		struct v2gCableCheckReqType CableCheckReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CableCheckRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CableCheckResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEProcessing)',  derivedBy='EXTENSION'.  */
+		struct v2gCableCheckResType CableCheckRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PreChargeReq, Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent)',  derivedBy='EXTENSION'.  */
+		struct v2gPreChargeReqType PreChargeReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":PreChargeRes, Complex type name='urn:iso:15118:2:2013:MsgBody,PreChargeResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+		struct v2gPreChargeResType PreChargeRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CurrentDemandReq, Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus,"urn:iso:15118:2:2013:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2013:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2013:MsgBody":ChargingComplete,"urn:iso:15118:2:2013:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2013:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2013:MsgBody":EVTargetVoltage)',  derivedBy='EXTENSION'.  */
+		struct v2gCurrentDemandReqType CurrentDemandReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":CurrentDemandRes, Complex type name='urn:iso:15118:2:2013:MsgBody,CurrentDemandResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2013:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2013:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2013:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2013:MsgBody":EVSEID,"urn:iso:15118:2:2013:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2013:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2013:MsgBody":ReceiptRequired{0-1})',  derivedBy='EXTENSION'.  */
+		struct v2gCurrentDemandResType CurrentDemandRes ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":WeldingDetectionReq, Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionReqType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":DC_EVStatus)',  derivedBy='EXTENSION'.  */
+		struct v2gWeldingDetectionReqType WeldingDetectionReq ;
+		/* element: "urn:iso:15118:2:2013:MsgBody":WeldingDetectionRes, Complex type name='urn:iso:15118:2:2013:MsgBody,WeldingDetectionResType',  base type name='BodyBaseType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":ResponseCode,"urn:iso:15118:2:2013:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2013:MsgBody":EVSEPresentVoltage)',  derivedBy='EXTENSION'.  */
+		struct v2gWeldingDetectionResType WeldingDetectionRes ;
+	}; /* union */
+		unsigned int BodyElement_isUsed:1;
+		unsigned int SessionSetupReq_isUsed:1;
+		unsigned int SessionSetupRes_isUsed:1;
+		unsigned int ServiceDiscoveryReq_isUsed:1;
+		unsigned int ServiceDiscoveryRes_isUsed:1;
+		unsigned int ServiceDetailReq_isUsed:1;
+		unsigned int ServiceDetailRes_isUsed:1;
+		unsigned int PaymentServiceSelectionReq_isUsed:1;
+		unsigned int PaymentServiceSelectionRes_isUsed:1;
+		unsigned int PaymentDetailsReq_isUsed:1;
+		unsigned int PaymentDetailsRes_isUsed:1;
+		unsigned int AuthorizationReq_isUsed:1;
+		unsigned int AuthorizationRes_isUsed:1;
+		unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+		unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+		unsigned int PowerDeliveryReq_isUsed:1;
+		unsigned int PowerDeliveryRes_isUsed:1;
+		unsigned int MeteringReceiptReq_isUsed:1;
+		unsigned int MeteringReceiptRes_isUsed:1;
+		unsigned int SessionStopReq_isUsed:1;
+		unsigned int SessionStopRes_isUsed:1;
+		unsigned int CertificateUpdateReq_isUsed:1;
+		unsigned int CertificateUpdateRes_isUsed:1;
+		unsigned int CertificateInstallationReq_isUsed:1;
+		unsigned int CertificateInstallationRes_isUsed:1;
+		unsigned int ChargingStatusReq_isUsed:1;
+		unsigned int ChargingStatusRes_isUsed:1;
+		unsigned int CableCheckReq_isUsed:1;
+		unsigned int CableCheckRes_isUsed:1;
+		unsigned int PreChargeReq_isUsed:1;
+		unsigned int PreChargeRes_isUsed:1;
+		unsigned int CurrentDemandReq_isUsed:1;
+		unsigned int CurrentDemandRes_isUsed:1;
+		unsigned int WeldingDetectionReq_isUsed:1;
+		unsigned int WeldingDetectionRes_isUsed:1;
+};
+
+/* Complex type name='urn:iso:15118:2:2013:MsgDef,#AnonType_V2G_Message',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgDef":Header,"urn:iso:15118:2:2013:MsgDef":Body)',  derivedBy='RESTRICTION'.  */
+struct v2gAnonType_V2G_Message {
+	/* element: "urn:iso:15118:2:2013:MsgDef":Header, Complex type name='urn:iso:15118:2:2013:MsgHeader,MessageHeaderType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgHeader":SessionID,"urn:iso:15118:2:2013:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gMessageHeaderType Header ;
+	/* element: "urn:iso:15118:2:2013:MsgDef":Body, Complex type name='urn:iso:15118:2:2013:MsgBody,BodyType',  base type name='anyType',  content type='ELEMENT',  isAbstract='false',  hasTypeId='false',  final='0',  block='0',  particle='("urn:iso:15118:2:2013:MsgBody":BodyElement{0-1})',  derivedBy='RESTRICTION'.  */
+	struct v2gBodyType Body ;
+};
+
+
+
+#define EXIDocument_MgmtData_CHARACTERS_SIZE 50 
+#define EXIDocument_KeyName_CHARACTERS_SIZE 50 
+#define EXIDocument_DigestValue_BYTES_SIZE 350 
+
+
+/* Possible root elements of EXI Document */
+struct v2gEXIDocument {
+#define USE_UNION_FOR_GLOBAL_ELEMENTS 1
+#ifdef USE_UNION_FOR_GLOBAL_ELEMENTS
+	union {
+#endif
+	struct v2gAnonType_V2G_Message V2G_Message ;
+	struct v2gServiceDiscoveryReqType ServiceDiscoveryReq ;
+	struct v2gServiceDiscoveryResType ServiceDiscoveryRes ;
+	struct v2gMeteringReceiptReqType MeteringReceiptReq ;
+	struct v2gPaymentDetailsReqType PaymentDetailsReq ;
+	struct v2gMeteringReceiptResType MeteringReceiptRes ;
+	struct v2gPaymentDetailsResType PaymentDetailsRes ;
+	struct v2gSessionSetupReqType SessionSetupReq ;
+	struct v2gSessionSetupResType SessionSetupRes ;
+	struct v2gCableCheckReqType CableCheckReq ;
+	struct v2gCableCheckResType CableCheckRes ;
+	struct v2gCertificateInstallationReqType CertificateInstallationReq ;
+	struct v2gCertificateInstallationResType CertificateInstallationRes ;
+	struct v2gWeldingDetectionReqType WeldingDetectionReq ;
+	struct v2gWeldingDetectionResType WeldingDetectionRes ;
+	struct v2gCertificateUpdateReqType CertificateUpdateReq ;
+	struct v2gCertificateUpdateResType CertificateUpdateRes ;
+	struct v2gPaymentServiceSelectionReqType PaymentServiceSelectionReq ;
+	struct v2gPowerDeliveryReqType PowerDeliveryReq ;
+	struct v2gPaymentServiceSelectionResType PaymentServiceSelectionRes ;
+	struct v2gPowerDeliveryResType PowerDeliveryRes ;
+	struct v2gChargingStatusReqType ChargingStatusReq ;
+	struct v2gChargingStatusResType ChargingStatusRes ;
+	struct v2gBodyBaseType BodyElement ;
+	struct v2gCurrentDemandReqType CurrentDemandReq ;
+	struct v2gPreChargeReqType PreChargeReq ;
+	struct v2gCurrentDemandResType CurrentDemandRes ;
+	struct v2gPreChargeResType PreChargeRes ;
+	struct v2gSessionStopReqType SessionStopReq ;
+	struct v2gAuthorizationReqType AuthorizationReq ;
+	struct v2gSessionStopResType SessionStopRes ;
+	struct v2gAuthorizationResType AuthorizationRes ;
+	struct v2gChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ;
+	struct v2gChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ;
+	struct v2gServiceDetailReqType ServiceDetailReq ;
+	struct v2gServiceDetailResType ServiceDetailRes ;
+	struct v2gDC_EVSEStatusType DC_EVSEStatus ;
+	struct v2gRelativeTimeIntervalType RelativeTimeInterval ;
+	struct v2gSalesTariffEntryType SalesTariffEntry ;
+	struct v2gDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ;
+	struct v2gSASchedulesType SASchedules ;
+	struct v2gAC_EVChargeParameterType AC_EVChargeParameter ;
+	struct v2gSAScheduleListType SAScheduleList ;
+	struct v2gDC_EVStatusType DC_EVStatus ;
+	struct v2gEVStatusType EVStatus ;
+	struct v2gDC_EVChargeParameterType DC_EVChargeParameter ;
+	struct v2gDC_EVSEChargeParameterType DC_EVSEChargeParameter ;
+	struct v2gEVSEStatusType EVSEStatus ;
+	struct v2gIntervalType TimeInterval ;
+	struct v2gEVPowerDeliveryParameterType EVPowerDeliveryParameter ;
+	struct v2gEVSEChargeParameterType EVSEChargeParameter ;
+	struct v2gAC_EVSEStatusType AC_EVSEStatus ;
+	struct v2gEntryType Entry ;
+	struct v2gAC_EVSEChargeParameterType AC_EVSEChargeParameter ;
+	struct v2gPMaxScheduleEntryType PMaxScheduleEntry ;
+	struct v2gEVChargeParameterType EVChargeParameter ;
+	struct v2gSignaturePropertyType SignatureProperty ;
+	struct v2gDSAKeyValueType DSAKeyValue ;
+	struct v2gSignaturePropertiesType SignatureProperties ;
+	struct v2gKeyValueType KeyValue ;
+	struct v2gTransformsType Transforms ;
+	struct v2gDigestMethodType DigestMethod ;
+	struct v2gSignatureType Signature ;
+	struct v2gRetrievalMethodType RetrievalMethod ;
+	struct v2gManifestType Manifest ;
+	struct v2gReferenceType Reference ;
+	struct v2gCanonicalizationMethodType CanonicalizationMethod ;
+	struct v2gRSAKeyValueType RSAKeyValue ;
+	struct v2gTransformType Transform ;
+	struct v2gPGPDataType PGPData ;
+	struct {
+		exi_string_character_t characters[EXIDocument_MgmtData_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  MgmtData ;
+	struct v2gSignatureMethodType SignatureMethod ;
+	struct v2gKeyInfoType KeyInfo ;
+	struct v2gSPKIDataType SPKIData ;
+	struct v2gX509DataType X509Data ;
+	struct v2gSignatureValueType SignatureValue ;
+	struct {
+		exi_string_character_t characters[EXIDocument_KeyName_CHARACTERS_SIZE];
+		uint16_t charactersLen;
+	}  KeyName ;
+	struct {
+		uint8_t bytes[EXIDocument_DigestValue_BYTES_SIZE];
+		uint16_t bytesLen;
+	}  DigestValue ;
+	struct v2gSignedInfoType SignedInfo ;
+	struct v2gObjectType Object ;
+#ifdef USE_UNION_FOR_GLOBAL_ELEMENTS
+	};
+#endif
+	unsigned int V2G_Message_isUsed:1;
+	unsigned int ServiceDiscoveryReq_isUsed:1;
+	unsigned int ServiceDiscoveryRes_isUsed:1;
+	unsigned int MeteringReceiptReq_isUsed:1;
+	unsigned int PaymentDetailsReq_isUsed:1;
+	unsigned int MeteringReceiptRes_isUsed:1;
+	unsigned int PaymentDetailsRes_isUsed:1;
+	unsigned int SessionSetupReq_isUsed:1;
+	unsigned int SessionSetupRes_isUsed:1;
+	unsigned int CableCheckReq_isUsed:1;
+	unsigned int CableCheckRes_isUsed:1;
+	unsigned int CertificateInstallationReq_isUsed:1;
+	unsigned int CertificateInstallationRes_isUsed:1;
+	unsigned int WeldingDetectionReq_isUsed:1;
+	unsigned int WeldingDetectionRes_isUsed:1;
+	unsigned int CertificateUpdateReq_isUsed:1;
+	unsigned int CertificateUpdateRes_isUsed:1;
+	unsigned int PaymentServiceSelectionReq_isUsed:1;
+	unsigned int PowerDeliveryReq_isUsed:1;
+	unsigned int PaymentServiceSelectionRes_isUsed:1;
+	unsigned int PowerDeliveryRes_isUsed:1;
+	unsigned int ChargingStatusReq_isUsed:1;
+	unsigned int ChargingStatusRes_isUsed:1;
+	unsigned int BodyElement_isUsed:1;
+	unsigned int CurrentDemandReq_isUsed:1;
+	unsigned int PreChargeReq_isUsed:1;
+	unsigned int CurrentDemandRes_isUsed:1;
+	unsigned int PreChargeRes_isUsed:1;
+	unsigned int SessionStopReq_isUsed:1;
+	unsigned int AuthorizationReq_isUsed:1;
+	unsigned int SessionStopRes_isUsed:1;
+	unsigned int AuthorizationRes_isUsed:1;
+	unsigned int ChargeParameterDiscoveryReq_isUsed:1;
+	unsigned int ChargeParameterDiscoveryRes_isUsed:1;
+	unsigned int ServiceDetailReq_isUsed:1;
+	unsigned int ServiceDetailRes_isUsed:1;
+	unsigned int DC_EVSEStatus_isUsed:1;
+	unsigned int RelativeTimeInterval_isUsed:1;
+	unsigned int SalesTariffEntry_isUsed:1;
+	unsigned int DC_EVPowerDeliveryParameter_isUsed:1;
+	unsigned int SASchedules_isUsed:1;
+	unsigned int AC_EVChargeParameter_isUsed:1;
+	unsigned int SAScheduleList_isUsed:1;
+	unsigned int DC_EVStatus_isUsed:1;
+	unsigned int EVStatus_isUsed:1;
+	unsigned int DC_EVChargeParameter_isUsed:1;
+	unsigned int DC_EVSEChargeParameter_isUsed:1;
+	unsigned int EVSEStatus_isUsed:1;
+	unsigned int TimeInterval_isUsed:1;
+	unsigned int EVPowerDeliveryParameter_isUsed:1;
+	unsigned int EVSEChargeParameter_isUsed:1;
+	unsigned int AC_EVSEStatus_isUsed:1;
+	unsigned int Entry_isUsed:1;
+	unsigned int AC_EVSEChargeParameter_isUsed:1;
+	unsigned int PMaxScheduleEntry_isUsed:1;
+	unsigned int EVChargeParameter_isUsed:1;
+	unsigned int SignatureProperty_isUsed:1;
+	unsigned int DSAKeyValue_isUsed:1;
+	unsigned int SignatureProperties_isUsed:1;
+	unsigned int KeyValue_isUsed:1;
+	unsigned int Transforms_isUsed:1;
+	unsigned int DigestMethod_isUsed:1;
+	unsigned int Signature_isUsed:1;
+	unsigned int RetrievalMethod_isUsed:1;
+	unsigned int Manifest_isUsed:1;
+	unsigned int Reference_isUsed:1;
+	unsigned int CanonicalizationMethod_isUsed:1;
+	unsigned int RSAKeyValue_isUsed:1;
+	unsigned int Transform_isUsed:1;
+	unsigned int PGPData_isUsed:1;
+	unsigned int MgmtData_isUsed:1;
+	unsigned int SignatureMethod_isUsed:1;
+	unsigned int KeyInfo_isUsed:1;
+	unsigned int SPKIData_isUsed:1;
+	unsigned int X509Data_isUsed:1;
+	unsigned int SignatureValue_isUsed:1;
+	unsigned int KeyName_isUsed:1;
+	unsigned int DigestValue_isUsed:1;
+	unsigned int SignedInfo_isUsed:1;
+	unsigned int Object_isUsed:1;
+
+
+	int _warning_;
+};
+
+/* Initialization methods for structs */
+
+void init_v2gEXIDocument(struct v2gEXIDocument* exiDoc);
+void init_v2gServiceDetailResType(struct v2gServiceDetailResType* v2gServiceDetailResType);
+void init_v2gSPKIDataType(struct v2gSPKIDataType* v2gSPKIDataType);
+void init_v2gAuthorizationResType(struct v2gAuthorizationResType* v2gAuthorizationResType);
+void init_v2gBodyType(struct v2gBodyType* v2gBodyType);
+void init_v2gPaymentServiceSelectionReqType(struct v2gPaymentServiceSelectionReqType* v2gPaymentServiceSelectionReqType);
+void init_v2gEVSEStatusType(struct v2gEVSEStatusType* v2gEVSEStatusType);
+void init_v2gSelectedServiceType(struct v2gSelectedServiceType* v2gSelectedServiceType);
+void init_v2gEntryType(struct v2gEntryType* v2gEntryType);
+void init_v2gDC_EVSEChargeParameterType(struct v2gDC_EVSEChargeParameterType* v2gDC_EVSEChargeParameterType);
+void init_v2gSalesTariffType(struct v2gSalesTariffType* v2gSalesTariffType);
+void init_v2gPMaxScheduleType(struct v2gPMaxScheduleType* v2gPMaxScheduleType);
+void init_v2gCostType(struct v2gCostType* v2gCostType);
+void init_v2gChargeServiceType(struct v2gChargeServiceType* v2gChargeServiceType);
+void init_v2gPMaxScheduleEntryType(struct v2gPMaxScheduleEntryType* v2gPMaxScheduleEntryType);
+void init_v2gServiceListType(struct v2gServiceListType* v2gServiceListType);
+void init_v2gKeyValueType(struct v2gKeyValueType* v2gKeyValueType);
+void init_v2gPaymentServiceSelectionResType(struct v2gPaymentServiceSelectionResType* v2gPaymentServiceSelectionResType);
+void init_v2gSignatureMethodType(struct v2gSignatureMethodType* v2gSignatureMethodType);
+void init_v2gMeteringReceiptResType(struct v2gMeteringReceiptResType* v2gMeteringReceiptResType);
+void init_v2gMessageHeaderType(struct v2gMessageHeaderType* v2gMessageHeaderType);
+void init_v2gRetrievalMethodType(struct v2gRetrievalMethodType* v2gRetrievalMethodType);
+void init_v2gEVChargeParameterType(struct v2gEVChargeParameterType* v2gEVChargeParameterType);
+void init_v2gCertificateInstallationReqType(struct v2gCertificateInstallationReqType* v2gCertificateInstallationReqType);
+void init_v2gChargeParameterDiscoveryResType(struct v2gChargeParameterDiscoveryResType* v2gChargeParameterDiscoveryResType);
+void init_v2gWeldingDetectionReqType(struct v2gWeldingDetectionReqType* v2gWeldingDetectionReqType);
+void init_v2gCableCheckReqType(struct v2gCableCheckReqType* v2gCableCheckReqType);
+void init_v2gParameterType(struct v2gParameterType* v2gParameterType);
+void init_v2gEVSEChargeParameterType(struct v2gEVSEChargeParameterType* v2gEVSEChargeParameterType);
+void init_v2gManifestType(struct v2gManifestType* v2gManifestType);
+void init_v2gDC_EVStatusType(struct v2gDC_EVStatusType* v2gDC_EVStatusType);
+void init_v2gPaymentDetailsReqType(struct v2gPaymentDetailsReqType* v2gPaymentDetailsReqType);
+void init_v2gSAScheduleListType(struct v2gSAScheduleListType* v2gSAScheduleListType);
+void init_v2gRSAKeyValueType(struct v2gRSAKeyValueType* v2gRSAKeyValueType);
+void init_v2gAC_EVSEChargeParameterType(struct v2gAC_EVSEChargeParameterType* v2gAC_EVSEChargeParameterType);
+void init_v2gTransformsType(struct v2gTransformsType* v2gTransformsType);
+void init_v2gWeldingDetectionResType(struct v2gWeldingDetectionResType* v2gWeldingDetectionResType);
+void init_v2gConsumptionCostType(struct v2gConsumptionCostType* v2gConsumptionCostType);
+void init_v2gChargingStatusResType(struct v2gChargingStatusResType* v2gChargingStatusResType);
+void init_v2gEVStatusType(struct v2gEVStatusType* v2gEVStatusType);
+void init_v2gPGPDataType(struct v2gPGPDataType* v2gPGPDataType);
+void init_v2gSessionStopResType(struct v2gSessionStopResType* v2gSessionStopResType);
+void init_v2gServiceDiscoveryReqType(struct v2gServiceDiscoveryReqType* v2gServiceDiscoveryReqType);
+void init_v2gAuthorizationReqType(struct v2gAuthorizationReqType* v2gAuthorizationReqType);
+void init_v2gSAScheduleTupleType(struct v2gSAScheduleTupleType* v2gSAScheduleTupleType);
+void init_v2gPhysicalValueType(struct v2gPhysicalValueType* v2gPhysicalValueType);
+void init_v2gDigestMethodType(struct v2gDigestMethodType* v2gDigestMethodType);
+void init_v2gAC_EVSEStatusType(struct v2gAC_EVSEStatusType* v2gAC_EVSEStatusType);
+void init_v2gSessionSetupResType(struct v2gSessionSetupResType* v2gSessionSetupResType);
+void init_v2gX509IssuerSerialType(struct v2gX509IssuerSerialType* v2gX509IssuerSerialType);
+void init_v2gSessionStopReqType(struct v2gSessionStopReqType* v2gSessionStopReqType);
+void init_v2gDC_EVSEStatusType(struct v2gDC_EVSEStatusType* v2gDC_EVSEStatusType);
+void init_v2gDiffieHellmanPublickeyType(struct v2gDiffieHellmanPublickeyType* v2gDiffieHellmanPublickeyType);
+void init_v2gCertificateUpdateReqType(struct v2gCertificateUpdateReqType* v2gCertificateUpdateReqType);
+void init_v2gBodyBaseType(struct v2gBodyBaseType* v2gBodyBaseType);
+void init_v2gDC_EVChargeParameterType(struct v2gDC_EVChargeParameterType* v2gDC_EVChargeParameterType);
+void init_v2gSubCertificatesType(struct v2gSubCertificatesType* v2gSubCertificatesType);
+void init_v2gSupportedEnergyTransferModeType(struct v2gSupportedEnergyTransferModeType* v2gSupportedEnergyTransferModeType);
+void init_v2gChargingStatusReqType(struct v2gChargingStatusReqType* v2gChargingStatusReqType);
+void init_v2gSignaturePropertyType(struct v2gSignaturePropertyType* v2gSignaturePropertyType);
+void init_v2gContractSignatureEncryptedPrivateKeyType(struct v2gContractSignatureEncryptedPrivateKeyType* v2gContractSignatureEncryptedPrivateKeyType);
+void init_v2gReferenceType(struct v2gReferenceType* v2gReferenceType);
+void init_v2gCurrentDemandResType(struct v2gCurrentDemandResType* v2gCurrentDemandResType);
+void init_v2gCanonicalizationMethodType(struct v2gCanonicalizationMethodType* v2gCanonicalizationMethodType);
+void init_v2gTransformType(struct v2gTransformType* v2gTransformType);
+void init_v2gCertificateChainType(struct v2gCertificateChainType* v2gCertificateChainType);
+void init_v2gSignatureValueType(struct v2gSignatureValueType* v2gSignatureValueType);
+void init_v2gEVPowerDeliveryParameterType(struct v2gEVPowerDeliveryParameterType* v2gEVPowerDeliveryParameterType);
+void init_v2gServiceDetailReqType(struct v2gServiceDetailReqType* v2gServiceDetailReqType);
+void init_v2gPaymentDetailsResType(struct v2gPaymentDetailsResType* v2gPaymentDetailsResType);
+void init_v2gX509DataType(struct v2gX509DataType* v2gX509DataType);
+void init_v2gDSAKeyValueType(struct v2gDSAKeyValueType* v2gDSAKeyValueType);
+void init_v2gPowerDeliveryResType(struct v2gPowerDeliveryResType* v2gPowerDeliveryResType);
+void init_v2gChargeParameterDiscoveryReqType(struct v2gChargeParameterDiscoveryReqType* v2gChargeParameterDiscoveryReqType);
+void init_v2gParameterSetType(struct v2gParameterSetType* v2gParameterSetType);
+void init_v2gServiceDiscoveryResType(struct v2gServiceDiscoveryResType* v2gServiceDiscoveryResType);
+void init_v2gAnonType_V2G_Message(struct v2gAnonType_V2G_Message* v2gAnonType_V2G_Message);
+void init_v2gSignatureType(struct v2gSignatureType* v2gSignatureType);
+void init_v2gEMAIDType(struct v2gEMAIDType* v2gEMAIDType);
+void init_v2gCertificateInstallationResType(struct v2gCertificateInstallationResType* v2gCertificateInstallationResType);
+void init_v2gCableCheckResType(struct v2gCableCheckResType* v2gCableCheckResType);
+void init_v2gMeterInfoType(struct v2gMeterInfoType* v2gMeterInfoType);
+void init_v2gAC_EVChargeParameterType(struct v2gAC_EVChargeParameterType* v2gAC_EVChargeParameterType);
+void init_v2gServiceParameterListType(struct v2gServiceParameterListType* v2gServiceParameterListType);
+void init_v2gCurrentDemandReqType(struct v2gCurrentDemandReqType* v2gCurrentDemandReqType);
+void init_v2gSASchedulesType(struct v2gSASchedulesType* v2gSASchedulesType);
+void init_v2gIntervalType(struct v2gIntervalType* v2gIntervalType);
+void init_v2gPreChargeResType(struct v2gPreChargeResType* v2gPreChargeResType);
+void init_v2gSalesTariffEntryType(struct v2gSalesTariffEntryType* v2gSalesTariffEntryType);
+void init_v2gPaymentOptionListType(struct v2gPaymentOptionListType* v2gPaymentOptionListType);
+void init_v2gSignedInfoType(struct v2gSignedInfoType* v2gSignedInfoType);
+void init_v2gSessionSetupReqType(struct v2gSessionSetupReqType* v2gSessionSetupReqType);
+void init_v2gSignaturePropertiesType(struct v2gSignaturePropertiesType* v2gSignaturePropertiesType);
+void init_v2gProfileEntryType(struct v2gProfileEntryType* v2gProfileEntryType);
+void init_v2gPreChargeReqType(struct v2gPreChargeReqType* v2gPreChargeReqType);
+void init_v2gListOfRootCertificateIDsType(struct v2gListOfRootCertificateIDsType* v2gListOfRootCertificateIDsType);
+void init_v2gDC_EVPowerDeliveryParameterType(struct v2gDC_EVPowerDeliveryParameterType* v2gDC_EVPowerDeliveryParameterType);
+void init_v2gRelativeTimeIntervalType(struct v2gRelativeTimeIntervalType* v2gRelativeTimeIntervalType);
+void init_v2gChargingProfileType(struct v2gChargingProfileType* v2gChargingProfileType);
+void init_v2gCertificateUpdateResType(struct v2gCertificateUpdateResType* v2gCertificateUpdateResType);
+void init_v2gMeteringReceiptReqType(struct v2gMeteringReceiptReqType* v2gMeteringReceiptReqType);
+void init_v2gServiceType(struct v2gServiceType* v2gServiceType);
+void init_v2gNotificationType(struct v2gNotificationType* v2gNotificationType);
+void init_v2gKeyInfoType(struct v2gKeyInfoType* v2gKeyInfoType);
+void init_v2gSelectedServiceListType(struct v2gSelectedServiceListType* v2gSelectedServiceListType);
+void init_v2gPowerDeliveryReqType(struct v2gPowerDeliveryReqType* v2gPowerDeliveryReqType);
+void init_v2gObjectType(struct v2gObjectType* v2gObjectType);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 563 - 0
src/codec/v2gEXIDatatypesDecoder.c


+ 34 - 28
src/codec/CoderChannel.h → src/codec/v2gEXIDatatypesDecoder.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007-2012 Siemens AG
+ * Copyright (C) 2007-2014 Siemens AG
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published
@@ -10,7 +10,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
@@ -19,33 +18,40 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.7
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Code generated by EXIdizer.com</p>
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
  ********************************************************************/
 
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "EXITypes.h"
-
-#ifndef CODER_CHANNEL_H
-#define CODER_CHANNEL_H
-
-/** EXI alignment mode - Option bit-packed */
-#define BIT_PACKED 1
-/** EXI alignment mode - Option byte-packed */
-#define BYTE_ALIGNMENT  2
-/** EXI alignment mode */
-#define EXI_ALIGNMENT BIT_PACKED
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
+
+
+/**
+ * \file 	EXIDatatypesDecoder.h
+ * \brief 	Decoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_v2g_DATATYPES_DECODER_H
+#define EXI_v2g_DATATYPES_DECODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+#include "v2gEXIDatatypes.h"
+
+int decode_v2gExiDocument(bitstream_t* stream, struct v2gEXIDocument* exiDoc);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 416 - 0
src/codec/v2gEXIDatatypesEncoder.c


+ 36 - 22
src/service/v2g_serviceClientDataTransmitter.h → src/codec/v2gEXIDatatypesEncoder.h

@@ -1,6 +1,5 @@
-
 /*
- * Copyright (C) 2007-2010 Siemens AG
+ * Copyright (C) 2007-2014 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
@@ -18,27 +17,42 @@
 
 /*******************************************************************
  *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
+ * @author Daniel.Peintner.EXT@siemens.com
+ * @version 0.9 
  * @contact Joerg.Heuer@siemens.com
  *
+ * <p>Code generated by EXIdizer</p>
+ * <p>Schema: V2G_CI_MsgDef.xsd</p>
+ *
+ *
  ********************************************************************/
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef V2G_SERVICECLIENTDATATRANSMITTER_H_
-#define V2G_SERVICECLIENTDATATRANSMITTER_H_
-
-#include "EXITypes.h"
-
-/* This method has to be implemented!
- * This method sends EXI stream (outStream) to the EVSE and receives response stream (inStream)*/
-int serviceDataTransmitter(uint8_t* outStream, uint16_t outStreamLength, uint8_t* inStream);
-
-#endif /* V2G_SERVICECLIENTDATATRANSMITTER_H_ */
-
-#ifdef __cplusplus
-}
-#endif
+
+
+/**
+ * \file 	EXIDatatypesEncoder.h
+ * \brief 	Encoder for datatype definitions
+ *
+ */
+
+#ifndef EXI_v2g_DATATYPES_ENCODER_H
+#define EXI_v2g_DATATYPES_ENCODER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+
+#include "EXITypes.h"
+#include "v2gEXIDatatypes.h"
+
+
+int encode_v2gExiDocument(bitstream_t* stream, struct v2gEXIDocument* exiDoc);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 947
src/codec/v2gEXIDecoder.c


+ 0 - 225
src/codec/v2gEXIDecoder.h

@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_v2g_DECODER_H
-#define EXI_v2g_DECODER_H
-
-/**
-* \file 	EXIDecoder.h
-* \brief 	EXI Decoder
-*
-*/
-
-#include "EXITypes.h"
-
-/**
- * \brief 		Initialize EXI decoder
- *
- *         		Resets & initializes the EXI decoder.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       runtimeTable   	Runtime name-tables
- * \param       stringTable   	String table
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gInitDecoder(bitstream_t* stream, exi_state_t* state,
-		exi_name_table_runtime_t runtimeTable, exi_value_table_t stringTable);
-
-
-/**
- * \brief 		Reports last decoded qualified name
- *
- *         		Note: Qualified name only available for previously unknown qname. Otherwise make use of name table entries.
- *
- * \param       qname   		Qualified name
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gGetLastQName(exi_qname_t** qname);
-
-
-/**
- * \brief 		Decodes next event
- *
- * 				Inspects EXI stream and decodes next EXI event.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       nextEvent   	Next event
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeNextEvent(bitstream_t* stream,
-		exi_state_t* state, exi_event_t* nextEvent);
-
-
-/**
- * \brief 		Decodes StartDocument (SD) event
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeStartDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief 		Decodes EndDocument (ED) event
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeEndDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief 		Decodes StartElement (SE) event
- *
- * 				Note: The first time a qnameID is larger than schema-informed NUMBER_OF_QNAMES it is possible to retrieve the qname by calling GetLastQName(...).
- * 				It is up to the caller to track qnames.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \return                  	Error-Code <> 0
- *
- */
-int
-exiv2gDecodeStartElement(bitstream_t* stream,
-		exi_state_t* state, uint16_t* qnameID);
-
-
-/**
- * \brief 		Decodes EndElement (EE) event
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeEndElement(bitstream_t* stream,
-		exi_state_t* state, uint16_t* qnameID);
-
-
-/**
- * \brief 		Decodes Characters (CH) event.
- *
- * 				Reports characters value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeCharacters(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes Attribute (AT) event.
- *
- * 				Reports attribute qname and value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeAttribute(bitstream_t* stream,
-		exi_state_t* state, uint16_t* qnameID, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes attribute xsi:nil
- *
- * 				Reports value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeAttributeXsiNil(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes attribute xsi:type
- *
- * 				Reports value.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       val		   		Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeAttributeXsiType(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-
-/**
- * \brief 		Decodes attribute/characters list value
- *
- * 				List values are special and are processed one by one.
- *
- * \param       stream   		Input Stream
- * \param       state   		Codec state
- * \param       qnameID   		Qualified Name ID
- * \param       val		   		List value
- * \param       lt		   		List type
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gDecodeListValue(bitstream_t* stream, exi_state_t* state, uint16_t qnameID,
-		exi_value_t* val, exi_list_t lt);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 331
src/codec/v2gEXIEncoder.c


+ 0 - 274
src/codec/v2gEXIEncoder.h

@@ -1,274 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_v2g_ENCODER_H
-#define EXI_v2g_ENCODER_H
-
-/**
-* \file 	EXIEncoder.h
-* \brief 	EXI Encoder
-*
-*/
-
-#include "EXITypes.h"
-#include "v2gEXIEncoder.h"
-
-/**
- * \brief 	Initialize EXI encoder
- *
- *         	Resets & initializes the EXI encoder.
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       runtimeTable   	Runtime name-tables
- * \param       stringTable   	String table
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gInitEncoder(bitstream_t* stream, exi_state_t* state,
-		exi_name_table_runtime_t runtimeTable, exi_value_table_t stringTable);
-
-/**
- * \brief  	Reports the beginning of a set of XML events
- *
- *			see EXI StartDocument (SD) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeStartDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief  	Reports the end of a set of XML events
- *
- *			see EXI EndDocument (ED) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeEndDocument(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief  	Supplies the start of a known element
- *
- *			Provides access to the namespace URI and local name of the start tag by providing qnameID.
- *			Note: Both, namespace URI and local name are known (schema-informed) or have been encoded before.
- *			see EXI StartElement (SE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		qualified name ID
- * \return                  	Error-Code <> 0
- *
- */
-int
-exiv2gEncodeStartElement(bitstream_t* stream,
-		exi_state_t* state, uint16_t qnameID);
-
-/**
- * \brief  	Supplies the start of an element where the namespace is known
- *
- *			Note: Namespace URI is known (schema-informed) or has been encoded before while local name is unknown.
- *			see EXI StartElement (SE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUriID  namespace URI ID
- * \param       localName  		local name as string
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeStartElementNS(bitstream_t* stream,
-		exi_state_t* state, uint16_t namespaceUriID,
-		exi_string_ucs_t* localName);
-
-/**
- * \brief  	Supplies the start of an element where the namespace and the local name is unknown
- *
- *			Note: Neither namespace URI nor local name is known.
- *			see EXI StartElement (SE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUri  	namespace URI as string
- * \param       localName  		local name as string
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeStartElementGeneric(bitstream_t* stream,
-		exi_state_t* state, exi_string_ucs_t* namespaceUri,
-		exi_string_ucs_t* localName);
-
-/**
- * \brief  	Supplies the end tag of an element
- *
- *			see EXI EndElement (EE) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeEndElement(bitstream_t* stream,
-		exi_state_t* state);
-
-/**
- * \brief  	Supplies characters value
- *
- *			Note: Special handling for list value.
- *			see EXI Characters (CH) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       val   			Characters value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeCharacters(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-/**
- * \brief  	Supplies an attribute qname and value
- *
- *			Note: Special handling for list value.
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		qualified name ID
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeAttribute(bitstream_t* stream,
-		exi_state_t* state, uint16_t qnameID, exi_value_t* val);
-
-
-
-
-/**
- * \brief  	Supplies an attribute qname and value where the namespace is known
- *
- *			Note: Special handling for list value.
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUriID  Qualified namespace URI ID
- * \param       localName  		Qualified localname as String
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeAttributeNS(bitstream_t* stream,
-		exi_state_t* state, uint16_t namespaceUriID,
-		exi_string_ucs_t* localName, exi_value_t* val);
-
-
-/**
- * \brief  	Supplies an attribute qname and value where the namespace and the local name is unknown
- *
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       namespaceUri  	namespace URI as string
- * \param       localName  		local name as string
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeAttributeGeneric(bitstream_t* stream,
-		exi_state_t* state, exi_string_ucs_t* namespaceUri,
-		exi_string_ucs_t* localName, exi_value_t* val);
-
-
-
-/**
- * \brief  	Supplies an xsi:nil attribute
- *
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeAttributeXsiNil(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-/**
- * \brief  	Supplies an xsi:type attribute
- *
- *			see EXI Attribute (AT) event
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       val   			Attribute value
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeAttributeXsiType(bitstream_t* stream,
-		exi_state_t* state, exi_value_t* val);
-
-/**
- * \brief  	Supplies list value for characters and attribute event
- *
- *			List values are special given that first the number and type of entry needs to be passed (element/attribute event) and then one by one the actual values.
- *
- * \param       stream   		Output Stream
- * \param       state   		Codec state
- * \param       qnameID   		qualified name ID
- * \param       val   			one list value
- * \param       lt   			list type
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gEncodeListValue(bitstream_t* stream,
-		exi_state_t* state, uint16_t qnameID, exi_value_t* val, exi_list_t lt);
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-

+ 0 - 204
src/codec/v2gNameTableEntries.c

@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_v2g_NAME_TABLE_ENTRIES_C
-#define EXI_v2g_NAME_TABLE_ENTRIES_C
-
-#include "v2gNameTableEntries.h"
-
-
-
-/* ==================================== */
-/* String Table Population */
-
-/* localName entries for URI '', id = 0 */
-/* 
-  "Algorithm",  "Encoding",  "Id",  "MimeType",  "Target",
-  "Type",  "URI"
- */
-
-/* localName entries for URI 'http://www.w3.org/XML/1998/namespace', id = 1 */
-/* 
-  "base",  "id",  "lang",  "space"
- */
-
-/* localName entries for URI 'http://www.w3.org/2001/XMLSchema-instance', id = 2 */
-/* 
-  "nil",  "type"
- */
-
-/* localName entries for URI 'http://www.w3.org/2001/XMLSchema', id = 3 */
-/* 
-  "ENTITIES",  "ENTITY",  "ID",  "IDREF",  "IDREFS",
-  "NCName",  "NMTOKEN",  "NMTOKENS",  "NOTATION",  "Name",
-  "QName",  "anySimpleType",  "anyType",  "anyURI",  "base64Binary",
-  "boolean",  "byte",  "date",  "dateTime",  "decimal",
-  "double",  "duration",  "float",  "gDay",  "gMonth",
-  "gMonthDay",  "gYear",  "gYearMonth",  "hexBinary",  "int",
-  "integer",  "language",  "long",  "negativeInteger",  "nonNegativeInteger",
-  "nonPositiveInteger",  "normalizedString",  "positiveInteger",  "short",  "string",
-  "time",  "token",  "unsignedByte",  "unsignedInt",  "unsignedLong",
-  "unsignedShort"
- */
-
-/* localName entries for URI 'http://www.w3.org/2000/09/xmldsig#', id = 4 */
-/* 
-  "CanonicalizationMethod",  "CanonicalizationMethodType",  "CryptoBinary",  "DSAKeyValue",  "DSAKeyValueType",
-  "DigestMethod",  "DigestMethodType",  "DigestValue",  "DigestValueType",  "Exponent",
-  "G",  "HMACOutputLength",  "HMACOutputLengthType",  "J",  "KeyInfo",
-  "KeyInfoType",  "KeyName",  "KeyValue",  "KeyValueType",  "Manifest",
-  "ManifestType",  "MgmtData",  "Modulus",  "Object",  "ObjectType",
-  "P",  "PGPData",  "PGPDataType",  "PGPKeyID",  "PGPKeyPacket",
-  "PgenCounter",  "Q",  "RSAKeyValue",  "RSAKeyValueType",  "Reference",
-  "ReferenceType",  "RetrievalMethod",  "RetrievalMethodType",  "SPKIData",  "SPKIDataType",
-  "SPKISexp",  "Seed",  "Signature",  "SignatureMethod",  "SignatureMethodType",
-  "SignatureProperties",  "SignaturePropertiesType",  "SignatureProperty",  "SignaturePropertyType",  "SignatureType",
-  "SignatureValue",  "SignatureValueType",  "SignedInfo",  "SignedInfoType",  "Transform",
-  "TransformType",  "Transforms",  "TransformsType",  "X509CRL",  "X509Certificate",
-  "X509Data",  "X509DataType",  "X509IssuerName",  "X509IssuerSerial",  "X509IssuerSerialType",
-  "X509SKI",  "X509SerialNumber",  "X509SubjectName",  "XPath",  "Y"
-
- */
-
-/* localName entries for URI 'urn:iso:15118:2:2013:MsgBody', id = 5 */
-/* 
-  "AC_EVSEStatus",  "AuthorizationReq",  "AuthorizationReqType",  "AuthorizationRes",  "AuthorizationResType",
-  "BodyBaseType",  "BodyElement",  "BodyType",  "BulkChargingComplete",  "CableCheckReq",
-  "CableCheckReqType",  "CableCheckRes",  "CableCheckResType",  "CertificateInstallationReq",  "CertificateInstallationReqType",
-  "CertificateInstallationRes",  "CertificateInstallationResType",  "CertificateUpdateReq",  "CertificateUpdateReqType",  "CertificateUpdateRes",
-  "CertificateUpdateResType",  "ChargeParameterDiscoveryReq",  "ChargeParameterDiscoveryReqType",  "ChargeParameterDiscoveryRes",  "ChargeParameterDiscoveryResType",
-  "ChargeProgress",  "ChargeService",  "ChargingComplete",  "ChargingProfile",  "ChargingSession",
-  "ChargingStatusReq",  "ChargingStatusReqType",  "ChargingStatusRes",  "ChargingStatusResType",  "ContractSignatureCertChain",
-  "ContractSignatureEncryptedPrivateKey",  "CurrentDemandReq",  "CurrentDemandReqType",  "CurrentDemandRes",  "CurrentDemandResType",
-  "DC_EVSEStatus",  "DC_EVStatus",  "DHpublickey",  "EVCCID",  "EVMaximumCurrentLimit",
-  "EVMaximumPowerLimit",  "EVMaximumVoltageLimit",  "EVSECurrentLimitAchieved",  "EVSEID",  "EVSEMaxCurrent",
-  "EVSEMaximumCurrentLimit",  "EVSEMaximumPowerLimit",  "EVSEMaximumVoltageLimit",  "EVSEPowerLimitAchieved",  "EVSEPresentCurrent",
-  "EVSEPresentVoltage",  "EVSEProcessing",  "EVSETimeStamp",  "EVSEVoltageLimitAchieved",  "EVTargetCurrent",
-  "EVTargetVoltage",  "GenChallenge",  "Id",  "ListOfRootCertificateIDs",  "MaxEntriesSAScheduleTuple",
-  "MeterInfo",  "MeteringReceiptReq",  "MeteringReceiptReqType",  "MeteringReceiptRes",  "MeteringReceiptResType",
-  "OEMProvisioningCert",  "PaymentDetailsReq",  "PaymentDetailsReqType",  "PaymentDetailsRes",  "PaymentDetailsResType",
-  "PaymentOptionList",  "PaymentServiceSelectionReq",  "PaymentServiceSelectionReqType",  "PaymentServiceSelectionRes",  "PaymentServiceSelectionResType",
-  "PowerDeliveryReq",  "PowerDeliveryReqType",  "PowerDeliveryRes",  "PowerDeliveryResType",  "PreChargeReq",
-  "PreChargeReqType",  "PreChargeRes",  "PreChargeResType",  "ReceiptRequired",  "RemainingTimeToBulkSoC",
-  "RemainingTimeToFullSoC",  "RequestedEnergyTransferMode",  "ResponseCode",  "RetryCounter",  "SAProvisioningCertificateChain",
-  "SAScheduleTupleID",  "SelectedPaymentOption",  "SelectedServiceList",  "ServiceCategory",  "ServiceDetailReq",
-  "ServiceDetailReqType",  "ServiceDetailRes",  "ServiceDetailResType",  "ServiceDiscoveryReq",  "ServiceDiscoveryReqType",
-  "ServiceDiscoveryRes",  "ServiceDiscoveryResType",  "ServiceID",  "ServiceList",  "ServiceParameterList",
-  "ServiceScope",  "SessionID",  "SessionSetupReq",  "SessionSetupReqType",  "SessionSetupRes",
-  "SessionSetupResType",  "SessionStopReq",  "SessionStopReqType",  "SessionStopRes",  "SessionStopResType",
-  "WeldingDetectionReq",  "WeldingDetectionReqType",  "WeldingDetectionRes",  "WeldingDetectionResType",  "eMAID"
-
- */
-
-/* localName entries for URI 'urn:iso:15118:2:2013:MsgDataTypes', id = 6 */
-/* 
-  "AC_EVChargeParameter",  "AC_EVChargeParameterType",  "AC_EVSEChargeParameter",  "AC_EVSEChargeParameterType",  "AC_EVSEStatus",
-  "AC_EVSEStatusType",  "BulkChargingComplete",  "BulkSOC",  "Certificate",  "CertificateChainType",
-  "ChargeServiceType",  "ChargingComplete",  "ChargingProfileEntryMaxNumberOfPhasesInUse",  "ChargingProfileEntryMaxPower",  "ChargingProfileEntryStart",
-  "ChargingProfileType",  "ConsumptionCost",  "ConsumptionCostType",  "ContractSignatureEncryptedPrivateKeyType",  "Cost",
-  "CostType",  "DC_EVChargeParameter",  "DC_EVChargeParameterType",  "DC_EVErrorCodeType",  "DC_EVPowerDeliveryParameter",
-  "DC_EVPowerDeliveryParameterType",  "DC_EVSEChargeParameter",  "DC_EVSEChargeParameterType",  "DC_EVSEStatus",  "DC_EVSEStatusCodeType",
-  "DC_EVSEStatusType",  "DC_EVStatus",  "DC_EVStatusType",  "DepartureTime",  "DiffieHellmanPublickeyType",
-  "EAmount",  "EMAIDType",  "EPriceLevel",  "EVChargeParameter",  "EVChargeParameterType",
-  "EVEnergyCapacity",  "EVEnergyRequest",  "EVErrorCode",  "EVMaxCurrent",  "EVMaxVoltage",
-  "EVMaximumCurrentLimit",  "EVMaximumPowerLimit",  "EVMaximumVoltageLimit",  "EVMinCurrent",  "EVPowerDeliveryParameter",
-  "EVPowerDeliveryParameterType",  "EVRESSSOC",  "EVReady",  "EVSEChargeParameter",  "EVSEChargeParameterType",
-  "EVSECurrentRegulationTolerance",  "EVSEEnergyToBeDelivered",  "EVSEIsolationStatus",  "EVSEMaxCurrent",  "EVSEMaximumCurrentLimit",
-  "EVSEMaximumPowerLimit",  "EVSEMaximumVoltageLimit",  "EVSEMinimumCurrentLimit",  "EVSEMinimumVoltageLimit",  "EVSENominalVoltage",
-  "EVSENotification",  "EVSENotificationType",  "EVSEPeakCurrentRipple",  "EVSEProcessingType",  "EVSEStatus",
-  "EVSEStatusCode",  "EVSEStatusType",  "EVStatus",  "EVStatusType",  "EnergyTransferMode",
-  "EnergyTransferModeType",  "Entry",  "EntryType",  "FaultCode",  "FaultMsg",
-  "FreeService",  "FullSOC",  "Id",  "IntervalType",  "ListOfRootCertificateIDsType",
-  "MeterID",  "MeterInfoType",  "MeterReading",  "MeterStatus",  "Multiplier",
-  "Name",  "NotificationMaxDelay",  "NotificationType",  "NumEPriceLevels",  "PMax",
-  "PMaxSchedule",  "PMaxScheduleEntry",  "PMaxScheduleEntryType",  "PMaxScheduleType",  "Parameter",
-  "ParameterSet",  "ParameterSetID",  "ParameterSetType",  "ParameterType",  "PaymentOption",
-  "PaymentOptionListType",  "PhysicalValueType",  "ProfileEntry",  "ProfileEntryType",  "RCD",
-  "RelativeTimeInterval",  "RelativeTimeIntervalType",  "RootCertificateID",  "SAIDType",  "SAScheduleList",
-  "SAScheduleListType",  "SAScheduleTuple",  "SAScheduleTupleID",  "SAScheduleTupleType",  "SASchedules",
-  "SASchedulesType",  "SalesTariff",  "SalesTariffDescription",  "SalesTariffEntry",  "SalesTariffEntryType",
-  "SalesTariffID",  "SalesTariffType",  "SelectedService",  "SelectedServiceListType",  "SelectedServiceType",
-  "Service",  "ServiceCategory",  "ServiceID",  "ServiceListType",  "ServiceName",
-  "ServiceParameterListType",  "ServiceScope",  "ServiceType",  "SigMeterReading",  "SubCertificates",
-  "SubCertificatesType",  "SupportedEnergyTransferMode",  "SupportedEnergyTransferModeType",  "TMeter",  "TimeInterval",
-  "Unit",  "Value",  "amount",  "amountMultiplier",  "boolValue",
-  "byteValue",  "certificateType",  "chargeProgressType",  "chargingSessionType",  "costKind",
-  "costKindType",  "dHpublickeyType",  "duration",  "eMAIDType",  "evccIDType",
-  "evseIDType",  "faultCodeType",  "faultMsgType",  "genChallengeType",  "intValue",
-  "isolationLevelType",  "maxNumPhasesType",  "meterIDType",  "meterStatusType",  "paymentOptionType",
-  "percentValueType",  "physicalValue",  "privateKeyType",  "responseCodeType",  "serviceCategoryType",
-  "serviceIDType",  "serviceNameType",  "serviceScopeType",  "sessionIDType",  "shortValue",
-  "sigMeterReadingType",  "start",  "startValue",  "stringValue",  "tariffDescriptionType",
-  "unitMultiplierType",  "unitSymbolType",  "valueType"
- */
-
-/* localName entries for URI 'urn:iso:15118:2:2013:MsgDef', id = 7 */
-/* 
-  "Body",  "Header",  "V2G_Message"
- */
-
-/* localName entries for URI 'urn:iso:15118:2:2013:MsgHeader', id = 8 */
-/* 
-  "MessageHeaderType",  "Notification",  "SessionID"
- */
-
-
-/* number of local-name entries per URI */
-static uint16_t localNames[9] = {
-	/* '' */
-	7,
-	/* 'http://www.w3.org/XML/1998/namespace' */
-	4,
-	/* 'http://www.w3.org/2001/XMLSchema-instance' */
-	2,
-	/* 'http://www.w3.org/2001/XMLSchema' */
-	46,
-	/* 'http://www.w3.org/2000/09/xmldsig#' */
-	70,
-	/* 'urn:iso:15118:2:2013:MsgBody' */
-	125,
-	/* 'urn:iso:15118:2:2013:MsgDataTypes' */
-	188,
-	/* 'urn:iso:15118:2:2013:MsgDef' */
-	3,
-	/* 'urn:iso:15118:2:2013:MsgHeader' */
-	3
-};
-
-
-exi_name_table_prepopulated_t exiv2gNameTablePrepopulated = { 9, localNames };
-
-
-
-
-#endif
-

+ 0 - 54
src/codec/v2gQNameDefines.h

@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_v2g_QNAME_DEFINES_H
-#define EXI_v2g_QNAME_DEFINES_H
-
-/** Number of pre-populated qnames */
-#define EXI_v2gNUMBER_OF_PREPOPULATED_QNAMES 448
-
-/** Number of runtime qnames */
-#define EXI_v2gMAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES 100
-
-/** Number of overall qnames (pre-populated from schema and runtime qnames) */
-#define EXI_v2gMAX_NUMBER_OF_QNAMES (EXI_v2gNUMBER_OF_PREPOPULATED_QNAMES + EXI_v2gMAX_NUMBER_OF_SUPPORTED_RUNTIMES_QNAMES)
-
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 989
src/codec/v2gQNames.c

@@ -1,989 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_v2g_QNAMES_C
-#define EXI_v2g_QNAMES_C
-
-#include "EXITypes.h"
-#include "ErrorCodes.h"
-#include "v2gQNameDefines.h"
-
-/* qname is a composition of namespaceURI(ID) and localPart(ID) */
-static exi_eqname_t qnames[EXI_v2gMAX_NUMBER_OF_QNAMES] = {
-	/* qnameID == 0: Algorithm */
-	{0, 0},
-	/* qnameID == 1: Encoding */
-	{0, 1},
-	/* qnameID == 2: Id */
-	{0, 2},
-	/* qnameID == 3: MimeType */
-	{0, 3},
-	/* qnameID == 4: Target */
-	{0, 4},
-	/* qnameID == 5: Type */
-	{0, 5},
-	/* qnameID == 6: URI */
-	{0, 6},
-	/* qnameID == 7: {http://www.w3.org/XML/1998/namespace}base */
-	{1, 0},
-	/* qnameID == 8: {http://www.w3.org/XML/1998/namespace}id */
-	{1, 1},
-	/* qnameID == 9: {http://www.w3.org/XML/1998/namespace}lang */
-	{1, 2},
-	/* qnameID == 10: {http://www.w3.org/XML/1998/namespace}space */
-	{1, 3},
-	/* qnameID == 11: {http://www.w3.org/2001/XMLSchema-instance}nil */
-	{2, 0},
-	/* qnameID == 12: {http://www.w3.org/2001/XMLSchema-instance}type */
-	{2, 1},
-	/* qnameID == 13: {http://www.w3.org/2001/XMLSchema}ENTITIES */
-	{3, 0},
-	/* qnameID == 14: {http://www.w3.org/2001/XMLSchema}ENTITY */
-	{3, 1},
-	/* qnameID == 15: {http://www.w3.org/2001/XMLSchema}ID */
-	{3, 2},
-	/* qnameID == 16: {http://www.w3.org/2001/XMLSchema}IDREF */
-	{3, 3},
-	/* qnameID == 17: {http://www.w3.org/2001/XMLSchema}IDREFS */
-	{3, 4},
-	/* qnameID == 18: {http://www.w3.org/2001/XMLSchema}NCName */
-	{3, 5},
-	/* qnameID == 19: {http://www.w3.org/2001/XMLSchema}NMTOKEN */
-	{3, 6},
-	/* qnameID == 20: {http://www.w3.org/2001/XMLSchema}NMTOKENS */
-	{3, 7},
-	/* qnameID == 21: {http://www.w3.org/2001/XMLSchema}NOTATION */
-	{3, 8},
-	/* qnameID == 22: {http://www.w3.org/2001/XMLSchema}Name */
-	{3, 9},
-	/* qnameID == 23: {http://www.w3.org/2001/XMLSchema}QName */
-	{3, 10},
-	/* qnameID == 24: {http://www.w3.org/2001/XMLSchema}anySimpleType */
-	{3, 11},
-	/* qnameID == 25: {http://www.w3.org/2001/XMLSchema}anyType */
-	{3, 12},
-	/* qnameID == 26: {http://www.w3.org/2001/XMLSchema}anyURI */
-	{3, 13},
-	/* qnameID == 27: {http://www.w3.org/2001/XMLSchema}base64Binary */
-	{3, 14},
-	/* qnameID == 28: {http://www.w3.org/2001/XMLSchema}boolean */
-	{3, 15},
-	/* qnameID == 29: {http://www.w3.org/2001/XMLSchema}byte */
-	{3, 16},
-	/* qnameID == 30: {http://www.w3.org/2001/XMLSchema}date */
-	{3, 17},
-	/* qnameID == 31: {http://www.w3.org/2001/XMLSchema}dateTime */
-	{3, 18},
-	/* qnameID == 32: {http://www.w3.org/2001/XMLSchema}decimal */
-	{3, 19},
-	/* qnameID == 33: {http://www.w3.org/2001/XMLSchema}double */
-	{3, 20},
-	/* qnameID == 34: {http://www.w3.org/2001/XMLSchema}duration */
-	{3, 21},
-	/* qnameID == 35: {http://www.w3.org/2001/XMLSchema}float */
-	{3, 22},
-	/* qnameID == 36: {http://www.w3.org/2001/XMLSchema}gDay */
-	{3, 23},
-	/* qnameID == 37: {http://www.w3.org/2001/XMLSchema}gMonth */
-	{3, 24},
-	/* qnameID == 38: {http://www.w3.org/2001/XMLSchema}gMonthDay */
-	{3, 25},
-	/* qnameID == 39: {http://www.w3.org/2001/XMLSchema}gYear */
-	{3, 26},
-	/* qnameID == 40: {http://www.w3.org/2001/XMLSchema}gYearMonth */
-	{3, 27},
-	/* qnameID == 41: {http://www.w3.org/2001/XMLSchema}hexBinary */
-	{3, 28},
-	/* qnameID == 42: {http://www.w3.org/2001/XMLSchema}int */
-	{3, 29},
-	/* qnameID == 43: {http://www.w3.org/2001/XMLSchema}integer */
-	{3, 30},
-	/* qnameID == 44: {http://www.w3.org/2001/XMLSchema}language */
-	{3, 31},
-	/* qnameID == 45: {http://www.w3.org/2001/XMLSchema}long */
-	{3, 32},
-	/* qnameID == 46: {http://www.w3.org/2001/XMLSchema}negativeInteger */
-	{3, 33},
-	/* qnameID == 47: {http://www.w3.org/2001/XMLSchema}nonNegativeInteger */
-	{3, 34},
-	/* qnameID == 48: {http://www.w3.org/2001/XMLSchema}nonPositiveInteger */
-	{3, 35},
-	/* qnameID == 49: {http://www.w3.org/2001/XMLSchema}normalizedString */
-	{3, 36},
-	/* qnameID == 50: {http://www.w3.org/2001/XMLSchema}positiveInteger */
-	{3, 37},
-	/* qnameID == 51: {http://www.w3.org/2001/XMLSchema}short */
-	{3, 38},
-	/* qnameID == 52: {http://www.w3.org/2001/XMLSchema}string */
-	{3, 39},
-	/* qnameID == 53: {http://www.w3.org/2001/XMLSchema}time */
-	{3, 40},
-	/* qnameID == 54: {http://www.w3.org/2001/XMLSchema}token */
-	{3, 41},
-	/* qnameID == 55: {http://www.w3.org/2001/XMLSchema}unsignedByte */
-	{3, 42},
-	/* qnameID == 56: {http://www.w3.org/2001/XMLSchema}unsignedInt */
-	{3, 43},
-	/* qnameID == 57: {http://www.w3.org/2001/XMLSchema}unsignedLong */
-	{3, 44},
-	/* qnameID == 58: {http://www.w3.org/2001/XMLSchema}unsignedShort */
-	{3, 45},
-	/* qnameID == 59: {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod */
-	{4, 0},
-	/* qnameID == 60: {http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethodType */
-	{4, 1},
-	/* qnameID == 61: {http://www.w3.org/2000/09/xmldsig#}CryptoBinary */
-	{4, 2},
-	/* qnameID == 62: {http://www.w3.org/2000/09/xmldsig#}DSAKeyValue */
-	{4, 3},
-	/* qnameID == 63: {http://www.w3.org/2000/09/xmldsig#}DSAKeyValueType */
-	{4, 4},
-	/* qnameID == 64: {http://www.w3.org/2000/09/xmldsig#}DigestMethod */
-	{4, 5},
-	/* qnameID == 65: {http://www.w3.org/2000/09/xmldsig#}DigestMethodType */
-	{4, 6},
-	/* qnameID == 66: {http://www.w3.org/2000/09/xmldsig#}DigestValue */
-	{4, 7},
-	/* qnameID == 67: {http://www.w3.org/2000/09/xmldsig#}DigestValueType */
-	{4, 8},
-	/* qnameID == 68: {http://www.w3.org/2000/09/xmldsig#}Exponent */
-	{4, 9},
-	/* qnameID == 69: {http://www.w3.org/2000/09/xmldsig#}G */
-	{4, 10},
-	/* qnameID == 70: {http://www.w3.org/2000/09/xmldsig#}HMACOutputLength */
-	{4, 11},
-	/* qnameID == 71: {http://www.w3.org/2000/09/xmldsig#}HMACOutputLengthType */
-	{4, 12},
-	/* qnameID == 72: {http://www.w3.org/2000/09/xmldsig#}J */
-	{4, 13},
-	/* qnameID == 73: {http://www.w3.org/2000/09/xmldsig#}KeyInfo */
-	{4, 14},
-	/* qnameID == 74: {http://www.w3.org/2000/09/xmldsig#}KeyInfoType */
-	{4, 15},
-	/* qnameID == 75: {http://www.w3.org/2000/09/xmldsig#}KeyName */
-	{4, 16},
-	/* qnameID == 76: {http://www.w3.org/2000/09/xmldsig#}KeyValue */
-	{4, 17},
-	/* qnameID == 77: {http://www.w3.org/2000/09/xmldsig#}KeyValueType */
-	{4, 18},
-	/* qnameID == 78: {http://www.w3.org/2000/09/xmldsig#}Manifest */
-	{4, 19},
-	/* qnameID == 79: {http://www.w3.org/2000/09/xmldsig#}ManifestType */
-	{4, 20},
-	/* qnameID == 80: {http://www.w3.org/2000/09/xmldsig#}MgmtData */
-	{4, 21},
-	/* qnameID == 81: {http://www.w3.org/2000/09/xmldsig#}Modulus */
-	{4, 22},
-	/* qnameID == 82: {http://www.w3.org/2000/09/xmldsig#}Object */
-	{4, 23},
-	/* qnameID == 83: {http://www.w3.org/2000/09/xmldsig#}ObjectType */
-	{4, 24},
-	/* qnameID == 84: {http://www.w3.org/2000/09/xmldsig#}P */
-	{4, 25},
-	/* qnameID == 85: {http://www.w3.org/2000/09/xmldsig#}PGPData */
-	{4, 26},
-	/* qnameID == 86: {http://www.w3.org/2000/09/xmldsig#}PGPDataType */
-	{4, 27},
-	/* qnameID == 87: {http://www.w3.org/2000/09/xmldsig#}PGPKeyID */
-	{4, 28},
-	/* qnameID == 88: {http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket */
-	{4, 29},
-	/* qnameID == 89: {http://www.w3.org/2000/09/xmldsig#}PgenCounter */
-	{4, 30},
-	/* qnameID == 90: {http://www.w3.org/2000/09/xmldsig#}Q */
-	{4, 31},
-	/* qnameID == 91: {http://www.w3.org/2000/09/xmldsig#}RSAKeyValue */
-	{4, 32},
-	/* qnameID == 92: {http://www.w3.org/2000/09/xmldsig#}RSAKeyValueType */
-	{4, 33},
-	/* qnameID == 93: {http://www.w3.org/2000/09/xmldsig#}Reference */
-	{4, 34},
-	/* qnameID == 94: {http://www.w3.org/2000/09/xmldsig#}ReferenceType */
-	{4, 35},
-	/* qnameID == 95: {http://www.w3.org/2000/09/xmldsig#}RetrievalMethod */
-	{4, 36},
-	/* qnameID == 96: {http://www.w3.org/2000/09/xmldsig#}RetrievalMethodType */
-	{4, 37},
-	/* qnameID == 97: {http://www.w3.org/2000/09/xmldsig#}SPKIData */
-	{4, 38},
-	/* qnameID == 98: {http://www.w3.org/2000/09/xmldsig#}SPKIDataType */
-	{4, 39},
-	/* qnameID == 99: {http://www.w3.org/2000/09/xmldsig#}SPKISexp */
-	{4, 40},
-	/* qnameID == 100: {http://www.w3.org/2000/09/xmldsig#}Seed */
-	{4, 41},
-	/* qnameID == 101: {http://www.w3.org/2000/09/xmldsig#}Signature */
-	{4, 42},
-	/* qnameID == 102: {http://www.w3.org/2000/09/xmldsig#}SignatureMethod */
-	{4, 43},
-	/* qnameID == 103: {http://www.w3.org/2000/09/xmldsig#}SignatureMethodType */
-	{4, 44},
-	/* qnameID == 104: {http://www.w3.org/2000/09/xmldsig#}SignatureProperties */
-	{4, 45},
-	/* qnameID == 105: {http://www.w3.org/2000/09/xmldsig#}SignaturePropertiesType */
-	{4, 46},
-	/* qnameID == 106: {http://www.w3.org/2000/09/xmldsig#}SignatureProperty */
-	{4, 47},
-	/* qnameID == 107: {http://www.w3.org/2000/09/xmldsig#}SignaturePropertyType */
-	{4, 48},
-	/* qnameID == 108: {http://www.w3.org/2000/09/xmldsig#}SignatureType */
-	{4, 49},
-	/* qnameID == 109: {http://www.w3.org/2000/09/xmldsig#}SignatureValue */
-	{4, 50},
-	/* qnameID == 110: {http://www.w3.org/2000/09/xmldsig#}SignatureValueType */
-	{4, 51},
-	/* qnameID == 111: {http://www.w3.org/2000/09/xmldsig#}SignedInfo */
-	{4, 52},
-	/* qnameID == 112: {http://www.w3.org/2000/09/xmldsig#}SignedInfoType */
-	{4, 53},
-	/* qnameID == 113: {http://www.w3.org/2000/09/xmldsig#}Transform */
-	{4, 54},
-	/* qnameID == 114: {http://www.w3.org/2000/09/xmldsig#}TransformType */
-	{4, 55},
-	/* qnameID == 115: {http://www.w3.org/2000/09/xmldsig#}Transforms */
-	{4, 56},
-	/* qnameID == 116: {http://www.w3.org/2000/09/xmldsig#}TransformsType */
-	{4, 57},
-	/* qnameID == 117: {http://www.w3.org/2000/09/xmldsig#}X509CRL */
-	{4, 58},
-	/* qnameID == 118: {http://www.w3.org/2000/09/xmldsig#}X509Certificate */
-	{4, 59},
-	/* qnameID == 119: {http://www.w3.org/2000/09/xmldsig#}X509Data */
-	{4, 60},
-	/* qnameID == 120: {http://www.w3.org/2000/09/xmldsig#}X509DataType */
-	{4, 61},
-	/* qnameID == 121: {http://www.w3.org/2000/09/xmldsig#}X509IssuerName */
-	{4, 62},
-	/* qnameID == 122: {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial */
-	{4, 63},
-	/* qnameID == 123: {http://www.w3.org/2000/09/xmldsig#}X509IssuerSerialType */
-	{4, 64},
-	/* qnameID == 124: {http://www.w3.org/2000/09/xmldsig#}X509SKI */
-	{4, 65},
-	/* qnameID == 125: {http://www.w3.org/2000/09/xmldsig#}X509SerialNumber */
-	{4, 66},
-	/* qnameID == 126: {http://www.w3.org/2000/09/xmldsig#}X509SubjectName */
-	{4, 67},
-	/* qnameID == 127: {http://www.w3.org/2000/09/xmldsig#}XPath */
-	{4, 68},
-	/* qnameID == 128: {http://www.w3.org/2000/09/xmldsig#}Y */
-	{4, 69},
-	/* qnameID == 129: {urn:iso:15118:2:2013:MsgBody}AC_EVSEStatus */
-	{5, 0},
-	/* qnameID == 130: {urn:iso:15118:2:2013:MsgBody}AuthorizationReq */
-	{5, 1},
-	/* qnameID == 131: {urn:iso:15118:2:2013:MsgBody}AuthorizationReqType */
-	{5, 2},
-	/* qnameID == 132: {urn:iso:15118:2:2013:MsgBody}AuthorizationRes */
-	{5, 3},
-	/* qnameID == 133: {urn:iso:15118:2:2013:MsgBody}AuthorizationResType */
-	{5, 4},
-	/* qnameID == 134: {urn:iso:15118:2:2013:MsgBody}BodyBaseType */
-	{5, 5},
-	/* qnameID == 135: {urn:iso:15118:2:2013:MsgBody}BodyElement */
-	{5, 6},
-	/* qnameID == 136: {urn:iso:15118:2:2013:MsgBody}BodyType */
-	{5, 7},
-	/* qnameID == 137: {urn:iso:15118:2:2013:MsgBody}BulkChargingComplete */
-	{5, 8},
-	/* qnameID == 138: {urn:iso:15118:2:2013:MsgBody}CableCheckReq */
-	{5, 9},
-	/* qnameID == 139: {urn:iso:15118:2:2013:MsgBody}CableCheckReqType */
-	{5, 10},
-	/* qnameID == 140: {urn:iso:15118:2:2013:MsgBody}CableCheckRes */
-	{5, 11},
-	/* qnameID == 141: {urn:iso:15118:2:2013:MsgBody}CableCheckResType */
-	{5, 12},
-	/* qnameID == 142: {urn:iso:15118:2:2013:MsgBody}CertificateInstallationReq */
-	{5, 13},
-	/* qnameID == 143: {urn:iso:15118:2:2013:MsgBody}CertificateInstallationReqType */
-	{5, 14},
-	/* qnameID == 144: {urn:iso:15118:2:2013:MsgBody}CertificateInstallationRes */
-	{5, 15},
-	/* qnameID == 145: {urn:iso:15118:2:2013:MsgBody}CertificateInstallationResType */
-	{5, 16},
-	/* qnameID == 146: {urn:iso:15118:2:2013:MsgBody}CertificateUpdateReq */
-	{5, 17},
-	/* qnameID == 147: {urn:iso:15118:2:2013:MsgBody}CertificateUpdateReqType */
-	{5, 18},
-	/* qnameID == 148: {urn:iso:15118:2:2013:MsgBody}CertificateUpdateRes */
-	{5, 19},
-	/* qnameID == 149: {urn:iso:15118:2:2013:MsgBody}CertificateUpdateResType */
-	{5, 20},
-	/* qnameID == 150: {urn:iso:15118:2:2013:MsgBody}ChargeParameterDiscoveryReq */
-	{5, 21},
-	/* qnameID == 151: {urn:iso:15118:2:2013:MsgBody}ChargeParameterDiscoveryReqType */
-	{5, 22},
-	/* qnameID == 152: {urn:iso:15118:2:2013:MsgBody}ChargeParameterDiscoveryRes */
-	{5, 23},
-	/* qnameID == 153: {urn:iso:15118:2:2013:MsgBody}ChargeParameterDiscoveryResType */
-	{5, 24},
-	/* qnameID == 154: {urn:iso:15118:2:2013:MsgBody}ChargeProgress */
-	{5, 25},
-	/* qnameID == 155: {urn:iso:15118:2:2013:MsgBody}ChargeService */
-	{5, 26},
-	/* qnameID == 156: {urn:iso:15118:2:2013:MsgBody}ChargingComplete */
-	{5, 27},
-	/* qnameID == 157: {urn:iso:15118:2:2013:MsgBody}ChargingProfile */
-	{5, 28},
-	/* qnameID == 158: {urn:iso:15118:2:2013:MsgBody}ChargingSession */
-	{5, 29},
-	/* qnameID == 159: {urn:iso:15118:2:2013:MsgBody}ChargingStatusReq */
-	{5, 30},
-	/* qnameID == 160: {urn:iso:15118:2:2013:MsgBody}ChargingStatusReqType */
-	{5, 31},
-	/* qnameID == 161: {urn:iso:15118:2:2013:MsgBody}ChargingStatusRes */
-	{5, 32},
-	/* qnameID == 162: {urn:iso:15118:2:2013:MsgBody}ChargingStatusResType */
-	{5, 33},
-	/* qnameID == 163: {urn:iso:15118:2:2013:MsgBody}ContractSignatureCertChain */
-	{5, 34},
-	/* qnameID == 164: {urn:iso:15118:2:2013:MsgBody}ContractSignatureEncryptedPrivateKey */
-	{5, 35},
-	/* qnameID == 165: {urn:iso:15118:2:2013:MsgBody}CurrentDemandReq */
-	{5, 36},
-	/* qnameID == 166: {urn:iso:15118:2:2013:MsgBody}CurrentDemandReqType */
-	{5, 37},
-	/* qnameID == 167: {urn:iso:15118:2:2013:MsgBody}CurrentDemandRes */
-	{5, 38},
-	/* qnameID == 168: {urn:iso:15118:2:2013:MsgBody}CurrentDemandResType */
-	{5, 39},
-	/* qnameID == 169: {urn:iso:15118:2:2013:MsgBody}DC_EVSEStatus */
-	{5, 40},
-	/* qnameID == 170: {urn:iso:15118:2:2013:MsgBody}DC_EVStatus */
-	{5, 41},
-	/* qnameID == 171: {urn:iso:15118:2:2013:MsgBody}DHpublickey */
-	{5, 42},
-	/* qnameID == 172: {urn:iso:15118:2:2013:MsgBody}EVCCID */
-	{5, 43},
-	/* qnameID == 173: {urn:iso:15118:2:2013:MsgBody}EVMaximumCurrentLimit */
-	{5, 44},
-	/* qnameID == 174: {urn:iso:15118:2:2013:MsgBody}EVMaximumPowerLimit */
-	{5, 45},
-	/* qnameID == 175: {urn:iso:15118:2:2013:MsgBody}EVMaximumVoltageLimit */
-	{5, 46},
-	/* qnameID == 176: {urn:iso:15118:2:2013:MsgBody}EVSECurrentLimitAchieved */
-	{5, 47},
-	/* qnameID == 177: {urn:iso:15118:2:2013:MsgBody}EVSEID */
-	{5, 48},
-	/* qnameID == 178: {urn:iso:15118:2:2013:MsgBody}EVSEMaxCurrent */
-	{5, 49},
-	/* qnameID == 179: {urn:iso:15118:2:2013:MsgBody}EVSEMaximumCurrentLimit */
-	{5, 50},
-	/* qnameID == 180: {urn:iso:15118:2:2013:MsgBody}EVSEMaximumPowerLimit */
-	{5, 51},
-	/* qnameID == 181: {urn:iso:15118:2:2013:MsgBody}EVSEMaximumVoltageLimit */
-	{5, 52},
-	/* qnameID == 182: {urn:iso:15118:2:2013:MsgBody}EVSEPowerLimitAchieved */
-	{5, 53},
-	/* qnameID == 183: {urn:iso:15118:2:2013:MsgBody}EVSEPresentCurrent */
-	{5, 54},
-	/* qnameID == 184: {urn:iso:15118:2:2013:MsgBody}EVSEPresentVoltage */
-	{5, 55},
-	/* qnameID == 185: {urn:iso:15118:2:2013:MsgBody}EVSEProcessing */
-	{5, 56},
-	/* qnameID == 186: {urn:iso:15118:2:2013:MsgBody}EVSETimeStamp */
-	{5, 57},
-	/* qnameID == 187: {urn:iso:15118:2:2013:MsgBody}EVSEVoltageLimitAchieved */
-	{5, 58},
-	/* qnameID == 188: {urn:iso:15118:2:2013:MsgBody}EVTargetCurrent */
-	{5, 59},
-	/* qnameID == 189: {urn:iso:15118:2:2013:MsgBody}EVTargetVoltage */
-	{5, 60},
-	/* qnameID == 190: {urn:iso:15118:2:2013:MsgBody}GenChallenge */
-	{5, 61},
-	/* qnameID == 191: {urn:iso:15118:2:2013:MsgBody}Id */
-	{5, 62},
-	/* qnameID == 192: {urn:iso:15118:2:2013:MsgBody}ListOfRootCertificateIDs */
-	{5, 63},
-	/* qnameID == 193: {urn:iso:15118:2:2013:MsgBody}MaxEntriesSAScheduleTuple */
-	{5, 64},
-	/* qnameID == 194: {urn:iso:15118:2:2013:MsgBody}MeterInfo */
-	{5, 65},
-	/* qnameID == 195: {urn:iso:15118:2:2013:MsgBody}MeteringReceiptReq */
-	{5, 66},
-	/* qnameID == 196: {urn:iso:15118:2:2013:MsgBody}MeteringReceiptReqType */
-	{5, 67},
-	/* qnameID == 197: {urn:iso:15118:2:2013:MsgBody}MeteringReceiptRes */
-	{5, 68},
-	/* qnameID == 198: {urn:iso:15118:2:2013:MsgBody}MeteringReceiptResType */
-	{5, 69},
-	/* qnameID == 199: {urn:iso:15118:2:2013:MsgBody}OEMProvisioningCert */
-	{5, 70},
-	/* qnameID == 200: {urn:iso:15118:2:2013:MsgBody}PaymentDetailsReq */
-	{5, 71},
-	/* qnameID == 201: {urn:iso:15118:2:2013:MsgBody}PaymentDetailsReqType */
-	{5, 72},
-	/* qnameID == 202: {urn:iso:15118:2:2013:MsgBody}PaymentDetailsRes */
-	{5, 73},
-	/* qnameID == 203: {urn:iso:15118:2:2013:MsgBody}PaymentDetailsResType */
-	{5, 74},
-	/* qnameID == 204: {urn:iso:15118:2:2013:MsgBody}PaymentOptionList */
-	{5, 75},
-	/* qnameID == 205: {urn:iso:15118:2:2013:MsgBody}PaymentServiceSelectionReq */
-	{5, 76},
-	/* qnameID == 206: {urn:iso:15118:2:2013:MsgBody}PaymentServiceSelectionReqType */
-	{5, 77},
-	/* qnameID == 207: {urn:iso:15118:2:2013:MsgBody}PaymentServiceSelectionRes */
-	{5, 78},
-	/* qnameID == 208: {urn:iso:15118:2:2013:MsgBody}PaymentServiceSelectionResType */
-	{5, 79},
-	/* qnameID == 209: {urn:iso:15118:2:2013:MsgBody}PowerDeliveryReq */
-	{5, 80},
-	/* qnameID == 210: {urn:iso:15118:2:2013:MsgBody}PowerDeliveryReqType */
-	{5, 81},
-	/* qnameID == 211: {urn:iso:15118:2:2013:MsgBody}PowerDeliveryRes */
-	{5, 82},
-	/* qnameID == 212: {urn:iso:15118:2:2013:MsgBody}PowerDeliveryResType */
-	{5, 83},
-	/* qnameID == 213: {urn:iso:15118:2:2013:MsgBody}PreChargeReq */
-	{5, 84},
-	/* qnameID == 214: {urn:iso:15118:2:2013:MsgBody}PreChargeReqType */
-	{5, 85},
-	/* qnameID == 215: {urn:iso:15118:2:2013:MsgBody}PreChargeRes */
-	{5, 86},
-	/* qnameID == 216: {urn:iso:15118:2:2013:MsgBody}PreChargeResType */
-	{5, 87},
-	/* qnameID == 217: {urn:iso:15118:2:2013:MsgBody}ReceiptRequired */
-	{5, 88},
-	/* qnameID == 218: {urn:iso:15118:2:2013:MsgBody}RemainingTimeToBulkSoC */
-	{5, 89},
-	/* qnameID == 219: {urn:iso:15118:2:2013:MsgBody}RemainingTimeToFullSoC */
-	{5, 90},
-	/* qnameID == 220: {urn:iso:15118:2:2013:MsgBody}RequestedEnergyTransferMode */
-	{5, 91},
-	/* qnameID == 221: {urn:iso:15118:2:2013:MsgBody}ResponseCode */
-	{5, 92},
-	/* qnameID == 222: {urn:iso:15118:2:2013:MsgBody}RetryCounter */
-	{5, 93},
-	/* qnameID == 223: {urn:iso:15118:2:2013:MsgBody}SAProvisioningCertificateChain */
-	{5, 94},
-	/* qnameID == 224: {urn:iso:15118:2:2013:MsgBody}SAScheduleTupleID */
-	{5, 95},
-	/* qnameID == 225: {urn:iso:15118:2:2013:MsgBody}SelectedPaymentOption */
-	{5, 96},
-	/* qnameID == 226: {urn:iso:15118:2:2013:MsgBody}SelectedServiceList */
-	{5, 97},
-	/* qnameID == 227: {urn:iso:15118:2:2013:MsgBody}ServiceCategory */
-	{5, 98},
-	/* qnameID == 228: {urn:iso:15118:2:2013:MsgBody}ServiceDetailReq */
-	{5, 99},
-	/* qnameID == 229: {urn:iso:15118:2:2013:MsgBody}ServiceDetailReqType */
-	{5, 100},
-	/* qnameID == 230: {urn:iso:15118:2:2013:MsgBody}ServiceDetailRes */
-	{5, 101},
-	/* qnameID == 231: {urn:iso:15118:2:2013:MsgBody}ServiceDetailResType */
-	{5, 102},
-	/* qnameID == 232: {urn:iso:15118:2:2013:MsgBody}ServiceDiscoveryReq */
-	{5, 103},
-	/* qnameID == 233: {urn:iso:15118:2:2013:MsgBody}ServiceDiscoveryReqType */
-	{5, 104},
-	/* qnameID == 234: {urn:iso:15118:2:2013:MsgBody}ServiceDiscoveryRes */
-	{5, 105},
-	/* qnameID == 235: {urn:iso:15118:2:2013:MsgBody}ServiceDiscoveryResType */
-	{5, 106},
-	/* qnameID == 236: {urn:iso:15118:2:2013:MsgBody}ServiceID */
-	{5, 107},
-	/* qnameID == 237: {urn:iso:15118:2:2013:MsgBody}ServiceList */
-	{5, 108},
-	/* qnameID == 238: {urn:iso:15118:2:2013:MsgBody}ServiceParameterList */
-	{5, 109},
-	/* qnameID == 239: {urn:iso:15118:2:2013:MsgBody}ServiceScope */
-	{5, 110},
-	/* qnameID == 240: {urn:iso:15118:2:2013:MsgBody}SessionID */
-	{5, 111},
-	/* qnameID == 241: {urn:iso:15118:2:2013:MsgBody}SessionSetupReq */
-	{5, 112},
-	/* qnameID == 242: {urn:iso:15118:2:2013:MsgBody}SessionSetupReqType */
-	{5, 113},
-	/* qnameID == 243: {urn:iso:15118:2:2013:MsgBody}SessionSetupRes */
-	{5, 114},
-	/* qnameID == 244: {urn:iso:15118:2:2013:MsgBody}SessionSetupResType */
-	{5, 115},
-	/* qnameID == 245: {urn:iso:15118:2:2013:MsgBody}SessionStopReq */
-	{5, 116},
-	/* qnameID == 246: {urn:iso:15118:2:2013:MsgBody}SessionStopReqType */
-	{5, 117},
-	/* qnameID == 247: {urn:iso:15118:2:2013:MsgBody}SessionStopRes */
-	{5, 118},
-	/* qnameID == 248: {urn:iso:15118:2:2013:MsgBody}SessionStopResType */
-	{5, 119},
-	/* qnameID == 249: {urn:iso:15118:2:2013:MsgBody}WeldingDetectionReq */
-	{5, 120},
-	/* qnameID == 250: {urn:iso:15118:2:2013:MsgBody}WeldingDetectionReqType */
-	{5, 121},
-	/* qnameID == 251: {urn:iso:15118:2:2013:MsgBody}WeldingDetectionRes */
-	{5, 122},
-	/* qnameID == 252: {urn:iso:15118:2:2013:MsgBody}WeldingDetectionResType */
-	{5, 123},
-	/* qnameID == 253: {urn:iso:15118:2:2013:MsgBody}eMAID */
-	{5, 124},
-	/* qnameID == 254: {urn:iso:15118:2:2013:MsgDataTypes}AC_EVChargeParameter */
-	{6, 0},
-	/* qnameID == 255: {urn:iso:15118:2:2013:MsgDataTypes}AC_EVChargeParameterType */
-	{6, 1},
-	/* qnameID == 256: {urn:iso:15118:2:2013:MsgDataTypes}AC_EVSEChargeParameter */
-	{6, 2},
-	/* qnameID == 257: {urn:iso:15118:2:2013:MsgDataTypes}AC_EVSEChargeParameterType */
-	{6, 3},
-	/* qnameID == 258: {urn:iso:15118:2:2013:MsgDataTypes}AC_EVSEStatus */
-	{6, 4},
-	/* qnameID == 259: {urn:iso:15118:2:2013:MsgDataTypes}AC_EVSEStatusType */
-	{6, 5},
-	/* qnameID == 260: {urn:iso:15118:2:2013:MsgDataTypes}BulkChargingComplete */
-	{6, 6},
-	/* qnameID == 261: {urn:iso:15118:2:2013:MsgDataTypes}BulkSOC */
-	{6, 7},
-	/* qnameID == 262: {urn:iso:15118:2:2013:MsgDataTypes}Certificate */
-	{6, 8},
-	/* qnameID == 263: {urn:iso:15118:2:2013:MsgDataTypes}CertificateChainType */
-	{6, 9},
-	/* qnameID == 264: {urn:iso:15118:2:2013:MsgDataTypes}ChargeServiceType */
-	{6, 10},
-	/* qnameID == 265: {urn:iso:15118:2:2013:MsgDataTypes}ChargingComplete */
-	{6, 11},
-	/* qnameID == 266: {urn:iso:15118:2:2013:MsgDataTypes}ChargingProfileEntryMaxNumberOfPhasesInUse */
-	{6, 12},
-	/* qnameID == 267: {urn:iso:15118:2:2013:MsgDataTypes}ChargingProfileEntryMaxPower */
-	{6, 13},
-	/* qnameID == 268: {urn:iso:15118:2:2013:MsgDataTypes}ChargingProfileEntryStart */
-	{6, 14},
-	/* qnameID == 269: {urn:iso:15118:2:2013:MsgDataTypes}ChargingProfileType */
-	{6, 15},
-	/* qnameID == 270: {urn:iso:15118:2:2013:MsgDataTypes}ConsumptionCost */
-	{6, 16},
-	/* qnameID == 271: {urn:iso:15118:2:2013:MsgDataTypes}ConsumptionCostType */
-	{6, 17},
-	/* qnameID == 272: {urn:iso:15118:2:2013:MsgDataTypes}ContractSignatureEncryptedPrivateKeyType */
-	{6, 18},
-	/* qnameID == 273: {urn:iso:15118:2:2013:MsgDataTypes}Cost */
-	{6, 19},
-	/* qnameID == 274: {urn:iso:15118:2:2013:MsgDataTypes}CostType */
-	{6, 20},
-	/* qnameID == 275: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVChargeParameter */
-	{6, 21},
-	/* qnameID == 276: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVChargeParameterType */
-	{6, 22},
-	/* qnameID == 277: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVErrorCodeType */
-	{6, 23},
-	/* qnameID == 278: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVPowerDeliveryParameter */
-	{6, 24},
-	/* qnameID == 279: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVPowerDeliveryParameterType */
-	{6, 25},
-	/* qnameID == 280: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEChargeParameter */
-	{6, 26},
-	/* qnameID == 281: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEChargeParameterType */
-	{6, 27},
-	/* qnameID == 282: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEStatus */
-	{6, 28},
-	/* qnameID == 283: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEStatusCodeType */
-	{6, 29},
-	/* qnameID == 284: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVSEStatusType */
-	{6, 30},
-	/* qnameID == 285: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVStatus */
-	{6, 31},
-	/* qnameID == 286: {urn:iso:15118:2:2013:MsgDataTypes}DC_EVStatusType */
-	{6, 32},
-	/* qnameID == 287: {urn:iso:15118:2:2013:MsgDataTypes}DepartureTime */
-	{6, 33},
-	/* qnameID == 288: {urn:iso:15118:2:2013:MsgDataTypes}DiffieHellmanPublickeyType */
-	{6, 34},
-	/* qnameID == 289: {urn:iso:15118:2:2013:MsgDataTypes}EAmount */
-	{6, 35},
-	/* qnameID == 290: {urn:iso:15118:2:2013:MsgDataTypes}EMAIDType */
-	{6, 36},
-	/* qnameID == 291: {urn:iso:15118:2:2013:MsgDataTypes}EPriceLevel */
-	{6, 37},
-	/* qnameID == 292: {urn:iso:15118:2:2013:MsgDataTypes}EVChargeParameter */
-	{6, 38},
-	/* qnameID == 293: {urn:iso:15118:2:2013:MsgDataTypes}EVChargeParameterType */
-	{6, 39},
-	/* qnameID == 294: {urn:iso:15118:2:2013:MsgDataTypes}EVEnergyCapacity */
-	{6, 40},
-	/* qnameID == 295: {urn:iso:15118:2:2013:MsgDataTypes}EVEnergyRequest */
-	{6, 41},
-	/* qnameID == 296: {urn:iso:15118:2:2013:MsgDataTypes}EVErrorCode */
-	{6, 42},
-	/* qnameID == 297: {urn:iso:15118:2:2013:MsgDataTypes}EVMaxCurrent */
-	{6, 43},
-	/* qnameID == 298: {urn:iso:15118:2:2013:MsgDataTypes}EVMaxVoltage */
-	{6, 44},
-	/* qnameID == 299: {urn:iso:15118:2:2013:MsgDataTypes}EVMaximumCurrentLimit */
-	{6, 45},
-	/* qnameID == 300: {urn:iso:15118:2:2013:MsgDataTypes}EVMaximumPowerLimit */
-	{6, 46},
-	/* qnameID == 301: {urn:iso:15118:2:2013:MsgDataTypes}EVMaximumVoltageLimit */
-	{6, 47},
-	/* qnameID == 302: {urn:iso:15118:2:2013:MsgDataTypes}EVMinCurrent */
-	{6, 48},
-	/* qnameID == 303: {urn:iso:15118:2:2013:MsgDataTypes}EVPowerDeliveryParameter */
-	{6, 49},
-	/* qnameID == 304: {urn:iso:15118:2:2013:MsgDataTypes}EVPowerDeliveryParameterType */
-	{6, 50},
-	/* qnameID == 305: {urn:iso:15118:2:2013:MsgDataTypes}EVRESSSOC */
-	{6, 51},
-	/* qnameID == 306: {urn:iso:15118:2:2013:MsgDataTypes}EVReady */
-	{6, 52},
-	/* qnameID == 307: {urn:iso:15118:2:2013:MsgDataTypes}EVSEChargeParameter */
-	{6, 53},
-	/* qnameID == 308: {urn:iso:15118:2:2013:MsgDataTypes}EVSEChargeParameterType */
-	{6, 54},
-	/* qnameID == 309: {urn:iso:15118:2:2013:MsgDataTypes}EVSECurrentRegulationTolerance */
-	{6, 55},
-	/* qnameID == 310: {urn:iso:15118:2:2013:MsgDataTypes}EVSEEnergyToBeDelivered */
-	{6, 56},
-	/* qnameID == 311: {urn:iso:15118:2:2013:MsgDataTypes}EVSEIsolationStatus */
-	{6, 57},
-	/* qnameID == 312: {urn:iso:15118:2:2013:MsgDataTypes}EVSEMaxCurrent */
-	{6, 58},
-	/* qnameID == 313: {urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumCurrentLimit */
-	{6, 59},
-	/* qnameID == 314: {urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumPowerLimit */
-	{6, 60},
-	/* qnameID == 315: {urn:iso:15118:2:2013:MsgDataTypes}EVSEMaximumVoltageLimit */
-	{6, 61},
-	/* qnameID == 316: {urn:iso:15118:2:2013:MsgDataTypes}EVSEMinimumCurrentLimit */
-	{6, 62},
-	/* qnameID == 317: {urn:iso:15118:2:2013:MsgDataTypes}EVSEMinimumVoltageLimit */
-	{6, 63},
-	/* qnameID == 318: {urn:iso:15118:2:2013:MsgDataTypes}EVSENominalVoltage */
-	{6, 64},
-	/* qnameID == 319: {urn:iso:15118:2:2013:MsgDataTypes}EVSENotification */
-	{6, 65},
-	/* qnameID == 320: {urn:iso:15118:2:2013:MsgDataTypes}EVSENotificationType */
-	{6, 66},
-	/* qnameID == 321: {urn:iso:15118:2:2013:MsgDataTypes}EVSEPeakCurrentRipple */
-	{6, 67},
-	/* qnameID == 322: {urn:iso:15118:2:2013:MsgDataTypes}EVSEProcessingType */
-	{6, 68},
-	/* qnameID == 323: {urn:iso:15118:2:2013:MsgDataTypes}EVSEStatus */
-	{6, 69},
-	/* qnameID == 324: {urn:iso:15118:2:2013:MsgDataTypes}EVSEStatusCode */
-	{6, 70},
-	/* qnameID == 325: {urn:iso:15118:2:2013:MsgDataTypes}EVSEStatusType */
-	{6, 71},
-	/* qnameID == 326: {urn:iso:15118:2:2013:MsgDataTypes}EVStatus */
-	{6, 72},
-	/* qnameID == 327: {urn:iso:15118:2:2013:MsgDataTypes}EVStatusType */
-	{6, 73},
-	/* qnameID == 328: {urn:iso:15118:2:2013:MsgDataTypes}EnergyTransferMode */
-	{6, 74},
-	/* qnameID == 329: {urn:iso:15118:2:2013:MsgDataTypes}EnergyTransferModeType */
-	{6, 75},
-	/* qnameID == 330: {urn:iso:15118:2:2013:MsgDataTypes}Entry */
-	{6, 76},
-	/* qnameID == 331: {urn:iso:15118:2:2013:MsgDataTypes}EntryType */
-	{6, 77},
-	/* qnameID == 332: {urn:iso:15118:2:2013:MsgDataTypes}FaultCode */
-	{6, 78},
-	/* qnameID == 333: {urn:iso:15118:2:2013:MsgDataTypes}FaultMsg */
-	{6, 79},
-	/* qnameID == 334: {urn:iso:15118:2:2013:MsgDataTypes}FreeService */
-	{6, 80},
-	/* qnameID == 335: {urn:iso:15118:2:2013:MsgDataTypes}FullSOC */
-	{6, 81},
-	/* qnameID == 336: {urn:iso:15118:2:2013:MsgDataTypes}Id */
-	{6, 82},
-	/* qnameID == 337: {urn:iso:15118:2:2013:MsgDataTypes}IntervalType */
-	{6, 83},
-	/* qnameID == 338: {urn:iso:15118:2:2013:MsgDataTypes}ListOfRootCertificateIDsType */
-	{6, 84},
-	/* qnameID == 339: {urn:iso:15118:2:2013:MsgDataTypes}MeterID */
-	{6, 85},
-	/* qnameID == 340: {urn:iso:15118:2:2013:MsgDataTypes}MeterInfoType */
-	{6, 86},
-	/* qnameID == 341: {urn:iso:15118:2:2013:MsgDataTypes}MeterReading */
-	{6, 87},
-	/* qnameID == 342: {urn:iso:15118:2:2013:MsgDataTypes}MeterStatus */
-	{6, 88},
-	/* qnameID == 343: {urn:iso:15118:2:2013:MsgDataTypes}Multiplier */
-	{6, 89},
-	/* qnameID == 344: {urn:iso:15118:2:2013:MsgDataTypes}Name */
-	{6, 90},
-	/* qnameID == 345: {urn:iso:15118:2:2013:MsgDataTypes}NotificationMaxDelay */
-	{6, 91},
-	/* qnameID == 346: {urn:iso:15118:2:2013:MsgDataTypes}NotificationType */
-	{6, 92},
-	/* qnameID == 347: {urn:iso:15118:2:2013:MsgDataTypes}NumEPriceLevels */
-	{6, 93},
-	/* qnameID == 348: {urn:iso:15118:2:2013:MsgDataTypes}PMax */
-	{6, 94},
-	/* qnameID == 349: {urn:iso:15118:2:2013:MsgDataTypes}PMaxSchedule */
-	{6, 95},
-	/* qnameID == 350: {urn:iso:15118:2:2013:MsgDataTypes}PMaxScheduleEntry */
-	{6, 96},
-	/* qnameID == 351: {urn:iso:15118:2:2013:MsgDataTypes}PMaxScheduleEntryType */
-	{6, 97},
-	/* qnameID == 352: {urn:iso:15118:2:2013:MsgDataTypes}PMaxScheduleType */
-	{6, 98},
-	/* qnameID == 353: {urn:iso:15118:2:2013:MsgDataTypes}Parameter */
-	{6, 99},
-	/* qnameID == 354: {urn:iso:15118:2:2013:MsgDataTypes}ParameterSet */
-	{6, 100},
-	/* qnameID == 355: {urn:iso:15118:2:2013:MsgDataTypes}ParameterSetID */
-	{6, 101},
-	/* qnameID == 356: {urn:iso:15118:2:2013:MsgDataTypes}ParameterSetType */
-	{6, 102},
-	/* qnameID == 357: {urn:iso:15118:2:2013:MsgDataTypes}ParameterType */
-	{6, 103},
-	/* qnameID == 358: {urn:iso:15118:2:2013:MsgDataTypes}PaymentOption */
-	{6, 104},
-	/* qnameID == 359: {urn:iso:15118:2:2013:MsgDataTypes}PaymentOptionListType */
-	{6, 105},
-	/* qnameID == 360: {urn:iso:15118:2:2013:MsgDataTypes}PhysicalValueType */
-	{6, 106},
-	/* qnameID == 361: {urn:iso:15118:2:2013:MsgDataTypes}ProfileEntry */
-	{6, 107},
-	/* qnameID == 362: {urn:iso:15118:2:2013:MsgDataTypes}ProfileEntryType */
-	{6, 108},
-	/* qnameID == 363: {urn:iso:15118:2:2013:MsgDataTypes}RCD */
-	{6, 109},
-	/* qnameID == 364: {urn:iso:15118:2:2013:MsgDataTypes}RelativeTimeInterval */
-	{6, 110},
-	/* qnameID == 365: {urn:iso:15118:2:2013:MsgDataTypes}RelativeTimeIntervalType */
-	{6, 111},
-	/* qnameID == 366: {urn:iso:15118:2:2013:MsgDataTypes}RootCertificateID */
-	{6, 112},
-	/* qnameID == 367: {urn:iso:15118:2:2013:MsgDataTypes}SAIDType */
-	{6, 113},
-	/* qnameID == 368: {urn:iso:15118:2:2013:MsgDataTypes}SAScheduleList */
-	{6, 114},
-	/* qnameID == 369: {urn:iso:15118:2:2013:MsgDataTypes}SAScheduleListType */
-	{6, 115},
-	/* qnameID == 370: {urn:iso:15118:2:2013:MsgDataTypes}SAScheduleTuple */
-	{6, 116},
-	/* qnameID == 371: {urn:iso:15118:2:2013:MsgDataTypes}SAScheduleTupleID */
-	{6, 117},
-	/* qnameID == 372: {urn:iso:15118:2:2013:MsgDataTypes}SAScheduleTupleType */
-	{6, 118},
-	/* qnameID == 373: {urn:iso:15118:2:2013:MsgDataTypes}SASchedules */
-	{6, 119},
-	/* qnameID == 374: {urn:iso:15118:2:2013:MsgDataTypes}SASchedulesType */
-	{6, 120},
-	/* qnameID == 375: {urn:iso:15118:2:2013:MsgDataTypes}SalesTariff */
-	{6, 121},
-	/* qnameID == 376: {urn:iso:15118:2:2013:MsgDataTypes}SalesTariffDescription */
-	{6, 122},
-	/* qnameID == 377: {urn:iso:15118:2:2013:MsgDataTypes}SalesTariffEntry */
-	{6, 123},
-	/* qnameID == 378: {urn:iso:15118:2:2013:MsgDataTypes}SalesTariffEntryType */
-	{6, 124},
-	/* qnameID == 379: {urn:iso:15118:2:2013:MsgDataTypes}SalesTariffID */
-	{6, 125},
-	/* qnameID == 380: {urn:iso:15118:2:2013:MsgDataTypes}SalesTariffType */
-	{6, 126},
-	/* qnameID == 381: {urn:iso:15118:2:2013:MsgDataTypes}SelectedService */
-	{6, 127},
-	/* qnameID == 382: {urn:iso:15118:2:2013:MsgDataTypes}SelectedServiceListType */
-	{6, 128},
-	/* qnameID == 383: {urn:iso:15118:2:2013:MsgDataTypes}SelectedServiceType */
-	{6, 129},
-	/* qnameID == 384: {urn:iso:15118:2:2013:MsgDataTypes}Service */
-	{6, 130},
-	/* qnameID == 385: {urn:iso:15118:2:2013:MsgDataTypes}ServiceCategory */
-	{6, 131},
-	/* qnameID == 386: {urn:iso:15118:2:2013:MsgDataTypes}ServiceID */
-	{6, 132},
-	/* qnameID == 387: {urn:iso:15118:2:2013:MsgDataTypes}ServiceListType */
-	{6, 133},
-	/* qnameID == 388: {urn:iso:15118:2:2013:MsgDataTypes}ServiceName */
-	{6, 134},
-	/* qnameID == 389: {urn:iso:15118:2:2013:MsgDataTypes}ServiceParameterListType */
-	{6, 135},
-	/* qnameID == 390: {urn:iso:15118:2:2013:MsgDataTypes}ServiceScope */
-	{6, 136},
-	/* qnameID == 391: {urn:iso:15118:2:2013:MsgDataTypes}ServiceType */
-	{6, 137},
-	/* qnameID == 392: {urn:iso:15118:2:2013:MsgDataTypes}SigMeterReading */
-	{6, 138},
-	/* qnameID == 393: {urn:iso:15118:2:2013:MsgDataTypes}SubCertificates */
-	{6, 139},
-	/* qnameID == 394: {urn:iso:15118:2:2013:MsgDataTypes}SubCertificatesType */
-	{6, 140},
-	/* qnameID == 395: {urn:iso:15118:2:2013:MsgDataTypes}SupportedEnergyTransferMode */
-	{6, 141},
-	/* qnameID == 396: {urn:iso:15118:2:2013:MsgDataTypes}SupportedEnergyTransferModeType */
-	{6, 142},
-	/* qnameID == 397: {urn:iso:15118:2:2013:MsgDataTypes}TMeter */
-	{6, 143},
-	/* qnameID == 398: {urn:iso:15118:2:2013:MsgDataTypes}TimeInterval */
-	{6, 144},
-	/* qnameID == 399: {urn:iso:15118:2:2013:MsgDataTypes}Unit */
-	{6, 145},
-	/* qnameID == 400: {urn:iso:15118:2:2013:MsgDataTypes}Value */
-	{6, 146},
-	/* qnameID == 401: {urn:iso:15118:2:2013:MsgDataTypes}amount */
-	{6, 147},
-	/* qnameID == 402: {urn:iso:15118:2:2013:MsgDataTypes}amountMultiplier */
-	{6, 148},
-	/* qnameID == 403: {urn:iso:15118:2:2013:MsgDataTypes}boolValue */
-	{6, 149},
-	/* qnameID == 404: {urn:iso:15118:2:2013:MsgDataTypes}byteValue */
-	{6, 150},
-	/* qnameID == 405: {urn:iso:15118:2:2013:MsgDataTypes}certificateType */
-	{6, 151},
-	/* qnameID == 406: {urn:iso:15118:2:2013:MsgDataTypes}chargeProgressType */
-	{6, 152},
-	/* qnameID == 407: {urn:iso:15118:2:2013:MsgDataTypes}chargingSessionType */
-	{6, 153},
-	/* qnameID == 408: {urn:iso:15118:2:2013:MsgDataTypes}costKind */
-	{6, 154},
-	/* qnameID == 409: {urn:iso:15118:2:2013:MsgDataTypes}costKindType */
-	{6, 155},
-	/* qnameID == 410: {urn:iso:15118:2:2013:MsgDataTypes}dHpublickeyType */
-	{6, 156},
-	/* qnameID == 411: {urn:iso:15118:2:2013:MsgDataTypes}duration */
-	{6, 157},
-	/* qnameID == 412: {urn:iso:15118:2:2013:MsgDataTypes}eMAIDType */
-	{6, 158},
-	/* qnameID == 413: {urn:iso:15118:2:2013:MsgDataTypes}evccIDType */
-	{6, 159},
-	/* qnameID == 414: {urn:iso:15118:2:2013:MsgDataTypes}evseIDType */
-	{6, 160},
-	/* qnameID == 415: {urn:iso:15118:2:2013:MsgDataTypes}faultCodeType */
-	{6, 161},
-	/* qnameID == 416: {urn:iso:15118:2:2013:MsgDataTypes}faultMsgType */
-	{6, 162},
-	/* qnameID == 417: {urn:iso:15118:2:2013:MsgDataTypes}genChallengeType */
-	{6, 163},
-	/* qnameID == 418: {urn:iso:15118:2:2013:MsgDataTypes}intValue */
-	{6, 164},
-	/* qnameID == 419: {urn:iso:15118:2:2013:MsgDataTypes}isolationLevelType */
-	{6, 165},
-	/* qnameID == 420: {urn:iso:15118:2:2013:MsgDataTypes}maxNumPhasesType */
-	{6, 166},
-	/* qnameID == 421: {urn:iso:15118:2:2013:MsgDataTypes}meterIDType */
-	{6, 167},
-	/* qnameID == 422: {urn:iso:15118:2:2013:MsgDataTypes}meterStatusType */
-	{6, 168},
-	/* qnameID == 423: {urn:iso:15118:2:2013:MsgDataTypes}paymentOptionType */
-	{6, 169},
-	/* qnameID == 424: {urn:iso:15118:2:2013:MsgDataTypes}percentValueType */
-	{6, 170},
-	/* qnameID == 425: {urn:iso:15118:2:2013:MsgDataTypes}physicalValue */
-	{6, 171},
-	/* qnameID == 426: {urn:iso:15118:2:2013:MsgDataTypes}privateKeyType */
-	{6, 172},
-	/* qnameID == 427: {urn:iso:15118:2:2013:MsgDataTypes}responseCodeType */
-	{6, 173},
-	/* qnameID == 428: {urn:iso:15118:2:2013:MsgDataTypes}serviceCategoryType */
-	{6, 174},
-	/* qnameID == 429: {urn:iso:15118:2:2013:MsgDataTypes}serviceIDType */
-	{6, 175},
-	/* qnameID == 430: {urn:iso:15118:2:2013:MsgDataTypes}serviceNameType */
-	{6, 176},
-	/* qnameID == 431: {urn:iso:15118:2:2013:MsgDataTypes}serviceScopeType */
-	{6, 177},
-	/* qnameID == 432: {urn:iso:15118:2:2013:MsgDataTypes}sessionIDType */
-	{6, 178},
-	/* qnameID == 433: {urn:iso:15118:2:2013:MsgDataTypes}shortValue */
-	{6, 179},
-	/* qnameID == 434: {urn:iso:15118:2:2013:MsgDataTypes}sigMeterReadingType */
-	{6, 180},
-	/* qnameID == 435: {urn:iso:15118:2:2013:MsgDataTypes}start */
-	{6, 181},
-	/* qnameID == 436: {urn:iso:15118:2:2013:MsgDataTypes}startValue */
-	{6, 182},
-	/* qnameID == 437: {urn:iso:15118:2:2013:MsgDataTypes}stringValue */
-	{6, 183},
-	/* qnameID == 438: {urn:iso:15118:2:2013:MsgDataTypes}tariffDescriptionType */
-	{6, 184},
-	/* qnameID == 439: {urn:iso:15118:2:2013:MsgDataTypes}unitMultiplierType */
-	{6, 185},
-	/* qnameID == 440: {urn:iso:15118:2:2013:MsgDataTypes}unitSymbolType */
-	{6, 186},
-	/* qnameID == 441: {urn:iso:15118:2:2013:MsgDataTypes}valueType */
-	{6, 187},
-	/* qnameID == 442: {urn:iso:15118:2:2013:MsgDef}Body */
-	{7, 0},
-	/* qnameID == 443: {urn:iso:15118:2:2013:MsgDef}Header */
-	{7, 1},
-	/* qnameID == 444: {urn:iso:15118:2:2013:MsgDef}V2G_Message */
-	{7, 2},
-	/* qnameID == 445: {urn:iso:15118:2:2013:MsgHeader}MessageHeaderType */
-	{8, 0},
-	/* qnameID == 446: {urn:iso:15118:2:2013:MsgHeader}Notification */
-	{8, 1},
-	/* qnameID == 447: {urn:iso:15118:2:2013:MsgHeader}SessionID */
-	{8, 2}
-
-};
-
-
-int exiv2gGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart) {
-	int errn = 0;
-	/* EXI_v2gNUMBER_OF_QNAMES */
-	if (qnameID < state->nextQNameID) {
-		*namespaceURI = qnames[qnameID].namespaceURI;
-		*localPart = qnames[qnameID].localPart;
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-	return errn;
-}
-
-
-int exiv2gGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID) {
-	uint16_t i;
-	int errn = EXI_ERROR_OUT_OF_BOUNDS;
-	/* TODO Do something more efficient than just walk over the entire list */
-	/* EXI_v2gNUMBER_OF_QNAMES */
-	for(i=0; i<state->nextQNameID && errn != 0; i++) {
-		if(qnames[i].localPart == localPart && qnames[i].namespaceURI == namespaceURI) {
-			*qnameID = i;
-			errn = 0;
-		}
-	}
-
-	return errn;
-}
-
-
-int exiv2gAddEQName(exi_state_t* state, uint16_t* qnameID, uint16_t namespaceURI, uint16_t localPart) {
-	int errn = 0;
-	if(state->nextQNameID < (EXI_v2gMAX_NUMBER_OF_QNAMES -1)) {
-		/* store IDs */
-		qnames[state->nextQNameID].namespaceURI = namespaceURI;
-		qnames[state->nextQNameID].localPart = localPart;
-		/* increment counter */
-		*qnameID = state->nextQNameID++;
-	} else {
-		errn = EXI_ERROR_OUT_OF_BOUNDS;
-	}
-
-
-	return errn;
-}
-
-
-#endif
-

+ 0 - 77
src/codec/v2gQNames.h

@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.8 
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXIdizer.com</p>
- * <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
- *
- *
- ********************************************************************/
-
-
-
-#ifndef EXI_v2g_QNAMES_H
-#define EXI_v2g_QNAMES_H
-
-#include "EXITypes.h"
-
-/**
- * \brief  	Returns efficient qname (namespaceURI & localName) IDs for qnameID
- *
- * \param       state		   	Codec state
- * \param       qnameID		   	Qualified name ID
- * \param       namespaceURI	QName namespace URI ID
- * \param       localPart		QName local name ID
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gGetEQName(exi_state_t* state, uint16_t qnameID, uint16_t* namespaceURI, uint16_t* localPart);
-
-
-/**
- * \brief  	Returns qnameID for qname namespaceURI & localName
- *
- * \param       state		   	Codec state
- * \param       namespaceURI	QName namespace URI ID
- * \param       localPart		QName local name ID
- * \param       qnameID		   	QName ID (out)
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gGetQNameID(exi_state_t* state, uint16_t namespaceURI, uint16_t localPart, uint16_t* qnameID);
-
-
-/**
- * \brief  	Add  efficient qname (namespaceURI & localName) IDs for qnameID
- *
- * \param       state		   	Codec state
- * \param       qnameID		   	Qualified name ID
- * \param       namespaceURI	QName namespace URI ID
- * \param       localPart		QName local name ID
- * \return                  	Error-Code <> 0
- *
- */
-int exiv2gAddEQName(exi_state_t* state, uint16_t* qnameID, uint16_t namespaceURI, uint16_t localPart);
-
-#endif
-

+ 0 - 692
src/service/v2g_dataTypes.c

@@ -1,692 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-#include "EXITypes.h"
-#include "v2g_dataTypes.h"
-
-
-static  void init_sessionIDType(struct sessionIDType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_faultMsgType(struct faultMsgType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_NotificationType(struct NotificationType* type)
-{			
-	type->isused.FaultMsg=0;
-
-}
-
-static  void init_service_string(struct service_string* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_DigestValueType(struct DigestValueType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_ReferenceType(struct ReferenceType* type)
-{		
-	type->isused.attr_Id=0;		
-	type->isused.attr_Type=0;		
-	type->isused.attr_URI=0;		
-
-}
-
-static  void init_SignedInfoType(struct SignedInfoType* type)
-{
-	int i_loop;
-			
-	type->isused.attr_Id=0;			
-	for(i_loop=0; i_loop<2;i_loop++)
-	{
-		init_ReferenceType(&(type->Reference[i_loop]));
-	}
-	
-	type->arraylen.Reference=0;
-
-}
-
-static  void init_SignatureValueType(struct SignatureValueType* type)
-{		
-	type->isused.attr_Id=0;
-
-}
-
-static  void init_SignatureType(struct SignatureType* type)
-{		
-	type->isused.attr_Id=0;	
-	init_SignedInfoType(&(type->SignedInfo));	
-	init_SignatureValueType(&(type->SignatureValue));
-
-}
-
-static  void init_MessageHeaderType(struct MessageHeaderType* type)
-{		
-	init_NotificationType(&(type->Notification));	
-	type->isused.Notification=0;		
-	type->isused.Signature=0;
-
-}
-
-static  void init_evccIDType(struct evccIDType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_evseIDType(struct evseIDType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_SessionSetupResType(struct SessionSetupResType* type)
-{				
-	type->isused.EVSETimeStamp=0;
-
-}
-
-static  void init_serviceScopeType(struct serviceScopeType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_ServiceDiscoveryReqType(struct ServiceDiscoveryReqType* type)
-{		
-	type->isused.ServiceScope=0;		
-	type->isused.ServiceCategory=0;
-
-}
-
-static  void init_PaymentOptionListType(struct PaymentOptionListType* type)
-{
-
-		
-	type->arraylen.PaymentOption=0;
-
-}
-
-static  void init_serviceNameType(struct serviceNameType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_SupportedEnergyTransferModeType(struct SupportedEnergyTransferModeType* type)
-{
-		
-	type->arraylen.EnergyTransferMode=0;
-
-}
-
-static  void init_ChargeServiceType(struct ChargeServiceType* type)
-{			
-	type->isused.ServiceName=0;			
-	type->isused.ServiceScope=0;		
-	init_SupportedEnergyTransferModeType(&(type->SupportedEnergyTransferMode));
-
-}
-
-static  void init_ServiceType(struct ServiceType* type)
-{			
-	type->isused.ServiceName=0;			
-	type->isused.ServiceScope=0;	
-
-}
-
-static  void init_ServiceListType(struct ServiceListType* type)
-{
-	int i_loop;
-		
-	for(i_loop=0; i_loop<8;i_loop++)
-	{
-		init_ServiceType(&(type->Service[i_loop]));
-	}
-	
-	type->arraylen.Service=0;
-
-}
-
-static  void init_ServiceDiscoveryResType(struct ServiceDiscoveryResType* type)
-{		
-	init_PaymentOptionListType(&(type->PaymentOptionList));	
-	init_ChargeServiceType(&(type->ChargeService));	
-	init_ServiceListType(&(type->ServiceList));	
-	type->isused.ServiceList=0;
-
-}
-
-static  void init_ParameterType(struct ParameterType* type)
-{			
-	type->isused.boolValue=0;		
-	type->isused.byteValue=0;		
-	type->isused.shortValue=0;		
-	type->isused.intValue=0;		
-	type->isused.physicalValue=0;		
-	type->isused.stringValue=0;
-
-}
-
-static  void init_ParameterSetType(struct ParameterSetType* type)
-{
-	int i_loop;
-			
-	for(i_loop=0; i_loop<8;i_loop++)
-	{
-		init_ParameterType(&(type->Parameter[i_loop]));
-	}
-	
-	type->arraylen.Parameter=0;
-
-}
-
-static  void init_ServiceParameterListType(struct ServiceParameterListType* type)
-{
-	int i_loop;
-		
-	for(i_loop=0; i_loop<3;i_loop++)
-	{
-		init_ParameterSetType(&(type->ParameterSet[i_loop]));
-	}
-	
-	type->arraylen.ParameterSet=0;
-
-}
-
-static  void init_ServiceDetailResType(struct ServiceDetailResType* type)
-{			
-	init_ServiceParameterListType(&(type->ServiceParameterList));	
-	type->isused.ServiceParameterList=0;
-
-}
-
-static  void init_SelectedServiceType(struct SelectedServiceType* type)
-{			
-	type->isused.ParameterSetID=0;
-
-}
-
-static  void init_SelectedServiceListType(struct SelectedServiceListType* type)
-{
-	int i_loop;
-		
-	for(i_loop=0; i_loop<16;i_loop++)
-	{
-		init_SelectedServiceType(&(type->SelectedService[i_loop]));
-	}
-	
-	type->arraylen.SelectedService=0;
-
-}
-
-static  void init_PaymentServiceSelectionReqType(struct PaymentServiceSelectionReqType* type)
-{		
-	init_SelectedServiceListType(&(type->SelectedServiceList));
-
-}
-
-static  void init_eMAIDType(struct eMAIDType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_certificateType(struct certificateType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_SubCertificatesType(struct SubCertificatesType* type)
-{
-
-		
-	type->arraylen.Certificate=0;
-
-}
-
-static  void init_CertificateChainType(struct CertificateChainType* type)
-{		
-	type->isused.attr_Id=0;		
-	init_SubCertificatesType(&(type->SubCertificates));	
-	type->isused.SubCertificates=0;
-
-}
-
-static  void init_PaymentDetailsReqType(struct PaymentDetailsReqType* type)
-{		
-	init_CertificateChainType(&(type->ContractSignatureCertChain));
-
-}
-
-static  void init_genChallengeType(struct genChallengeType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_AuthorizationReqType(struct AuthorizationReqType* type)
-{		
-	type->isused.attr_Id=0;		
-	type->isused.GenChallenge=0;
-
-}
-
-static  void init_AC_EVChargeParameterType(struct AC_EVChargeParameterType* type)
-{		
-	type->isused.DepartureTime=0;				
-
-}
-
-static  void init_DC_EVChargeParameterType(struct DC_EVChargeParameterType* type)
-{		
-	type->isused.DepartureTime=0;				
-	type->isused.EVMaximumPowerLimit=0;			
-	type->isused.EVEnergyCapacity=0;		
-	type->isused.EVEnergyRequest=0;		
-	type->isused.FullSOC=0;		
-	type->isused.BulkSOC=0;
-
-}
-
-static  void init_ChargeParameterDiscoveryReqType(struct ChargeParameterDiscoveryReqType* type)
-{		
-	type->isused.MaxEntriesSAScheduleTuple=0;			
-	type->isused.AC_EVChargeParameter=0;		
-	type->isused.DC_EVChargeParameter=0;
-
-}
-
-static  void init_RelativeTimeIntervalType(struct RelativeTimeIntervalType* type)
-{			
-	type->isused.duration=0;
-
-}
-
-static  void init_PMaxScheduleEntryType(struct PMaxScheduleEntryType* type)
-{	
-	init_RelativeTimeIntervalType(&(type->RelativeTimeInterval));	
-
-}
-
-static  void init_PMaxScheduleType(struct PMaxScheduleType* type)
-{
-	int i_loop;
-		
-	for(i_loop=0; i_loop<48;i_loop++)
-	{
-		init_PMaxScheduleEntryType(&(type->PMaxScheduleEntry[i_loop]));
-	}
-	
-	type->arraylen.PMaxScheduleEntry=0;
-
-}
-
-static  void init_tariffDescriptionType(struct tariffDescriptionType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_CostType(struct CostType* type)
-{				
-	type->isused.amountMultiplier=0;
-
-}
-
-static  void init_ConsumptionCostType(struct ConsumptionCostType* type)
-{
-	int i_loop;
-			
-	for(i_loop=0; i_loop<3;i_loop++)
-	{
-		init_CostType(&(type->Cost[i_loop]));
-	}
-	
-	type->arraylen.Cost=0;
-
-}
-
-static  void init_SalesTariffEntryType(struct SalesTariffEntryType* type)
-{
-	int i_loop;
-		
-	init_RelativeTimeIntervalType(&(type->RelativeTimeInterval));		
-	type->isused.EPriceLevel=0;	
-	for(i_loop=0; i_loop<3;i_loop++)
-	{
-		init_ConsumptionCostType(&(type->ConsumptionCost[i_loop]));
-	}
-	
-	type->arraylen.ConsumptionCost=0;	
-	type->isused.ConsumptionCost=0;
-
-}
-
-static  void init_SalesTariffType(struct SalesTariffType* type)
-{
-	int i_loop;
-			
-	type->isused.attr_Id=0;			
-	type->isused.SalesTariffDescription=0;		
-	type->isused.NumEPriceLevels=0;	
-	for(i_loop=0; i_loop<24;i_loop++)
-	{
-		init_SalesTariffEntryType(&(type->SalesTariffEntry[i_loop]));
-	}
-	
-	type->arraylen.SalesTariffEntry=0;
-
-}
-
-static  void init_SAScheduleTupleType(struct SAScheduleTupleType* type)
-{		
-	init_PMaxScheduleType(&(type->PMaxSchedule));		
-	type->isused.SalesTariff=0;
-
-}
-
-static  void init_SAScheduleListType(struct SAScheduleListType* type)
-{
-	int i_loop;
-		
-	for(i_loop=0; i_loop<3;i_loop++)
-	{
-		init_SAScheduleTupleType(&(type->SAScheduleTuple[i_loop]));
-	}
-	
-	type->arraylen.SAScheduleTuple=0;
-
-}
-
-static  void init_AC_EVSEChargeParameterType(struct AC_EVSEChargeParameterType* type)
-{			
-
-}
-
-static  void init_DC_EVSEStatusType(struct DC_EVSEStatusType* type)
-{				
-	type->isused.EVSEIsolationStatus=0;	
-
-}
-
-static  void init_DC_EVSEChargeParameterType(struct DC_EVSEChargeParameterType* type)
-{	
-	init_DC_EVSEStatusType(&(type->DC_EVSEStatus));							
-	type->isused.EVSECurrentRegulationTolerance=0;			
-	type->isused.EVSEEnergyToBeDelivered=0;
-
-}
-
-static  void init_ChargeParameterDiscoveryResType(struct ChargeParameterDiscoveryResType* type)
-{				
-	type->isused.SAScheduleList=0;		
-	type->isused.AC_EVSEChargeParameter=0;		
-	type->isused.DC_EVSEChargeParameter=0;
-
-}
-
-static  void init_ProfileEntryType(struct ProfileEntryType* type)
-{				
-	type->isused.ChargingProfileEntryMaxNumberOfPhasesInUse=0;
-
-}
-
-static  void init_ChargingProfileType(struct ChargingProfileType* type)
-{
-	int i_loop;
-		
-	for(i_loop=0; i_loop<24;i_loop++)
-	{
-		init_ProfileEntryType(&(type->ProfileEntry[i_loop]));
-	}
-	
-	type->arraylen.ProfileEntry=0;
-
-}
-
-static  void init_DC_EVPowerDeliveryParameterType(struct DC_EVPowerDeliveryParameterType* type)
-{			
-	type->isused.BulkChargingComplete=0;	
-
-}
-
-static  void init_PowerDeliveryReqType(struct PowerDeliveryReqType* type)
-{			
-	init_ChargingProfileType(&(type->ChargingProfile));	
-	type->isused.ChargingProfile=0;		
-	type->isused.DC_EVPowerDeliveryParameter=0;
-
-}
-
-static  void init_PowerDeliveryResType(struct PowerDeliveryResType* type)
-{			
-	type->isused.AC_EVSEStatus=0;		
-	type->isused.DC_EVSEStatus=0;
-
-}
-
-static  void init_meterIDType(struct meterIDType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_sigMeterReadingType(struct sigMeterReadingType* type)
-{	
-	type->arraylen.data=0;
-
-}
-
-static  void init_MeterInfoType(struct MeterInfoType* type)
-{			
-	type->isused.MeterReading=0;		
-	type->isused.SigMeterReading=0;		
-	type->isused.MeterStatus=0;		
-	type->isused.TMeter=0;
-
-}
-
-static  void init_MeteringReceiptReqType(struct MeteringReceiptReqType* type)
-{		
-	type->isused.attr_Id=0;			
-	type->isused.SAScheduleTupleID=0;	
-	init_MeterInfoType(&(type->MeterInfo));
-
-}
-
-static  void init_MeteringReceiptResType(struct MeteringReceiptResType* type)
-{			
-	type->isused.AC_EVSEStatus=0;		
-	type->isused.DC_EVSEStatus=0;
-
-}
-
-static  void init_ListOfRootCertificateIDsType(struct ListOfRootCertificateIDsType* type)
-{
-
-		
-	type->arraylen.RootCertificateID=0;
-
-}
-
-static  void init_CertificateUpdateReqType(struct CertificateUpdateReqType* type)
-{		
-	init_CertificateChainType(&(type->ContractSignatureCertChain));		
-	init_ListOfRootCertificateIDsType(&(type->ListOfRootCertificateIDs));
-
-}
-
-static  void init_CertificateUpdateResType(struct CertificateUpdateResType* type)
-{		
-	init_CertificateChainType(&(type->SAProvisioningCertificateChain));	
-	init_CertificateChainType(&(type->ContractSignatureCertChain));					
-	type->isused.RetryCounter=0;
-
-}
-
-static  void init_CertificateInstallationReqType(struct CertificateInstallationReqType* type)
-{			
-	init_ListOfRootCertificateIDsType(&(type->ListOfRootCertificateIDs));
-
-}
-
-static  void init_CertificateInstallationResType(struct CertificateInstallationResType* type)
-{		
-	init_CertificateChainType(&(type->SAProvisioningCertificateChain));	
-	init_CertificateChainType(&(type->ContractSignatureCertChain));			
-
-}
-
-static  void init_ChargingStatusResType(struct ChargingStatusResType* type)
-{					
-	type->isused.EVSEMaxCurrent=0;	
-	init_MeterInfoType(&(type->MeterInfo));	
-	type->isused.MeterInfo=0;		
-	type->isused.ReceiptRequired=0;	
-
-}
-
-static  void init_CableCheckReqType(struct CableCheckReqType* type)
-{	
-
-}
-
-static  void init_CableCheckResType(struct CableCheckResType* type)
-{		
-	init_DC_EVSEStatusType(&(type->DC_EVSEStatus));	
-
-}
-
-static  void init_PreChargeReqType(struct PreChargeReqType* type)
-{			
-
-}
-
-static  void init_PreChargeResType(struct PreChargeResType* type)
-{		
-	init_DC_EVSEStatusType(&(type->DC_EVSEStatus));	
-
-}
-
-static  void init_CurrentDemandReqType(struct CurrentDemandReqType* type)
-{				
-	type->isused.EVMaximumVoltageLimit=0;		
-	type->isused.EVMaximumCurrentLimit=0;		
-	type->isused.EVMaximumPowerLimit=0;		
-	type->isused.BulkChargingComplete=0;			
-	type->isused.RemainingTimeToFullSoC=0;		
-	type->isused.RemainingTimeToBulkSoC=0;	
-
-}
-
-static  void init_CurrentDemandResType(struct CurrentDemandResType* type)
-{		
-	init_DC_EVSEStatusType(&(type->DC_EVSEStatus));							
-	type->isused.EVSEMaximumVoltageLimit=0;		
-	type->isused.EVSEMaximumCurrentLimit=0;		
-	type->isused.EVSEMaximumPowerLimit=0;			
-	init_MeterInfoType(&(type->MeterInfo));	
-	type->isused.MeterInfo=0;		
-	type->isused.ReceiptRequired=0;
-
-}
-
-static  void init_WeldingDetectionReqType(struct WeldingDetectionReqType* type)
-{	
-
-}
-
-static  void init_WeldingDetectionResType(struct WeldingDetectionResType* type)
-{		
-	init_DC_EVSEStatusType(&(type->DC_EVSEStatus));	
-
-}
-
-static  void init_BodyType(struct BodyType* type)
-{		
-	type->isused.SessionSetupReq=0;		
-	type->isused.SessionSetupRes=0;		
-	type->isused.ServiceDiscoveryReq=0;		
-	type->isused.ServiceDiscoveryRes=0;		
-	type->isused.ServiceDetailReq=0;		
-	type->isused.ServiceDetailRes=0;		
-	type->isused.PaymentServiceSelectionReq=0;		
-	type->isused.PaymentServiceSelectionRes=0;		
-	type->isused.PaymentDetailsReq=0;		
-	type->isused.PaymentDetailsRes=0;		
-	type->isused.AuthorizationReq=0;		
-	type->isused.AuthorizationRes=0;		
-	type->isused.ChargeParameterDiscoveryReq=0;		
-	type->isused.ChargeParameterDiscoveryRes=0;		
-	type->isused.PowerDeliveryReq=0;		
-	type->isused.PowerDeliveryRes=0;		
-	type->isused.MeteringReceiptReq=0;		
-	type->isused.MeteringReceiptRes=0;		
-	type->isused.SessionStopReq=0;		
-	type->isused.SessionStopRes=0;		
-	type->isused.CertificateUpdateReq=0;		
-	type->isused.CertificateUpdateRes=0;		
-	type->isused.CertificateInstallationReq=0;		
-	type->isused.CertificateInstallationRes=0;		
-	type->isused.ChargingStatusReq=0;		
-	type->isused.ChargingStatusRes=0;		
-	type->isused.CableCheckReq=0;		
-	type->isused.CableCheckRes=0;		
-	type->isused.PreChargeReq=0;		
-	type->isused.PreChargeRes=0;		
-	type->isused.CurrentDemandReq=0;		
-	type->isused.CurrentDemandRes=0;		
-	type->isused.WeldingDetectionReq=0;		
-	type->isused.WeldingDetectionRes=0;
-
-}
-
-static  void init_AnonType_V2G_Message(struct AnonType_V2G_Message* type)
-{		
-	init_BodyType(&(type->Body));
-
-}
-
-static  void init_EXIDocumentType(struct EXIDocumentType* type)
-{	
-	init_AnonType_V2G_Message(&(type->V2G_Message));
-}

+ 0 - 1681
src/service/v2g_dataTypes.h

@@ -1,1681 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef SERVICEDATATYPES_H
-#define SERVICEDATATYPES_H
-
-#include "EXITypes.h"
-#include "string.h"
-
-
-	
-
-enum faultCodeType
-{
-	ParsingError_faultCodeType=0, 
-	NoTLSRootCertificatAvailable_faultCodeType=1, 
-	UnknownError_faultCodeType=2
-
-}; 
-
-enum responseCodeType
-{
-	OK_responseCodeType=0, 
-	OK_NewSessionEstablished_responseCodeType=1, 
-	OK_OldSessionJoined_responseCodeType=2, 
-	OK_CertificateExpiresSoon_responseCodeType=3, 
-	FAILED_responseCodeType=4, 
-	FAILED_SequenceError_responseCodeType=5, 
-	FAILED_ServiceIDInvalid_responseCodeType=6, 
-	FAILED_UnknownSession_responseCodeType=7, 
-	FAILED_ServiceSelectionInvalid_responseCodeType=8, 
-	FAILED_PaymentSelectionInvalid_responseCodeType=9, 
-	FAILED_CertificateExpired_responseCodeType=10, 
-	FAILED_SignatureError_responseCodeType=11, 
-	FAILED_NoCertificateAvailable_responseCodeType=12, 
-	FAILED_CertChainError_responseCodeType=13, 
-	FAILED_ChallengeInvalid_responseCodeType=14, 
-	FAILED_ContractCanceled_responseCodeType=15, 
-	FAILED_WrongChargeParameter_responseCodeType=16, 
-	FAILED_PowerDeliveryNotApplied_responseCodeType=17, 
-	FAILED_TariffSelectionInvalid_responseCodeType=18, 
-	FAILED_ChargingProfileInvalid_responseCodeType=19, 
-	FAILED_MeteringSignatureNotValid_responseCodeType=20, 
-	FAILED_NoChargeServiceSelected_responseCodeType=21, 
-	FAILED_WrongEnergyTransferMode_responseCodeType=22, 
-	FAILED_ContactorError_responseCodeType=23, 
-	FAILED_CertificateNotAllowedAtThisEVSE_responseCodeType=24, 
-	FAILED_CertificateRevoked_responseCodeType=25
-
-}; 
-
-enum serviceCategoryType
-{
-	EVCharging_serviceCategoryType=0, 
-	Internet_serviceCategoryType=1, 
-	ContractCertificate_serviceCategoryType=2, 
-	OtherCustom_serviceCategoryType=3
-
-}; 
-
-enum paymentOptionType
-{
-	Contract_paymentOptionType=0, 
-	ExternalPayment_paymentOptionType=1
-
-}; 
-
-enum EnergyTransferModeType
-{
-	AC_single_phase_core_EnergyTransferModeType=0, 
-	AC_three_phase_core_EnergyTransferModeType=1, 
-	DC_core_EnergyTransferModeType=2, 
-	DC_extended_EnergyTransferModeType=3, 
-	DC_combo_core_EnergyTransferModeType=4, 
-	DC_unique_EnergyTransferModeType=5
-
-}; 
-
-enum unitSymbolType
-{
-	h_unitSymbolType=0, 
-	m_unitSymbolType=1, 
-	s_unitSymbolType=2, 
-	A_unitSymbolType=3, 
-	V_unitSymbolType=4, 
-	W_unitSymbolType=5, 
-	Wh_unitSymbolType=6
-
-}; 
-
-enum EVSEProcessingType
-{
-	Finished_EVSEProcessingType=0, 
-	Ongoing_EVSEProcessingType=1, 
-	Ongoing_WaitingForCustomerInteraction_EVSEProcessingType=2
-
-}; 
-
-enum DC_EVErrorCodeType
-{
-	NO_ERROR_DC_EVErrorCodeType=0, 
-	FAILED_RESSTemperatureInhibit_DC_EVErrorCodeType=1, 
-	FAILED_EVShiftPosition_DC_EVErrorCodeType=2, 
-	FAILED_ChargerConnectorLockFault_DC_EVErrorCodeType=3, 
-	FAILED_EVRESSMalfunction_DC_EVErrorCodeType=4, 
-	FAILED_ChargingCurrentdifferential_DC_EVErrorCodeType=5, 
-	FAILED_ChargingVoltageOutOfRange_DC_EVErrorCodeType=6, 
-	Reserved_A_DC_EVErrorCodeType=7, 
-	Reserved_B_DC_EVErrorCodeType=8, 
-	Reserved_C_DC_EVErrorCodeType=9, 
-	FAILED_ChargingSystemIncompatibility_DC_EVErrorCodeType=10, 
-	NoData_DC_EVErrorCodeType=11
-
-}; 
-
-enum costKindType
-{
-	relativePricePercentage_costKindType=0, 
-	RenewableGenerationPercentage_costKindType=1, 
-	CarbonDioxideEmission_costKindType=2
-
-}; 
-
-enum EVSENotificationType
-{
-	None_EVSENotificationType=0, 
-	StopCharging_EVSENotificationType=1, 
-	ReNegotiation_EVSENotificationType=2
-
-}; 
-
-enum isolationLevelType
-{
-	Invalid_isolationLevelType=0, 
-	Valid_isolationLevelType=1, 
-	Warning_isolationLevelType=2, 
-	Fault_isolationLevelType=3, 
-	No_IMD_isolationLevelType=4
-
-}; 
-
-enum DC_EVSEStatusCodeType
-{
-	EVSE_NotReady_DC_EVSEStatusCodeType=0, 
-	EVSE_Ready_DC_EVSEStatusCodeType=1, 
-	EVSE_Shutdown_DC_EVSEStatusCodeType=2, 
-	EVSE_UtilityInterruptEvent_DC_EVSEStatusCodeType=3, 
-	EVSE_IsolationMonitoringActive_DC_EVSEStatusCodeType=4, 
-	EVSE_EmergencyShutdown_DC_EVSEStatusCodeType=5, 
-	EVSE_Malfunction_DC_EVSEStatusCodeType=6, 
-	Reserved_8_DC_EVSEStatusCodeType=7, 
-	Reserved_9_DC_EVSEStatusCodeType=8, 
-	Reserved_A_DC_EVSEStatusCodeType=9, 
-	Reserved_B_DC_EVSEStatusCodeType=10, 
-	Reserved_C_DC_EVSEStatusCodeType=11
-
-}; 
-
-enum chargeProgressType
-{
-	Start_chargeProgressType=0, 
-	Stop_chargeProgressType=1, 
-	Renegotiate_chargeProgressType=2
-
-}; 
-
-enum chargingSessionType
-{
-	Terminate_chargingSessionType=0, 
-	Pause_chargingSessionType=1
-
-}; 
-
-
-
-
-struct arraylen_sessionIDType
-{
-	size_t data;
-
-
-};
-
-struct sessionIDType
-{
-	uint8_t data[8];
-	struct arraylen_sessionIDType arraylen;
-
-};
-
-struct arraylen_faultMsgType
-{
-	size_t data;
-
-
-};
-
-struct faultMsgType
-{
-	uint32_t data[64];
-	struct arraylen_faultMsgType arraylen;
-
-};
-
-struct selection_NotificationType
-{
-	unsigned int FaultMsg:1;
-
-
-};
-
-struct NotificationType
-{
-	enum faultCodeType FaultCode;
-	struct faultMsgType FaultMsg;
-	struct selection_NotificationType isused;
-
-};
-
-struct selection_MessageHeaderType
-{
-	unsigned int Notification:1;
-	unsigned int Signature:1;
-
-
-};
-
-struct arraylen_service_string
-{
-	size_t data;
-
-
-};
-
-struct service_string
-{
-	uint32_t data[16];
-	struct arraylen_service_string arraylen;
-
-};
-
-struct selection_SignatureType
-{
-	unsigned int attr_Id:1;
-
-
-};
-
-struct selection_SignedInfoType
-{
-	unsigned int attr_Id:1;
-
-
-};
-
-struct CanonicalizationMethodType
-{
-	struct service_string attr_Algorithm;
-
-
-};
-
-struct SignatureMethodType
-{
-	struct service_string attr_Algorithm;
-
-
-};
-
-struct selection_ReferenceType
-{
-	unsigned int attr_Id:1;
-	unsigned int attr_Type:1;
-	unsigned int attr_URI:1;
-
-
-};
-
-struct DigestMethodType
-{
-	struct service_string attr_Algorithm;
-
-
-};
-
-struct arraylen_DigestValueType
-{
-	size_t data;
-
-
-};
-
-struct DigestValueType
-{
-	uint8_t data[128];
-	struct arraylen_DigestValueType arraylen;
-
-};
-
-struct ReferenceType
-{
-	struct service_string attr_Id;
-	struct service_string attr_Type;
-	struct service_string attr_URI;
-	struct DigestMethodType DigestMethod;
-	struct DigestValueType DigestValue;
-	struct selection_ReferenceType isused;
-
-};
-
-struct arraylen_SignedInfoType
-{
-	size_t Reference;
-
-
-};
-
-struct SignedInfoType
-{
-	struct service_string attr_Id;
-	struct CanonicalizationMethodType CanonicalizationMethod;
-	struct SignatureMethodType SignatureMethod;
-	struct ReferenceType Reference[2];
-	struct selection_SignedInfoType isused;	struct arraylen_SignedInfoType arraylen;
-
-};
-
-struct selection_SignatureValueType
-{
-	unsigned int attr_Id:1;
-
-
-};
-
-struct arraylen_SignatureValueType
-{
-	size_t data;
-
-
-};
-
-struct SignatureValueType
-{
-	uint8_t data[128];
-	struct arraylen_SignatureValueType arraylen;
-	struct service_string attr_Id;
-	struct selection_SignatureValueType isused;
-
-};
-
-struct SignatureType
-{
-	struct service_string attr_Id;
-	struct SignedInfoType SignedInfo;
-	struct SignatureValueType SignatureValue;
-	struct selection_SignatureType isused;
-
-};
-
-struct MessageHeaderType
-{
-	struct sessionIDType SessionID;
-	struct NotificationType Notification;
-	struct SignatureType* Signature;
-	struct selection_MessageHeaderType isused;
-
-};
-
-struct arraylen_evccIDType
-{
-	size_t data;
-
-
-};
-
-struct evccIDType
-{
-	uint8_t data[6];
-	struct arraylen_evccIDType arraylen;
-
-};
-
-struct SessionSetupReqType
-{
-	struct evccIDType EVCCID;
-
-
-};
-
-struct selection_BodyType
-{
-	unsigned int SessionSetupReq:1;
-	unsigned int SessionSetupRes:1;
-	unsigned int ServiceDiscoveryReq:1;
-	unsigned int ServiceDiscoveryRes:1;
-	unsigned int ServiceDetailReq:1;
-	unsigned int ServiceDetailRes:1;
-	unsigned int PaymentServiceSelectionReq:1;
-	unsigned int PaymentServiceSelectionRes:1;
-	unsigned int PaymentDetailsReq:1;
-	unsigned int PaymentDetailsRes:1;
-	unsigned int AuthorizationReq:1;
-	unsigned int AuthorizationRes:1;
-	unsigned int ChargeParameterDiscoveryReq:1;
-	unsigned int ChargeParameterDiscoveryRes:1;
-	unsigned int PowerDeliveryReq:1;
-	unsigned int PowerDeliveryRes:1;
-	unsigned int MeteringReceiptReq:1;
-	unsigned int MeteringReceiptRes:1;
-	unsigned int SessionStopReq:1;
-	unsigned int SessionStopRes:1;
-	unsigned int CertificateUpdateReq:1;
-	unsigned int CertificateUpdateRes:1;
-	unsigned int CertificateInstallationReq:1;
-	unsigned int CertificateInstallationRes:1;
-	unsigned int ChargingStatusReq:1;
-	unsigned int ChargingStatusRes:1;
-	unsigned int CableCheckReq:1;
-	unsigned int CableCheckRes:1;
-	unsigned int PreChargeReq:1;
-	unsigned int PreChargeRes:1;
-	unsigned int CurrentDemandReq:1;
-	unsigned int CurrentDemandRes:1;
-	unsigned int WeldingDetectionReq:1;
-	unsigned int WeldingDetectionRes:1;
-
-
-};
-
-struct arraylen_evseIDType
-{
-	size_t data;
-
-
-};
-
-struct evseIDType
-{
-	uint32_t data[37];
-	struct arraylen_evseIDType arraylen;
-
-};
-
-struct selection_SessionSetupResType
-{
-	unsigned int EVSETimeStamp:1;
-
-
-};
-
-struct SessionSetupResType
-{
-	enum responseCodeType ResponseCode;
-	struct evseIDType EVSEID;
-	int64_t EVSETimeStamp;
-	struct selection_SessionSetupResType isused;
-
-};
-
-struct arraylen_serviceScopeType
-{
-	size_t data;
-
-
-};
-
-struct serviceScopeType
-{
-	uint32_t data[64];
-	struct arraylen_serviceScopeType arraylen;
-
-};
-
-struct selection_ServiceDiscoveryReqType
-{
-	unsigned int ServiceScope:1;
-	unsigned int ServiceCategory:1;
-
-
-};
-
-struct ServiceDiscoveryReqType
-{
-	struct serviceScopeType ServiceScope;
-	enum serviceCategoryType ServiceCategory;
-	struct selection_ServiceDiscoveryReqType isused;
-
-};
-
-struct arraylen_PaymentOptionListType
-{
-	size_t PaymentOption;
-
-
-};
-
-struct PaymentOptionListType
-{
-	enum paymentOptionType PaymentOption[2];
-	struct arraylen_PaymentOptionListType arraylen;
-
-};
-
-struct arraylen_serviceNameType
-{
-	size_t data;
-
-
-};
-
-struct serviceNameType
-{
-	uint32_t data[32];
-	struct arraylen_serviceNameType arraylen;
-
-};
-
-struct selection_ChargeServiceType
-{
-	unsigned int ServiceName:1;
-	unsigned int ServiceScope:1;
-
-
-};
-
-struct arraylen_SupportedEnergyTransferModeType
-{
-	size_t EnergyTransferMode;
-
-
-};
-
-struct SupportedEnergyTransferModeType
-{
-	enum EnergyTransferModeType EnergyTransferMode[6];
-	struct arraylen_SupportedEnergyTransferModeType arraylen;
-
-};
-
-struct ChargeServiceType
-{
-	uint16_t ServiceID;
-	struct serviceNameType ServiceName;
-	enum serviceCategoryType ServiceCategory;
-	struct serviceScopeType ServiceScope;
-	int FreeService;
-	struct SupportedEnergyTransferModeType SupportedEnergyTransferMode;
-	struct selection_ChargeServiceType isused;
-
-};
-
-struct selection_ServiceType
-{
-	unsigned int ServiceName:1;
-	unsigned int ServiceScope:1;
-
-
-};
-
-struct ServiceType
-{
-	uint16_t ServiceID;
-	struct serviceNameType ServiceName;
-	enum serviceCategoryType ServiceCategory;
-	struct serviceScopeType ServiceScope;
-	int FreeService;
-	struct selection_ServiceType isused;
-
-};
-
-struct arraylen_ServiceListType
-{
-	size_t Service;
-
-
-};
-
-struct ServiceListType
-{
-	struct ServiceType Service[8];
-	struct arraylen_ServiceListType arraylen;
-
-};
-
-struct selection_ServiceDiscoveryResType
-{
-	unsigned int ServiceList:1;
-
-
-};
-
-struct ServiceDiscoveryResType
-{
-	enum responseCodeType ResponseCode;
-	struct PaymentOptionListType PaymentOptionList;
-	struct ChargeServiceType ChargeService;
-	struct ServiceListType ServiceList;
-	struct selection_ServiceDiscoveryResType isused;
-
-};
-
-struct ServiceDetailReqType
-{
-	uint16_t ServiceID;
-
-
-};
-
-struct selection_ParameterType
-{
-	unsigned int boolValue:1;
-	unsigned int byteValue:1;
-	unsigned int shortValue:1;
-	unsigned int intValue:1;
-	unsigned int physicalValue:1;
-	unsigned int stringValue:1;
-
-
-};
-
-struct PhysicalValueType
-{
-	int8_t Multiplier;
-	enum unitSymbolType Unit;
-	int16_t Value;
-
-
-};
-
-struct ParameterType
-{
-
-	struct service_string attr_Name;
-
-		int boolValue;
-		int8_t byteValue;
-		int16_t shortValue;
-		int32_t intValue;
-		struct PhysicalValueType physicalValue;
-		struct service_string stringValue;
-
-
-	struct selection_ParameterType isused;
-};
-
-struct arraylen_ParameterSetType
-{
-	size_t Parameter;
-
-
-};
-
-struct ParameterSetType
-{
-	int16_t ParameterSetID;
-	struct ParameterType Parameter[3]; /* memory restricted */
-	struct arraylen_ParameterSetType arraylen;
-
-};
-
-struct arraylen_ServiceParameterListType
-{
-	size_t ParameterSet;
-
-
-};
-
-struct ServiceParameterListType
-{
-	struct ParameterSetType ParameterSet[8]; /* memory restricted */
-	struct arraylen_ServiceParameterListType arraylen;
-
-};
-
-struct selection_ServiceDetailResType
-{
-	unsigned int ServiceParameterList:1;
-
-
-};
-
-struct ServiceDetailResType
-{
-	enum responseCodeType ResponseCode;
-	uint16_t ServiceID;
-	struct ServiceParameterListType ServiceParameterList;
-	struct selection_ServiceDetailResType isused;
-
-};
-
-struct selection_SelectedServiceType
-{
-	unsigned int ParameterSetID:1;
-
-
-};
-
-struct SelectedServiceType
-{
-	uint16_t ServiceID;
-	int16_t ParameterSetID;
-	struct selection_SelectedServiceType isused;
-
-};
-
-struct arraylen_SelectedServiceListType
-{
-	size_t SelectedService;
-
-
-};
-
-struct SelectedServiceListType
-{
-	struct SelectedServiceType SelectedService[16];
-	struct arraylen_SelectedServiceListType arraylen;
-
-};
-
-struct PaymentServiceSelectionReqType
-{
-	enum paymentOptionType SelectedPaymentOption;
-	struct SelectedServiceListType SelectedServiceList;
-
-
-};
-
-struct PaymentServiceSelectionResType
-{
-	enum responseCodeType ResponseCode;
-
-
-};
-
-struct arraylen_eMAIDType
-{
-	size_t data;
-
-
-};
-
-struct eMAIDType
-{
-	uint32_t data[15];
-	struct arraylen_eMAIDType arraylen;
-
-};
-
-struct selection_CertificateChainType
-{
-	unsigned int attr_Id:1;
-	unsigned int SubCertificates:1;
-
-
-};
-
-struct arraylen_certificateType
-{
-	size_t data;
-
-
-};
-
-struct certificateType
-{
-	uint8_t data[800];
-	struct arraylen_certificateType arraylen;
-
-};
-
-struct arraylen_SubCertificatesType
-{
-	size_t Certificate;
-
-
-};
-
-struct SubCertificatesType
-{
-	struct certificateType Certificate[4];
-	struct arraylen_SubCertificatesType arraylen;
-
-};
-
-struct CertificateChainType
-{
-	struct service_string attr_Id;
-	struct certificateType Certificate;
-	struct SubCertificatesType SubCertificates;
-	struct selection_CertificateChainType isused;
-
-};
-
-struct PaymentDetailsReqType
-{
-	struct eMAIDType eMAID;
-	struct CertificateChainType ContractSignatureCertChain;
-
-
-};
-
-struct arraylen_genChallengeType
-{
-	size_t data;
-
-
-};
-
-struct genChallengeType
-{
-	uint8_t data[16];
-	struct arraylen_genChallengeType arraylen;
-
-};
-
-struct PaymentDetailsResType
-{
-	enum responseCodeType ResponseCode;
-	struct genChallengeType GenChallenge;
-	int64_t EVSETimeStamp;
-
-
-};
-
-struct selection_AuthorizationReqType
-{
-	unsigned int attr_Id:1;
-	unsigned int GenChallenge:1;
-
-
-};
-
-struct AuthorizationReqType
-{
-	struct service_string attr_Id;
-	struct genChallengeType GenChallenge;
-	struct selection_AuthorizationReqType isused;
-
-};
-
-struct AuthorizationResType
-{
-	enum responseCodeType ResponseCode;
-	enum EVSEProcessingType EVSEProcessing;
-
-
-};
-
-struct selection_ChargeParameterDiscoveryReqType
-{
-	unsigned int MaxEntriesSAScheduleTuple:1;
-	unsigned int AC_EVChargeParameter:1;
-	unsigned int DC_EVChargeParameter:1;
-
-
-};
-
-struct selection_AC_EVChargeParameterType
-{
-	unsigned int DepartureTime:1;
-
-
-};
-
-struct AC_EVChargeParameterType
-{
-	uint32_t DepartureTime;
-	struct PhysicalValueType EAmount;
-	struct PhysicalValueType EVMaxVoltage;
-	struct PhysicalValueType EVMaxCurrent;
-	struct PhysicalValueType EVMinCurrent;
-	struct selection_AC_EVChargeParameterType isused;
-
-};
-
-struct selection_DC_EVChargeParameterType
-{
-	unsigned int DepartureTime:1;
-	unsigned int EVMaximumPowerLimit:1;
-	unsigned int EVEnergyCapacity:1;
-	unsigned int EVEnergyRequest:1;
-	unsigned int FullSOC:1;
-	unsigned int BulkSOC:1;
-
-
-};
-
-struct DC_EVStatusType
-{
-	int EVReady;
-	enum DC_EVErrorCodeType EVErrorCode;
-	int8_t EVRESSSOC;
-
-
-};
-
-struct DC_EVChargeParameterType
-{
-	uint32_t DepartureTime;
-	struct DC_EVStatusType DC_EVStatus;
-	struct PhysicalValueType EVMaximumCurrentLimit;
-	struct PhysicalValueType EVMaximumPowerLimit;
-	struct PhysicalValueType EVMaximumVoltageLimit;
-	struct PhysicalValueType EVEnergyCapacity;
-	struct PhysicalValueType EVEnergyRequest;
-	int8_t FullSOC;
-	int8_t BulkSOC;
-	struct selection_DC_EVChargeParameterType isused;
-
-};
-
-struct ChargeParameterDiscoveryReqType
-{
-	uint16_t MaxEntriesSAScheduleTuple;
-	enum EnergyTransferModeType RequestedEnergyTransferMode;
-	struct AC_EVChargeParameterType* AC_EVChargeParameter;
-	struct DC_EVChargeParameterType* DC_EVChargeParameter;
-	struct selection_ChargeParameterDiscoveryReqType isused;
-
-};
-
-struct selection_RelativeTimeIntervalType
-{
-	unsigned int duration:1;
-
-
-};
-
-struct RelativeTimeIntervalType
-{
-	uint32_t start;
-	uint32_t duration;
-	struct selection_RelativeTimeIntervalType isused;
-
-};
-
-struct PMaxScheduleEntryType
-{
-	struct RelativeTimeIntervalType RelativeTimeInterval;
-	struct PhysicalValueType PMax;
-
-
-};
-
-struct arraylen_PMaxScheduleType
-{
-	size_t PMaxScheduleEntry;
-
-
-};
-
-struct PMaxScheduleType
-{
-	struct PMaxScheduleEntryType PMaxScheduleEntry[48]; /* restricted */
-	struct arraylen_PMaxScheduleType arraylen;
-
-};
-
-struct selection_SalesTariffType
-{
-	unsigned int attr_Id:1;
-	unsigned int SalesTariffDescription:1;
-	unsigned int NumEPriceLevels:1;
-
-
-};
-
-struct arraylen_tariffDescriptionType
-{
-	size_t data;
-
-
-};
-
-struct tariffDescriptionType
-{
-	uint32_t data[32];
-	struct arraylen_tariffDescriptionType arraylen;
-
-};
-
-struct selection_SalesTariffEntryType
-{
-	unsigned int EPriceLevel:1;
-	unsigned int ConsumptionCost:1;
-
-
-};
-
-struct selection_CostType
-{
-	unsigned int amountMultiplier:1;
-
-
-};
-
-struct CostType
-{
-	enum costKindType costKind;
-	uint32_t amount;
-	int8_t amountMultiplier;
-	struct selection_CostType isused;
-
-};
-
-struct arraylen_ConsumptionCostType
-{
-	size_t Cost;
-
-
-};
-
-struct ConsumptionCostType
-{
-	struct PhysicalValueType startValue;
-	struct CostType Cost[3];
-	struct arraylen_ConsumptionCostType arraylen;
-
-};
-
-struct arraylen_SalesTariffEntryType
-{
-	size_t ConsumptionCost;
-
-
-};
-
-struct SalesTariffEntryType
-{
-	struct RelativeTimeIntervalType RelativeTimeInterval;
-	uint8_t EPriceLevel;
-	struct ConsumptionCostType ConsumptionCost[3];
-	struct selection_SalesTariffEntryType isused;	struct arraylen_SalesTariffEntryType arraylen;
-
-};
-
-struct arraylen_SalesTariffType
-{
-	size_t SalesTariffEntry;
-
-
-};
-
-struct SalesTariffType
-{
-	struct service_string attr_Id;
-	uint8_t SalesTariffID;
-	struct tariffDescriptionType SalesTariffDescription;
-	uint8_t NumEPriceLevels;
-	struct SalesTariffEntryType SalesTariffEntry[24]; /* restricted */
-	struct selection_SalesTariffType isused;	struct arraylen_SalesTariffType arraylen;
-
-};
-
-struct selection_SAScheduleTupleType
-{
-	unsigned int SalesTariff:1;
-
-
-};
-
-struct SAScheduleTupleType
-{
-	uint8_t SAScheduleTupleID;
-	struct PMaxScheduleType PMaxSchedule;
-	struct SalesTariffType* SalesTariff;
-	struct selection_SAScheduleTupleType isused;
-
-};
-
-struct arraylen_SAScheduleListType
-{
-	size_t SAScheduleTuple;
-
-
-};
-
-struct SAScheduleListType
-{
-	struct SAScheduleTupleType SAScheduleTuple[3];
-	struct arraylen_SAScheduleListType arraylen;
-
-};
-
-struct selection_ChargeParameterDiscoveryResType
-{
-	unsigned int SAScheduleList:1;
-	unsigned int AC_EVSEChargeParameter:1;
-	unsigned int DC_EVSEChargeParameter:1;
-
-
-};
-
-struct AC_EVSEStatusType
-{
-	uint16_t NotificationMaxDelay;
-	enum EVSENotificationType EVSENotification;
-	int RCD;
-
-
-};
-
-struct AC_EVSEChargeParameterType
-{
-	struct AC_EVSEStatusType AC_EVSEStatus;
-	struct PhysicalValueType EVSENominalVoltage;
-	struct PhysicalValueType EVSEMaxCurrent;
-
-
-};
-
-struct selection_DC_EVSEStatusType
-{
-	unsigned int EVSEIsolationStatus:1;
-
-
-};
-
-struct DC_EVSEStatusType
-{
-	uint16_t NotificationMaxDelay;
-	enum EVSENotificationType EVSENotification;
-	enum isolationLevelType EVSEIsolationStatus;
-	enum DC_EVSEStatusCodeType EVSEStatusCode;
-	struct selection_DC_EVSEStatusType isused;
-
-};
-
-struct selection_DC_EVSEChargeParameterType
-{
-	unsigned int EVSECurrentRegulationTolerance:1;
-	unsigned int EVSEEnergyToBeDelivered:1;
-
-
-};
-
-struct DC_EVSEChargeParameterType
-{
-	struct DC_EVSEStatusType DC_EVSEStatus;
-	struct PhysicalValueType EVSEMaximumCurrentLimit;
-	struct PhysicalValueType EVSEMaximumPowerLimit;
-	struct PhysicalValueType EVSEMaximumVoltageLimit;
-	struct PhysicalValueType EVSEMinimumCurrentLimit;
-	struct PhysicalValueType EVSEMinimumVoltageLimit;
-	struct PhysicalValueType EVSECurrentRegulationTolerance;
-	struct PhysicalValueType EVSEPeakCurrentRipple;
-	struct PhysicalValueType EVSEEnergyToBeDelivered;
-	struct selection_DC_EVSEChargeParameterType isused;
-
-};
-
-struct ChargeParameterDiscoveryResType
-{
-	enum responseCodeType ResponseCode;
-	enum EVSEProcessingType EVSEProcessing;
-	struct SAScheduleListType* SAScheduleList;
-	struct AC_EVSEChargeParameterType* AC_EVSEChargeParameter;
-	struct DC_EVSEChargeParameterType* DC_EVSEChargeParameter;
-	struct selection_ChargeParameterDiscoveryResType isused;
-
-};
-
-struct selection_ProfileEntryType
-{
-	unsigned int ChargingProfileEntryMaxNumberOfPhasesInUse:1;
-
-
-};
-
-struct ProfileEntryType
-{
-	uint32_t ChargingProfileEntryStart;
-	struct PhysicalValueType ChargingProfileEntryMaxPower;
-	int8_t ChargingProfileEntryMaxNumberOfPhasesInUse;
-	struct selection_ProfileEntryType isused;
-
-};
-
-struct arraylen_ChargingProfileType
-{
-	size_t ProfileEntry;
-
-
-};
-
-struct ChargingProfileType
-{
-	struct ProfileEntryType ProfileEntry[24];
-	struct arraylen_ChargingProfileType arraylen;
-
-};
-
-struct selection_PowerDeliveryReqType
-{
-	unsigned int ChargingProfile:1;
-	unsigned int DC_EVPowerDeliveryParameter:1;
-
-
-};
-
-struct selection_DC_EVPowerDeliveryParameterType
-{
-	unsigned int BulkChargingComplete:1;
-
-
-};
-
-struct DC_EVPowerDeliveryParameterType
-{
-	struct DC_EVStatusType DC_EVStatus;
-	int BulkChargingComplete;
-	int ChargingComplete;
-	struct selection_DC_EVPowerDeliveryParameterType isused;
-
-};
-
-struct PowerDeliveryReqType
-{
-	enum chargeProgressType ChargeProgress;
-	uint8_t SAScheduleTupleID;
-	struct ChargingProfileType ChargingProfile;
-	struct DC_EVPowerDeliveryParameterType* DC_EVPowerDeliveryParameter;
-	struct selection_PowerDeliveryReqType isused;
-
-};
-
-struct selection_PowerDeliveryResType
-{
-	unsigned int AC_EVSEStatus:1;
-	unsigned int DC_EVSEStatus:1;
-
-
-};
-
-struct PowerDeliveryResType
-{
-	enum responseCodeType ResponseCode;
-	struct AC_EVSEStatusType* AC_EVSEStatus;
-	struct DC_EVSEStatusType* DC_EVSEStatus;
-	struct selection_PowerDeliveryResType isused;
-
-};
-
-struct selection_MeteringReceiptReqType
-{
-	unsigned int attr_Id:1;
-	unsigned int SAScheduleTupleID:1;
-
-
-};
-
-struct arraylen_meterIDType
-{
-	size_t data;
-
-
-};
-
-struct meterIDType
-{
-	uint32_t data[32];
-	struct arraylen_meterIDType arraylen;
-
-};
-
-struct selection_MeterInfoType
-{
-	unsigned int MeterReading:1;
-	unsigned int SigMeterReading:1;
-	unsigned int MeterStatus:1;
-	unsigned int TMeter:1;
-
-
-};
-
-struct arraylen_sigMeterReadingType
-{
-	size_t data;
-
-
-};
-
-struct sigMeterReadingType
-{
-	uint8_t data[64];
-	struct arraylen_sigMeterReadingType arraylen;
-
-};
-
-struct MeterInfoType
-{
-	struct meterIDType MeterID;
-	uint64_t MeterReading;
-	struct sigMeterReadingType SigMeterReading;
-	int16_t MeterStatus;
-	int64_t TMeter;
-	struct selection_MeterInfoType isused;
-
-};
-
-struct MeteringReceiptReqType
-{
-	struct service_string attr_Id;
-	struct sessionIDType SessionID;
-	uint8_t SAScheduleTupleID;
-	struct MeterInfoType MeterInfo;
-	struct selection_MeteringReceiptReqType isused;
-
-};
-
-struct selection_MeteringReceiptResType
-{
-	unsigned int AC_EVSEStatus:1;
-	unsigned int DC_EVSEStatus:1;
-
-
-};
-
-struct MeteringReceiptResType
-{
-	enum responseCodeType ResponseCode;
-	struct AC_EVSEStatusType* AC_EVSEStatus;
-	struct DC_EVSEStatusType* DC_EVSEStatus;
-	struct selection_MeteringReceiptResType isused;
-
-};
-
-struct SessionStopReqType
-{
-	enum chargingSessionType ChargingSession;
-
-
-};
-
-struct SessionStopResType
-{
-	enum responseCodeType ResponseCode;
-
-
-};
-
-struct X509IssuerSerialType
-{
-	struct service_string X509IssuerName;
-	int64_t X509SerialNumber;
-
-
-};
-
-struct arraylen_ListOfRootCertificateIDsType
-{
-	size_t RootCertificateID;
-
-
-};
-
-struct ListOfRootCertificateIDsType
-{
-	struct X509IssuerSerialType RootCertificateID[20];
-	struct arraylen_ListOfRootCertificateIDsType arraylen;
-
-};
-
-struct CertificateUpdateReqType
-{
-	struct service_string attr_Id;
-	struct CertificateChainType ContractSignatureCertChain;
-	struct eMAIDType eMAID;
-	struct ListOfRootCertificateIDsType ListOfRootCertificateIDs;
-
-
-};
-
-struct arraylen_contractSignatureEncryptedPrivateKeyType
-{
-	size_t data;
-};
-
-struct ContractSignatureEncryptedPrivateKeyType
-{
-	struct service_string attr_Id;
-	uint8_t data[8];
-	struct arraylen_contractSignatureEncryptedPrivateKeyType arraylen;
-
-
-};
-
-struct arraylen_diffieHellmanPublickeyType
-{
-	size_t data;
-};
-
-struct DiffieHellmanPublickeyType
-{
-	struct service_string attr_Id;
-	uint8_t data[8];
-	struct arraylen_diffieHellmanPublickeyType arraylen;
-
-
-};
-
-struct EMAIDType
-{
-	struct service_string attr_Id;
-	uint32_t data[15];
-	struct arraylen_eMAIDType arraylen;
-
-};
-
-struct selection_CertificateUpdateResType
-{
-	unsigned int RetryCounter:1;
-
-
-};
-
-struct CertificateUpdateResType
-{
-	enum responseCodeType ResponseCode;
-	struct CertificateChainType SAProvisioningCertificateChain;
-	struct CertificateChainType ContractSignatureCertChain;
-	struct ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey;
-	struct DiffieHellmanPublickeyType DHpublickey;
-	struct EMAIDType eMAID;
-	int16_t RetryCounter;
-	struct selection_CertificateUpdateResType isused;
-
-};
-
-struct CertificateInstallationReqType
-{
-	struct service_string attr_Id;
-	struct certificateType OEMProvisioningCert;
-	struct ListOfRootCertificateIDsType ListOfRootCertificateIDs;
-
-
-};
-
-struct CertificateInstallationResType
-{
-	enum responseCodeType ResponseCode;
-	struct CertificateChainType SAProvisioningCertificateChain;
-	struct CertificateChainType ContractSignatureCertChain;
-	struct ContractSignatureEncryptedPrivateKeyType ContractSignatureEncryptedPrivateKey;
-	struct DiffieHellmanPublickeyType DHpublickey;
-	struct EMAIDType eMAID;
-
-
-};
-
-struct ChargingStatusReqType
-{
-
- 
-	int NO_MEMBER:1;
-	
-};
-
-struct selection_ChargingStatusResType
-{
-	unsigned int EVSEMaxCurrent:1;
-	unsigned int MeterInfo:1;
-	unsigned int ReceiptRequired:1;
-
-
-};
-
-struct ChargingStatusResType
-{
-	enum responseCodeType ResponseCode;
-	struct evseIDType EVSEID;
-	uint8_t SAScheduleTupleID;
-	struct PhysicalValueType EVSEMaxCurrent;
-	struct MeterInfoType MeterInfo;
-	int ReceiptRequired;
-	struct AC_EVSEStatusType AC_EVSEStatus;
-	struct selection_ChargingStatusResType isused;
-
-};
-
-struct CableCheckReqType
-{
-	struct DC_EVStatusType DC_EVStatus;
-
-
-};
-
-struct CableCheckResType
-{
-	enum responseCodeType ResponseCode;
-	struct DC_EVSEStatusType DC_EVSEStatus;
-	enum EVSEProcessingType EVSEProcessing;
-
-
-};
-
-struct PreChargeReqType
-{
-	struct DC_EVStatusType DC_EVStatus;
-	struct PhysicalValueType EVTargetVoltage;
-	struct PhysicalValueType EVTargetCurrent;
-
-
-};
-
-struct PreChargeResType
-{
-	enum responseCodeType ResponseCode;
-	struct DC_EVSEStatusType DC_EVSEStatus;
-	struct PhysicalValueType EVSEPresentVoltage;
-
-
-};
-
-struct selection_CurrentDemandReqType
-{
-	unsigned int EVMaximumVoltageLimit:1;
-	unsigned int EVMaximumCurrentLimit:1;
-	unsigned int EVMaximumPowerLimit:1;
-	unsigned int BulkChargingComplete:1;
-	unsigned int RemainingTimeToFullSoC:1;
-	unsigned int RemainingTimeToBulkSoC:1;
-
-
-};
-
-struct CurrentDemandReqType
-{
-	struct DC_EVStatusType DC_EVStatus;
-	struct PhysicalValueType EVTargetCurrent;
-	struct PhysicalValueType EVMaximumVoltageLimit;
-	struct PhysicalValueType EVMaximumCurrentLimit;
-	struct PhysicalValueType EVMaximumPowerLimit;
-	int BulkChargingComplete;
-	int ChargingComplete;
-	struct PhysicalValueType RemainingTimeToFullSoC;
-	struct PhysicalValueType RemainingTimeToBulkSoC;
-	struct PhysicalValueType EVTargetVoltage;
-	struct selection_CurrentDemandReqType isused;
-
-};
-
-struct selection_CurrentDemandResType
-{
-	unsigned int EVSEMaximumVoltageLimit:1;
-	unsigned int EVSEMaximumCurrentLimit:1;
-	unsigned int EVSEMaximumPowerLimit:1;
-	unsigned int MeterInfo:1;
-	unsigned int ReceiptRequired:1;
-
-
-};
-
-struct CurrentDemandResType
-{
-	enum responseCodeType ResponseCode;
-	struct DC_EVSEStatusType DC_EVSEStatus;
-	struct PhysicalValueType EVSEPresentVoltage;
-	struct PhysicalValueType EVSEPresentCurrent;
-	int EVSECurrentLimitAchieved;
-	int EVSEVoltageLimitAchieved;
-	int EVSEPowerLimitAchieved;
-	struct PhysicalValueType EVSEMaximumVoltageLimit;
-	struct PhysicalValueType EVSEMaximumCurrentLimit;
-	struct PhysicalValueType EVSEMaximumPowerLimit;
-	struct evseIDType EVSEID;
-	uint8_t SAScheduleTupleID;
-	struct MeterInfoType MeterInfo;
-	int ReceiptRequired;
-	struct selection_CurrentDemandResType isused;
-
-};
-
-struct WeldingDetectionReqType
-{
-	struct DC_EVStatusType DC_EVStatus;
-
-
-};
-
-struct WeldingDetectionResType
-{
-	enum responseCodeType ResponseCode;
-	struct DC_EVSEStatusType DC_EVSEStatus;
-	struct PhysicalValueType EVSEPresentVoltage;
-
-
-};
-
-struct BodyType
-{
-
-		struct SessionSetupReqType* SessionSetupReq;
-		struct SessionSetupResType* SessionSetupRes;
-		struct ServiceDiscoveryReqType* ServiceDiscoveryReq;
-		struct ServiceDiscoveryResType* ServiceDiscoveryRes;
-		struct ServiceDetailReqType* ServiceDetailReq;
-		struct ServiceDetailResType* ServiceDetailRes;
-		struct PaymentServiceSelectionReqType* PaymentServiceSelectionReq;
-		struct PaymentServiceSelectionResType* PaymentServiceSelectionRes;
-		struct PaymentDetailsReqType* PaymentDetailsReq;
-		struct PaymentDetailsResType* PaymentDetailsRes;
-		struct AuthorizationReqType* AuthorizationReq;
-		struct AuthorizationResType* AuthorizationRes;
-		struct ChargeParameterDiscoveryReqType* ChargeParameterDiscoveryReq;
-		struct ChargeParameterDiscoveryResType* ChargeParameterDiscoveryRes;
-		struct PowerDeliveryReqType* PowerDeliveryReq;
-		struct PowerDeliveryResType* PowerDeliveryRes;
-		struct MeteringReceiptReqType* MeteringReceiptReq;
-		struct MeteringReceiptResType* MeteringReceiptRes;
-		struct SessionStopReqType* SessionStopReq;
-		struct SessionStopResType* SessionStopRes;
-		struct CertificateUpdateReqType* CertificateUpdateReq;
-		struct CertificateUpdateResType* CertificateUpdateRes;
-		struct CertificateInstallationReqType* CertificateInstallationReq;
-		struct CertificateInstallationResType* CertificateInstallationRes;
-		struct ChargingStatusReqType* ChargingStatusReq;
-		struct ChargingStatusResType* ChargingStatusRes;
-		struct CableCheckReqType* CableCheckReq;
-		struct CableCheckResType* CableCheckRes;
-		struct PreChargeReqType* PreChargeReq;
-		struct PreChargeResType* PreChargeRes;
-		struct CurrentDemandReqType* CurrentDemandReq;
-		struct CurrentDemandResType* CurrentDemandRes;
-		struct WeldingDetectionReqType* WeldingDetectionReq;
-		struct WeldingDetectionResType* WeldingDetectionRes;
-
-	struct selection_BodyType isused;
-};
-
-struct AnonType_V2G_Message
-{
-	struct MessageHeaderType* Header;
-	struct BodyType Body;
-
-
-};
-
-struct EXIDocumentType
-{
-	struct AnonType_V2G_Message V2G_Message;
-
-
-};
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 83
src/service/v2g_service.h

@@ -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 <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- ********************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef EXI_SERVICE_H_
-#define EXI_SERVICE_H_
-
-#include "v2g_dataTypes.h"
-#include "EXITypes.h"
-
-struct uniqueIDPath
-{
-	int id[10];
-	size_t pos;
-};
-
-
-struct EXIService
-{
-	/* in-/ out-stream */
-	bitstream_t inStream;
-	bitstream_t outStream;
-
-	/* EXI */
-	exi_state_t stateDecode;
-	exi_state_t stateEncode;
-	exi_event_t event;
-	uint16_t qnameID;
-	exi_value_t val;
-
-	/* v2g message data structure */
-	struct EXIDocumentType exiMsg;
-
-	/* unique id for ambiguous elements */
-	struct uniqueIDPath idPath;
-
-	/* error code */
-	uint8_t errorCode;
-
-	/* offset for transported header data */
-	uint16_t transportHeaderOffset;
-};
-
-
-/* define error codes  */
-#define EXI_NON_VALID_MESSAGE 0x01
-#define EXI_SERIALIZATION_FAILED 0x02
-#define EXI_DESERIALIZATION_FAILED 0x03
-#define EXI_DATATYPE_FAILED 0x04
-#define EXI_VALUE_RANGE_FAILED 0x05
-
-#define EXI_UNKNOWN_ERROR 0xFF
-
-#endif /* EXI_SERVICE_H_ */
-
-#ifdef __cplusplus
-}
-#endif

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2615
src/service/v2g_serviceClientStubs.c


+ 0 - 322
src/service/v2g_serviceClientStubs.h

@@ -1,322 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
- 
- 
- #ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef SERVICECLIENTSTUBS_H
-#define SERVICECLIENTSTUBS_H
-
- #include "v2g_service.h"
- #include "v2g_dataTypes.h"
- #include "v2g_serviceClientStubs.h"
-
-
-enum responseMessages
-{
-	 SESSIONSETUPRES,
-
-	 SERVICEDISCOVERYRES,
-
-	 SERVICEDETAILRES,
-
-	 PAYMENTSERVICESELECTIONRES,
-
-	 PAYMENTDETAILSRES,
-
-	 AUTHORIZATIONRES,
-
-	 CHARGEPARAMETERDISCOVERYRES,
-
-	 POWERDELIVERYRES,
-
-	 CHARGINGSTATUSRES,
-
-	 METERINGRECEIPTRES,
-
-	 CERTIFICATEUPDATERES,
-
-	 CERTIFICATEINSTALLATIONRES,
-
-	 CABLECHECKRES,
-
-	 PRECHARGERES,
-
-	 CURRENTDEMANDRES,
-
-	 WELDINGDETECTIONRES,
-
-	 SESSIONSTOPRES
-
-};
- 
-/**  
- * \brief   Prepares the remote sessionSetup call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct SessionSetupReqType* Request data for the server (has to be set up before)
- * \param	result   struct SessionSetupResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_sessionSetup(struct EXIService* service, struct MessageHeaderType* header, struct SessionSetupReqType* params, struct SessionSetupResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote serviceDiscovery call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct ServiceDiscoveryReqType* Request data for the server (has to be set up before)
- * \param	result   struct ServiceDiscoveryResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_serviceDiscovery(struct EXIService* service, struct MessageHeaderType* header, struct ServiceDiscoveryReqType* params, struct ServiceDiscoveryResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote serviceDetail call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct ServiceDetailReqType* Request data for the server (has to be set up before)
- * \param	result   struct ServiceDetailResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_serviceDetail(struct EXIService* service, struct MessageHeaderType* header, struct ServiceDetailReqType* params, struct ServiceDetailResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote paymentServiceSelection call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct PaymentServiceSelectionReqType* Request data for the server (has to be set up before)
- * \param	result   struct PaymentServiceSelectionResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_paymentServiceSelection(struct EXIService* service, struct MessageHeaderType* header, struct PaymentServiceSelectionReqType* params, struct PaymentServiceSelectionResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote paymentDetails call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct PaymentDetailsReqType* Request data for the server (has to be set up before)
- * \param	result   struct PaymentDetailsResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_paymentDetails(struct EXIService* service, struct MessageHeaderType* header, struct PaymentDetailsReqType* params, struct PaymentDetailsResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote authorization call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct AuthorizationReqType* Request data for the server (has to be set up before)
- * \param	result   struct AuthorizationResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_authorization(struct EXIService* service, struct MessageHeaderType* header, struct AuthorizationReqType* params, struct AuthorizationResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote chargeParameterDiscovery call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct ChargeParameterDiscoveryReqType* Request data for the server (has to be set up before)
- * \param	result   struct ChargeParameterDiscoveryResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_chargeParameterDiscovery(struct EXIService* service, struct MessageHeaderType* header, struct ChargeParameterDiscoveryReqType* params, struct ChargeParameterDiscoveryResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote powerDelivery call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct PowerDeliveryReqType* Request data for the server (has to be set up before)
- * \param	result   struct PowerDeliveryResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_powerDelivery(struct EXIService* service, struct MessageHeaderType* header, struct PowerDeliveryReqType* params, struct PowerDeliveryResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote chargingStatus call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
-  * \param	result   struct ChargingStatusResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_chargingStatus(struct EXIService* service, struct MessageHeaderType* header, struct ChargingStatusResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote meteringReceipt call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct MeteringReceiptReqType* Request data for the server (has to be set up before)
- * \param	result   struct MeteringReceiptResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_meteringReceipt(struct EXIService* service, struct MessageHeaderType* header, struct MeteringReceiptReqType* params, struct MeteringReceiptResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote certificateUpdate call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct CertificateUpdateReqType* Request data for the server (has to be set up before)
- * \param	result   struct CertificateUpdateResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_certificateUpdate(struct EXIService* service, struct MessageHeaderType* header, struct CertificateUpdateReqType* params, struct CertificateUpdateResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote certificateInstallation call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct CertificateInstallationReqType* Request data for the server (has to be set up before)
- * \param	result   struct CertificateInstallationResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_certificateInstallation(struct EXIService* service, struct MessageHeaderType* header, struct CertificateInstallationReqType* params, struct CertificateInstallationResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote cableCheck call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct CableCheckReqType* Request data for the server (has to be set up before)
- * \param	result   struct CableCheckResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_cableCheck(struct EXIService* service, struct MessageHeaderType* header, struct CableCheckReqType* params, struct CableCheckResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote preCharge call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct PreChargeReqType* Request data for the server (has to be set up before)
- * \param	result   struct PreChargeResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_preCharge(struct EXIService* service, struct MessageHeaderType* header, struct PreChargeReqType* params, struct PreChargeResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote currentDemand call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct CurrentDemandReqType* Request data for the server (has to be set up before)
- * \param	result   struct CurrentDemandResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_currentDemand(struct EXIService* service, struct MessageHeaderType* header, struct CurrentDemandReqType* params, struct CurrentDemandResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote weldingDetection call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct WeldingDetectionReqType* Request data for the server (has to be set up before)
- * \param	result   struct WeldingDetectionResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_weldingDetection(struct EXIService* service, struct MessageHeaderType* header, struct WeldingDetectionReqType* params, struct WeldingDetectionResType* result);
-
- 
-
-	
-/**  
- * \brief   Prepares the remote sessionStop call
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	header   struct MessageHeaderType* Header data structure
- * \param	params   struct SessionStopReqType* Request data for the server (has to be set up before)
- * \param	result   struct SessionStopResType* Contains the response data from the server 
- * \return  0 = 0K; -1 = ERROR */
-	int prepare_sessionStop(struct EXIService* service, struct MessageHeaderType* header, struct SessionStopReqType* params, struct SessionStopResType* result);
-
- 
-
-	
-
-
- /** 
- * \brief   Determines which response message was received
- * \param	service  struct EXIService* Service data structure (has to be initialized before)
- * \param	respMsg   enum responseMessages* contains the name of the response message 
-  * \param	result   struct SessionStopResType* Contains the response data from the server 
- * \return  0 = 0K; 0 != ERROR */ 
-int determineResponseMessage(struct EXIService* service, enum responseMessages* respMsg);
-
-
-
-/** 
- * \brief  Initialize the v2g client
- * \param	service   struct EXIService* Service data structure
- * \param	service_bytes exi_bytes_t  Reserved for byte handling
- * \param	service_string exi_string_ucs_t  Reserved for string handling
- * \param	inStream  uint8_t* Instream buffer
- * \param	max_inStream_size size_t  Max size for an instream message
- * \param	outStream  uint8_t* Outstream buffer
- * \param   outPayloadLength uint32_t* Provides the length of the encoded request EXI message
- * \param	max_outStream_size size_t  Max size for an outstream message
- * \param	transportHeaderOffset uint16_t Transport protocol offset
- * \return  0 = 0K; -1 = ERROR
- */
-int init_v2gServiceClient(struct EXIService* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size,uint32_t* outPayloadLength, uint16_t transportHeaderOffset);
- 
- 
-
- 
- 
-
- 
- 
-#endif
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 7504
src/service/v2g_serviceDataSerialization.c

@@ -1,7504 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-#include "v2g_service.h"
-#include "v2g_dataTypes.h"
-#include "EXITypes.h"
-#include "v2gEXIEncoder.h"
-#include "v2gQNameDefines.h"
-#include "StringNameTable.h"
-#include <string.h>
-
- uint16_t numberOfLocalStringsEncode[EXI_v2gMAX_NUMBER_OF_QNAMES];
- 
- 
- 
- 
- 
- 
-
-static int serialize_NotificationType(struct NotificationType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element FaultCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 332)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->FaultCode;
-		   
-			
-			/* encode character  FaultCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of FaultCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.FaultMsg)
-		{		
-						
-
-
-			/* encode start element FaultMsg */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 333)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->FaultMsg.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->FaultMsg.data,type->FaultMsg.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  FaultMsg */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of FaultMsg */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_CanonicalizationMethodType(struct CanonicalizationMethodType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Algorithm.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Algorithm.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 0,&(service->val)))
-			{
-					return -1;
-			}
-
-
-	return 0;			
-}
-
-
-static int serialize_SignatureMethodType(struct SignatureMethodType* type, 
-struct EXIService* service)
-{
-		
-			uint32_t temp[1];
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Algorithm.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Algorithm.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 0,&(service->val)))
-			{
-					return -1;
-			}
-
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = 0;
-
-			temp[0]='\0';
-			memcpy(service->val.str.miss.codepoints, temp,0);
-
-
-
-			/* encode character
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-					return -1;
-			}
-
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));*/
-
-
-	return 0;			
-}
-
-
-static int serialize_DigestMethodType(struct DigestMethodType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Algorithm.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Algorithm.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 0,&(service->val)))
-			{
-					return -1;
-			}
-
-
-	return 0;			
-}
-
-
-static int serialize_ReferenceType(struct ReferenceType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 2,&(service->val)))
-			{
-					return -1;
-			}
-		}
-
-	if(type->isused.attr_Type)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Type.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Type.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 5,&(service->val)))
-			{
-					return -1;
-			}
-		}
-
-	if(type->isused.attr_URI)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_URI.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_URI.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 6,&(service->val)))
-			{
-					return -1;
-			}
-		}
-		
-
-
-			/* encode start element DigestMethod */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 64)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DigestMethod */
-			if(serialize_DigestMethodType( &(type->DigestMethod),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DigestMethod */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DigestValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 66)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->DigestValue.arraylen.data;
-		    memcpy(service->val.binary.data, type->DigestValue.data,type->DigestValue.arraylen.data);
-		   
-
-		
-		
-		/* encode character  DigestValue */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of DigestValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_SignedInfoType(struct SignedInfoType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 2,&(service->val)))
-			{
-					return -1;
-			}
-		}
-		
-
-
-			/* encode start element CanonicalizationMethod */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 59)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CanonicalizationMethod */
-			if(serialize_CanonicalizationMethodType( &(type->CanonicalizationMethod),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CanonicalizationMethod */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SignatureMethod */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 102)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SignatureMethod */
-			if(serialize_SignatureMethodType( &(type->SignatureMethod),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SignatureMethod */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	for(i_loop=0;i_loop < type->arraylen.Reference;i_loop++)
-		{
-				
-
-
-			/* encode start element Reference */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 93)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of Reference */
-			if(serialize_ReferenceType(&(type->Reference[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of Reference */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-
-
-
-static int serialize_SignatureType(struct SignatureType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 2,&(service->val)))
-			{
-					return -1;
-			}
-		}
-		
-
-
-			/* encode start element SignedInfo */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 111)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SignedInfo */
-			if(serialize_SignedInfoType( &(type->SignedInfo),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SignedInfo */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SignatureValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 109)) 
-			{
-					return -1;
-			}
-						
-
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-			service->val.binary.len = type->SignatureValue.arraylen.data;
-			service->val.binary.data= type->SignatureValue.data;
-
-			/* encode character  */
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-					return -1;
-			}
-
-			
-			 
-			/* encode end element of SignatureValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_MessageHeaderType(struct MessageHeaderType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element SessionID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 447)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_HEX;
-		    service->val.binary.len = type->SessionID.arraylen.data;
-		    memcpy(service->val.binary.data, type->SessionID.data,type->SessionID.arraylen.data);
-		   
-
-		
-		
-		/* encode character  SessionID */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of SessionID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.Notification)
-		{		
-						
-
-
-			/* encode start element Notification */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 446)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of Notification */
-			if(serialize_NotificationType( &(type->Notification),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of Notification */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.Signature)
-		{		
-						
-
-
-			/* encode start element Signature */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 101)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of Signature */
-			if(serialize_SignatureType( (type->Signature),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of Signature */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SessionSetupReqType(struct SessionSetupReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element EVCCID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 172)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_HEX;
-		    service->val.binary.len = type->EVCCID.arraylen.data;
-		    memcpy(service->val.binary.data, type->EVCCID.data,type->EVCCID.arraylen.data);
-		   
-
-		
-		
-		/* encode character  EVCCID */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of EVCCID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_SessionSetupResType(struct SessionSetupResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 177)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->EVSEID.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->EVSEID.data,type->EVSEID.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  EVSEID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of EVSEID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVSETimeStamp)
-		{		
-						
-
-
-			/* encode start element EVSETimeStamp */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 186)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int64=type->EVSETimeStamp;
-		   
-			service->val.integer.type = EXI_INTEGER_64;
-			
-			/* encode character  EVSETimeStamp */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSETimeStamp */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ServiceDiscoveryReqType(struct ServiceDiscoveryReqType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.ServiceScope)
-		{		
-						
-
-
-			/* encode start element ServiceScope */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 239)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->ServiceScope.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->ServiceScope.data,type->ServiceScope.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  ServiceScope */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of ServiceScope */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ServiceCategory)
-		{		
-						
-
-
-			/* encode start element ServiceCategory */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 227)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ServiceCategory;
-		   
-			
-			/* encode character  ServiceCategory */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceCategory */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_PaymentOptionListType(struct PaymentOptionListType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.PaymentOption;i_loop++)
-		{
-				
-
-
-			/* encode start element PaymentOption */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 358)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->PaymentOption[i_loop];
-			
-			/* encode character  PaymentOption */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of PaymentOption */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SupportedEnergyTransferModeType(struct SupportedEnergyTransferModeType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.EnergyTransferMode;i_loop++)
-		{
-				
-
-
-			/* encode start element EnergyTransferMode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 328)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EnergyTransferMode[i_loop];
-			
-			/* encode character  EnergyTransferMode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EnergyTransferMode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ChargeServiceType(struct ChargeServiceType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ServiceID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 386)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->ServiceID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  ServiceID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ServiceName)
-		{		
-						
-
-
-			/* encode start element ServiceName */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 388)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->ServiceName.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->ServiceName.data,type->ServiceName.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  ServiceName */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of ServiceName */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element ServiceCategory */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 385)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ServiceCategory;
-		   
-			
-			/* encode character  ServiceCategory */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceCategory */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ServiceScope)
-		{		
-						
-
-
-			/* encode start element ServiceScope */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 390)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->ServiceScope.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->ServiceScope.data,type->ServiceScope.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  ServiceScope */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of ServiceScope */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element FreeService */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 334)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->FreeService;
-		   
-			
-			/* encode character  FreeService */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of FreeService */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SupportedEnergyTransferMode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 395)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SupportedEnergyTransferMode */
-			if(serialize_SupportedEnergyTransferModeType( &(type->SupportedEnergyTransferMode),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SupportedEnergyTransferMode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_ServiceType(struct ServiceType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ServiceID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 386)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->ServiceID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  ServiceID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ServiceName)
-		{		
-						
-
-
-			/* encode start element ServiceName */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 388)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->ServiceName.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->ServiceName.data,type->ServiceName.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  ServiceName */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of ServiceName */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element ServiceCategory */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 385)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ServiceCategory;
-		   
-			
-			/* encode character  ServiceCategory */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceCategory */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ServiceScope)
-		{		
-						
-
-
-			/* encode start element ServiceScope */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 390)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->ServiceScope.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->ServiceScope.data,type->ServiceScope.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  ServiceScope */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of ServiceScope */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element FreeService */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 334)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->FreeService;
-		   
-			
-			/* encode character  FreeService */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of FreeService */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_ServiceListType(struct ServiceListType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.Service;i_loop++)
-		{
-				
-
-
-			/* encode start element Service */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 384)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of Service */
-			if(serialize_ServiceType(&(type->Service[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of Service */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ServiceDiscoveryResType(struct ServiceDiscoveryResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element PaymentOptionList */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 204)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PaymentOptionList */
-			if(serialize_PaymentOptionListType( &(type->PaymentOptionList),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PaymentOptionList */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ChargeService */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 155)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargeService */
-			if(serialize_ChargeServiceType( &(type->ChargeService),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargeService */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ServiceList)
-		{		
-						
-
-
-			/* encode start element ServiceList */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 237)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ServiceList */
-			if(serialize_ServiceListType( &(type->ServiceList),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ServiceList */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ServiceDetailReqType(struct ServiceDetailReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ServiceID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 236)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->ServiceID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  ServiceID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PhysicalValueType(struct PhysicalValueType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element Multiplier */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 343)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->Multiplier;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  Multiplier */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of Multiplier */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element Unit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 399)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->Unit;
-		   
-			
-			/* encode character  Unit */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of Unit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element Value */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 400)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int16=type->Value;
-		   
-			service->val.integer.type = EXI_INTEGER_16;
-			
-			/* encode character  Value */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of Value */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_ParameterType(struct ParameterType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Name.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Name.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 344,&(service->val)))
-			{
-					return -1;
-			}
-
-	if(type->isused.boolValue)
-		{		
-						
-
-
-			/* encode start element boolValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 403)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->boolValue;
-		   
-			
-			/* encode character  boolValue */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of boolValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.byteValue)
-		{		
-						
-
-
-			/* encode start element byteValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 404)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->byteValue;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  byteValue */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of byteValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.shortValue)
-		{		
-						
-
-
-			/* encode start element shortValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 433)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int16=type->shortValue;
-		   
-			service->val.integer.type = EXI_INTEGER_16;
-			
-			/* encode character  shortValue */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of shortValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.intValue)
-		{		
-						
-
-
-			/* encode start element intValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 418)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int32=type->intValue;
-		   
-			service->val.integer.type = EXI_INTEGER_32;
-			
-			/* encode character  intValue */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of intValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.physicalValue)
-		{		
-						
-
-
-			/* encode start element physicalValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 425)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of physicalValue */
-			if(serialize_PhysicalValueType( &(type->physicalValue),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of physicalValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.stringValue)
-		{		
-						
-
-
-			/* encode start element stringValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 437)) 
-			{
-					return -1;
-			}
-			
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->stringValue.arraylen.data;
-			service->val.str.miss.codepoints= type->stringValue.data;
-			
-			/* encode character  stringValue */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of stringValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ParameterSetType(struct ParameterSetType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-			
-
-
-			/* encode start element ParameterSetID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 355)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int16=type->ParameterSetID;
-		   
-			service->val.integer.type = EXI_INTEGER_16;
-			
-			/* encode character  ParameterSetID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ParameterSetID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	for(i_loop=0;i_loop < type->arraylen.Parameter;i_loop++)
-		{
-				
-
-
-			/* encode start element Parameter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 353)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of Parameter */
-			if(serialize_ParameterType(&(type->Parameter[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of Parameter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ServiceParameterListType(struct ServiceParameterListType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.ParameterSet;i_loop++)
-		{
-				
-
-
-			/* encode start element ParameterSet */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 354)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of ParameterSet */
-			if(serialize_ParameterSetType(&(type->ParameterSet[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of ParameterSet */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ServiceDetailResType(struct ServiceDetailResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ServiceID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 236)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->ServiceID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  ServiceID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ServiceParameterList)
-		{		
-						
-
-
-			/* encode start element ServiceParameterList */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 238)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ServiceParameterList */
-			if(serialize_ServiceParameterListType( &(type->ServiceParameterList),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ServiceParameterList */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SelectedServiceType(struct SelectedServiceType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ServiceID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 386)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->ServiceID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  ServiceID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ServiceID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ParameterSetID)
-		{		
-						
-
-
-			/* encode start element ParameterSetID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 355)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int16=type->ParameterSetID;
-		   
-			service->val.integer.type = EXI_INTEGER_16;
-			
-			/* encode character  ParameterSetID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ParameterSetID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SelectedServiceListType(struct SelectedServiceListType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.SelectedService;i_loop++)
-		{
-				
-
-
-			/* encode start element SelectedService */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 381)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of SelectedService */
-			if(serialize_SelectedServiceType(&(type->SelectedService[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of SelectedService */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_PaymentServiceSelectionReqType(struct PaymentServiceSelectionReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element SelectedPaymentOption */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 225)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->SelectedPaymentOption;
-		   
-			
-			/* encode character  SelectedPaymentOption */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SelectedPaymentOption */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SelectedServiceList */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 226)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SelectedServiceList */
-			if(serialize_SelectedServiceListType( &(type->SelectedServiceList),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SelectedServiceList */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PaymentServiceSelectionResType(struct PaymentServiceSelectionResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_SubCertificatesType(struct SubCertificatesType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.Certificate;i_loop++)
-		{
-				
-
-
-			/* encode start element Certificate */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 262)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->Certificate[i_loop].arraylen.data;
-		    memcpy(service->val.binary.data, type->Certificate[i_loop].data,type->Certificate[i_loop].arraylen.data);
-
-		
-		
-		/* encode character  Certificate */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of Certificate */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_CertificateChainType(struct CertificateChainType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 336,&(service->val)))
-			{
-					return -1;
-			}
-		}
-		
-
-
-			/* encode start element Certificate */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 262)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->Certificate.arraylen.data;
-		    memcpy(service->val.binary.data, type->Certificate.data,type->Certificate.arraylen.data);
-		   
-
-		
-		
-		/* encode character  Certificate */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of Certificate */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.SubCertificates)
-		{		
-						
-
-
-			/* encode start element SubCertificates */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 393)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SubCertificates */
-			if(serialize_SubCertificatesType( &(type->SubCertificates),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SubCertificates */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_PaymentDetailsReqType(struct PaymentDetailsReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element eMAID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 253)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->eMAID.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->eMAID.data,type->eMAID.arraylen.data*sizeof(uint32_t));
-		   
-
-
-
-				
-		
-			/* encode character  eMAID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of eMAID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ContractSignatureCertChain */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 163)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ContractSignatureCertChain */
-			if(serialize_CertificateChainType( &(type->ContractSignatureCertChain),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ContractSignatureCertChain */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PaymentDetailsResType(struct PaymentDetailsResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element GenChallenge */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 190)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->GenChallenge.arraylen.data;
-		    memcpy(service->val.binary.data, type->GenChallenge.data,type->GenChallenge.arraylen.data);
-		   
-
-		
-		
-		/* encode character  GenChallenge */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of GenChallenge */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSETimeStamp */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 186)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int64=type->EVSETimeStamp;
-		   
-			service->val.integer.type = EXI_INTEGER_64;
-			
-			/* encode character  EVSETimeStamp */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSETimeStamp */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_AuthorizationReqType(struct AuthorizationReqType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 191,&(service->val)))
-			{
-					return -1;
-			}
-		}
-
-	if(type->isused.GenChallenge)
-		{		
-						
-
-
-			/* encode start element GenChallenge */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 190)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->GenChallenge.arraylen.data;
-		    memcpy(service->val.binary.data, type->GenChallenge.data,type->GenChallenge.arraylen.data);
-		   
-
-		
-		
-		/* encode character  GenChallenge */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of GenChallenge */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_AuthorizationResType(struct AuthorizationResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEProcessing */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 185)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSEProcessing;
-		   
-			
-			/* encode character  EVSEProcessing */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEProcessing */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_AC_EVChargeParameterType(struct AC_EVChargeParameterType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.DepartureTime)
-		{		
-						
-
-
-			/* encode start element DepartureTime */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 287)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->DepartureTime;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  DepartureTime */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of DepartureTime */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element EAmount */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 289)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EAmount */
-			if(serialize_PhysicalValueType( &(type->EAmount),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EAmount */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVMaxVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 298)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaxVoltage */
-			if(serialize_PhysicalValueType( &(type->EVMaxVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaxVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVMaxCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 297)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaxCurrent */
-			if(serialize_PhysicalValueType( &(type->EVMaxCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaxCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVMinCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 302)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMinCurrent */
-			if(serialize_PhysicalValueType( &(type->EVMinCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMinCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_DC_EVStatusType(struct DC_EVStatusType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element EVReady */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 306)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->EVReady;
-		   
-			
-			/* encode character  EVReady */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVReady */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVErrorCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 296)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVErrorCode;
-		   
-			
-			/* encode character  EVErrorCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVErrorCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVRESSSOC */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 305)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->EVRESSSOC;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  EVRESSSOC */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVRESSSOC */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_DC_EVChargeParameterType(struct DC_EVChargeParameterType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.DepartureTime)
-		{		
-						
-
-
-			/* encode start element DepartureTime */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 287)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->DepartureTime;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  DepartureTime */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of DepartureTime */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element DC_EVStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 285)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVStatus */
-			if(serialize_DC_EVStatusType( &(type->DC_EVStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVMaximumCurrentLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 299)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaximumCurrentLimit */
-			if(serialize_PhysicalValueType( &(type->EVMaximumCurrentLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaximumCurrentLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVMaximumPowerLimit)
-		{		
-						
-
-
-			/* encode start element EVMaximumPowerLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 300)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaximumPowerLimit */
-			if(serialize_PhysicalValueType( &(type->EVMaximumPowerLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaximumPowerLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element EVMaximumVoltageLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 301)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaximumVoltageLimit */
-			if(serialize_PhysicalValueType( &(type->EVMaximumVoltageLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaximumVoltageLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVEnergyCapacity)
-		{		
-						
-
-
-			/* encode start element EVEnergyCapacity */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 294)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVEnergyCapacity */
-			if(serialize_PhysicalValueType( &(type->EVEnergyCapacity),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVEnergyCapacity */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.EVEnergyRequest)
-		{		
-						
-
-
-			/* encode start element EVEnergyRequest */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 295)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVEnergyRequest */
-			if(serialize_PhysicalValueType( &(type->EVEnergyRequest),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVEnergyRequest */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.FullSOC)
-		{		
-						
-
-
-			/* encode start element FullSOC */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 335)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->FullSOC;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  FullSOC */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of FullSOC */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.BulkSOC)
-		{		
-						
-
-
-			/* encode start element BulkSOC */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 261)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->BulkSOC;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  BulkSOC */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of BulkSOC */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ChargeParameterDiscoveryReqType(struct ChargeParameterDiscoveryReqType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.MaxEntriesSAScheduleTuple)
-		{		
-						
-
-
-			/* encode start element MaxEntriesSAScheduleTuple */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 193)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->MaxEntriesSAScheduleTuple;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  MaxEntriesSAScheduleTuple */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of MaxEntriesSAScheduleTuple */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element RequestedEnergyTransferMode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 220)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->RequestedEnergyTransferMode;
-		   
-			
-			/* encode character  RequestedEnergyTransferMode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of RequestedEnergyTransferMode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.AC_EVChargeParameter)
-		{		
-						
-
-
-			/* encode start element AC_EVChargeParameter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 254)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AC_EVChargeParameter */
-			if(serialize_AC_EVChargeParameterType( (type->AC_EVChargeParameter),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AC_EVChargeParameter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.DC_EVChargeParameter)
-		{		
-						
-
-
-			/* encode start element DC_EVChargeParameter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 275)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVChargeParameter */
-			if(serialize_DC_EVChargeParameterType( (type->DC_EVChargeParameter),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVChargeParameter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_RelativeTimeIntervalType(struct RelativeTimeIntervalType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element start */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 435)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->start;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  start */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of start */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.duration)
-		{		
-						
-
-
-			/* encode start element duration */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 411)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->duration;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  duration */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of duration */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_PMaxScheduleEntryType(struct PMaxScheduleEntryType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element RelativeTimeInterval */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 364)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of RelativeTimeInterval */
-			if(serialize_RelativeTimeIntervalType( &(type->RelativeTimeInterval),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of RelativeTimeInterval */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element PMax */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 348)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PMax */
-			if(serialize_PhysicalValueType( &(type->PMax),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PMax */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PMaxScheduleType(struct PMaxScheduleType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.PMaxScheduleEntry;i_loop++)
-		{
-				
-
-
-			/* encode start element PMaxScheduleEntry */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 350)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of PMaxScheduleEntry */
-			if(serialize_PMaxScheduleEntryType(&(type->PMaxScheduleEntry[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of PMaxScheduleEntry */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_CostType(struct CostType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element costKind */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 408)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->costKind;
-		   
-			
-			/* encode character  costKind */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of costKind */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element amount */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 401)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->amount;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  amount */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of amount */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.amountMultiplier)
-		{		
-						
-
-
-			/* encode start element amountMultiplier */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 402)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->amountMultiplier;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  amountMultiplier */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of amountMultiplier */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ConsumptionCostType(struct ConsumptionCostType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-			
-
-
-			/* encode start element startValue */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 436)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of startValue */
-			if(serialize_PhysicalValueType( &(type->startValue),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of startValue */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	for(i_loop=0;i_loop < type->arraylen.Cost;i_loop++)
-		{
-				
-
-
-			/* encode start element Cost */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 273)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of Cost */
-			if(serialize_CostType(&(type->Cost[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of Cost */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SalesTariffEntryType(struct SalesTariffEntryType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-			
-
-
-			/* encode start element RelativeTimeInterval */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 364)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of RelativeTimeInterval */
-			if(serialize_RelativeTimeIntervalType( &(type->RelativeTimeInterval),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of RelativeTimeInterval */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EPriceLevel)
-		{		
-						
-
-
-			/* encode start element EPriceLevel */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 291)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->EPriceLevel;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  EPriceLevel */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EPriceLevel */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ConsumptionCost)
-		{		
-				
-	for(i_loop=0;i_loop < type->arraylen.ConsumptionCost;i_loop++)
-		{
-				
-
-
-			/* encode start element ConsumptionCost */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 270)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of ConsumptionCost */
-			if(serialize_ConsumptionCostType(&(type->ConsumptionCost[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of ConsumptionCost */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SalesTariffType(struct SalesTariffType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 336,&(service->val)))
-			{
-					return -1;
-			}
-		}
-		
-
-
-			/* encode start element SalesTariffID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 379)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SalesTariffID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SalesTariffID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SalesTariffID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.SalesTariffDescription)
-		{		
-						
-
-
-			/* encode start element SalesTariffDescription */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 376)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->SalesTariffDescription.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->SalesTariffDescription.data,type->SalesTariffDescription.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  SalesTariffDescription */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of SalesTariffDescription */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.NumEPriceLevels)
-		{		
-						
-
-
-			/* encode start element NumEPriceLevels */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 347)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->NumEPriceLevels;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  NumEPriceLevels */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of NumEPriceLevels */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	for(i_loop=0;i_loop < type->arraylen.SalesTariffEntry;i_loop++)
-		{
-				
-
-
-			/* encode start element SalesTariffEntry */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 377)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of SalesTariffEntry */
-			if(serialize_SalesTariffEntryType(&(type->SalesTariffEntry[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of SalesTariffEntry */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SAScheduleTupleType(struct SAScheduleTupleType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element SAScheduleTupleID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 371)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SAScheduleTupleID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SAScheduleTupleID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SAScheduleTupleID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element PMaxSchedule */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 349)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PMaxSchedule */
-			if(serialize_PMaxScheduleType( &(type->PMaxSchedule),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PMaxSchedule */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.SalesTariff)
-		{		
-						
-
-
-			/* encode start element SalesTariff */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 375)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SalesTariff */
-			if(serialize_SalesTariffType( (type->SalesTariff),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SalesTariff */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SAScheduleListType(struct SAScheduleListType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.SAScheduleTuple;i_loop++)
-		{
-				
-
-
-			/* encode start element SAScheduleTuple */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 370)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of SAScheduleTuple */
-			if(serialize_SAScheduleTupleType(&(type->SAScheduleTuple[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of SAScheduleTuple */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_AC_EVSEStatusType(struct AC_EVSEStatusType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element NotificationMaxDelay */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 345)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->NotificationMaxDelay;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  NotificationMaxDelay */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of NotificationMaxDelay */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSENotification */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 319)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSENotification;
-		   
-			
-			/* encode character  EVSENotification */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSENotification */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element RCD */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 363)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->RCD;
-		   
-			
-			/* encode character  RCD */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of RCD */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_AC_EVSEChargeParameterType(struct AC_EVSEChargeParameterType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element AC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 258)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AC_EVSEStatus */
-			if(serialize_AC_EVSEStatusType( &(type->AC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSENominalVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 318)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSENominalVoltage */
-			if(serialize_PhysicalValueType( &(type->EVSENominalVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSENominalVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEMaxCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 312)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaxCurrent */
-			if(serialize_PhysicalValueType( &(type->EVSEMaxCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaxCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_DC_EVSEStatusType(struct DC_EVSEStatusType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element NotificationMaxDelay */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 345)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint16=type->NotificationMaxDelay;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_16;
-			
-			/* encode character  NotificationMaxDelay */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of NotificationMaxDelay */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSENotification */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 319)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSENotification;
-		   
-			
-			/* encode character  EVSENotification */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSENotification */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVSEIsolationStatus)
-		{		
-						
-
-
-			/* encode start element EVSEIsolationStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 311)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSEIsolationStatus;
-		   
-			
-			/* encode character  EVSEIsolationStatus */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEIsolationStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element EVSEStatusCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 324)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSEStatusCode;
-		   
-			
-			/* encode character  EVSEStatusCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEStatusCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_DC_EVSEChargeParameterType(struct DC_EVSEChargeParameterType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 282)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( &(type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEMaximumCurrentLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 313)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaximumCurrentLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMaximumCurrentLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaximumCurrentLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEMaximumPowerLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 314)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaximumPowerLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMaximumPowerLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaximumPowerLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEMaximumVoltageLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 315)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaximumVoltageLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMaximumVoltageLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaximumVoltageLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEMinimumCurrentLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 316)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMinimumCurrentLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMinimumCurrentLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMinimumCurrentLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEMinimumVoltageLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 317)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMinimumVoltageLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMinimumVoltageLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMinimumVoltageLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVSECurrentRegulationTolerance)
-		{		
-						
-
-
-			/* encode start element EVSECurrentRegulationTolerance */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 309)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSECurrentRegulationTolerance */
-			if(serialize_PhysicalValueType( &(type->EVSECurrentRegulationTolerance),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSECurrentRegulationTolerance */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element EVSEPeakCurrentRipple */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 321)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEPeakCurrentRipple */
-			if(serialize_PhysicalValueType( &(type->EVSEPeakCurrentRipple),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEPeakCurrentRipple */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVSEEnergyToBeDelivered)
-		{		
-						
-
-
-			/* encode start element EVSEEnergyToBeDelivered */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 310)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEEnergyToBeDelivered */
-			if(serialize_PhysicalValueType( &(type->EVSEEnergyToBeDelivered),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEEnergyToBeDelivered */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ChargeParameterDiscoveryResType(struct ChargeParameterDiscoveryResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEProcessing */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 185)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSEProcessing;
-		   
-			
-			/* encode character  EVSEProcessing */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEProcessing */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.SAScheduleList)
-		{		
-						
-
-
-			/* encode start element SAScheduleList */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 368)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SAScheduleList */
-			if(serialize_SAScheduleListType( (type->SAScheduleList),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SAScheduleList */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.AC_EVSEChargeParameter)
-		{		
-						
-
-
-			/* encode start element AC_EVSEChargeParameter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 256)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AC_EVSEChargeParameter */
-			if(serialize_AC_EVSEChargeParameterType( (type->AC_EVSEChargeParameter),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AC_EVSEChargeParameter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.DC_EVSEChargeParameter)
-		{		
-						
-
-
-			/* encode start element DC_EVSEChargeParameter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 280)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEChargeParameter */
-			if(serialize_DC_EVSEChargeParameterType( (type->DC_EVSEChargeParameter),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEChargeParameter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ProfileEntryType(struct ProfileEntryType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ChargingProfileEntryStart */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 268)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint32=type->ChargingProfileEntryStart;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_32;
-			
-			/* encode character  ChargingProfileEntryStart */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ChargingProfileEntryStart */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ChargingProfileEntryMaxPower */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 267)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargingProfileEntryMaxPower */
-			if(serialize_PhysicalValueType( &(type->ChargingProfileEntryMaxPower),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargingProfileEntryMaxPower */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ChargingProfileEntryMaxNumberOfPhasesInUse)
-		{		
-						
-
-
-			/* encode start element ChargingProfileEntryMaxNumberOfPhasesInUse */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 266)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.int8=type->ChargingProfileEntryMaxNumberOfPhasesInUse;
-		   
-			service->val.integer.type = EXI_INTEGER_8;
-			
-			/* encode character  ChargingProfileEntryMaxNumberOfPhasesInUse */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ChargingProfileEntryMaxNumberOfPhasesInUse */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_ChargingProfileType(struct ChargingProfileType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.ProfileEntry;i_loop++)
-		{
-				
-
-
-			/* encode start element ProfileEntry */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 361)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of ProfileEntry */
-			if(serialize_ProfileEntryType(&(type->ProfileEntry[i_loop]),service))
-			{
-				return -1;
-			}
-			
-			 
-			/* encode end element of ProfileEntry */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_DC_EVPowerDeliveryParameterType(struct DC_EVPowerDeliveryParameterType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element DC_EVStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 285)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVStatus */
-			if(serialize_DC_EVStatusType( &(type->DC_EVStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.BulkChargingComplete)
-		{		
-						
-
-
-			/* encode start element BulkChargingComplete */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 260)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->BulkChargingComplete;
-		   
-			
-			/* encode character  BulkChargingComplete */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of BulkChargingComplete */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element ChargingComplete */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 265)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->ChargingComplete;
-		   
-			
-			/* encode character  ChargingComplete */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ChargingComplete */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PowerDeliveryReqType(struct PowerDeliveryReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ChargeProgress */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 154)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ChargeProgress;
-		   
-			
-			/* encode character  ChargeProgress */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ChargeProgress */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SAScheduleTupleID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 224)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SAScheduleTupleID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SAScheduleTupleID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SAScheduleTupleID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.ChargingProfile)
-		{		
-						
-
-
-			/* encode start element ChargingProfile */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 157)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargingProfile */
-			if(serialize_ChargingProfileType( &(type->ChargingProfile),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargingProfile */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.DC_EVPowerDeliveryParameter)
-		{		
-						
-
-
-			/* encode start element DC_EVPowerDeliveryParameter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 278)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVPowerDeliveryParameter */
-			if(serialize_DC_EVPowerDeliveryParameterType( (type->DC_EVPowerDeliveryParameter),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVPowerDeliveryParameter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_PowerDeliveryResType(struct PowerDeliveryResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.AC_EVSEStatus)
-		{		
-						
-
-
-			/* encode start element AC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 258)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AC_EVSEStatus */
-			if(serialize_AC_EVSEStatusType( (type->AC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.DC_EVSEStatus)
-		{		
-						
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 282)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( (type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_MeterInfoType(struct MeterInfoType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element MeterID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 339)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->MeterID.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->MeterID.data,type->MeterID.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  MeterID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of MeterID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.MeterReading)
-		{		
-						
-
-
-			/* encode start element MeterReading */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 341)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint64=type->MeterReading;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_64;
-			
-			/* encode character  MeterReading */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of MeterReading */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.SigMeterReading)
-		{		
-						
-
-
-			/* encode start element SigMeterReading */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 392)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->SigMeterReading.arraylen.data;
-		    memcpy(service->val.binary.data, type->SigMeterReading.data,type->SigMeterReading.arraylen.data);
-		   
-
-		
-		
-		/* encode character  SigMeterReading */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of SigMeterReading */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.MeterStatus)
-		{		
-						
-
-
-			/* encode start element MeterStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 342)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int16=type->MeterStatus;
-		   
-			service->val.integer.type = EXI_INTEGER_16;
-			
-			/* encode character  MeterStatus */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of MeterStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.TMeter)
-		{		
-						
-
-
-			/* encode start element TMeter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 397)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int64=type->TMeter;
-		   
-			service->val.integer.type = EXI_INTEGER_64;
-			
-			/* encode character  TMeter */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of TMeter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_MeteringReceiptReqType(struct MeteringReceiptReqType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.attr_Id)
-		{		
-						
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 191,&(service->val)))
-			{
-					return -1;
-			}
-		}
-		
-
-
-			/* encode start element SessionID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 240)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_HEX;
-		    service->val.binary.len = type->SessionID.arraylen.data;
-		    memcpy(service->val.binary.data, type->SessionID.data,type->SessionID.arraylen.data);
-		   
-
-		
-		
-		/* encode character  SessionID */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of SessionID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.SAScheduleTupleID)
-		{		
-						
-
-
-			/* encode start element SAScheduleTupleID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 224)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SAScheduleTupleID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SAScheduleTupleID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SAScheduleTupleID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element MeterInfo */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 194)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of MeterInfo */
-			if(serialize_MeterInfoType( &(type->MeterInfo),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of MeterInfo */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_MeteringReceiptResType(struct MeteringReceiptResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.AC_EVSEStatus)
-		{		
-						
-
-
-			/* encode start element AC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 258)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AC_EVSEStatus */
-			if(serialize_AC_EVSEStatusType( (type->AC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.DC_EVSEStatus)
-		{		
-						
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 282)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( (type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_SessionStopReqType(struct SessionStopReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ChargingSession */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 158)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ChargingSession;
-		   
-			
-			/* encode character  ChargingSession */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ChargingSession */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_SessionStopResType(struct SessionStopResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-
-static int serialize_X509IssuerSerialType(struct X509IssuerSerialType* type,
-struct EXIService* service)
-{
-
-
-
-			/* encode start element X509IssuerName */
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 121))
-			{
-					return -1;
-			}
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->X509IssuerName.arraylen.data;
-			service->val.str.miss.codepoints= type->X509IssuerName.data;
-
-
-			/* encode character  X509IssuerName */
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-				return -1;
-			}
-
-
-			/* encode end element of X509IssuerName */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-
-
-
-			/* encode start element X509SerialNumber */
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 125))
-			{
-					return -1;
-			}
-
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int64=type->X509SerialNumber;
-
-			service->val.integer.type = EXI_INTEGER_64;
-
-			/* encode character  X509SerialNumber */
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-				return -1;
-			}
-
-
-			/* encode end element of X509SerialNumber */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-
-
-	return 0;
-}
-
-
-
-static int serialize_ListOfRootCertificateIDsType(struct ListOfRootCertificateIDsType* type, 
-struct EXIService* service)
-{
-
-			size_t i_loop;
-	
-	for(i_loop=0;i_loop < type->arraylen.RootCertificateID;i_loop++)
-		{
-				
-
-
-			/* encode start element RootCertificateID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 366)) 
-			{
-					return -1;
-			}
-			
-			/* encode children of RootCertificateID */
-			if(serialize_X509IssuerSerialType(&(type->RootCertificateID[i_loop]),service))
-			{
-				return -1;
-			}
-
-			 
-			/* encode end element of RootCertificateID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_CertificateUpdateReqType(struct CertificateUpdateReqType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 191,&(service->val)))
-			{
-					return -1;
-			}
-		
-
-
-			/* encode start element ContractSignatureCertChain */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 163)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ContractSignatureCertChain */
-			if(serialize_CertificateChainType( &(type->ContractSignatureCertChain),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ContractSignatureCertChain */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element eMAID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 253)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->eMAID.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->eMAID.data,type->eMAID.arraylen.data*sizeof(uint32_t));
-		   
-
-
-
-
-
-			/* encode character  eMAID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of eMAID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ListOfRootCertificateIDs */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 192)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ListOfRootCertificateIDs */
-			if(serialize_ListOfRootCertificateIDsType( &(type->ListOfRootCertificateIDs),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ListOfRootCertificateIDs */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_ContractSignatureEncryptedPrivateKeyType(struct ContractSignatureEncryptedPrivateKeyType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 336,&(service->val)))
-			{
-					return -1;
-			}
-
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->arraylen.data;
-		    memcpy(service->val.binary.data, type->data,type->arraylen.data);
-
-			/* encode character  ResponseCode */
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-				return -1;
-			}
-
-
-	return 0;			
-}
-
-
-static int serialize_DiffieHellmanPublickeyType(struct DiffieHellmanPublickeyType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 336,&(service->val)))
-			{
-					return -1;
-			}
-
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->arraylen.data;
-		    memcpy(service->val.binary.data, type->data,type->arraylen.data);
-
-			/* encode character  ResponseCode */
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-				return -1;
-			}
-
-
-	return 0;			
-}
-
-
-static int serialize_EMAIDType(struct EMAIDType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 336,&(service->val)))
-			{
-					return -1;
-			};
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->arraylen.data;
-			service->val.str.miss.codepoints= type->data;
-
-
-			/* encode character  ResponseCode */
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val)))
-			{
-
-				return -1;
-			}
-
-
-	return 0;			
-}
-
-
-static int serialize_CertificateUpdateResType(struct CertificateUpdateResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SAProvisioningCertificateChain */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 223)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SAProvisioningCertificateChain */
-			if(serialize_CertificateChainType( &(type->SAProvisioningCertificateChain),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SAProvisioningCertificateChain */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ContractSignatureCertChain */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 163)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ContractSignatureCertChain */
-			if(serialize_CertificateChainType( &(type->ContractSignatureCertChain),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ContractSignatureCertChain */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ContractSignatureEncryptedPrivateKey */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 164)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ContractSignatureEncryptedPrivateKey */
-			if(serialize_ContractSignatureEncryptedPrivateKeyType( &(type->ContractSignatureEncryptedPrivateKey),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ContractSignatureEncryptedPrivateKey */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DHpublickey */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 171)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DHpublickey */
-			if(serialize_DiffieHellmanPublickeyType( &(type->DHpublickey),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DHpublickey */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element eMAID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 253)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of eMAID */
-			if(serialize_EMAIDType( &(type->eMAID),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of eMAID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.RetryCounter)
-		{		
-						
-
-
-			/* encode start element RetryCounter */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 222)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_INTEGER;
-		    service->val.integer.val.int16=type->RetryCounter;
-		   
-			service->val.integer.type = EXI_INTEGER_16;
-			
-			/* encode character  RetryCounter */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of RetryCounter */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_CertificateInstallationReqType(struct CertificateInstallationReqType* type, 
-struct EXIService* service)
-{
-		
-
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->attr_Id.arraylen.data;
-			service->val.str.miss.codepoints= type->attr_Id.data;
-			if (exiv2gEncodeAttribute(&(service->outStream), &(service->stateEncode), 191,&(service->val)))
-			{
-					return -1;
-			}
-		
-
-
-			/* encode start element OEMProvisioningCert */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 199)) 
-			{
-					return -1;
-			}
-			service->val.type = EXI_DATATYPE_BINARY_BASE64;
-		    service->val.binary.len = type->OEMProvisioningCert.arraylen.data;
-		    memcpy(service->val.binary.data, type->OEMProvisioningCert.data,type->OEMProvisioningCert.arraylen.data);
-		   
-
-		
-		
-		/* encode character  OEMProvisioningCert */	
-		if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-		{
-				 
-				return -1;
-		}
-
-			
-			 
-			/* encode end element of OEMProvisioningCert */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ListOfRootCertificateIDs */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 192)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ListOfRootCertificateIDs */
-			if(serialize_ListOfRootCertificateIDsType( &(type->ListOfRootCertificateIDs),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ListOfRootCertificateIDs */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_CertificateInstallationResType(struct CertificateInstallationResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SAProvisioningCertificateChain */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 223)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SAProvisioningCertificateChain */
-			if(serialize_CertificateChainType( &(type->SAProvisioningCertificateChain),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SAProvisioningCertificateChain */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ContractSignatureCertChain */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 163)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ContractSignatureCertChain */
-			if(serialize_CertificateChainType( &(type->ContractSignatureCertChain),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ContractSignatureCertChain */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element ContractSignatureEncryptedPrivateKey */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 164)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ContractSignatureEncryptedPrivateKey */
-			if(serialize_ContractSignatureEncryptedPrivateKeyType( &(type->ContractSignatureEncryptedPrivateKey),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ContractSignatureEncryptedPrivateKey */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DHpublickey */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 171)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DHpublickey */
-			if(serialize_DiffieHellmanPublickeyType( &(type->DHpublickey),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DHpublickey */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element eMAID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 253)) 
-			{
-					return -1;
-			}
-
-
-
-
-						
-			/* encode children of eMAID */
-			if(serialize_EMAIDType( &(type->eMAID),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of eMAID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_ChargingStatusReqType(struct ChargingStatusReqType* type, 
-struct EXIService* service)
-{
-
-
-	return 0;			
-}
-
-
-static int serialize_ChargingStatusResType(struct ChargingStatusResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 177)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->EVSEID.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->EVSEID.data,type->EVSEID.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  EVSEID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of EVSEID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SAScheduleTupleID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 224)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SAScheduleTupleID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SAScheduleTupleID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SAScheduleTupleID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVSEMaxCurrent)
-		{		
-						
-
-
-			/* encode start element EVSEMaxCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 178)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaxCurrent */
-			if(serialize_PhysicalValueType( &(type->EVSEMaxCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaxCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.MeterInfo)
-		{		
-						
-
-
-			/* encode start element MeterInfo */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 194)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of MeterInfo */
-			if(serialize_MeterInfoType( &(type->MeterInfo),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of MeterInfo */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ReceiptRequired)
-		{		
-						
-
-
-			/* encode start element ReceiptRequired */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 217)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->ReceiptRequired;
-		   
-			
-			/* encode character  ReceiptRequired */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ReceiptRequired */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element AC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 129)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AC_EVSEStatus */
-			if(serialize_AC_EVSEStatusType( &(type->AC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_CableCheckReqType(struct CableCheckReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element DC_EVStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 170)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVStatus */
-			if(serialize_DC_EVStatusType( &(type->DC_EVStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_CableCheckResType(struct CableCheckResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 169)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( &(type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEProcessing */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 185)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->EVSEProcessing;
-		   
-			
-			/* encode character  EVSEProcessing */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEProcessing */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PreChargeReqType(struct PreChargeReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element DC_EVStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 170)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVStatus */
-			if(serialize_DC_EVStatusType( &(type->DC_EVStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVTargetVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 189)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVTargetVoltage */
-			if(serialize_PhysicalValueType( &(type->EVTargetVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVTargetVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVTargetCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 188)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVTargetCurrent */
-			if(serialize_PhysicalValueType( &(type->EVTargetCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVTargetCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_PreChargeResType(struct PreChargeResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 169)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( &(type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEPresentVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 184)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEPresentVoltage */
-			if(serialize_PhysicalValueType( &(type->EVSEPresentVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEPresentVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_CurrentDemandReqType(struct CurrentDemandReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element DC_EVStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 170)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVStatus */
-			if(serialize_DC_EVStatusType( &(type->DC_EVStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVTargetCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 188)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVTargetCurrent */
-			if(serialize_PhysicalValueType( &(type->EVTargetCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVTargetCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVMaximumVoltageLimit)
-		{		
-						
-
-
-			/* encode start element EVMaximumVoltageLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 175)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaximumVoltageLimit */
-			if(serialize_PhysicalValueType( &(type->EVMaximumVoltageLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaximumVoltageLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.EVMaximumCurrentLimit)
-		{		
-						
-
-
-			/* encode start element EVMaximumCurrentLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 173)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaximumCurrentLimit */
-			if(serialize_PhysicalValueType( &(type->EVMaximumCurrentLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaximumCurrentLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.EVMaximumPowerLimit)
-		{		
-						
-
-
-			/* encode start element EVMaximumPowerLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 174)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVMaximumPowerLimit */
-			if(serialize_PhysicalValueType( &(type->EVMaximumPowerLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVMaximumPowerLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.BulkChargingComplete)
-		{		
-						
-
-
-			/* encode start element BulkChargingComplete */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 137)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->BulkChargingComplete;
-		   
-			
-			/* encode character  BulkChargingComplete */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of BulkChargingComplete */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element ChargingComplete */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 156)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->ChargingComplete;
-		   
-			
-			/* encode character  ChargingComplete */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ChargingComplete */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.RemainingTimeToFullSoC)
-		{		
-						
-
-
-			/* encode start element RemainingTimeToFullSoC */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 219)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of RemainingTimeToFullSoC */
-			if(serialize_PhysicalValueType( &(type->RemainingTimeToFullSoC),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of RemainingTimeToFullSoC */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.RemainingTimeToBulkSoC)
-		{		
-						
-
-
-			/* encode start element RemainingTimeToBulkSoC */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 218)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of RemainingTimeToBulkSoC */
-			if(serialize_PhysicalValueType( &(type->RemainingTimeToBulkSoC),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of RemainingTimeToBulkSoC */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element EVTargetVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 189)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVTargetVoltage */
-			if(serialize_PhysicalValueType( &(type->EVTargetVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVTargetVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_CurrentDemandResType(struct CurrentDemandResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 169)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( &(type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEPresentVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 184)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEPresentVoltage */
-			if(serialize_PhysicalValueType( &(type->EVSEPresentVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEPresentVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEPresentCurrent */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 183)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEPresentCurrent */
-			if(serialize_PhysicalValueType( &(type->EVSEPresentCurrent),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEPresentCurrent */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSECurrentLimitAchieved */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 176)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->EVSECurrentLimitAchieved;
-		   
-			
-			/* encode character  EVSECurrentLimitAchieved */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSECurrentLimitAchieved */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEVoltageLimitAchieved */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 187)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->EVSEVoltageLimitAchieved;
-		   
-			
-			/* encode character  EVSEVoltageLimitAchieved */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEVoltageLimitAchieved */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEPowerLimitAchieved */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 182)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->EVSEPowerLimitAchieved;
-		   
-			
-			/* encode character  EVSEPowerLimitAchieved */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of EVSEPowerLimitAchieved */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.EVSEMaximumVoltageLimit)
-		{		
-						
-
-
-			/* encode start element EVSEMaximumVoltageLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 181)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaximumVoltageLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMaximumVoltageLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaximumVoltageLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.EVSEMaximumCurrentLimit)
-		{		
-						
-
-
-			/* encode start element EVSEMaximumCurrentLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 179)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaximumCurrentLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMaximumCurrentLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaximumCurrentLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.EVSEMaximumPowerLimit)
-		{		
-						
-
-
-			/* encode start element EVSEMaximumPowerLimit */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 180)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEMaximumPowerLimit */
-			if(serialize_PhysicalValueType( &(type->EVSEMaximumPowerLimit),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEMaximumPowerLimit */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-						
-
-
-			/* encode start element EVSEID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 177)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_STRING;
-			service->val.str.type = EXI_STRING_VALUE_MISS;
-			service->val.str.miss.len = type->EVSEID.arraylen.data;
-			memcpy(service->val.str.miss.codepoints, type->EVSEID.data,type->EVSEID.arraylen.data*sizeof(uint32_t));
-		   
-				
-		
-			/* encode character  EVSEID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-					return -1;
-			}
-			
-			 
-			/* encode end element of EVSEID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element SAScheduleTupleID */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 224)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_NBIT_UNSIGNED_INTEGER;
-		    service->val.integer.val.uint8=type->SAScheduleTupleID;
-		   
-			service->val.integer.type = EXI_UNSIGNED_INTEGER_8;
-			
-			/* encode character  SAScheduleTupleID */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of SAScheduleTupleID */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-	if(type->isused.MeterInfo)
-		{		
-						
-
-
-			/* encode start element MeterInfo */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 194)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of MeterInfo */
-			if(serialize_MeterInfoType( &(type->MeterInfo),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of MeterInfo */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ReceiptRequired)
-		{		
-						
-
-
-			/* encode start element ReceiptRequired */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 217)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_BOOLEAN;
-		    service->val.boolean=type->ReceiptRequired;
-		   
-			
-			/* encode character  ReceiptRequired */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ReceiptRequired */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_WeldingDetectionReqType(struct WeldingDetectionReqType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element DC_EVStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 170)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVStatus */
-			if(serialize_DC_EVStatusType( &(type->DC_EVStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_WeldingDetectionResType(struct WeldingDetectionResType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element ResponseCode */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 221)) 
-			{
-					return -1;
-			}
-			
-			service->val.type = EXI_DATATYPE_ENUMERATION;
-		    service->val.enumeration=type->ResponseCode;
-		   
-			
-			/* encode character  ResponseCode */	
-			if (exiv2gEncodeCharacters(&(service->outStream), &(service->stateEncode), &(service->val))) 
-			{
-				 
-				return -1;
-			}
-				
-			 
-			/* encode end element of ResponseCode */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element DC_EVSEStatus */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 169)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of DC_EVSEStatus */
-			if(serialize_DC_EVSEStatusType( &(type->DC_EVSEStatus),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of DC_EVSEStatus */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element EVSEPresentVoltage */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 184)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of EVSEPresentVoltage */
-			if(serialize_PhysicalValueType( &(type->EVSEPresentVoltage),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of EVSEPresentVoltage */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_BodyType(struct BodyType* type, 
-struct EXIService* service)
-{
-
-	if(type->isused.SessionSetupReq)
-		{		
-						
-
-
-			/* encode start element SessionSetupReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 241)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SessionSetupReq */
-			if(serialize_SessionSetupReqType( (type->SessionSetupReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SessionSetupReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.SessionSetupRes)
-		{		
-						
-
-
-			/* encode start element SessionSetupRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 243)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SessionSetupRes */
-			if(serialize_SessionSetupResType( (type->SessionSetupRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SessionSetupRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ServiceDiscoveryReq)
-		{		
-						
-
-
-			/* encode start element ServiceDiscoveryReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 232)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ServiceDiscoveryReq */
-			if(serialize_ServiceDiscoveryReqType( (type->ServiceDiscoveryReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ServiceDiscoveryReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ServiceDiscoveryRes)
-		{		
-						
-
-
-			/* encode start element ServiceDiscoveryRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 234)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ServiceDiscoveryRes */
-			if(serialize_ServiceDiscoveryResType( (type->ServiceDiscoveryRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ServiceDiscoveryRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ServiceDetailReq)
-		{		
-						
-
-
-			/* encode start element ServiceDetailReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 228)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ServiceDetailReq */
-			if(serialize_ServiceDetailReqType( (type->ServiceDetailReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ServiceDetailReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ServiceDetailRes)
-		{		
-						
-
-
-			/* encode start element ServiceDetailRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 230)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ServiceDetailRes */
-			if(serialize_ServiceDetailResType( (type->ServiceDetailRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ServiceDetailRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PaymentServiceSelectionReq)
-		{		
-						
-
-
-			/* encode start element PaymentServiceSelectionReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 205)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PaymentServiceSelectionReq */
-			if(serialize_PaymentServiceSelectionReqType( (type->PaymentServiceSelectionReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PaymentServiceSelectionReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PaymentServiceSelectionRes)
-		{		
-						
-
-
-			/* encode start element PaymentServiceSelectionRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 207)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PaymentServiceSelectionRes */
-			if(serialize_PaymentServiceSelectionResType( (type->PaymentServiceSelectionRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PaymentServiceSelectionRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PaymentDetailsReq)
-		{		
-						
-
-
-			/* encode start element PaymentDetailsReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 200)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PaymentDetailsReq */
-			if(serialize_PaymentDetailsReqType( (type->PaymentDetailsReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PaymentDetailsReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PaymentDetailsRes)
-		{		
-						
-
-
-			/* encode start element PaymentDetailsRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 202)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PaymentDetailsRes */
-			if(serialize_PaymentDetailsResType( (type->PaymentDetailsRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PaymentDetailsRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.AuthorizationReq)
-		{		
-						
-
-
-			/* encode start element AuthorizationReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 130)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AuthorizationReq */
-			if(serialize_AuthorizationReqType( (type->AuthorizationReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AuthorizationReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.AuthorizationRes)
-		{		
-						
-
-
-			/* encode start element AuthorizationRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 132)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of AuthorizationRes */
-			if(serialize_AuthorizationResType( (type->AuthorizationRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of AuthorizationRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ChargeParameterDiscoveryReq)
-		{		
-						
-
-
-			/* encode start element ChargeParameterDiscoveryReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 150)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargeParameterDiscoveryReq */
-			if(serialize_ChargeParameterDiscoveryReqType( (type->ChargeParameterDiscoveryReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargeParameterDiscoveryReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ChargeParameterDiscoveryRes)
-		{		
-						
-
-
-			/* encode start element ChargeParameterDiscoveryRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 152)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargeParameterDiscoveryRes */
-			if(serialize_ChargeParameterDiscoveryResType( (type->ChargeParameterDiscoveryRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargeParameterDiscoveryRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PowerDeliveryReq)
-		{		
-						
-
-
-			/* encode start element PowerDeliveryReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 209)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PowerDeliveryReq */
-			if(serialize_PowerDeliveryReqType( (type->PowerDeliveryReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PowerDeliveryReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PowerDeliveryRes)
-		{		
-						
-
-
-			/* encode start element PowerDeliveryRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 211)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PowerDeliveryRes */
-			if(serialize_PowerDeliveryResType( (type->PowerDeliveryRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PowerDeliveryRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.MeteringReceiptReq)
-		{		
-						
-
-
-			/* encode start element MeteringReceiptReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 195)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of MeteringReceiptReq */
-			if(serialize_MeteringReceiptReqType( (type->MeteringReceiptReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of MeteringReceiptReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.MeteringReceiptRes)
-		{		
-						
-
-
-			/* encode start element MeteringReceiptRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 197)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of MeteringReceiptRes */
-			if(serialize_MeteringReceiptResType( (type->MeteringReceiptRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of MeteringReceiptRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.SessionStopReq)
-		{		
-						
-
-
-			/* encode start element SessionStopReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 245)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SessionStopReq */
-			if(serialize_SessionStopReqType( (type->SessionStopReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SessionStopReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.SessionStopRes)
-		{		
-						
-
-
-			/* encode start element SessionStopRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 247)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of SessionStopRes */
-			if(serialize_SessionStopResType( (type->SessionStopRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of SessionStopRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CertificateUpdateReq)
-		{		
-						
-
-
-			/* encode start element CertificateUpdateReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 146)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CertificateUpdateReq */
-			if(serialize_CertificateUpdateReqType( (type->CertificateUpdateReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CertificateUpdateReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CertificateUpdateRes)
-		{		
-						
-
-
-			/* encode start element CertificateUpdateRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 148)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CertificateUpdateRes */
-			if(serialize_CertificateUpdateResType( (type->CertificateUpdateRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CertificateUpdateRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CertificateInstallationReq)
-		{		
-						
-
-
-			/* encode start element CertificateInstallationReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 142)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CertificateInstallationReq */
-			if(serialize_CertificateInstallationReqType( (type->CertificateInstallationReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CertificateInstallationReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CertificateInstallationRes)
-		{		
-						
-
-
-			/* encode start element CertificateInstallationRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 144)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CertificateInstallationRes */
-			if(serialize_CertificateInstallationResType( (type->CertificateInstallationRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CertificateInstallationRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ChargingStatusReq)
-		{		
-						
-
-
-			/* encode start element ChargingStatusReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 159)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargingStatusReq */
-			if(serialize_ChargingStatusReqType( (type->ChargingStatusReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargingStatusReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.ChargingStatusRes)
-		{		
-						
-
-
-			/* encode start element ChargingStatusRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 161)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of ChargingStatusRes */
-			if(serialize_ChargingStatusResType( (type->ChargingStatusRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of ChargingStatusRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CableCheckReq)
-		{		
-						
-
-
-			/* encode start element CableCheckReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 138)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CableCheckReq */
-			if(serialize_CableCheckReqType( (type->CableCheckReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CableCheckReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CableCheckRes)
-		{		
-						
-
-
-			/* encode start element CableCheckRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 140)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CableCheckRes */
-			if(serialize_CableCheckResType( (type->CableCheckRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CableCheckRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PreChargeReq)
-		{		
-						
-
-
-			/* encode start element PreChargeReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 213)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PreChargeReq */
-			if(serialize_PreChargeReqType( (type->PreChargeReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PreChargeReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.PreChargeRes)
-		{		
-						
-
-
-			/* encode start element PreChargeRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 215)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of PreChargeRes */
-			if(serialize_PreChargeResType( (type->PreChargeRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of PreChargeRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CurrentDemandReq)
-		{		
-						
-
-
-			/* encode start element CurrentDemandReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 165)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CurrentDemandReq */
-			if(serialize_CurrentDemandReqType( (type->CurrentDemandReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CurrentDemandReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.CurrentDemandRes)
-		{		
-						
-
-
-			/* encode start element CurrentDemandRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 167)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of CurrentDemandRes */
-			if(serialize_CurrentDemandResType( (type->CurrentDemandRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of CurrentDemandRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.WeldingDetectionReq)
-		{		
-						
-
-
-			/* encode start element WeldingDetectionReq */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 249)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of WeldingDetectionReq */
-			if(serialize_WeldingDetectionReqType( (type->WeldingDetectionReq),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of WeldingDetectionReq */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-	if(type->isused.WeldingDetectionRes)
-		{		
-						
-
-
-			/* encode start element WeldingDetectionRes */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 251)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of WeldingDetectionRes */
-			if(serialize_WeldingDetectionResType( (type->WeldingDetectionRes),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of WeldingDetectionRes */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		}
-				
-
-	return 0;			
-}
-
-
-static int serialize_AnonType_V2G_Message(struct AnonType_V2G_Message* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element Header */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 443)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of Header */
-			if(serialize_MessageHeaderType( (type->Header),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of Header */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-				
-
-
-			/* encode start element Body */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 442)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of Body */
-			if(serialize_BodyType( &(type->Body),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of Body */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
-
-static int serialize_EXIDocumentType(struct EXIDocumentType* type, 
-struct EXIService* service)
-{
-		
-
-
-			/* encode start element V2G_Message */	
-			if (exiv2gEncodeStartElement(&(service->outStream), &(service->stateEncode), 444)) 
-			{
-					return -1;
-			}
-						
-			/* encode children of V2G_Message */
-			if(serialize_AnonType_V2G_Message( &(type->V2G_Message),service))
-			{
-				return -1;
-			}
-
-			
-			 
-			/* encode end element of V2G_Message */
-			exiv2gEncodeEndElement(&(service->outStream), &(service->stateEncode));
-
-		
-
-	return 0;			
-}
-
- 
- 
- 
- 
-  /* serialize data to EXI stream */
-static int serialize_message(struct EXIService* service)
-{	
-
-	/* encode start document */ 	
-	if (exiv2gEncodeStartDocument(&(service->outStream), &(service->stateEncode)) ) 
-	{
-	 
-		return -1;
-	}
-
- 	
-	/* encode root element of V2G_Message */
-	if (serialize_EXIDocumentType(&(service->exiMsg), service))
-	 
-	 
-	{
-			 
-		return -1;
-	}
-
-
-	/* encode end document */
-	if (exiv2gEncodeEndDocument(&(service->outStream), &(service->stateEncode))) {
-	 
-	return -1;
-	}	
- 	
- 	return 0;
- 	
- }
-
- 
- 
- 

+ 0 - 2536
src/service/v2g_serviceDispatcher.c

@@ -1,2536 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
-
-#include "v2g_service.h"
-#include "v2g_serviceDispatcher.h"
-#include "v2g_dataTypes.h"
-#include "v2g_dataTypes.c"
-#include "v2g_serviceMethods.h"
-#include "v2g_serviceDataSerialization.c"
-#include "EXITypes.h"
- #include "v2gEXIDecoder.h"
- #include "v2gEXIEncoder.h"
- #include "v2gQNameDefines.h"
- #include <string.h>
-
-
-static int deserializeMessage(struct EXIService* service);
-
-uint16_t numberOfLocalStringsDecode[EXI_v2gMAX_NUMBER_OF_QNAMES];
- 
-static int _setUnsignedInt64Value(exi_integer_t* iv, uint64_t* int64) {
-	int errn = 0;
-	switch(iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		*int64 = iv->val.uint8;
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		*int64 = iv->val.uint16;
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		if (iv->val.uint32 <= 2147483647) {
-			*int64 = iv->val.uint32;
-		} else {
-			errn = -1;
-		}
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		*int64 = iv->val.int32;
-		break;
-	/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		*int64 = iv->val.int8;
-		break;
-	case EXI_INTEGER_16:
-		*int64 = iv->val.int16;
-		break;
-	case EXI_INTEGER_32:
-		*int64 = iv->val.int32;
-		break;
-	case EXI_INTEGER_64:
-		*int64 = iv->val.int32;
-		break;
-	}
-	return errn;
-}
-
- static int _setUnsignedInt32Value(exi_integer_t* iv, uint32_t* int32) {
-	int errn = 0;
-	switch(iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		*int32 = iv->val.uint8;
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		*int32 = iv->val.uint16;
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		if (iv->val.uint32 <= 2147483647) {
-			*int32 = iv->val.uint32;
-		} else {
-			errn = -1;
-		}
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		errn = -1;
-		break;
-	/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		*int32 = iv->val.int8;
-		break;
-	case EXI_INTEGER_16:
-		*int32 = iv->val.int16;
-		break;
-	case EXI_INTEGER_32:
-		*int32 = iv->val.int32;
-		break;
-	case EXI_INTEGER_64:
-		errn = -1;
-		break;
-	}
-	return errn;
-}
-
-
-static int _setUnsignedInt16Value(exi_integer_t* iv, uint16_t* uint16) {
-	int errn = 0;
-	switch(iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		*uint16 = iv->val.uint8;
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		*uint16 = iv->val.uint16;
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-		if (iv->val.uint32 <= 2147483647) {
-			errn = -1;
-		} else {
-			errn = -1;
-		}
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		errn = -1;
-		break;
-	/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		*uint16 = iv->val.int8;
-		break;
-	case EXI_INTEGER_16:
-		*uint16 = iv->val.int16;
-		break;
-	case EXI_INTEGER_32:
-		errn = -1;
-		break;
-	case EXI_INTEGER_64:
-		errn = -1;
-	}
-	return errn;
-}
-
-
-
-
-static int _setInt16Value(exi_integer_t* iv, int16_t* int16) {
-	int errn = 0;
-	switch(iv->type) {
-	/* Unsigned Integer */
-	case EXI_UNSIGNED_INTEGER_8:
-		*int16 = iv->val.uint8;
-		break;
-	case EXI_UNSIGNED_INTEGER_16:
-		*int16 = iv->val.int16;
-		break;
-	case EXI_UNSIGNED_INTEGER_32:
-			errn = -1;
-		break;
-	case EXI_UNSIGNED_INTEGER_64:
-		errn = -1;
-		break;
-	/* (Signed) Integer */
-	case EXI_INTEGER_8:
-		*int16 = iv->val.int8;
-		break;
-	case EXI_INTEGER_16:
-		*int16 = iv->val.int16;
-		break;
-	case EXI_INTEGER_32:
-		errn = -1;;
-		break;
-	case EXI_INTEGER_64:
-		errn = -1;
-		break;
-	}
-	return errn;
-}
-
-/**
- * Deserialize an element value of the EXI stream and assign it to the
- * service data structure 
- */
-static int deserializeElementAttributeCharacter(struct EXIService* service)
-{
-
-	switch(service->qnameID) {
-		case 332: /* FaultCode */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.V2G_Message.Header->Notification.FaultCode=service->val.enumeration;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 333: /* FaultMsg */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Header->Notification.FaultMsg.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Notification.FaultMsg.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Notification.isused.FaultMsg=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 0: /* attr_Algorithm */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						if( service->idPath.id[4] == 59)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.CanonicalizationMethod.attr_Algorithm.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.CanonicalizationMethod.attr_Algorithm.arraylen.data = service->val.str.miss.len;
-
-						} else if(service->idPath.id[4] == 102)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.SignatureMethod.attr_Algorithm.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.SignatureMethod.attr_Algorithm.arraylen.data = service->val.str.miss.len;
-
-						} else if(service->idPath.id[4] == 93)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].DigestMethod.attr_Algorithm.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].DigestMethod.attr_Algorithm.arraylen.data = service->val.str.miss.len;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 2: /* attr_Id */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						if(service->idPath.id[3] == 109)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->SignatureValue.attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignatureValue.attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Signature->SignatureValue.isused.attr_Id=1;
-
-						} else if(service->idPath.id[4] == 93)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].isused.attr_Id=1;
-
-						} if(service->idPath.id[3] == 111)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Signature->SignedInfo.isused.attr_Id=1;
-
-						} else if( service->idPath.id[2] == 101)
-						{
-							memcpy(service->exiMsg.V2G_Message.Header->Signature->attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Signature->isused.attr_Id=1;
-
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 5: /* attr_Type */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].attr_Type.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].attr_Type.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].isused.attr_Type=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 6: /* attr_URI */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].attr_URI.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].attr_URI.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].isused.attr_URI=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 66: /* DigestValue */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_BASE64) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].DigestValue.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.Reference[service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference].DigestValue.arraylen.data = service->val.binary.len;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 447: /* SessionID */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_HEX) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Header->SessionID.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Header->SessionID.arraylen.data = service->val.binary.len;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 172: /* EVCCID */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_HEX) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.SessionSetupReq->EVCCID.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.SessionSetupReq->EVCCID.arraylen.data = service->val.binary.len;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 239: /* ServiceScope */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq->ServiceScope.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq->ServiceScope.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq->isused.ServiceScope=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 227: /* ServiceCategory */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq->ServiceCategory=service->val.enumeration;
-							service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq->isused.ServiceCategory=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 236: /* ServiceID */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if(_setUnsignedInt16Value(&(service->val.integer),&(service->val.integer.val.uint16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ServiceDetailReq->ServiceID=service->val.integer.val.uint16;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 343: /* Multiplier */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						if( service->idPath.id[2] == 213 && service->idPath.id[3] == 189)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->EVTargetVoltage.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 213 && service->idPath.id[3] == 188)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->EVTargetCurrent.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 165 && service->idPath.id[3] == 188)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVTargetCurrent.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[3] == 175)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumVoltageLimit.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[3] == 173)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumCurrentLimit.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[3] == 174)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumPowerLimit.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[3] == 219)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->RemainingTimeToFullSoC.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[3] == 218)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->RemainingTimeToBulkSoC.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 165 && service->idPath.id[3] == 189)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVTargetVoltage.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 289)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EAmount.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 298)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMaxVoltage.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 297)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMaxCurrent.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 302)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMinCurrent.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 299)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumCurrentLimit.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 300)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumPowerLimit.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 301)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumVoltageLimit.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 294)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVEnergyCapacity.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[4] == 295)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVEnergyRequest.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 209)
-						{
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.ProfileEntry[service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry].ChargingProfileEntryMaxPower.Multiplier=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 230)
-						{
-							service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.Multiplier=service->val.integer.val.int8;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 399: /* Unit */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						if( service->idPath.id[2] == 213 && service->idPath.id[3] == 189)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->EVTargetVoltage.Unit=service->val.enumeration;
-						} else if(service->idPath.id[2] == 213 && service->idPath.id[3] == 188)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->EVTargetCurrent.Unit=service->val.enumeration;
-						} else if(service->idPath.id[2] == 165 && service->idPath.id[3] == 188)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVTargetCurrent.Unit=service->val.enumeration;
-						} else if(service->idPath.id[3] == 175)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumVoltageLimit.Unit=service->val.enumeration;
-						} else if(service->idPath.id[3] == 173)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumCurrentLimit.Unit=service->val.enumeration;
-						} else if(service->idPath.id[3] == 174)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumPowerLimit.Unit=service->val.enumeration;
-						} else if(service->idPath.id[3] == 219)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->RemainingTimeToFullSoC.Unit=service->val.enumeration;
-						} else if(service->idPath.id[3] == 218)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->RemainingTimeToBulkSoC.Unit=service->val.enumeration;
-						} else if(service->idPath.id[2] == 165 && service->idPath.id[3] == 189)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVTargetVoltage.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 289)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EAmount.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 298)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMaxVoltage.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 297)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMaxCurrent.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 302)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMinCurrent.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 299)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumCurrentLimit.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 300)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumPowerLimit.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 301)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumVoltageLimit.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 294)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVEnergyCapacity.Unit=service->val.enumeration;
-						} else if(service->idPath.id[4] == 295)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVEnergyRequest.Unit=service->val.enumeration;
-						} else if(service->idPath.id[2] == 209)
-						{
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.ProfileEntry[service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry].ChargingProfileEntryMaxPower.Unit=service->val.enumeration;
-						} else if(service->idPath.id[2] == 230)
-						{
-							service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.Unit=service->val.enumeration;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 400: /* Value */ 
-
-				if(service->val.type == EXI_DATATYPE_INTEGER) 
-					{
-						if( service->idPath.id[2] == 213 && service->idPath.id[3] == 189)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.PreChargeReq->EVTargetVoltage.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[2] == 213 && service->idPath.id[3] == 188)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.PreChargeReq->EVTargetCurrent.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[2] == 165 && service->idPath.id[3] == 188)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVTargetCurrent.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[3] == 175)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumVoltageLimit.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[3] == 173)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumCurrentLimit.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[3] == 174)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVMaximumPowerLimit.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[3] == 219)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->RemainingTimeToFullSoC.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[3] == 218)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->RemainingTimeToBulkSoC.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[2] == 165 && service->idPath.id[3] == 189)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->EVTargetVoltage.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 289)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EAmount.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 298)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMaxVoltage.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 297)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMaxCurrent.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 302)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->EVMinCurrent.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 299)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumCurrentLimit.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 300)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumPowerLimit.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 301)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVMaximumVoltageLimit.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 294)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVEnergyCapacity.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[4] == 295)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->EVEnergyRequest.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[2] == 209)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.ProfileEntry[service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry].ChargingProfileEntryMaxPower.Value=service->val.integer.val.int16;
-						} else if(service->idPath.id[2] == 230)
-						{
-							if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].Parameter[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.ParameterSet[service->exiMsg.V2G_Message.Body.ServiceDetailRes->ServiceParameterList.arraylen.ParameterSet].arraylen.Parameter].physicalValue.Value=service->val.integer.val.int16;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 386: /* ServiceID */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if(_setUnsignedInt16Value(&(service->val.integer),&(service->val.integer.val.uint16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.SelectedService[service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.arraylen.SelectedService].ServiceID=service->val.integer.val.uint16;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 355: /* ParameterSetID */ 
-
-				if(service->val.type == EXI_DATATYPE_INTEGER) 
-					{
-						if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.SelectedService[service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.arraylen.SelectedService].ParameterSetID=service->val.integer.val.int16;
-							service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.SelectedService[service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.arraylen.SelectedService].isused.ParameterSetID=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 225: /* SelectedPaymentOption */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedPaymentOption=service->val.enumeration;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 262: /* Certificate */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_BASE64) 
-					{
-						if( service->idPath.id[0] == -1 && service->idPath.id[0] == -1)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.Certificate.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.Certificate.arraylen.data = service->val.binary.len;
-
-						} else if(service->idPath.id[2] == 146 && service->idPath.id[4] == 393)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.SubCertificates.Certificate[service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.SubCertificates.arraylen.Certificate].data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.SubCertificates.Certificate[service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.SubCertificates.arraylen.Certificate].arraylen.data = service->val.binary.len;
-
-							service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.SubCertificates.arraylen.Certificate++;
-
-						} else if(service->idPath.id[2] == 200 && service->idPath.id[4] == 393)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.SubCertificates.Certificate[service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.SubCertificates.arraylen.Certificate].data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.SubCertificates.Certificate[service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.SubCertificates.arraylen.Certificate].arraylen.data = service->val.binary.len;
-
-							service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.SubCertificates.arraylen.Certificate++;
-
-						} else if(service->idPath.id[2] == 200 && service->idPath.id[3] == 163)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.Certificate.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.Certificate.arraylen.data = service->val.binary.len;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 336: /* attr_Id */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						if( service->idPath.id[2] == 146)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ContractSignatureCertChain.isused.attr_Id=1;
-
-						} else if(service->idPath.id[2] == 200)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Body.PaymentDetailsReq->ContractSignatureCertChain.isused.attr_Id=1;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 253: /* eMAID */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						if( service->idPath.id[2] == 200)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.PaymentDetailsReq->eMAID.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.PaymentDetailsReq->eMAID.arraylen.data = service->val.str.miss.len;
-
-						} else if(service->idPath.id[2] == 146)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateReq->eMAID.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.CertificateUpdateReq->eMAID.arraylen.data = service->val.str.miss.len;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 191: /* attr_Id */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						if( service->idPath.id[2] == 130)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.AuthorizationReq->attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.AuthorizationReq->attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Body.AuthorizationReq->isused.attr_Id=1;
-
-						} else if(service->idPath.id[2] == 146)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateReq->attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.CertificateUpdateReq->attr_Id.arraylen.data = service->val.str.miss.len;
-
-						} else if(service->idPath.id[2] == 142)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationReq->attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.CertificateInstallationReq->attr_Id.arraylen.data = service->val.str.miss.len;
-
-						} else if(service->idPath.id[2] == 195)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.MeteringReceiptReq->attr_Id.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.MeteringReceiptReq->attr_Id.arraylen.data = service->val.str.miss.len;
-
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->isused.attr_Id=1;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 190: /* GenChallenge */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_BASE64) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.AuthorizationReq->GenChallenge.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.AuthorizationReq->GenChallenge.arraylen.data = service->val.binary.len;
-
-							service->exiMsg.V2G_Message.Body.AuthorizationReq->isused.GenChallenge=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 287: /* DepartureTime */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if( service->idPath.id[3] == 254)
-						{
-							if(_setUnsignedInt32Value(&(service->val.integer),&(service->val.integer.val.uint32)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->DepartureTime=service->val.integer.val.uint32;
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->AC_EVChargeParameter->isused.DepartureTime=1;
-
-						} else if(service->idPath.id[3] == 275)
-						{
-							if(_setUnsignedInt32Value(&(service->val.integer),&(service->val.integer.val.uint32)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->DepartureTime=service->val.integer.val.uint32;
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->isused.DepartureTime=1;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 306: /* EVReady */ 
-
-				if(service->val.type == EXI_DATATYPE_BOOLEAN) 
-					{
-						if( service->idPath.id[2] == 138)
-						{
-							service->exiMsg.V2G_Message.Body.CableCheckReq->DC_EVStatus.EVReady=service->val.boolean;
-						} else if(service->idPath.id[2] == 213)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->DC_EVStatus.EVReady=service->val.boolean;
-						} else if(service->idPath.id[2] == 165)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->DC_EVStatus.EVReady=service->val.boolean;
-						} else if(service->idPath.id[2] == 249)
-						{
-							service->exiMsg.V2G_Message.Body.WeldingDetectionReq->DC_EVStatus.EVReady=service->val.boolean;
-						} else if(service->idPath.id[2] == 209)
-						{
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->DC_EVPowerDeliveryParameter->DC_EVStatus.EVReady=service->val.boolean;
-						} else if(service->idPath.id[2] == 150)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->DC_EVStatus.EVReady=service->val.boolean;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 296: /* EVErrorCode */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						if( service->idPath.id[2] == 138)
-						{
-							service->exiMsg.V2G_Message.Body.CableCheckReq->DC_EVStatus.EVErrorCode=service->val.enumeration;
-						} else if(service->idPath.id[2] == 213)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->DC_EVStatus.EVErrorCode=service->val.enumeration;
-						} else if(service->idPath.id[2] == 165)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->DC_EVStatus.EVErrorCode=service->val.enumeration;
-						} else if(service->idPath.id[2] == 249)
-						{
-							service->exiMsg.V2G_Message.Body.WeldingDetectionReq->DC_EVStatus.EVErrorCode=service->val.enumeration;
-						} else if(service->idPath.id[2] == 209)
-						{
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->DC_EVPowerDeliveryParameter->DC_EVStatus.EVErrorCode=service->val.enumeration;
-						} else if(service->idPath.id[2] == 150)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->DC_EVStatus.EVErrorCode=service->val.enumeration;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 305: /* EVRESSSOC */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						if( service->idPath.id[2] == 138)
-						{
-							service->exiMsg.V2G_Message.Body.CableCheckReq->DC_EVStatus.EVRESSSOC=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 213)
-						{
-							service->exiMsg.V2G_Message.Body.PreChargeReq->DC_EVStatus.EVRESSSOC=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 165)
-						{
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->DC_EVStatus.EVRESSSOC=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 249)
-						{
-							service->exiMsg.V2G_Message.Body.WeldingDetectionReq->DC_EVStatus.EVRESSSOC=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 209)
-						{
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->DC_EVPowerDeliveryParameter->DC_EVStatus.EVRESSSOC=service->val.integer.val.int8;
-						} else if(service->idPath.id[2] == 150)
-						{
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->DC_EVStatus.EVRESSSOC=service->val.integer.val.int8;						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 335: /* FullSOC */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->FullSOC=service->val.integer.val.int8;
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->isused.FullSOC=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 261: /* BulkSOC */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->BulkSOC=service->val.integer.val.int8;
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->isused.BulkSOC=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 193: /* MaxEntriesSAScheduleTuple */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if(_setUnsignedInt16Value(&(service->val.integer),&(service->val.integer.val.uint16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->MaxEntriesSAScheduleTuple=service->val.integer.val.uint16;
-							service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->isused.MaxEntriesSAScheduleTuple=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 220: /* RequestedEnergyTransferMode */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->RequestedEnergyTransferMode=service->val.enumeration;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 268: /* ChargingProfileEntryStart */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-						if(_setUnsignedInt32Value(&(service->val.integer),&(service->val.integer.val.uint32)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.ProfileEntry[service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry].ChargingProfileEntryStart=service->val.integer.val.uint32;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 266: /* ChargingProfileEntryMaxNumberOfPhasesInUse */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.ProfileEntry[service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry].ChargingProfileEntryMaxNumberOfPhasesInUse=service->val.integer.val.int8;
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.ProfileEntry[service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry].isused.ChargingProfileEntryMaxNumberOfPhasesInUse=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 260: /* BulkChargingComplete */ 
-
-				if(service->val.type == EXI_DATATYPE_BOOLEAN) 
-					{
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->DC_EVPowerDeliveryParameter->BulkChargingComplete=service->val.boolean;
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->DC_EVPowerDeliveryParameter->isused.BulkChargingComplete=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 265: /* ChargingComplete */ 
-
-				if(service->val.type == EXI_DATATYPE_BOOLEAN) 
-					{
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->DC_EVPowerDeliveryParameter->ChargingComplete=service->val.boolean;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 154: /* ChargeProgress */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargeProgress=service->val.enumeration;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 224: /* SAScheduleTupleID */ 
-
-				if(service->val.type == EXI_DATATYPE_NBIT_UNSIGNED_INTEGER) 
-					{
-						if( service->idPath.id[2] == 209)
-						{
-							service->exiMsg.V2G_Message.Body.PowerDeliveryReq->SAScheduleTupleID=service->val.integer.val.uint8;
-						} else if(service->idPath.id[2] == 195)
-						{
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->SAScheduleTupleID=service->val.integer.val.uint8;
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->isused.SAScheduleTupleID=1;
-						}
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 339: /* MeterID */ 
-
-				if(service->val.type == EXI_DATATYPE_STRING) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.MeterID.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-						service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.MeterID.arraylen.data = service->val.str.miss.len;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 341: /* MeterReading */ 
-
-				if(service->val.type == EXI_DATATYPE_UNSIGNED_INTEGER) 
-					{
-							_setUnsignedInt64Value(&(service->val.integer),&(service->val.integer.val.uint64));
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.MeterReading=service->val.integer.val.uint64;
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.isused.MeterReading=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 392: /* SigMeterReading */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_BASE64) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.SigMeterReading.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.SigMeterReading.arraylen.data = service->val.binary.len;
-
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.isused.SigMeterReading=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 342: /* MeterStatus */ 
-
-				if(service->val.type == EXI_DATATYPE_INTEGER) 
-					{
-						if(_setInt16Value(&(service->val.integer),&(service->val.integer.val.int16)))
-						{
-							service->errorCode=EXI_VALUE_RANGE_FAILED;
-							return -1;
-						}
-						service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.MeterStatus=service->val.integer.val.int16;
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.isused.MeterStatus=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 397: /* TMeter */ 
-
-				if(service->val.type == EXI_DATATYPE_INTEGER) 
-					{
-						service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.TMeter=service->val.integer.val.int64;
-							service->exiMsg.V2G_Message.Body.MeteringReceiptReq->MeterInfo.isused.TMeter=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 240: /* SessionID */ 
-
-				if(service->val.type == EXI_DATATYPE_BINARY_HEX) 
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.MeteringReceiptReq->SessionID.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.MeteringReceiptReq->SessionID.arraylen.data = service->val.binary.len;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 158: /* ChargingSession */ 
-
-				if(service->val.type == EXI_DATATYPE_ENUMERATION) 
-					{
-						service->exiMsg.V2G_Message.Body.SessionStopReq->ChargingSession=service->val.enumeration;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-
-		case 121: /* X509IssuerName */
-
-				if(service->val.type == EXI_DATATYPE_STRING)
-					{
-						if( service->idPath.id[2] == 142)
-						{
-
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.RootCertificateID[service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.arraylen.RootCertificateID].X509IssuerName.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-							service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.RootCertificateID[service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.arraylen.RootCertificateID].X509IssuerName.arraylen.data = service->val.str.miss.len;
-
-
-						} else if(service->idPath.id[2] == 146)
-						{
-							memcpy(service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.RootCertificateID[service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.arraylen.RootCertificateID].X509IssuerName.data, service->val.str.miss.codepoints,service->val.str.miss.len*sizeof(uint32_t));
-							service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.RootCertificateID[service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.arraylen.RootCertificateID].X509IssuerName.arraylen.data = service->val.str.miss.len;
-
-							}
-
-					}
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-
-
-				break;
-
-		case 125: /* X509SerialNumber */
-
-				if(service->val.type == EXI_DATATYPE_INTEGER)
-					{
-					_setUnsignedInt64Value(&(service->val.integer),&(service->val.integer.val.uint64));
-						if( service->idPath.id[2] == 142)
-						{
-							service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.RootCertificateID[service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.arraylen.RootCertificateID].X509SerialNumber=service->val.integer.val.int64;
-						} else if(service->idPath.id[2] == 146)
-						{
-							service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.RootCertificateID[service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.arraylen.RootCertificateID].X509SerialNumber=service->val.integer.val.int64;						}
-
-					}
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-
-
-				break;
-
-		case 199: /* OEMProvisioningCert */
-
-				if(service->val.type == EXI_DATATYPE_BINARY_BASE64)
-					{
-						memcpy(service->exiMsg.V2G_Message.Body.CertificateInstallationReq->OEMProvisioningCert.data, service->val.binary.data,service->val.binary.len);
-						service->exiMsg.V2G_Message.Body.CertificateInstallationReq->OEMProvisioningCert.arraylen.data = service->val.binary.len;
-
-					}
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-
-
-				break;
-
-		case 137: /* BulkChargingComplete */ 
-
-				if(service->val.type == EXI_DATATYPE_BOOLEAN) 
-					{
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->BulkChargingComplete=service->val.boolean;
-							service->exiMsg.V2G_Message.Body.CurrentDemandReq->isused.BulkChargingComplete=1;
-
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 156: /* ChargingComplete */ 
-
-				if(service->val.type == EXI_DATATYPE_BOOLEAN) 
-					{
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->ChargingComplete=service->val.boolean;
-					} 
-					else
-					{
-						service->errorCode=EXI_DATATYPE_FAILED;
-						return -1; /* wrong data type */
-					}
-		
-
-				break;
-
-		case 109: /* SignatureValue */
-
-			if(service->val.type == EXI_DATATYPE_BINARY_BASE64)
-				{
-					memcpy(service->exiMsg.V2G_Message.Header->Signature->SignatureValue.data, service->val.binary.data,service->val.binary.len);
-					service->exiMsg.V2G_Message.Header->Signature->SignatureValue.arraylen.data = service->val.binary.len;
-
-				}
-				else
-				{
-					service->errorCode=EXI_DATATYPE_FAILED;
-					return -1; /* wrong data type */
-				}
-
-
-				break;
-
-	
-	} 
-	return 0;
-}
-
-/**
- * Depending on the current EXI event a message element is deserialized or a
- * defined service method is called in here
- */
-static int deserializeElementOrServiceCall(struct EXIService* service)
-{
-	switch(service->qnameID) {
-			case 93: /* Reference */ 
-						service->exiMsg.V2G_Message.Header->Signature->SignedInfo.arraylen.Reference++;
-	
-			break;
-		case 446: /* Notification */ 
-						service->exiMsg.V2G_Message.Header->isused.Notification=1;
-	
-			break;
-		case 101: /* Signature */ 
-						service->exiMsg.V2G_Message.Header->isused.Signature=1;
-	
-			break;
-		case 381: /* SelectedService */ 
-						service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq->SelectedServiceList.arraylen.SelectedService++;
-	
-			break;
-		case 393: /* SubCertificates */ 
-						
-			break;
-		case 300: /* EVMaximumPowerLimit */ 
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->isused.EVMaximumPowerLimit=1;
-	
-			break;
-		case 294: /* EVEnergyCapacity */ 
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->isused.EVEnergyCapacity=1;
-	
-			break;
-		case 295: /* EVEnergyRequest */ 
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->DC_EVChargeParameter->isused.EVEnergyRequest=1;
-	
-			break;
-		case 254: /* AC_EVChargeParameter */ 
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->isused.AC_EVChargeParameter=1;
-	
-			break;
-		case 275: /* DC_EVChargeParameter */ 
-						service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq->isused.DC_EVChargeParameter=1;
-	
-			break;
-		case 361: /* ProfileEntry */ 
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->ChargingProfile.arraylen.ProfileEntry++;
-	
-			break;
-		case 157: /* ChargingProfile */ 
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->isused.ChargingProfile=1;
-	
-			break;
-		case 278: /* DC_EVPowerDeliveryParameter */ 
-						service->exiMsg.V2G_Message.Body.PowerDeliveryReq->isused.DC_EVPowerDeliveryParameter=1;
-	
-			break;
-		case 366: /* RootCertificateID */ 
-
-			if( service->idPath.id[2] == 142)
-					{
-						service->exiMsg.V2G_Message.Body.CertificateInstallationReq->ListOfRootCertificateIDs.arraylen.RootCertificateID++;
-					} else if(service->idPath.id[2] == 146)
-					{
-						service->exiMsg.V2G_Message.Body.CertificateUpdateReq->ListOfRootCertificateIDs.arraylen.RootCertificateID++;
-					}
-
-
-						
-			break;
-		case 175: /* EVMaximumVoltageLimit */ 
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->isused.EVMaximumVoltageLimit=1;
-	
-			break;
-		case 173: /* EVMaximumCurrentLimit */ 
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->isused.EVMaximumCurrentLimit=1;
-	
-			break;
-		case 174: /* EVMaximumPowerLimit */ 
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->isused.EVMaximumPowerLimit=1;
-	
-			break;
-		case 219: /* RemainingTimeToFullSoC */ 
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->isused.RemainingTimeToFullSoC=1;
-	
-			break;
-		case 218: /* RemainingTimeToBulkSoC */ 
-						service->exiMsg.V2G_Message.Body.CurrentDemandReq->isused.RemainingTimeToBulkSoC=1;
-	
-			break;
-		case 241: /* SessionSetupReq */ 
-					
-			
-					/* service call */
-					if(sessionSetup((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.SessionSetupReq), (service->exiMsg.V2G_Message.Body.SessionSetupRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.SessionSetupRes=1;
-					service->exiMsg.V2G_Message.Body.isused.SessionSetupReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 232: /* ServiceDiscoveryReq */ 
-					
-			
-					/* service call */
-					if(serviceDiscovery((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq), (service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.ServiceDiscoveryRes=1;
-					service->exiMsg.V2G_Message.Body.isused.ServiceDiscoveryReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 228: /* ServiceDetailReq */ 
-					
-			
-					/* service call */
-					if(serviceDetail((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.ServiceDetailReq), (service->exiMsg.V2G_Message.Body.ServiceDetailRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.ServiceDetailRes=1;
-					service->exiMsg.V2G_Message.Body.isused.ServiceDetailReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 205: /* PaymentServiceSelectionReq */ 
-					
-			
-					/* service call */
-					if(paymentServiceSelection((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq), (service->exiMsg.V2G_Message.Body.PaymentServiceSelectionRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.PaymentServiceSelectionRes=1;
-					service->exiMsg.V2G_Message.Body.isused.PaymentServiceSelectionReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 200: /* PaymentDetailsReq */ 
-					
-			
-					/* service call */
-					if(paymentDetails((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.PaymentDetailsReq), (service->exiMsg.V2G_Message.Body.PaymentDetailsRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.PaymentDetailsRes=1;
-					service->exiMsg.V2G_Message.Body.isused.PaymentDetailsReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 130: /* AuthorizationReq */ 
-					
-			
-					/* service call */
-					if(authorization((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.AuthorizationReq), (service->exiMsg.V2G_Message.Body.AuthorizationRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.AuthorizationRes=1;
-					service->exiMsg.V2G_Message.Body.isused.AuthorizationReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 150: /* ChargeParameterDiscoveryReq */ 
-					
-			
-					/* service call */
-					if(chargeParameterDiscovery((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq), (service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.ChargeParameterDiscoveryRes=1;
-					service->exiMsg.V2G_Message.Body.isused.ChargeParameterDiscoveryReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 209: /* PowerDeliveryReq */ 
-					
-			
-					/* service call */
-					if(powerDelivery((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.PowerDeliveryReq), (service->exiMsg.V2G_Message.Body.PowerDeliveryRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.PowerDeliveryRes=1;
-					service->exiMsg.V2G_Message.Body.isused.PowerDeliveryReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 195: /* MeteringReceiptReq */ 
-					
-			
-					/* service call */
-					if(meteringReceipt((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.MeteringReceiptReq), (service->exiMsg.V2G_Message.Body.MeteringReceiptRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.MeteringReceiptRes=1;
-					service->exiMsg.V2G_Message.Body.isused.MeteringReceiptReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 245: /* SessionStopReq */ 
-					
-			
-					/* service call */
-					if(sessionStop((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.SessionStopReq), (service->exiMsg.V2G_Message.Body.SessionStopRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.SessionStopRes=1;
-					service->exiMsg.V2G_Message.Body.isused.SessionStopReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 146: /* CertificateUpdateReq */ 
-					
-			
-					/* service call */
-					if(certificateUpdate((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.CertificateUpdateReq), (service->exiMsg.V2G_Message.Body.CertificateUpdateRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.CertificateUpdateRes=1;
-					service->exiMsg.V2G_Message.Body.isused.CertificateUpdateReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 142: /* CertificateInstallationReq */ 
-					
-			
-					/* service call */
-					if(certificateInstallation((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.CertificateInstallationReq), (service->exiMsg.V2G_Message.Body.CertificateInstallationRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.CertificateInstallationRes=1;
-					service->exiMsg.V2G_Message.Body.isused.CertificateInstallationReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 159: /* ChargingStatusReq */ 
-					
-			
-					/* service call */
-					if(chargingStatus((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.ChargingStatusReq), (service->exiMsg.V2G_Message.Body.ChargingStatusRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.ChargingStatusRes=1;
-					service->exiMsg.V2G_Message.Body.isused.ChargingStatusReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 138: /* CableCheckReq */ 
-					
-			
-					/* service call */
-					if(cableCheck((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.CableCheckReq), (service->exiMsg.V2G_Message.Body.CableCheckRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.CableCheckRes=1;
-					service->exiMsg.V2G_Message.Body.isused.CableCheckReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 213: /* PreChargeReq */ 
-					
-			
-					/* service call */
-					if(preCharge((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.PreChargeReq), (service->exiMsg.V2G_Message.Body.PreChargeRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.PreChargeRes=1;
-					service->exiMsg.V2G_Message.Body.isused.PreChargeReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 165: /* CurrentDemandReq */ 
-					
-			
-					/* service call */
-					if(currentDemand((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.CurrentDemandReq), (service->exiMsg.V2G_Message.Body.CurrentDemandRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.CurrentDemandRes=1;
-					service->exiMsg.V2G_Message.Body.isused.CurrentDemandReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-			case 249: /* WeldingDetectionReq */ 
-					
-			
-					/* service call */
-					if(weldingDetection((service->exiMsg.V2G_Message.Header),(service->exiMsg.V2G_Message.Body.WeldingDetectionReq), (service->exiMsg.V2G_Message.Body.WeldingDetectionRes)))
-					{
-						/* service->errorCode=EXI_SERVICE_CALL_FAILED; */
-						return -1;
-					}
-							
-					/* signalize the response message */
-					service->exiMsg.V2G_Message.Body.isused.WeldingDetectionRes=1;
-					service->exiMsg.V2G_Message.Body.isused.WeldingDetectionReq=0;
-					
-					/* serialize the response data */
-					if(serialize_message(service))
-					{
-						/* serializiation error*/
-						service->errorCode= EXI_SERIALIZATION_FAILED;
-						return -1;
-					} 
-			break;
-			
-		
-	}
-	return 0;
-}
-
-
-
-static int deserializeSessionSetupReqMsg(struct EXIService* service)
-{
-	struct SessionSetupReqType reqMsg;
-	struct SessionSetupResType resMsg;
-	service->exiMsg.V2G_Message.Body.SessionSetupReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.SessionSetupRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeServiceDiscoveryReqMsg(struct EXIService* service)
-{
-	struct ServiceDiscoveryReqType reqMsg;
-	struct ServiceDiscoveryResType resMsg;
-	init_ServiceDiscoveryReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.ServiceDiscoveryReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.ServiceDiscoveryRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeServiceDetailReqMsg(struct EXIService* service)
-{
-	struct ServiceDetailReqType reqMsg;
-	struct ServiceDetailResType resMsg;
-	service->exiMsg.V2G_Message.Body.ServiceDetailReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.ServiceDetailRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializePaymentServiceSelectionReqMsg(struct EXIService* service)
-{
-	struct PaymentServiceSelectionReqType reqMsg;
-	struct PaymentServiceSelectionResType resMsg;
-	init_PaymentServiceSelectionReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.PaymentServiceSelectionReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.PaymentServiceSelectionRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializePaymentDetailsReqMsg(struct EXIService* service)
-{
-	struct PaymentDetailsReqType reqMsg;
-	struct PaymentDetailsResType resMsg;
-	init_PaymentDetailsReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.PaymentDetailsReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.PaymentDetailsRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeAuthorizationReqMsg(struct EXIService* service)
-{
-	struct AuthorizationReqType reqMsg;
-	struct AuthorizationResType resMsg;
-	service->exiMsg.V2G_Message.Body.AuthorizationReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.AuthorizationRes = &resMsg;
-	init_AuthorizationReqType(&reqMsg);
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeChargeParameterDiscoveryReqMsg(struct EXIService* service)
-{
-	struct ChargeParameterDiscoveryReqType reqMsg;
-	struct ChargeParameterDiscoveryResType resMsg;
-	struct DC_EVChargeParameterType dc_pev;
-	struct AC_EVChargeParameterType ac_pev;
-	struct DC_EVSEChargeParameterType dc_evse;
-	struct AC_EVSEChargeParameterType ac_evse;
-	struct SAScheduleListType tuple;
-	struct SalesTariffType sales1;
-	struct SalesTariffType sales2;
-
-	init_AC_EVChargeParameterType(&ac_pev);
-
-	init_ChargeParameterDiscoveryReqType(&reqMsg);
-	init_DC_EVSEChargeParameterType(&dc_evse);
-	init_AC_EVSEChargeParameterType(&ac_evse);
-	init_DC_EVChargeParameterType(&dc_pev);
-	init_SAScheduleListType(&tuple);
-	init_SalesTariffType(&sales1);
-	init_SalesTariffType(&sales2);
-
-	reqMsg.AC_EVChargeParameter = &ac_pev;
-	reqMsg.DC_EVChargeParameter = &dc_pev;
-	resMsg.AC_EVSEChargeParameter = &ac_evse;
-	resMsg.DC_EVSEChargeParameter= &dc_evse;
-
-	service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.ChargeParameterDiscoveryRes = &resMsg;
-
-	tuple.SAScheduleTuple[0].SalesTariff = &sales1;
-	tuple.SAScheduleTuple[1].SalesTariff =  &sales2;
-	resMsg.SAScheduleList = &tuple;
-
-	return deserializeMessage(service);
-}
-
-static int deserializePowerDeliveryReqMsg(struct EXIService* service)
-{
-	struct PowerDeliveryReqType reqMsg;
-	struct PowerDeliveryResType resMsg;
-	struct DC_EVPowerDeliveryParameterType EVPowerDelivery;
-
-	struct DC_EVSEStatusType dc_evse;
-	struct AC_EVSEStatusType ac_evse;
-
-	init_DC_EVPowerDeliveryParameterType(&EVPowerDelivery);
-	init_PowerDeliveryReqType(&reqMsg);
-
-
-	resMsg.AC_EVSEStatus = &ac_evse;
-	resMsg.DC_EVSEStatus = &dc_evse;
-
-	reqMsg.DC_EVPowerDeliveryParameter = &EVPowerDelivery;
-
-	service->exiMsg.V2G_Message.Body.PowerDeliveryReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.PowerDeliveryRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeChargingStatusReqMsg(struct EXIService* service)
-{
-	struct ChargingStatusReqType reqMsg;
-	struct ChargingStatusResType resMsg;
-	service->exiMsg.V2G_Message.Body.ChargingStatusReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.ChargingStatusRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeMeteringReceiptReqMsg(struct EXIService* service)
-{
-	struct MeteringReceiptReqType reqMsg;
-	struct MeteringReceiptResType resMsg;
-
-	struct DC_EVSEStatusType dc_evse;
-	struct AC_EVSEStatusType ac_evse;
-
-	init_MeteringReceiptReqType(&reqMsg);
-	
-
-	resMsg.AC_EVSEStatus = &ac_evse;
-	resMsg.DC_EVSEStatus = &dc_evse;
-
-
-	service->exiMsg.V2G_Message.Body.MeteringReceiptReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.MeteringReceiptRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeCertificateUpdateReqMsg(struct EXIService* service)
-{
-	struct CertificateUpdateReqType reqMsg;
-	struct CertificateUpdateResType resMsg;
-	init_CertificateUpdateReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.CertificateUpdateReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.CertificateUpdateRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeCertificateInstallationReqMsg(struct EXIService* service)
-{
-	struct CertificateInstallationReqType reqMsg;
-	struct CertificateInstallationResType resMsg;
-	init_CertificateInstallationReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.CertificateInstallationReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.CertificateInstallationRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeCableCheckReqMsg(struct EXIService* service)
-{
-	struct CableCheckReqType reqMsg;
-	struct CableCheckResType resMsg;
-	service->exiMsg.V2G_Message.Body.CableCheckReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.CableCheckRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializePreChargeReqMsg(struct EXIService* service)
-{
-	struct PreChargeReqType reqMsg;
-	struct PreChargeResType resMsg;
-	init_PreChargeReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.PreChargeReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.PreChargeRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeCurrentDemandReqMsg(struct EXIService* service)
-{
-	struct CurrentDemandReqType reqMsg;
-	struct CurrentDemandResType resMsg;
-	init_CurrentDemandReqType(&reqMsg);
-	
-	service->exiMsg.V2G_Message.Body.CurrentDemandReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.CurrentDemandRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeWeldingDetectionReqMsg(struct EXIService* service)
-{
-	struct WeldingDetectionReqType reqMsg;
-	struct WeldingDetectionResType resMsg;
-	service->exiMsg.V2G_Message.Body.WeldingDetectionReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.WeldingDetectionRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-static int deserializeSessionStopReqMsg(struct EXIService* service)
-{
-	struct SessionStopReqType reqMsg;
-	struct SessionStopResType resMsg;
-	service->exiMsg.V2G_Message.Body.SessionStopReq = &reqMsg;
-	service->exiMsg.V2G_Message.Body.SessionStopRes = &resMsg;
-	
-	return deserializeMessage(service);
-}
-
-/** 
- * Deserialize the EXI stream
- * @return 0 = 0K; -1 = ERROR
- */
-static int deserializeMessage(struct EXIService* service)
-{
-	int noEndOfDocument = 1; /* true */
-	int returnCode=0;
-	int eventCounter = 0;
-	static int derivationCounter = 0;
-
-
-	do {
-			exiv2gDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event));
-			if (returnCode) 
-			{
-				
-				if(service->errorCode==0) 
-				{
-					service->errorCode= EXI_NON_VALID_MESSAGE;
-				}
-			
-				return returnCode;
-			}
-
-			switch (service->event) {
-			case EXI_EVENT_START_DOCUMENT:
-
-				returnCode = exiv2gDecodeStartDocument(&(service->inStream), &(service->stateDecode));
-
-				break;
-			case EXI_EVENT_END_DOCUMENT:
-
-				returnCode = exiv2gDecodeEndDocument(&(service->inStream), &(service->stateDecode));
-				noEndOfDocument = 0; /* false */
-				break;
-			case EXI_EVENT_START_ELEMENT_GENERIC:
-			case EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED:
-				derivationCounter++;
-			case EXI_EVENT_START_ELEMENT:
-				returnCode = exiv2gDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->qnameID));
-				service->idPath.id[service->idPath.pos++]=service->qnameID;
-				 
-				 /* setup the request context*/
-				 if(service->qnameID==241 )
-				  {
-				 	return deserializeSessionSetupReqMsg(service);
-				   } else if(service->qnameID==232)
-				  {
-				 	return deserializeServiceDiscoveryReqMsg(service);
-				   } else if(service->qnameID==228)
-				  {
-				 	return deserializeServiceDetailReqMsg(service);
-				   } else if(service->qnameID==205)
-				  {
-				 	return deserializePaymentServiceSelectionReqMsg(service);
-				   } else if(service->qnameID==200)
-				  {
-				 	return deserializePaymentDetailsReqMsg(service);
-				   } else if(service->qnameID==130)
-				  {
-				 	return deserializeAuthorizationReqMsg(service);
-				   } else if(service->qnameID==150)
-				  {
-				 	return deserializeChargeParameterDiscoveryReqMsg(service);
-				   } else if(service->qnameID==209)
-				  {
-				 	return deserializePowerDeliveryReqMsg(service);
-				   } else if(service->qnameID==195)
-				  {
-				 	return deserializeMeteringReceiptReqMsg(service);
-				   } else if(service->qnameID==245)
-				  {
-				 	return deserializeSessionStopReqMsg(service);
-				   } else if(service->qnameID==146)
-				  {
-				 	return deserializeCertificateUpdateReqMsg(service);
-				   } else if(service->qnameID==142)
-				  {
-				 	return deserializeCertificateInstallationReqMsg(service);
-				   } else if(service->qnameID==159)
-				  {
-				 	return deserializeChargingStatusReqMsg(service);
-				   } else if(service->qnameID==138)
-				  {
-				 	return deserializeCableCheckReqMsg(service);
-				   } else if(service->qnameID==213)
-				  {
-				 	return deserializePreChargeReqMsg(service);
-				   } else if(service->qnameID==165)
-				  {
-				 	return deserializeCurrentDemandReqMsg(service);
-				   } else if(service->qnameID==249)
-				  {
-				 	return deserializeWeldingDetectionReqMsg(service);
-				   } 				 
-				 
-				 
-				break;
-			case EXI_EVENT_END_ELEMENT_UNDECLARED:
-			case EXI_EVENT_END_ELEMENT:
-
-				returnCode = exiv2gDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->qnameID));
-
-				if(derivationCounter==0)
-					returnCode = deserializeElementOrServiceCall(service);
-
-				service->idPath.pos--;
-
-				if(derivationCounter>0)
-					derivationCounter--;
-				 
-				break;
-			case EXI_EVENT_CHARACTERS_GENERIC:
-			case EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED:
-			case EXI_EVENT_CHARACTERS:
-				/* decode */
-				returnCode = exiv2gDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
-				 
-				/* assign data to the EXI message structure */
-				if(derivationCounter==0)
-					returnCode = deserializeElementAttributeCharacter(service);
-				break;
-			case EXI_EVENT_ATTRIBUTE_GENERIC:
-			case EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED:
-			case EXI_EVENT_ATTRIBUTE_INVALID_VALUE:
-			case EXI_EVENT_ATTRIBUTE:
-				/* decode */
-				returnCode = exiv2gDecodeAttribute(&(service->inStream), &(service->stateDecode), &(service->qnameID), &(service->val));
-
-				if(derivationCounter==0)
-					returnCode = deserializeElementAttributeCharacter(service);
-				break;
-			case EXI_EVENT_ATTRIBUTE_ANY_INVALID_VALUE:
-				break;
-			default:
-				/* ERROR */
-				return -1;
-			}
-			
-			if(eventCounter++>500) {
-
-				service->errorCode=EXI_DESERIALIZATION_FAILED;
-				return -1;
-			}
-
-		} while (noEndOfDocument);
-
-	return 0;
-}
-
-
-/** 
- * \brief Takes the EXI stream, invokes the called service method, and provides the response EXI stream
- * \param	service   struct EXIService* Represent the service data structure
- * \param	inStream   uint8_t* EXI in stream
- * \param	sizeInStream   uint16_t Length of the inStream
- * \param	outStream   uint8_t* Represent the out stream
- * \param	sizeOutStream   uint16_t Size of the out stream
- * \param	outStreamLength   uint16_t* Length of the stream
- * \return  0 = 0K; -1 = ERROR
- */
-int messageDispatcher(struct EXIService* service, uint8_t* inStream, uint16_t sizeInStream, uint8_t* outStream, uint16_t sizeOutStream, uint16_t* outStreamLength)
-{
-	struct MessageHeaderType header;
-	struct SignatureType signature;
-
-	uint32_t inPos, outPos;
-	
-	exi_name_table_runtime_t runtimeTableDecode;
-	exi_name_table_runtime_t runtimeTableEncode;
-	
-	exi_value_table_t stringTableDecode = { 0, EXI_v2gMAX_NUMBER_OF_QNAMES, numberOfLocalStringsDecode};
-	exi_value_table_t stringTableEncode = { 0, EXI_v2gMAX_NUMBER_OF_QNAMES, numberOfLocalStringsEncode};
- 
-	
-	/* assign inStream data to service EXI structure */
-	inPos = service->transportHeaderOffset;
-	service->inStream.data = inStream;
-	service->inStream.size = sizeInStream+inPos;
-	service->inStream.pos = &inPos;
-	service->inStream.buffer=0;
-	service->inStream.capacity=0;
-
-	
-	/* assign outStream data to service EXI structure */
-	outPos=service->transportHeaderOffset;
-	service->outStream.data = outStream;
-	service->outStream.size = sizeOutStream;
-	service->outStream.pos = &outPos;
-	service->outStream.buffer=0;
-	service->outStream.capacity=8;
-	
-	/* clear error code */
-	service->errorCode = 0;
-	
-	/* init decoder (read header, set initial state) */
-	/* init runtime table */
-	exiInitNameTableRuntime(&runtimeTableDecode);
-	/* exiv2gInitDecoder(&(service->inStream), &(service->stateDecode), runtimeTableDecode); */
-	
-	exiv2gInitDecoder(&(service->inStream), &(service->stateDecode), runtimeTableDecode,stringTableDecode);
-	
-	
-	/* init encoder (write header, set initial state) */
-	exiInitNameTableRuntime(&runtimeTableEncode);
-	/* exiv2gInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode); */
-	
-	exiv2gInitEncoder(&(service->outStream), &(service->stateEncode), runtimeTableEncode,stringTableEncode);
-	
-
-	/* init uniqueID stack */
-	service->idPath.pos=0;
-
-	init_MessageHeaderType(&header);
-	service->exiMsg.V2G_Message.Header = &header;	
-
-	init_SignatureType(&signature);
-	service->exiMsg.V2G_Message.Header->Signature=&signature;
-
-
-	/* init EXI message */
-	init_EXIDocumentType(&(service->exiMsg));
-
-	/* deserialize the input stream and call the corresponding service */
-	if(deserializeMessage(service))
-	{
-		return -1; /* something went wrong */
-	}
-
-	/* determine payload size (without transport offset) */	
-	outPos -= service->transportHeaderOffset;
-	*outStreamLength = outPos;
-
-	
-	return 0;
-}
-
-/** 
- * \brief Init the v2g service data structure
- * \param	service   struct EXIService* Service data structure
- * \param	bytes   bytes_t setted up byte data structure
- * \param	string_ucs_t   setted up string data structure
- * \param	transportHeaderOffset uint16_t Transport protocol offset
- * \return  0 = 0K; -1 = ERROR
- */
-int init_v2gservice(struct EXIService* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, uint16_t transportHeaderOffset)
-{
-
-	/* init byte array */
-	 service->val.binary = service_bytes;
-
-	/* init string array */
-	 service->val.str.miss = service_string;
-
-
-	 service->idPath.pos=0;
-
-	 /* init offset for transport protocol */
-	service->transportHeaderOffset=transportHeaderOffset;
-
-
-	return 0;
-}

+ 0 - 63
src/service/v2g_serviceDispatcher.h

@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- ********************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef V2GSERVER_H_
-#define V2GSERVER_H_
-
-#include "v2g_dataTypes.h"
-
-
-/** 
- * \brief Init the v2g service data structure
- * \param	service   struct EXIService* Service data structure
- * \param	bytes   bytes_t setted up byte data structure
- * \param	string_ucs_t   setted up string data structure
- * \param	transportHeaderOffset uint16_t Transport protocol offset
- * \return  0 = 0K; -1 = ERROR
- */
-int init_v2gservice(struct EXIService* service, exi_bytes_t service_bytes, exi_string_ucs_t service_string, uint16_t transportHeaderOffset);
-
-/** 
- * \brief Takes the EXI stream, invokes the called service method, and provides the response EXI stream
- * \param	service   struct EXIService* Represent the service data structure
- * \param	inStream   uint8_t* EXI in stream
- * \param	sizeInStream   uint16_t Length of the inStream
- * \param	outStream   uint8_t* Represent the out stream
- * \param	sizeOutStream   uint16_t Size of the out stream
- * \param	outStreamLength   uint16_t* Length of the stream
- * \return  0 = 0K; -1 = ERROR
- */
-int messageDispatcher(struct EXIService* service, uint8_t* inStream, uint16_t sizeInStream, uint8_t* outStream, uint16_t sizeOutStream, uint16_t* outStreamLength);
-
-#endif /* V2GSERVER_H_ */
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 186
src/service/v2g_serviceMethods.h

@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2007-2013 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- * <p>Code generated by EXISeGen</p>
- *
- ********************************************************************/
-
- 
- #ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef SERVICEMETHODS_H
-#define SERVICEMETHODS_H
-
-#include "v2g_dataTypes.h"
-#include "EXITypes.h"
-
-/** This service methods has to be implemented by the EVSE server */
-/** 
- * \brief   This sessionSetup method is called by the service dispatcher if there was passed a sessionSetup-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct SessionSetupReqType Parameter dataset of the sessionSetup request message
- * \param	result  struct SessionSetupResType Result dataset for the sessionSetup response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	sessionSetup(struct MessageHeaderType* header, struct SessionSetupReqType* param, struct SessionSetupResType* result);
-					
-/** 
- * \brief   This serviceDiscovery method is called by the service dispatcher if there was passed a serviceDiscovery-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct ServiceDiscoveryReqType Parameter dataset of the serviceDiscovery request message
- * \param	result  struct ServiceDiscoveryResType Result dataset for the serviceDiscovery response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	serviceDiscovery(struct MessageHeaderType* header, struct ServiceDiscoveryReqType* param, struct ServiceDiscoveryResType* result);
-					
-/** 
- * \brief   This serviceDetail method is called by the service dispatcher if there was passed a serviceDetail-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct ServiceDetailReqType Parameter dataset of the serviceDetail request message
- * \param	result  struct ServiceDetailResType Result dataset for the serviceDetail response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	serviceDetail(struct MessageHeaderType* header, struct ServiceDetailReqType* param, struct ServiceDetailResType* result);
-					
-/** 
- * \brief   This paymentServiceSelection method is called by the service dispatcher if there was passed a paymentServiceSelection-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct PaymentServiceSelectionReqType Parameter dataset of the paymentServiceSelection request message
- * \param	result  struct PaymentServiceSelectionResType Result dataset for the paymentServiceSelection response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	paymentServiceSelection(struct MessageHeaderType* header, struct PaymentServiceSelectionReqType* param, struct PaymentServiceSelectionResType* result);
-					
-/** 
- * \brief   This paymentDetails method is called by the service dispatcher if there was passed a paymentDetails-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct PaymentDetailsReqType Parameter dataset of the paymentDetails request message
- * \param	result  struct PaymentDetailsResType Result dataset for the paymentDetails response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	paymentDetails(struct MessageHeaderType* header, struct PaymentDetailsReqType* param, struct PaymentDetailsResType* result);
-					
-/** 
- * \brief   This authorization method is called by the service dispatcher if there was passed a authorization-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct AuthorizationReqType Parameter dataset of the authorization request message
- * \param	result  struct AuthorizationResType Result dataset for the authorization response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	authorization(struct MessageHeaderType* header, struct AuthorizationReqType* param, struct AuthorizationResType* result);
-					
-/** 
- * \brief   This chargeParameterDiscovery method is called by the service dispatcher if there was passed a chargeParameterDiscovery-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct ChargeParameterDiscoveryReqType Parameter dataset of the chargeParameterDiscovery request message
- * \param	result  struct ChargeParameterDiscoveryResType Result dataset for the chargeParameterDiscovery response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	chargeParameterDiscovery(struct MessageHeaderType* header, struct ChargeParameterDiscoveryReqType* param, struct ChargeParameterDiscoveryResType* result);
-					
-/** 
- * \brief   This powerDelivery method is called by the service dispatcher if there was passed a powerDelivery-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct PowerDeliveryReqType Parameter dataset of the powerDelivery request message
- * \param	result  struct PowerDeliveryResType Result dataset for the powerDelivery response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	powerDelivery(struct MessageHeaderType* header, struct PowerDeliveryReqType* param, struct PowerDeliveryResType* result);
-					
-/** 
- * \brief   This meteringReceipt method is called by the service dispatcher if there was passed a meteringReceipt-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct MeteringReceiptReqType Parameter dataset of the meteringReceipt request message
- * \param	result  struct MeteringReceiptResType Result dataset for the meteringReceipt response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	meteringReceipt(struct MessageHeaderType* header, struct MeteringReceiptReqType* param, struct MeteringReceiptResType* result);
-					
-/** 
- * \brief   This sessionStop method is called by the service dispatcher if there was passed a sessionStop-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct SessionStopReqType Parameter dataset of the sessionStop request message
- * \param	result  struct SessionStopResType Result dataset for the sessionStop response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	sessionStop(struct MessageHeaderType* header, struct SessionStopReqType* param, struct SessionStopResType* result);
-					
-/** 
- * \brief   This certificateUpdate method is called by the service dispatcher if there was passed a certificateUpdate-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct CertificateUpdateReqType Parameter dataset of the certificateUpdate request message
- * \param	result  struct CertificateUpdateResType Result dataset for the certificateUpdate response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	certificateUpdate(struct MessageHeaderType* header, struct CertificateUpdateReqType* param, struct CertificateUpdateResType* result);
-					
-/** 
- * \brief   This certificateInstallation method is called by the service dispatcher if there was passed a certificateInstallation-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct CertificateInstallationReqType Parameter dataset of the certificateInstallation request message
- * \param	result  struct CertificateInstallationResType Result dataset for the certificateInstallation response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	certificateInstallation(struct MessageHeaderType* header, struct CertificateInstallationReqType* param, struct CertificateInstallationResType* result);
-					
-/** 
- * \brief   This chargingStatus method is called by the service dispatcher if there was passed a chargingStatus-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct ChargingStatusReqType Parameter dataset of the chargingStatus request message
- * \param	result  struct ChargingStatusResType Result dataset for the chargingStatus response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	chargingStatus(struct MessageHeaderType* header, struct ChargingStatusReqType* param, struct ChargingStatusResType* result);
-					
-/** 
- * \brief   This cableCheck method is called by the service dispatcher if there was passed a cableCheck-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct CableCheckReqType Parameter dataset of the cableCheck request message
- * \param	result  struct CableCheckResType Result dataset for the cableCheck response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	cableCheck(struct MessageHeaderType* header, struct CableCheckReqType* param, struct CableCheckResType* result);
-					
-/** 
- * \brief   This preCharge method is called by the service dispatcher if there was passed a preCharge-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct PreChargeReqType Parameter dataset of the preCharge request message
- * \param	result  struct PreChargeResType Result dataset for the preCharge response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	preCharge(struct MessageHeaderType* header, struct PreChargeReqType* param, struct PreChargeResType* result);
-					
-/** 
- * \brief   This currentDemand method is called by the service dispatcher if there was passed a currentDemand-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct CurrentDemandReqType Parameter dataset of the currentDemand request message
- * \param	result  struct CurrentDemandResType Result dataset for the currentDemand response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	currentDemand(struct MessageHeaderType* header, struct CurrentDemandReqType* param, struct CurrentDemandResType* result);
-					
-/** 
- * \brief   This weldingDetection method is called by the service dispatcher if there was passed a weldingDetection-based request message.
- * \param	header  struct MessageHeaderType* Header dataset
- * \param	param   struct WeldingDetectionReqType Parameter dataset of the weldingDetection request message
- * \param	result  struct WeldingDetectionResType Result dataset for the weldingDetection response message 
- * \return  0 = 0K; -1 = ERROR (message dispatcher will return an error) */
-int	weldingDetection(struct MessageHeaderType* header, struct WeldingDetectionReqType* param, struct WeldingDetectionResType* result);
-						
-	
-
-	
-	
-	
-#endif
-
-#ifdef __cplusplus
-}
-#endif

+ 0 - 192
src/test/evse_server.c

@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- ********************************************************************/
-
-
-/* includes for the application handshake protocol */
-#include "appHand_service.h"
-#include "appHand_dataTypes.h"
-#include "v2g_service.h"
-#include "v2gtp.h"
-#include "evse_server.h"
-
-#include "v2g_serviceDispatcher.h"
-
-#include <stdio.h>
-
-
-#define MAX_BYTE_SIZE 64
-#define MAX_STRING_SIZE 64
-#define MAX_STREAM_SIZE 100
-
-static int appHandshakeHandler(struct EXIDatabinder* appHandService, uint8_t* inStream, uint16_t sizeInStream, uint8_t* outStream, uint16_t* outStreamLength);
-static void printASCIIString(uint32_t* string, uint32_t len);
-
-int testV2GService(uint8_t* inStream, uint16_t inStreamLength, uint8_t* outStream, uint16_t* outStreamLength)
-{
-	static uint8_t byte_array[MAX_BYTE_SIZE]; /* define MAX_BYTE_SIZE before*/
-	static uint32_t string_array[MAX_STRING_SIZE]; /* define MAX_STRING_SIZE before*/
-	uint16_t exiMsgLength;
-	uint8_t errn;
-
-	 struct EXIDatabinder appHandService;
-	struct EXIService service;
-
-	static uint8_t isHandshake = 1;
-
-	/* BINARY memory setup */
-	exi_bytes_t bytes = { MAX_BYTE_SIZE, byte_array, 0 };
-
-	/* STRING memory setup */
-	exi_string_ucs_t string = { MAX_STRING_SIZE, string_array, 0 };
-
-	/**********************************************
-	 * Init V2G server and initialize array types *
-	 * for the EXI decoding	as well as the offset *
-	 * for the transportation header			  *
-	 **********************************************/
-
-	init_v2gservice(&service, bytes, string, V2GTP_HEADER_LENGTH);
-
-	/* check, if the DoIP header is correct and determine payload */
-	if(read_v2gtpHeader(inStream,inStreamLength, &exiMsgLength))
-	{
-		/* v2gtp header not correct */
-		return -1;
-	}
-
-	/* Here, it is assumed the first message is always the application handshake protocol.
-	 * The successor messages are 15118 charging based messages and handled by the message
-	 * dispatcher. */
-
-	if(isHandshake)
-		{
-
-
-
-			/* init the de- / serializer */
-			init_appHandDeserializer(&appHandService,bytes,string,V2GTP_HEADER_LENGTH);
-			init_appHandSerializer(&appHandService,bytes,string,MAX_STREAM_SIZE,V2GTP_HEADER_LENGTH);
-
-			if(appHandshakeHandler(&appHandService, inStream,inStreamLength,outStream,outStreamLength))
-			{
-				return -1; /* an error occured */
-			}
-
-			isHandshake = 0; /* here: next time a charging message is expected */
-		}
-	else
-		{
-
-
-		/****************************************************************************
-		 * Pass the received EXI message stream (inStream + exiMsgLength) to the    *
-		 * v2g message dispatcher. 	The outStream contains the response message     *
-		 * stream.  																*
-		 ****************************************************************************/
-		errn = messageDispatcher(&service, inStream, exiMsgLength, outStream, MAX_STREAM_SIZE, outStreamLength);
-
-
-		if(errn)
-		{
-
-			/* an error occurred; in such a case the outStream contains the generic error V2G message which
-			 * can be response to the EV! */
-
-		}
-	}
-
-
-	/* write v2gtp header */
-	write_v2gtpHeader(outStream, outStreamLength, V2GTP_EXI_TYPE);
-
-
-
-	return 0;
-
-}
-
-
-/** Example implementation of the app handshake protocol for the EVSE side  */
-static int appHandshakeHandler(struct EXIDatabinder* appHandService, uint8_t* inStream, uint16_t sizeInStream, uint8_t* outStream, uint16_t* outStreamLength)
-{
-	struct EXIDocumentType_appHand exiDoc;
-		struct SupportedAppProtocolReq handshake;
-		struct SupportedAppProtocolRes resultHandshake;
-		size_t i;
-
-		init_SupportedAppProtocolReq(&handshake);
-		init_EXIDocumentType_appHand(&exiDoc);
-
-		/* we expect a supportedAppProtocolReq */
-		exiDoc.supportedAppProtocolReq = &handshake;
-
-
-		if(deserialize_appHand(appHandService,inStream,sizeInStream,&exiDoc))
-		{
-			/* an error occured */
-			return -1;
-		}
-
-		printf("EVSE side: List of application handshake protocols of the EV \n");
-
-		for(i=0;i<handshake.arraylen.AppProtocol;i++)
-		{
-			printf("\tProtocol entry #=%d\n",(i+1));
-			printf("\t\tProtocolNamespace=");
-			printASCIIString(handshake.AppProtocol[i].ProtocolNamespace.data,handshake.AppProtocol[i].ProtocolNamespace.arraylen.data);
-			printf("\t\tVersion=%d.%d\n", handshake.AppProtocol[i].VersionNumberMajor,handshake.AppProtocol[i].VersionNumberMinor);
-			printf("\t\tSchemaID=%d\n", handshake.AppProtocol[i].SchemaID);
-			printf("\t\tPriority=%d\n", handshake.AppProtocol[i].Priority);
-		}
-
-		/* prepare response handshake response:
-		 * it is assumed, we support the 15118 1.0 version :-) */
-		resultHandshake.ResponseCode=OK_SuccessfulNegotiation_responseCodeType;
-		resultHandshake.SchemaID=handshake.AppProtocol[0].SchemaID; /* signal the protocol by the provided schema id*/
-		resultHandshake.isused.SchemaID=1;
-
-		/* assign the response message to the exiDoc */
-		init_EXIDocumentType_appHand(&exiDoc);
-		exiDoc.supportedAppProtocolRes=&resultHandshake;
-		exiDoc.isused.supportedAppProtocolRes=1;
-
-		if(serialize_appHand(appHandService, outStream,outStreamLength, &exiDoc))
-		{
-			return -1;
-		}
-
-
-		return 0;
-	}
-
-static void printASCIIString(uint32_t* string, uint32_t len) {
-	unsigned int i;
-	for(i=0; i<len; i++) {
-		printf("%c",(char)string[i]);
-	}
-	printf("\n");
-}
-
-

+ 0 - 33
src/test/evse_server.h

@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- ********************************************************************/
-
-#ifndef V2G_SERVER_H_
-#define V2G_SERVER_H_
-
-#include "EXITypes.h"
-
-int testV2GService(uint8_t* inStream, uint16_t inStreamLength, uint8_t* outStream,uint16_t* outStreamLength);
-
-#endif /* V2G_SERVER_H_ */

+ 0 - 843
src/test/evse_serviceMethods.c

@@ -1,843 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Siemens AG
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*******************************************************************
- *
- * @author Sebastian.Kaebisch@siemens.com
- * @version 0.8
- * @contact Joerg.Heuer@siemens.com
- *
- ********************************************************************/
-
-#include "v2g_serviceMethods.h"
-#include "v2g_dataTypes.h"
-#include <stdio.h>
-
-static void printBinaryArray(uint8_t* byte, uint32_t len);
-
-int	sessionSetup(struct MessageHeaderType* header, struct SessionSetupReqType* param, struct SessionSetupResType* result)
-{
-
-	printf("EVSE side: sessionSetup called\n"  );
-	printf("\tReceived data:\n");
-	printf("\tHeader SessionID=");
-	printBinaryArray(header->SessionID.data,header->SessionID.arraylen.data );
-	printf("\t\t EVCCID=%d\n",param->EVCCID.data[0]);
-
-
-	/* generate an unique sessionID */
-	header->SessionID.data[0] = 1;
-	header->SessionID.data[1] = 2;
-	header->SessionID.data[2] = 3;
-	header->SessionID.data[3] = 4;
-	header->SessionID.data[4] = 5;
-	header->SessionID.data[5] = 6;
-	header->SessionID.data[6] = 7;
-	header->SessionID.data[7] = 8;
-	header->SessionID.arraylen.data=8;
-
-	/* Prepare data for EV */
-	result->ResponseCode = OK_responseCodeType;
-	result->EVSEID.data[1]=20;
-	result->EVSEID.arraylen.data=2;
-	result->EVSETimeStamp=123456789;
-	result->isused.EVSETimeStamp=1;
-
-
-	return 0;
-
-}
-
-int	serviceDiscovery(struct MessageHeaderType* header, struct ServiceDiscoveryReqType* param, struct ServiceDiscoveryResType* result)
-{
-	printf("EVSE side: serviceDiscovery called\n"  );
-	printf("\tReceived data:\n");
-	printf("\tHeader SessionID=");
-	printBinaryArray(header->SessionID.data,header->SessionID.arraylen.data );
-
-	printf("\t\t ServiceCategory=%d\n", param->ServiceCategory);
-
-
-
-	result->isused.ServiceList=0; /* we do not provide VAS */
-	result->ResponseCode= OK_responseCodeType;
-
-
-	/* result->ChargeService.SupportedEnergyTransferMode = AC_single_phase_core_EnergyTransferModeType; */
-	result->ChargeService.ServiceID=1; /* ID of the charge service */
-	result->ChargeService.ServiceName.data[0]='A';
-	result->ChargeService.ServiceName.data[1]='C';
-	result->ChargeService.ServiceName.data[2]='_';
-	result->ChargeService.ServiceName.data[3]='D';
-	result->ChargeService.ServiceName.data[4]='C';
-	result->ChargeService.ServiceName.arraylen.data=5;
-	result->ChargeService.isused.ServiceName=1;
-	result->ChargeService.isused.ServiceScope=1;
-
-	result->ChargeService.FreeService = 1;
-	result->ChargeService.ServiceCategory = EVCharging_serviceCategoryType;
-	result->ChargeService.ServiceScope.data[0] = 100;
-	result->ChargeService.ServiceScope.arraylen.data = 1;
-
-	result->ChargeService.SupportedEnergyTransferMode.EnergyTransferMode[0] = DC_combo_core_EnergyTransferModeType;
-	result->ChargeService.SupportedEnergyTransferMode.EnergyTransferMode[1] = AC_single_phase_core_EnergyTransferModeType;
-	result->ChargeService.SupportedEnergyTransferMode.arraylen.EnergyTransferMode=2;
-
-	result->PaymentOptionList.PaymentOption[0] = ExternalPayment_paymentOptionType; /* EVSE handles the payment */
-	result->PaymentOptionList.PaymentOption[1] = Contract_paymentOptionType;
-	result->PaymentOptionList.arraylen.PaymentOption=2;
-
-	if(param->ServiceCategory==Internet_serviceCategoryType || param->ServiceCategory==OtherCustom_serviceCategoryType || param->isused.ServiceCategory==0)
-	{
-
-		result->ServiceList.Service[0].FreeService=1;
-		result->ServiceList.Service[0].ServiceID=22; /* ID of the charge service */
-		result->ServiceList.Service[0].ServiceName.data[0]='W';
-		result->ServiceList.Service[0].ServiceName.data[1]='W';
-		result->ServiceList.Service[0].ServiceName.data[2]='W';
-		result->ServiceList.Service[0].ServiceName.arraylen.data=3;
-		result->ServiceList.Service[0].ServiceCategory=Internet_serviceCategoryType;
-		result->ServiceList.Service[0].isused.ServiceName=1;
-		result->ServiceList.Service[0].isused.ServiceScope=0;
-
-		result->ServiceList.Service[1].FreeService=0;
-		result->ServiceList.Service[1].ServiceID=33; /* ID of the charge service */
-		result->ServiceList.Service[1].ServiceName.data[0]='H';
-		result->ServiceList.Service[1].ServiceName.data[1]='T';
-		result->ServiceList.Service[1].ServiceName.data[2]='T';
-		result->ServiceList.Service[1].ServiceName.data[3]='P';
-		result->ServiceList.Service[1].ServiceName.data[4]='S';
-		result->ServiceList.Service[1].ServiceName.arraylen.data=5;
-		result->ServiceList.Service[1].ServiceCategory=Internet_serviceCategoryType;
-		result->ServiceList.Service[1].isused.ServiceName=1;
-		result->ServiceList.Service[1].isused.ServiceScope=0;
-
-
-
-	result->ServiceList.arraylen.Service=2;
-	result->isused.ServiceList=1;
-
-	} else {
-		result->isused.ServiceList=0; /* no value added service requested */
-	}
-
-
-	return 0;
-}
-
-int	paymentServiceSelection(struct MessageHeaderType* header, struct PaymentServiceSelectionReqType* param, struct PaymentServiceSelectionResType* result)
-{
-	size_t i;
-
-	printf("EVSE side: servicePaymentSelection called\n"  );
-	printf("\tReceived data:\n");
-	printf("\tHeader SessionID=");
-	printBinaryArray(header->SessionID.data,header->SessionID.arraylen.data );
-
-	if(param->SelectedPaymentOption == ExternalPayment_paymentOptionType)
-		printf("\t\t SelectedPaymentOption=ExternalPayment\n");
-
-	for(i=0; i<param->SelectedServiceList.arraylen.SelectedService;i++)
-	{
-		printf("\t\t ServiceID=%d\n",param->SelectedServiceList.SelectedService[i].ServiceID);
-		if( param->SelectedServiceList.SelectedService[i].isused.ParameterSetID)
-				printf("\t\t ParameterSetID=%d\n",param->SelectedServiceList.SelectedService[i].ParameterSetID);
-	}
-	result->ResponseCode = OK_responseCodeType;
-
-	return 0;
-}
-
-int	paymentDetails(struct MessageHeaderType* header, struct PaymentDetailsReqType* param, struct PaymentDetailsResType* result)
-{
-
-
-	printf("EVSE side: paymentDetails called\n"  );
-	printf("\tReceived data:\n");
-
-	printf("\t\t eMAID=%d\n", param->eMAID.data[0]);
-	printf("\t\t ID=%c%c\n", param->ContractSignatureCertChain.attr_Id.data[0], param->ContractSignatureCertChain.attr_Id.data[1]);
-	printf("\t\t Certificate=%c%c\n", param->ContractSignatureCertChain.Certificate.data[0],  param->ContractSignatureCertChain.Certificate.data[1]);
-	printf("\t\t SubCertificate 1=%c%c\n", param->ContractSignatureCertChain.SubCertificates.Certificate[0].data[0], param->ContractSignatureCertChain.SubCertificates.Certificate[0].data[1]);
-	printf("\t\t SubCertificate 2=%c%c%c\n", param->ContractSignatureCertChain.SubCertificates.Certificate[1].data[0], param->ContractSignatureCertChain.SubCertificates.Certificate[1].data[1], param->ContractSignatureCertChain.SubCertificates.Certificate[1].data[2]);
-
-	result->ResponseCode = OK_responseCodeType;
-	result->GenChallenge.data[0]=1;
-	result->GenChallenge.arraylen.data=1;
-	result->EVSETimeStamp=123456;
-
-	return 0;
-}
-
-int	chargeParameterDiscovery(struct MessageHeaderType* header, struct ChargeParameterDiscoveryReqType* param, struct ChargeParameterDiscoveryResType* result)
-{
-	struct PhysicalValueType f;
-
-	printf("EVSE side: chargeParameterDiscovery called\n"  );
-	printf("\tReceived data:\n");
-	printf("\t\t EVRequestedEnergyTransferType=%d\n",param->RequestedEnergyTransferMode);
-
-	/* check,if DC or AC is requested */
-	if(param->RequestedEnergyTransferMode==DC_core_EnergyTransferModeType || param->isused.DC_EVChargeParameter==1)
-	{
-		printf("\t\t MaxEntriesSAScheduleTuple=%d\n", param->MaxEntriesSAScheduleTuple);
-		printf("\t\t EVStatus:\n");
-		printf("\t\t\t EVReady=%d\n", param->DC_EVChargeParameter->DC_EVStatus.EVReady);
-		printf("\t\t\t EVRESSSOC=%d\n", param->DC_EVChargeParameter->DC_EVStatus.EVRESSSOC);
-		printf("\t\t\t EVErrorCode=%d\n", param->DC_EVChargeParameter->DC_EVStatus.EVErrorCode);
-
-
-		printf("\t\t DepartureTime=%d\n", param->DC_EVChargeParameter->DepartureTime);
-		printf("\t\t EVMaximumCurrentLimit=%d\n", param->DC_EVChargeParameter->EVMaximumCurrentLimit.Value);
-		printf("\t\t EVMaximumPowerLimit=%d\n", param->DC_EVChargeParameter->EVMaximumPowerLimit.Value);
-		printf("\t\t EVMaximumVoltageLimit=%d\n", param->DC_EVChargeParameter->EVMaximumVoltageLimit.Value);
-		printf("\t\t EVEnergyCapacity=%d\n", param->DC_EVChargeParameter->EVEnergyCapacity.Value);
-		printf("\t\t EVEnergyRequest=%d\n", param->DC_EVChargeParameter->EVEnergyRequest.Value);
-		printf("\t\t FullSOC=%d\n", param->DC_EVChargeParameter->FullSOC);
-		printf("\t\t BulkSOC=%d\n", param->DC_EVChargeParameter->BulkSOC);
-
-		result->ResponseCode = OK_responseCodeType;
-		result->EVSEProcessing = Finished_EVSEProcessingType;
-
-		result->isused.DC_EVSEChargeParameter = 1;
-		result->isused.AC_EVSEChargeParameter = 0;
-		result->DC_EVSEChargeParameter->DC_EVSEStatus.EVSEStatusCode = EVSE_Ready_DC_EVSEStatusCodeType;
-		result->DC_EVSEChargeParameter->DC_EVSEStatus.EVSEIsolationStatus = Valid_isolationLevelType;
-		result->DC_EVSEChargeParameter->DC_EVSEStatus.isused.EVSEIsolationStatus = 1;
-		result->DC_EVSEChargeParameter->DC_EVSEStatus.EVSENotification = None_EVSENotificationType;
-		result->DC_EVSEChargeParameter->DC_EVSEStatus.NotificationMaxDelay = 10;
-
-		f.Multiplier = 0;
-		f.Unit = A_unitSymbolType;
-		f.Value = 50;
-
-		result->DC_EVSEChargeParameter->EVSEMaximumCurrentLimit=f;
-
-		f.Unit = W_unitSymbolType;
-		f.Value = 20000;
-
-		result->DC_EVSEChargeParameter->EVSEMaximumPowerLimit=f;
-
-
-		f.Unit = V_unitSymbolType;
-		f.Value = 400;
-
-		result->DC_EVSEChargeParameter->EVSEMaximumVoltageLimit=f;
-
-		f.Unit = A_unitSymbolType;
-		f.Value = 5;
-
-		result->DC_EVSEChargeParameter->EVSEMinimumCurrentLimit=f;
-
-		f.Unit = V_unitSymbolType;
-		f.Value = 200;
-
-		result->DC_EVSEChargeParameter->EVSEMinimumVoltageLimit=f;
-
-		f.Unit = A_unitSymbolType;
-		f.Value = 2;
-
-		result->DC_EVSEChargeParameter->EVSECurrentRegulationTolerance=f;
-		result->DC_EVSEChargeParameter->isused.EVSECurrentRegulationTolerance=1;
-
-		f.Unit = A_unitSymbolType;
-		f.Value = 1;
-
-		result->DC_EVSEChargeParameter->EVSEPeakCurrentRipple=f;
-
-		f.Unit = W_unitSymbolType;
-		f.Value = 5000;
-
-		result->DC_EVSEChargeParameter->EVSEEnergyToBeDelivered=f;
-		result->DC_EVSEChargeParameter->isused.EVSEEnergyToBeDelivered=1;
-
-		/* set up a PMax schedule */
-		result->isused.SAScheduleList=1;
-		result->SAScheduleList->SAScheduleTuple[0].SAScheduleTupleID=10;
-		result->SAScheduleList->SAScheduleTuple[0].isused.SalesTariff=0; /* no tariffs */
-
-		/* set up two PMax entries: #1 */
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].PMax.Value=20000;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].PMax.Unit = W_unitSymbolType;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].PMax.Multiplier =0;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].RelativeTimeInterval.start=0;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].RelativeTimeInterval.isused.duration=0;
-
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].PMax.Value=0;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].PMax.Unit = W_unitSymbolType;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].PMax.Multiplier =0;
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.start=1200; /* 20 min */
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.isused.duration=0;
-
-		result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.arraylen.PMaxScheduleEntry=2; /* we set up two time entries */
-
-
-		/* #2 */
-		result->SAScheduleList->SAScheduleTuple[1].SAScheduleTupleID=15;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[0].PMax.Value=10000;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[0].PMax.Unit = W_unitSymbolType;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[0].PMax.Multiplier =0;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[0].RelativeTimeInterval.start=0;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[0].RelativeTimeInterval.isused.duration=0;
-
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[1].PMax.Value=0;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[1].PMax.Unit = W_unitSymbolType;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[1].PMax.Multiplier =1;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.start=1800; /* 30 min */
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.duration=3600;
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.isused.duration=1;
-
-		result->SAScheduleList->SAScheduleTuple[1].PMaxSchedule.arraylen.PMaxScheduleEntry=2; /* we set up two time entries */
-
-		result->SAScheduleList->arraylen.SAScheduleTuple=2; /* we used 2 tuple */
-
-
-
-
-	} else { /* AC related */
-
-		printf("\t\t DepartureTime=%d\n", param->AC_EVChargeParameter->DepartureTime);
-		printf("\t\t EAmount=%d\n", param->AC_EVChargeParameter->EAmount.Value);
-		printf("\t\t EVMaxCurrent=%d\n", param->AC_EVChargeParameter->EVMaxCurrent.Value);
-		printf("\t\t EVMaxVoltage=%d\n", param->AC_EVChargeParameter->EVMaxVoltage.Value);
-		printf("\t\t EVMinCurrent=%d\n", param->AC_EVChargeParameter->EVMinCurrent.Value);
-
-
-		result->ResponseCode = OK_responseCodeType;
-		result->EVSEProcessing = Finished_EVSEProcessingType;
-
-		result->isused.AC_EVSEChargeParameter = 1;
-		result->isused.DC_EVSEChargeParameter = 0;
-
-		result->AC_EVSEChargeParameter->AC_EVSEStatus.RCD=1;
-		result->AC_EVSEChargeParameter->AC_EVSEStatus.EVSENotification=None_EVSENotificationType;
-		result->AC_EVSEChargeParameter->AC_EVSEStatus.NotificationMaxDelay=123;
-
-
-
-		f.Multiplier = 0;
-		f.Unit = A_unitSymbolType;
-		f.Value = 100;
-
-		result->AC_EVSEChargeParameter->EVSEMaxCurrent=f;
-
-
-		f.Unit = V_unitSymbolType;
-		f.Value = 300;
-		result->AC_EVSEChargeParameter->EVSENominalVoltage=f;
-
-		result->EVSEProcessing=1;
-
-
-			/* set up a PMax schedule */
-			result->isused.SAScheduleList=1;
-			result->SAScheduleList->SAScheduleTuple[0].SAScheduleTupleID=10;
-			result->SAScheduleList->SAScheduleTuple[0].isused.SalesTariff=0; /* no tariffs */
-
-			/* set up two PMax entries: #1 */
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].PMax.Value=20000;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].PMax.Unit = W_unitSymbolType;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].PMax.Multiplier =0;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].RelativeTimeInterval.start=0;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[0].RelativeTimeInterval.isused.duration=0;
-
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].PMax.Value=0;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].PMax.Unit = W_unitSymbolType;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].PMax.Multiplier =0;
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.start=1200; /* 20 min */
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.PMaxScheduleEntry[1].RelativeTimeInterval.isused.duration=0;
-
-			result->SAScheduleList->SAScheduleTuple[0].PMaxSchedule.arraylen.PMaxScheduleEntry=2; /* we set up two time entries */
-
-			result->SAScheduleList->arraylen.SAScheduleTuple=1;
-			result->isused.SAScheduleList=1;
-
-			result->SAScheduleList->SAScheduleTuple[0].isused.SalesTariff=1;
-
-
-			/* set up sale entries */
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->NumEPriceLevels=2;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->isused.NumEPriceLevels=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffID=20;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->attr_Id.data[0]=100;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->attr_Id.arraylen.data=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->isused.attr_Id=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[0].EPriceLevel=2;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[0].isused.EPriceLevel=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[0].isused.ConsumptionCost=0;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[0].RelativeTimeInterval.start=0;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[0].RelativeTimeInterval.duration=10;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[0].RelativeTimeInterval.isused.duration=1;
-
-
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].EPriceLevel=3;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].RelativeTimeInterval.start=11;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].RelativeTimeInterval.duration=10;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].RelativeTimeInterval.isused.duration=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].ConsumptionCost[0].Cost[0].amount=10;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].ConsumptionCost[0].Cost[0].amountMultiplier=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].ConsumptionCost[0].Cost[0].isused.amountMultiplier=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].ConsumptionCost[0].Cost[0].costKind=RenewableGenerationPercentage_costKindType;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].ConsumptionCost[0].startValue.Value=123;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].ConsumptionCost[0].arraylen.Cost=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].isused.EPriceLevel=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].isused.ConsumptionCost=1;
-
-
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->SalesTariffEntry[1].arraylen.ConsumptionCost=1;
-			result->SAScheduleList->SAScheduleTuple[0].SalesTariff->arraylen.SalesTariffEntry=2;
-			result->SAScheduleList->arraylen.SAScheduleTuple=1;
-
-	}
-
-
-
-	return 0;
-}
-
-int	powerDelivery(struct MessageHeaderType* header, struct PowerDeliveryReqType* param, struct PowerDeliveryResType* result)
-{
-
-	size_t i;
-
-	printf("EVSE side: powerDelivery called\n"  );
-	printf("\tReceived data:\n");
-
-	printf("\t\t  ChargeProgress=%d\n", param->ChargeProgress);
-	printf("\t\t  SAScheduleTupleID=%d\n", param->SAScheduleTupleID);
-
-	if(param->isused.DC_EVPowerDeliveryParameter)
-	{
-
-		printf("\t\t EVStatus:\n");
-		printf("\t\t\t EVReady=%d\n", param->DC_EVPowerDeliveryParameter->DC_EVStatus.EVReady);
-		printf("\t\t\t EVRESSSOC=%d\n", param->DC_EVPowerDeliveryParameter->DC_EVStatus.EVRESSSOC);
-		printf("\t\t\t EVErrorCode=%d\n", param->DC_EVPowerDeliveryParameter->DC_EVStatus.EVErrorCode);
-
-		printf("\t\t BulkChargingComplete=%d\n", param->DC_EVPowerDeliveryParameter->BulkChargingComplete);
-		printf("\t\t ChargingComplete=%d\n", param->DC_EVPowerDeliveryParameter->ChargingComplete);
-
-		if(param->isused.ChargingProfile)
-		{
-			printf("\t\t\tChargingProfile:\n");
-			printf("\t\t\t SAScheduleTupleID=%d\n",param->SAScheduleTupleID );
-			for(i=0;i<param->ChargingProfile.arraylen.ProfileEntry;i++)
-			{
-				printf("\t\t\t Entry#%d\n",i);
-				printf("\t\t\t\t ChargingProfileEntryMaxPower=%d (%d %d) \n", param->ChargingProfile.ProfileEntry[i].ChargingProfileEntryMaxPower.Value, param->ChargingProfile.ProfileEntry[i].ChargingProfileEntryMaxPower.Unit, param->ChargingProfile.ProfileEntry[i].ChargingProfileEntryMaxPower.Multiplier);
-				printf("\t\t\t\t ChargingProfileEntryStart=%d\n", param->ChargingProfile.ProfileEntry[i].ChargingProfileEntryStart);
-				printf("\t\t\t\t ChargingProfileEntryMaxNumberOfPhasesInUse=%d\n", param->ChargingProfile.ProfileEntry[i].ChargingProfileEntryMaxNumberOfPhasesInUse);
-
-			}
-
-
-		}
-
-
-		result->ResponseCode = OK_responseCodeType;
-		result->DC_EVSEStatus->EVSEIsolationStatus =0;
-		result->DC_EVSEStatus->isused.EVSEIsolationStatus = 1;
-		result->DC_EVSEStatus->EVSEStatusCode = EVSE_Ready_DC_EVSEStatusCodeType;
-		result->DC_EVSEStatus->EVSENotification=None_EVSENotificationType;
-		result->DC_EVSEStatus->NotificationMaxDelay=123;
-
-		result->isused.DC_EVSEStatus=1;
-		result->isused.AC_EVSEStatus=0;
-
-
-
-
-
-	} else {
-
-
-		result->ResponseCode = OK_responseCodeType;
-		result->AC_EVSEStatus->RCD=0;
-		result->AC_EVSEStatus->EVSENotification=3;
-		result->AC_EVSEStatus->NotificationMaxDelay=12;
-
-
-		result->isused.AC_EVSEStatus=1;
-		result->isused.DC_EVSEStatus=0;
-
-	}
-
-	return 0;
-}
-
-int	chargingStatus(struct MessageHeaderType* header, struct ChargingStatusReqType* param, struct ChargingStatusResType* result)
-{
-	printf("EVSE side: chargingStatus called\n"  );
-
-
-
-	result->ResponseCode=OK_responseCodeType;
-	result->EVSEID.data[0]=12;
-	result->EVSEID.arraylen.data=1;
-
-	result->AC_EVSEStatus.RCD=1;
-	result->AC_EVSEStatus.EVSENotification=None_EVSENotificationType;
-	result->AC_EVSEStatus.NotificationMaxDelay=123;
-	result->ReceiptRequired=1;
-	result->isused.ReceiptRequired=1;
-	result->EVSEMaxCurrent.Multiplier = 2;
-	result->EVSEMaxCurrent.Unit = A_unitSymbolType;
-
-	result->EVSEMaxCurrent.Value = 400;
-	result->isused.EVSEMaxCurrent=1;
-	result->SAScheduleTupleID=10;
-
-	result->isused.MeterInfo=1;
-	result->MeterInfo.MeterID.arraylen.data=1;
-	result->MeterInfo.MeterID.data[0]=2;
-
-	result->MeterInfo.MeterReading = 5000;
-	result->MeterInfo.MeterStatus = 4321;
-	result->MeterInfo.TMeter =123456789;
-	result->MeterInfo.SigMeterReading.data[0]=123;
-	result->MeterInfo.SigMeterReading.arraylen.data=1;
-	result->MeterInfo.isused.MeterReading = 1;
-	result->MeterInfo.isused.MeterStatus=1;
-	result->MeterInfo.isused.TMeter=1;
-	result->MeterInfo.isused.SigMeterReading=1;
-
-	return 0;
-}
-
-int	meteringReceipt(struct MessageHeaderType* header, struct MeteringReceiptReqType* param, struct MeteringReceiptResType* result)
-{
-
-	printf("EVSE side: meteringReceipt called\n"  );
-	printf("\tReceived data:\n");
-
-	printf("\t\t ID=%c%c%c\n", param->attr_Id.data[0],param->attr_Id.data[1],param->attr_Id.data[2]);
-	printf("\t\t SAScheduleTupleID=%d\n", param->SAScheduleTupleID);
-	printf("\t\t SessionID=%d\n", param->SessionID.data[1]);
-	printf("\t\t MeterInfo.MeterStatus=%d\n", param->MeterInfo.MeterStatus);
-	printf("\t\t MeterInfo.MeterID=%d\n",		param->MeterInfo.MeterID.data[0]);
-	printf("\t\t MeterInfo.isused.MeterReading=%d\n", param->MeterInfo.isused.MeterReading);
-	printf("\t\t MeterReading.Value=%d\n",		param->MeterInfo.MeterReading);
-	printf("\t\t MeterInfo.TMeter=%d\n",		param->MeterInfo.TMeter);
-
-	result->ResponseCode = OK_responseCodeType;
-
-
-	result->AC_EVSEStatus->RCD=1;
-	result->AC_EVSEStatus->EVSENotification=None_EVSENotificationType;
-	result->AC_EVSEStatus->NotificationMaxDelay=123;
-
-
-
-	return 0;
-}
-
-int	cableCheck(struct MessageHeaderType* header, struct CableCheckReqType* param, struct CableCheckResType* result)
-{
-	printf("EVSE side: cableCheck called\n"  );
-	printf("\tReceived data:\n");
-
-
-	printf("\t\t EVStatus:\n");
-	printf("\t\t\t EVReady=%d\n", param->DC_EVStatus.EVReady);
-	printf("\t\t\t EVRESSSOC=%d\n", param->DC_EVStatus.EVRESSSOC);
-	printf("\t\t\t EVErrorCode=%d\n", param->DC_EVStatus.EVErrorCode);
-
-
-	result->ResponseCode = OK_responseCodeType;
-	result->EVSEProcessing = Finished_EVSEProcessingType;
-	result->DC_EVSEStatus.EVSEIsolationStatus= Valid_isolationLevelType;
-	result->DC_EVSEStatus.isused.EVSEIsolationStatus = 1;
-	result->DC_EVSEStatus.EVSEStatusCode = EVSE_Ready_DC_EVSEStatusCodeType;
-	result->DC_EVSEStatus.EVSENotification=None_EVSENotificationType;
-	result->DC_EVSEStatus.NotificationMaxDelay=1234;
-
-	return 0;
-}
-
-
-int	preCharge(struct MessageHeaderType* header, struct PreChargeReqType* param, struct PreChargeResType* result)
-{
-	struct PhysicalValueType float_type;
-
-
-	printf("EVSE side: preCharge called\n"  );
-	printf("\tReceived data:\n");
-	printf("\t\t EVStatus:\n");
-	printf("\t\t\t EVReady=%d\n", param->DC_EVStatus.EVReady);
-	printf("\t\t\t EVRESSSOC=%d\n", param->DC_EVStatus.EVRESSSOC);
-	printf("\t\t\t EVErrorCode=%d\n", param->DC_EVStatus.EVErrorCode);
-	printf("\t\t EVTargetCurrent=%d (%d %d)\n", param->EVTargetCurrent.Value,param->EVTargetCurrent.Unit, param->EVTargetCurrent.Multiplier);
-	printf("\t\t EVTargetVoltage=%d (%d %d)\n", param->EVTargetVoltage.Value, param->EVTargetVoltage.Unit, param->EVTargetVoltage.Multiplier);
-
-	result->ResponseCode = OK_responseCodeType;
-	result->DC_EVSEStatus.EVSEIsolationStatus= Valid_isolationLevelType;
-	result->DC_EVSEStatus.isused.EVSEIsolationStatus = 1;
-	result->DC_EVSEStatus.EVSEStatusCode = EVSE_Ready_DC_EVSEStatusCodeType;
-	result->DC_EVSEStatus.EVSENotification=None_EVSENotificationType;
-	result->DC_EVSEStatus.NotificationMaxDelay=1234;
-
-	float_type.Multiplier = 0;
-	float_type.Unit = V_unitSymbolType;
-	float_type.Value = 100;
-	result->EVSEPresentVoltage = float_type;
-
-
-
-
-	return 0;
-
-
-}
-
-int	currentDemand(struct MessageHeaderType* header, struct CurrentDemandReqType* param, struct CurrentDemandResType* result)
-{
-
-	struct PhysicalValueType f;
-
-	printf("EVSE side: currentDemand called\n"  );
-	printf("\tReceived data:\n");
-	printf("\t\t EVStatus:\n");
-	printf("\t\t\t EVReady=%d\n", param->DC_EVStatus.EVReady);
-	printf("\t\t\t EVRESSSOC=%d\n", param->DC_EVStatus.EVRESSSOC);
-	printf("\t\t\t EVErrorCode=%d\n", param->DC_EVStatus.EVErrorCode);
-
-
-	printf("\t\t EVTargetCurrent=%d\n", param->EVTargetCurrent.Value);
-	printf("\t\t EVMaximumVoltageLimit=%d\n", param->EVMaximumVoltageLimit.Value);
-	printf("\t\t EVMaximumPowerLimit=%d\n", param->EVMaximumPowerLimit.Value);
-	printf("\t\t EVMaximumCurrentLimit=%d\n", param->EVMaximumCurrentLimit.Value);
-	printf("\t\t BulkChargingComplete=%d\n", param->BulkChargingComplete);
-	printf("\t\t ChargingComplete=%d\n", param->ChargingComplete);
-	printf("\t\t RemainingTimeToFullSoC=%d\n", param->RemainingTimeToFullSoC.Value);
-	printf("\t\t RemainingTimeToBulkSoC=%d\n", param->RemainingTimeToBulkSoC.Value);
-
-	printf("\t\t EVTargetVoltage=%d\n", param->EVTargetVoltage.Value);
-
-
-	result->ResponseCode = OK_responseCodeType;
-	result->DC_EVSEStatus.EVSEIsolationStatus= Valid_isolationLevelType;
-	result->DC_EVSEStatus.isused.EVSEIsolationStatus = 1;
-	result->DC_EVSEStatus.EVSEStatusCode = EVSE_Ready_DC_EVSEStatusCodeType;
-	result->DC_EVSEStatus.EVSENotification=None_EVSENotificationType;
-	result->DC_EVSEStatus.NotificationMaxDelay=1234;
-
-	f.Multiplier = 0;
-	f.Unit = V_unitSymbolType;
-	f.Value = 400;
-
-	result->EVSEPresentVoltage=f;
-
-	f.Unit = A_unitSymbolType;
-	f.Value = 45;
-
-	result->EVSEPresentCurrent=f;
-
-	result->EVSECurrentLimitAchieved=0;
-
-	result->EVSEVoltageLimitAchieved=1;
-
-	result->EVSEPowerLimitAchieved=0;
-
-	f.Unit = V_unitSymbolType;
-	f.Value = 400;
-
-	result->EVSEMaximumVoltageLimit=f;
-	result->isused.EVSEMaximumVoltageLimit=1;
-
-	f.Unit = A_unitSymbolType;
-	f.Value = 50;
-
-	result->EVSEMaximumCurrentLimit=f;
-	result->isused.EVSEMaximumCurrentLimit=1;
-
-	f.Unit = W_unitSymbolType;
-	f.Value = 20000;
-
-	result->EVSEMaximumPowerLimit=f;
-	result->isused.EVSEMaximumPowerLimit=1;
-
-	result->EVSEID.data[0]=12;
-	result->EVSEID.arraylen.data=1;
-
-	result->SAScheduleTupleID = 123;
-
-
-	result->isused.MeterInfo=1;
-	result->MeterInfo.MeterID.arraylen.data=1;
-	result->MeterInfo.MeterID.data[0]=2;
-
-	result->MeterInfo.MeterReading = 500;
-	result->MeterInfo.MeterStatus = 4321;
-	result->MeterInfo.TMeter =123456789;
-	result->MeterInfo.isused.MeterReading = 1;
-	result->MeterInfo.isused.MeterStatus=1;
-	result->MeterInfo.isused.TMeter=1;
-	result->MeterInfo.isused.SigMeterReading=0;
-
-	result->ReceiptRequired = 1;
-	result->isused.ReceiptRequired=1;
-
-	return 0;
-}
-
-int	weldingDetection(struct MessageHeaderType* header, struct WeldingDetectionReqType* param, struct WeldingDetectionResType* result)
-{
-
-	printf("EVSE side: weldingDetection called\n"  );
-	printf("\tReceived data:\n");
-	printf("\t\t EVStatus:\n");
-	printf("\t\t\t EVReady=%d\n", param->DC_EVStatus.EVReady);
-	printf("\t\t\t EVRESSSOC=%d\n", param->DC_EVStatus.EVRESSSOC);
-	printf("\t\t\t EVErrorCode=%d\n", param->DC_EVStatus.EVErrorCode);
-
-
-	result->ResponseCode = OK_responseCodeType;
-	result->DC_EVSEStatus.EVSEIsolationStatus= Valid_isolationLevelType;
-	result->DC_EVSEStatus.isused.EVSEIsolationStatus = 1;
-	result->DC_EVSEStatus.EVSEStatusCode = EVSE_Ready_DC_EVSEStatusCodeType;
-	result->DC_EVSEStatus.EVSENotification=None_EVSENotificationType;
-	result->DC_EVSEStatus.NotificationMaxDelay=123;
-	result->EVSEPresentVoltage.Value = 1234;
-	result->EVSEPresentVoltage.Unit = V_unitSymbolType;
-	result->EVSEPresentVoltage.Multiplier = 0;
-
-	return 0;
-}
-
-int	sessionStop(struct MessageHeaderType* header, struct SessionStopReqType* param, struct SessionStopResType* result)
-{
-
-
-	printf("EVSE side: sessionStop called\n"  );
-	printf("\tReceived data:\n");
-	printf("\tHeader SessionID=");
-	printBinaryArray(header->SessionID.data,header->SessionID.arraylen.data );
-	printf("\t\t ChargingSession=%d\n", param->ChargingSession);
-	result->ResponseCode = OK_responseCodeType;
-
-
-
-	return 0;
-
-}
-
-int	serviceDetail(struct MessageHeaderType* header, struct ServiceDetailReqType* param, struct ServiceDetailResType* result)
-{
-
-	printf("EVSE side: serviceDetail called\n"  );
-	printf("\tReceived data:\n");
-	printf("\tHeader SessionID=");
-		printBinaryArray(header->SessionID.data,header->SessionID.arraylen.data );
-	printf("\t\t ServiceDetailID=%d\n", param->ServiceID);
-
-	result->ServiceID = 1234;
-
-	/* Parameter Set 1*/
-	result->ServiceParameterList.ParameterSet[0].ParameterSetID = 1;
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[0] = 'P';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[1] = 'r';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[2] = 'o';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[3] = 't';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[4] = 'o';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[5] = 'c';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[6] = 'o';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.data[7] = 'l';
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].attr_Name.arraylen.data = 8;
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].intValue=15119;
-	result->ServiceParameterList.ParameterSet[0].Parameter[0].isused.intValue=1;
-
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].attr_Name.data[0] = 'N';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].attr_Name.data[1] = 'a';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].attr_Name.data[2] = 'm';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].attr_Name.data[3] = 'e';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].attr_Name.arraylen.data = 4;
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].stringValue.data[0] = 'V';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].stringValue.data[1] = '2';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].stringValue.data[2] = 'G';
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].stringValue.arraylen.data = 3;
-	result->ServiceParameterList.ParameterSet[0].Parameter[1].isused.stringValue=1;
-	result->ServiceParameterList.ParameterSet[0].arraylen.Parameter = 2;
-
-	/* Parameter Set 2 */
-	result->ServiceParameterList.ParameterSet[1].ParameterSetID = 2;
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[0] = 'C';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[1] = 'h';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[2] = 'a';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[3] = 'n';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[4] = 'n';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[5] = 'e';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.data[6] = 'l';
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].attr_Name.arraylen.data = 7;
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].physicalValue.Value=1234;
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].physicalValue.Unit=m_unitSymbolType;
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].physicalValue.Multiplier=0;
-	result->ServiceParameterList.ParameterSet[1].Parameter[0].isused.physicalValue=1;
-	result->ServiceParameterList.ParameterSet[1].arraylen.Parameter =1;
-
-	result->ServiceParameterList.arraylen.ParameterSet = 2;
-	result->isused.ServiceParameterList = 1;
-
-	result->ResponseCode = OK_responseCodeType;
-
-
-
-	return 0;
-}
-
-int	authorization(struct MessageHeaderType* header, struct AuthorizationReqType* param, struct AuthorizationResType* result)
-{
-
-	printf("EVSE: contractAuthentication called\n"  );
-	printf("\tReceived data:\n");
-
-	if(param->isused.GenChallenge)
-		printf("\t\t\t GenChallenge=%d\n", param->GenChallenge.data[0]);
-
-	if(param->isused.attr_Id)
-		printf("\t\t\t ID=%c%c%c\n", param->attr_Id.data[0],param->attr_Id.data[1],param->attr_Id.data[2]);
-
-
-
-	result->ResponseCode=OK_responseCodeType;
-	result->EVSEProcessing=Finished_EVSEProcessingType;
-
-
-	return 0;
-}
-
-int	certificateUpdate(struct MessageHeaderType* header, struct CertificateUpdateReqType* param, struct CertificateUpdateResType* result)
-{
-	return 0;
-}
-
-int	certificateInstallation(struct MessageHeaderType* header, struct CertificateInstallationReqType* param, struct CertificateInstallationResType* result)
-{
-
-
-
-	return 0;
-}
-
-static void printBinaryArray(uint8_t* byte, uint32_t len) {
-	unsigned int i;
-	for(i=0; i<len; i++) {
-		printf("%d ",byte[i]);
-	}
-	printf("\n");
-}
-
-

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů