1
0
Эх сурвалжийг харах

0.3 release zum testen

git-svn-id: https://svn.code.sf.net/p/openv2g/code/trunk@22 d9f2db14-54d0-4bde-b00c-16405c910529
sebastiankb 15 жил өмнө
parent
commit
12bd32bd8a
49 өөрчлөгдсөн 2573 нэмэгдсэн , 2324 устгасан
  1. 1112 942
      .cproject
  2. 69 69
      .project
  3. 17 1
      README.txt
  4. 1 1
      src/codec/BitDecoderChannel.c
  5. 1 1
      src/codec/BitDecoderChannel.h
  6. 1 1
      src/codec/BitEncoderChannel.c
  7. 1 1
      src/codec/BitEncoderChannel.h
  8. 1 1
      src/codec/BitInputStream.c
  9. 1 1
      src/codec/BitInputStream.h
  10. 1 1
      src/codec/BitOutputStream.c
  11. 1 1
      src/codec/BitOutputStream.h
  12. 1 1
      src/codec/ByteStream.c
  13. 1 1
      src/codec/ByteStream.h
  14. 1 1
      src/codec/EXICoder.c
  15. 1 1
      src/codec/EXICoder.h
  16. 455 500
      src/codec/EXIDecoder.c
  17. 1 1
      src/codec/EXIDecoder.h
  18. 246 269
      src/codec/EXIEncoder.c
  19. 1 1
      src/codec/EXIEncoder.h
  20. 1 1
      src/codec/EXIHeaderDecoder.c
  21. 1 1
      src/codec/EXIHeaderDecoder.h
  22. 1 1
      src/codec/EXIHeaderEncoder.c
  23. 1 1
      src/codec/EXIHeaderEncoder.h
  24. 1 1
      src/codec/EXITypes.h
  25. 1 1
      src/codec/StringTable.c
  26. 1 1
      src/codec/StringTable.h
  27. 18 18
      src/codec/StringTableEntries.c
  28. 1 1
      src/codec/StringTableEntries.h
  29. 1 1
      src/codec/UCSString.c
  30. 1 1
      src/codec/UCSString.h
  31. 11 1
      src/service/v2g_service.h
  32. 1 1
      src/service/v2g_serviceClientDataTransmitter.h
  33. 135 153
      src/service/v2g_serviceClientStubs.c
  34. 2 2
      src/service/v2g_serviceClientStubs.h
  35. 139 127
      src/service/v2g_serviceDataSerialization.c
  36. 1 1
      src/service/v2g_serviceDataSerializiation.h
  37. 2 10
      src/service/v2g_serviceDataTypes.c
  38. 19 36
      src/service/v2g_serviceDataTypes.h
  39. 216 118
      src/service/v2g_serviceDispatcher.c
  40. 3 3
      src/service/v2g_serviceDispatcher.h
  41. 1 1
      src/service/v2g_serviceMethods.h
  42. 3 5
      src/test/main.c
  43. 1 2
      src/test/main.h
  44. 2 2
      src/test/main_codec.c
  45. 48 19
      src/test/main_service.c
  46. 33 13
      src/test/v2g_server.c
  47. 3 2
      src/test/v2g_server.h
  48. 11 4
      src/test/v2g_serviceClientDataTransmitter.c
  49. 1 1
      src/test/v2g_serviceMethods.c

+ 1112 - 942
.cproject

@@ -1,942 +1,1112 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?fileVersion 4.0.0?>
-
-<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
-<storageModule moduleId="org.eclipse.cdt.core.settings">
-<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907">
-<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"/>
-</extensions>
-</storageModule>
-<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-<configuration artifactName="OpenV2G" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907" name="Debug" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">
-<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907." name="/" resourcePath="">
-<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.61547579" 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.2111260617" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
-<builder buildPath="${workspace_loc:/OpenV2G/Debug}" id="cdt.managedbuild.tool.gnu.builder.mingw.base.1906140327" name="CDT Internal Builder.Debug" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
-<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.1571190553" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
-<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1866737768" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1290025209" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
-<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.390259959" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
-<option id="gnu.cpp.compiler.option.optimization.level.1512753216" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
-<option id="gnu.cpp.compiler.option.debugging.level.531182604" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.949740711" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
-<option id="gnu.c.compiler.option.include.paths.2099943524" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/codec}&quot;"/>
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/service}&quot;"/>
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/>
-</option>
-<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.462712729" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
-<option id="gnu.c.compiler.option.debugging.level.1008589022" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
-<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2007502172" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1261045096" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
-<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.605182894" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
-<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-<additionalInput kind="additionalinput" paths="$(LIBS)"/>
-</inputType>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.1948082912" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base"/>
-</toolChain>
-</folderInfo>
-<sourceEntries>
-<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
-</sourceEntries>
-</configuration>
-</storageModule>
-<storageModule moduleId="scannerConfiguration">
-<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_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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.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>
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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>
-<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="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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>
-<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_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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>
-<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1091708379;cdt.managedbuild.config.gnu.mingw.exe.release.1091708379.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1844784508;cdt.managedbuild.tool.gnu.c.compiler.input.1276057383">
-<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_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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="org.eclipse.cdt.core.externalSettings"/>
-<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
-<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
-</cconfiguration>
-<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450">
-<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.ELF" 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.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
-</extensions>
-</storageModule>
-<storageModule moduleId="cdtBuildSystem" version="4.0.0">
-<configuration artifactName="OpenV2G" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450" name="Release" parent="cdt.managedbuild.config.gnu.mingw.exe.release">
-<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450." name="/" resourcePath="">
-<toolChain id="cdt.managedbuild.toolchain.gnu.base.506532925" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.base">
-<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.784544317" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
-<builder buildPath="${workspace_loc:/OpenV2G/Release}" id="cdt.managedbuild.target.gnu.builder.base.903692170" name="Gnu Make Builder.Release" superClass="cdt.managedbuild.target.gnu.builder.base"/>
-<tool id="cdt.managedbuild.tool.gnu.archiver.base.501212056" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
-<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.605628336" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
-<option id="gnu.cpp.compiler.option.optimization.level.937286096" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
-<option id="gnu.cpp.compiler.option.debugging.level.1762244177" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1358204014" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
-<option id="gnu.c.compiler.option.include.paths.1801191227" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/codec}&quot;"/>
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/service}&quot;"/>
-<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/>
-</option>
-<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.269511649" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
-<option id="gnu.c.compiler.option.debugging.level.1614677996" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
-<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.822105819" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1432229809" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base">
-<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1805334009" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
-<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
-<additionalInput kind="additionalinput" paths="$(LIBS)"/>
-</inputType>
-</tool>
-<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1184740467" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
-<tool id="cdt.managedbuild.tool.gnu.assembler.base.1998194122" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
-<inputType id="cdt.managedbuild.tool.gnu.assembler.input.67175024" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
-</tool>
-</toolChain>
-</folderInfo>
-</configuration>
-</storageModule>
-<storageModule moduleId="scannerConfiguration">
-<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_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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.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>
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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>
-<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="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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>
-<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_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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>
-<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1091708379;cdt.managedbuild.config.gnu.mingw.exe.release.1091708379.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1844784508;cdt.managedbuild.tool.gnu.c.compiler.input.1276057383">
-<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_file}" command="gcc" useDefault="true"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
-<buildOutputProvider>
-<openAction enabled="true" filePath=""/>
-<parser enabled="true"/>
-</buildOutputProvider>
-<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.GCCManagedMakePerProjectProfile">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
-<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"/>
-<parser enabled="true"/>
-</scannerInfoProvider>
-</profile>
-<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.c" command="gcc" useDefault="true"/>
-<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="org.eclipse.cdt.core.externalSettings"/>
-<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
-<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
-</cconfiguration>
-</storageModule>
-<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>
-</cproject>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907">
+<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"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="OpenV2G" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907" name="Debug" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">
+<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.61547579" 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.2111260617" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
+<builder buildPath="${workspace_loc:/OpenV2G/Debug}" id="cdt.managedbuild.tool.gnu.builder.mingw.base.1906140327" keepEnvironmentInBuildfile="false" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
+<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.1571190553" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1866737768" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1290025209" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.390259959" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
+<option id="gnu.cpp.compiler.option.optimization.level.1512753216" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.option.debugging.level.531182604" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.949740711" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
+<option id="gnu.c.compiler.option.include.paths.2099943524" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/codec}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/transport}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/service}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/>
+</option>
+<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.462712729" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.option.debugging.level.1008589022" 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.1860994344" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="true" valueType="boolean"/>
+<option id="gnu.c.compiler.option.warnings.pedantic.1156304229" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic" value="true" valueType="boolean"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2007502172" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1261045096" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
+<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.605182894" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.1948082912" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base"/>
+</toolChain>
+</folderInfo>
+<sourceEntries>
+<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
+</sourceEntries>
+</configuration>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="scannerConfiguration">
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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"/>
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<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>
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<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="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1091708379;cdt.managedbuild.config.gnu.mingw.exe.release.1091708379.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1844784508;cdt.managedbuild.tool.gnu.c.compiler.input.1276057383">
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+</cconfiguration>
+<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450">
+<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.ELF" 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"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactName="OpenV2G" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450" name="Release" parent="cdt.managedbuild.config.gnu.mingw.exe.release">
+<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.base.506532925" name="Linux GCC" nonInternalBuilderId="cdt.managedbuild.target.gnu.builder.base" superClass="cdt.managedbuild.toolchain.gnu.base">
+<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.784544317" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
+<builder autoBuildTarget="all" buildPath="${workspace_loc:/OpenV2G/Release}" cleanBuildTarget="clean" id="org.eclipse.cdt.build.core.internal.builder.755395484" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="org.eclipse.cdt.build.core.internal.builder"/>
+<tool id="cdt.managedbuild.tool.gnu.archiver.base.501212056" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.605628336" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
+<option id="gnu.cpp.compiler.option.optimization.level.937286096" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.option.debugging.level.1762244177" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1358204014" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
+<option id="gnu.c.compiler.option.include.paths.1801191227" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/codec}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/transport}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/service}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/>
+</option>
+<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.269511649" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.option.debugging.level.1614677996" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+<option id="gnu.c.compiler.option.optimization.flags.435817870" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-Os" valueType="string"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.822105819" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1432229809" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base">
+<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1805334009" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1184740467" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
+<tool id="cdt.managedbuild.tool.gnu.assembler.base.1998194122" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.67175024" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+</toolChain>
+</folderInfo>
+</configuration>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+<storageModule moduleId="scannerConfiguration">
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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"/>
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<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>
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<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="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1091708379;cdt.managedbuild.config.gnu.mingw.exe.release.1091708379.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1844784508;cdt.managedbuild.tool.gnu.c.compiler.input.1276057383">
+<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_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<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.GCCManagedMakePerProjectProfile">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<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"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<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.c" command="gcc" useDefault="true"/>
+<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>
+</cconfiguration>
+</storageModule>
+<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>
+</cproject>

+ 69 - 69
.project

@@ -1,69 +1,69 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>OpenV2G</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
-			<triggers>clean,full,incremental,</triggers>
-			<arguments>
-				<dictionary>
-					<key>?name?</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.append_environment</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildArguments</key>
-					<value></value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildCommand</key>
-					<value>make</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.buildLocation</key>
-					<value>${workspace_loc:/OpenV2G/Debug}</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.contents</key>
-					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
-					<value>false</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.stopOnError</key>
-					<value>true</value>
-				</dictionary>
-				<dictionary>
-					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
-					<value>true</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.cdt.core.cnature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
-		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>OpenV2G</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>?name?</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.append_environment</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildArguments</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildCommand</key>
+					<value>make</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildLocation</key>
+					<value>${workspace_loc:/OpenV2G/Debug}</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.contents</key>
+					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.stopOnError</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+					<value>true</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+	</natures>
+</projectDescription>

+ 17 - 1
README.txt

@@ -1,6 +1,6 @@
 -------------------------------------------------------------------------
 OpenV2G - an open source project implementing the basic functionality of the ISO IEC 15118 vehicle to grid (V2G) communication interface 
-Version 0.2.1, released October 7, 2010
+Version 0.3, released October 27, 2010
 http://openv2g.sourceforge.net/
 
 Please report bugs via the SourceForge bug tracking system at http://sourceforge.net/tracker/?group_id=350113.
@@ -22,6 +22,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.2.2:
+-------------------------------------------------------------------------
+* Bug-fixes
+* first DoIP implementation
+* V2G message error handling
+* adaption of V2G schema changes
+* code optimizations
+
+-------------------------------------------------------------------------
+CHANGES from version 0.2.1:
+-------------------------------------------------------------------------
+* Bug-fixes
+* adaption of V2G schema changes
+* some code optimizations
+
 -------------------------------------------------------------------------
 CHANGES from version 0.2:
 -------------------------------------------------------------------------

+ 1 - 1
src/codec/BitDecoderChannel.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  * Bit decoding functionalities

+ 1 - 1
src/codec/BitDecoderChannel.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/BitEncoderChannel.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/BitEncoderChannel.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/BitInputStream.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/BitInputStream.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/BitOutputStream.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/BitOutputStream.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/ByteStream.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/ByteStream.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXICoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXICoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 455 - 500
src/codec/EXIDecoder.c


+ 1 - 1
src/codec/EXIDecoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 246 - 269
src/codec/EXIEncoder.c


+ 1 - 1
src/codec/EXIEncoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXIHeaderDecoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXIHeaderDecoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXIHeaderEncoder.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXIHeaderEncoder.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/EXITypes.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/StringTable.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/StringTable.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 18 - 18
src/codec/StringTableEntries.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -79,22 +79,22 @@ const char * localNames5[] = {
   "ChargerStandby",  "ChargingProfileEntryMaxPower",  "ChargingProfileEntryStart",  "ChargingProfileType",  "ConnectorLocked",
   "Currency",  "EPrice",  "EVSEStandby",  "EVSEStatusType",  "Event",
   "EventList",  "EventListType",  "FatalError",  "FaultCode",  "FaultMsg",
-  "FloatingValueType",  "MeterID",  "MeterInfoType",  "MeterPubKey",  "MeterReading",
-  "MeterStatus",  "Multiplier",  "NotificationType",  "PEVStatusType",  "PowerSwitchClosed",
-  "ProtocolVersion",  "RCD",  "Service",  "ServiceDescriptionType",  "ServiceID",
-  "ServiceListType",  "ServiceName",  "ServiceScope",  "ServiceSessionID",  "ServiceType",
-  "SessionID",  "SessionInformationType",  "ShutDownTime",  "TMeter",  "Tariff",
-  "TariffDescrType",  "TariffDescription",  "TariffEntries",  "TariffEntriesType",  "TariffEntry",
-  "TariffEntryType",  "TariffID",  "TariffPMax",  "TariffStart",  "TariffTableType",
-  "Unit",  "Value",  "contractIDType",  "currencyType",  "energyProviderType",
-  "eventEntryType",  "evseIDType",  "fatalErrorType",  "faultCodeType",  "lockStatusType",
-  "maxPhasesType",  "meterIDType",  "meterStatusType",  "paymentOptionListType",  "paymentOptionType",
-  "pevIDType",  "protocolVersionType",  "pubKeyType",  "rcdType",  "responseCode_LineLockType",
-  "responseCode_MeteringReceiptType",  "responseCode_MeteringStatusType",  "responseCode_PaymentDetailsType",  "responseCode_PowerDeliveryType",  "responseCode_PowerDiscoveryType",
-  "responseCode_ServiceDiscoveryType",  "responseCode_ServicePaymentSelectionType",  "responseCode_SessionSetupType",  "serviceDetailsType",  "serviceIDType",
-  "serviceNameType",  "serviceScopeType",  "serviceTypeType",  "sessionIDType",  "standbyType",
-  "switchStatusType",  "tariffDescriptionType",  "tariffIDType",  "tariffStartType",  "timeType",
-  "unitMultiplierType",  "unitSymbolType"
+  "FloatingValueType",  "MeterID",  "MeterInfoType",  "MeterReading",  "MeterStatus",
+  "Multiplier",  "NotificationType",  "PEVStatusType",  "PowerSwitchClosed",  "ProtocolVersion",
+  "RCD",  "Service",  "ServiceDescriptionType",  "ServiceID",  "ServiceListType",
+  "ServiceName",  "ServiceScope",  "ServiceSessionID",  "ServiceType",  "SessionID",
+  "SessionInformationType",  "ShutDownTime",  "TMeter",  "Tariff",  "TariffDescrType",
+  "TariffDescription",  "TariffEntries",  "TariffEntriesType",  "TariffEntry",  "TariffEntryType",
+  "TariffID",  "TariffPMax",  "TariffStart",  "TariffTableType",  "Unit",
+  "Value",  "contractIDType",  "currencyType",  "energyProviderType",  "eventEntryType",
+  "evseIDType",  "fatalErrorType",  "faultCodeType",  "lockStatusType",  "maxPhasesType",
+  "meterIDType",  "meterStatusType",  "paymentOptionListType",  "paymentOptionType",  "pevIDType",
+  "protocolVersionType",  "pubKeyType",  "rcdType",  "responseCode_LineLockType",  "responseCode_MeteringReceiptType",
+  "responseCode_MeteringStatusType",  "responseCode_PaymentDetailsType",  "responseCode_PowerDeliveryType",  "responseCode_PowerDiscoveryType",  "responseCode_ServiceDiscoveryType",
+  "responseCode_ServicePaymentSelectionType",  "responseCode_SessionSetupType",  "serviceDetailsType",  "serviceIDType",  "serviceNameType",
+  "serviceScopeType",  "serviceTypeType",  "sessionIDType",  "standbyType",  "switchStatusType",
+  "tariffDescriptionType",  "tariffIDType",  "tariffStartType",  "timeType",  "unitMultiplierType",
+  "unitSymbolType"
 };
 /* localName entries for URI id = 6 */
 const char * localNames6[] = {
@@ -107,7 +107,7 @@ struct exiPartition localNamePartitions[7] = {
  { 2, localNames2 },
  { 46, localNames3 },
  { 66, localNames4 },
- { 92, localNames5 },
+ { 91, localNames5 },
  { 9, localNames6 }
 };
 const char * uris[] = {

+ 1 - 1
src/codec/StringTableEntries.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/UCSString.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 1 - 1
src/codec/UCSString.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 11 - 1
src/service/v2g_service.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -58,9 +58,19 @@ struct v2gService
 
 	/* unique id for ambiguous elements */
 	struct uniqueIDPath idPath;
+
+	/* error code */
+	uint8_t errorCode;
+
+	/* offset for transport header data */
+	uint16_t transportHeaderOffset;
 };
 
+/* define error codes (TODO: define precise error codes) */
+#define V2G_NON_VALID_MESSAGE 0x01
+#define V2G_SERIALIZATION_FAILED 0x02
 
+#define V2G_UNKNOWN_ERROR 0xFF
 
 #endif /* V2G_SERVICE_H_ */
 

+ 1 - 1
src/service/v2g_serviceClientDataTransmitter.h

@@ -19,7 +19,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 135 - 153
src/service/v2g_serviceClientStubs.c

@@ -20,7 +20,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -46,7 +46,7 @@ int call_sessionSetup(struct v2gService* service, struct HeaderType* header, str
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -55,7 +55,7 @@ int call_sessionSetup(struct v2gService* service, struct HeaderType* header, str
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -71,14 +71,15 @@ int call_sessionSetup(struct v2gService* service, struct HeaderType* header, str
 	service->v2gMsg.Body.isused.SessionSetupReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -109,7 +110,7 @@ int call_serviceDiscovery(struct v2gService* service, struct HeaderType* header,
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -118,7 +119,7 @@ int call_serviceDiscovery(struct v2gService* service, struct HeaderType* header,
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -134,14 +135,15 @@ int call_serviceDiscovery(struct v2gService* service, struct HeaderType* header,
 	service->v2gMsg.Body.isused.ServiceDiscoveryReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -172,7 +174,7 @@ int call_selectedServicePayment(struct v2gService* service, struct HeaderType* h
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -181,7 +183,7 @@ int call_selectedServicePayment(struct v2gService* service, struct HeaderType* h
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -197,14 +199,15 @@ int call_selectedServicePayment(struct v2gService* service, struct HeaderType* h
 	service->v2gMsg.Body.isused.ServicePaymentSelectionReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -235,7 +238,7 @@ int call_paymentDetails(struct v2gService* service, struct HeaderType* header, s
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -244,7 +247,7 @@ int call_paymentDetails(struct v2gService* service, struct HeaderType* header, s
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -260,14 +263,15 @@ int call_paymentDetails(struct v2gService* service, struct HeaderType* header, s
 	service->v2gMsg.Body.isused.PaymentDetailsReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -298,7 +302,7 @@ int call_powerDiscovery(struct v2gService* service, struct HeaderType* header, s
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -307,7 +311,7 @@ int call_powerDiscovery(struct v2gService* service, struct HeaderType* header, s
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -323,14 +327,15 @@ int call_powerDiscovery(struct v2gService* service, struct HeaderType* header, s
 	service->v2gMsg.Body.isused.PowerDiscoveryReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -361,7 +366,7 @@ int call_lineLock(struct v2gService* service, struct HeaderType* header, struct
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -370,7 +375,7 @@ int call_lineLock(struct v2gService* service, struct HeaderType* header, struct
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -386,14 +391,15 @@ int call_lineLock(struct v2gService* service, struct HeaderType* header, struct
 	service->v2gMsg.Body.isused.LineLockReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -424,7 +430,7 @@ int call_powerDelivery(struct v2gService* service, struct HeaderType* header, st
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -433,7 +439,7 @@ int call_powerDelivery(struct v2gService* service, struct HeaderType* header, st
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -449,14 +455,15 @@ int call_powerDelivery(struct v2gService* service, struct HeaderType* header, st
 	service->v2gMsg.Body.isused.PowerDeliveryReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -487,7 +494,7 @@ int call_meteringStatus(struct v2gService* service, struct HeaderType* header, s
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -496,7 +503,7 @@ int call_meteringStatus(struct v2gService* service, struct HeaderType* header, s
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -511,14 +518,15 @@ int call_meteringStatus(struct v2gService* service, struct HeaderType* header, s
 	service->v2gMsg.Body.isused.MeteringStatusReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -549,7 +557,7 @@ int call_meteringReceipt(struct v2gService* service, struct HeaderType* header,
 	service->idPath.pos=0;
 	
 	/* init outStream data structure */
-	posEncode = 0;
+	posEncode = service->transportHeaderOffset;
 	service->outStream.pos = &posEncode;
 	service->outStream.buffer = 0;
 	service->outStream.capacity = 8;
@@ -558,7 +566,7 @@ int call_meteringReceipt(struct v2gService* service, struct HeaderType* header,
 	exiInitEncoder(&(service->outStream), &(service->stateEncode));
 
 	/* init inStream data structure */
-	posDecode = 0;
+	posDecode = service->transportHeaderOffset;
 	service->inStream.pos = &posDecode;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
@@ -574,14 +582,15 @@ int call_meteringReceipt(struct v2gService* service, struct HeaderType* header,
 	service->v2gMsg.Body.isused.MeteringReceiptReq=1;
 	
 	/* encode data to exi stream*/
-	if(serialize_message(service)<0)
+	if(serialize_message(service))
 	{ 
 	
 		return -1;
 	}
  
  	/* send data to server and wait for the response message */
- 	if(serviceDataTransmitter(service->outStream.data, *(service->outStream.pos), service->inStream.data)<0) 
+ 	service->errorCode=serviceDataTransmitter(service->outStream.data, (*(service->outStream.pos)-service->transportHeaderOffset), service->inStream.data);
+ 	if(service->errorCode) 
  	{
 		return -1;
  	}
@@ -650,7 +659,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.MeteringReceiptRes.ResponseCode=service->val.enumeration;
 							
-						} else if(service->idPath.id[1] == 61)
+						} else if(service->idPath.id[2] == 61)
 						{ 
 							service->v2gMsg.Body.SessionSetupRes.ResponseCode=service->val.enumeration;
 							
@@ -669,6 +678,10 @@ static int deserializeElementCharacter(struct v2gService* service)
 					/* array copy and array length assignment */
 					memcpy(service->v2gMsg.Body.SessionSetupRes.EVSEID.data, service->val.binary.data,service->val.binary.len);
 					service->v2gMsg.Body.SessionSetupRes.EVSEID.arraylen.data = service->val.binary.len;
+
+					/* array copy and array length assignment */
+					memcpy(service->v2gMsg.Body.MeteringStatusRes.EVSEID.data, service->val.binary.data,service->val.binary.len);
+					service->v2gMsg.Body.MeteringStatusRes.EVSEID.arraylen.data = service->val.binary.len;
 		
 					} 
 					else
@@ -678,9 +691,9 @@ static int deserializeElementCharacter(struct v2gService* service)
 		
 				break;
 				case 63: /*TCurrent*/
-					if(service->val.type == INTEGER_64) 
+					if(service->val.type == INTEGER_32) 
 					{
-							service->v2gMsg.Body.SessionSetupRes.TCurrent=service->val.int64;
+							service->v2gMsg.Body.SessionSetupRes.TCurrent=service->val.int32;
 					} 
 					else
 					{
@@ -738,7 +751,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 		break;
 		case 5:
 			switch(service->eqn.localPart) {
-				case 35: /*SessionID*/
+				case 34: /*SessionID*/
 		
 				if(service->val.type == BINARY_HEX) 
 				{
@@ -753,7 +766,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 33: /*ServiceSessionID*/
+				case 32: /*ServiceSessionID*/
 		
 				if(service->val.type == BINARY_HEX) 
 				{
@@ -770,7 +783,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
 				break;
-				case 25: /*ProtocolVersion*/
+				case 24: /*ProtocolVersion*/
 		
 		if(service->val.type == STRING) 
 		{
@@ -834,7 +847,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.LineLockRes.EVSEStatus.FatalError=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.FatalError=service->val.boolean;
 							
@@ -861,7 +874,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.LineLockRes.EVSEStatus.EVSEStandby=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.EVSEStandby=service->val.boolean;
 							
@@ -888,7 +901,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.LineLockRes.EVSEStatus.ConnectorLocked=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.ConnectorLocked=service->val.boolean;
 							
@@ -900,7 +913,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 24: /*PowerSwitchClosed*/
+				case 23: /*PowerSwitchClosed*/
 					if(service->val.type == BOOLEAN) 
 					{
 						 if(service->idPath.id[2] == 61)
@@ -915,7 +928,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.LineLockRes.EVSEStatus.PowerSwitchClosed=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.PowerSwitchClosed=service->val.boolean;
 							
@@ -927,7 +940,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 26: /*RCD*/
+				case 25: /*RCD*/
 					if(service->val.type == BOOLEAN) 
 					{
 						 if(service->idPath.id[2] == 61)
@@ -942,7 +955,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.LineLockRes.EVSEStatus.RCD=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.RCD=service->val.boolean;
 							
@@ -954,24 +967,24 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 37: /*ShutDownTime*/
-					if(service->val.type == INTEGER_64) 
+				case 36: /*ShutDownTime*/
+					if(service->val.type == INTEGER_32) 
 					{
 						 if(service->idPath.id[2] == 61)
 						{ 
-							service->v2gMsg.Body.SessionSetupRes.EVSEStatus.ShutDownTime=service->val.int64;
+							service->v2gMsg.Body.SessionSetupRes.EVSEStatus.ShutDownTime=service->val.int32;
 							
 						} else if(service->idPath.id[2] == 43)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.EVSEStatus.ShutDownTime=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.EVSEStatus.ShutDownTime=service->val.int32;
 							
 						} else if(service->idPath.id[2] == 13)
 						{ 
-							service->v2gMsg.Body.LineLockRes.EVSEStatus.ShutDownTime=service->val.int64;
+							service->v2gMsg.Body.LineLockRes.EVSEStatus.ShutDownTime=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.ShutDownTime=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.ShutDownTime=service->val.int32;
 							
 						}
 					} 
@@ -981,7 +994,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 29: /*ServiceID*/
+				case 28: /*ServiceID*/
 		
 				if(service->val.type == BINARY_HEX) 
 				{
@@ -996,7 +1009,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 31: /*ServiceName*/
+				case 30: /*ServiceName*/
 		
 		if(service->val.type == STRING) 
 		{
@@ -1014,7 +1027,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceName=1;
 				break;
-				case 34: /*ServiceType*/
+				case 33: /*ServiceType*/
 					if(service->val.type == ENUMERATION) 
 					{
 							service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].ServiceType=service->val.enumeration;
@@ -1027,7 +1040,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceType=1;
 				break;
-				case 32: /*ServiceScope*/
+				case 31: /*ServiceScope*/
 		
 		if(service->val.type == STRING) 
 		{
@@ -1045,7 +1058,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceScope=1;
 				break;
-				case 21: /*Multiplier*/
+				case 20: /*Multiplier*/
 					if(service->val.type == ENUMERATION) 
 					{
 						 if(service->idPath.id[3] == 2)
@@ -1076,7 +1089,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[2] == 25)
+						} else if(service->idPath.id[3] == 25)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Multiplier=service->val.enumeration;
 							
@@ -1084,15 +1097,15 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[7] == 47)
+						} else if(service->idPath.id[7] == 46)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[6] == 6)
+						} else if(service->idPath.id[7] == 6)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Multiplier=service->val.enumeration;
 							
@@ -1104,7 +1117,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 50: /*Unit*/
+				case 49: /*Unit*/
 					if(service->val.type == ENUMERATION) 
 					{
 						 if(service->idPath.id[3] == 2)
@@ -1135,7 +1148,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[2] == 25)
+						} else if(service->idPath.id[3] == 25)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Unit=service->val.enumeration;
 							
@@ -1143,15 +1156,15 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[7] == 47)
+						} else if(service->idPath.id[7] == 46)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[6] == 6)
+						} else if(service->idPath.id[7] == 6)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Unit=service->val.enumeration;
 							
@@ -1163,56 +1176,56 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 51: /*Value*/
-					if(service->val.type == INTEGER_64) 
+				case 50: /*Value*/
+					if(service->val.type == INTEGER_32) 
 					{
 						 if(service->idPath.id[3] == 2)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.EAmount.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.EAmount.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 28)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxPower.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxPower.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 29)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxVoltage.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxVoltage.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 30)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.PEVMinVoltage.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.PEVMinVoltage.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 8)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.EVSEVoltage.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.EVSEVoltage.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 4)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.EVSEIMax.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.EVSEIMax.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 6)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Value=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Value=service->val.int32;
 							
-						} else if(service->idPath.id[2] == 25)
+						} else if(service->idPath.id[3] == 25)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Value=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Value=service->val.int32;
 							
 						} else if(service->idPath.id[2] == 37)
 						{ 
-							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Value=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Value=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Value=service->val.int32;
 							
-						} else if(service->idPath.id[7] == 47)
+						} else if(service->idPath.id[7] == 46)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Value=service->val.int32;
 							
-						} else if(service->idPath.id[6] == 6)
+						} else if(service->idPath.id[7] == 6)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Value=service->val.int32;
 							
 						}
 					} 
@@ -1222,18 +1235,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 48: /*TariffStart*/
-					if(service->val.type == UNSIGNED_INTEGER_32) 
-					{
-							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffStart=service->val.uint32;
-					} 
-					else
-					{
-						return -1; /* wrong data type */
-					}
-		
-				break;
-				case 46: /*TariffID*/
+				case 45: /*TariffID*/
 					if(service->val.type == ENUMERATION) 
 					{
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffID=service->val.enumeration;
@@ -1244,7 +1246,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 41: /*TariffDescription*/
+				case 40: /*TariffDescription*/
 		
 		if(service->val.type == STRING) 
 		{
@@ -1262,31 +1264,14 @@ static int deserializeElementCharacter(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].isused.TariffDescription=1;
 				break;
-				case 18: /*MeterPubKey*/
-		
-				if(service->val.type == BINARY_HEX) 
-				{
-					/* array copy and array length assignment */
-					memcpy(service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterPubKey.data, service->val.binary.data,service->val.binary.len);
-					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterPubKey.arraylen.data = service->val.binary.len;
-		
-					} 
-					else
-					{
-						return -1; /* wrong data type */
-					}
-		
-				/* is used */
-				service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterPubKey=1;
-				break;
-				case 20: /*MeterStatus*/
+				case 19: /*MeterStatus*/
 					if(service->val.type == INTEGER_16) 
 					{
 						 if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterStatus=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 17)
+						} else if(service->idPath.id[2] == 17)
 						{ 
 							service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.MeterStatus=service->val.int32;
 							
@@ -1300,16 +1285,16 @@ static int deserializeElementCharacter(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
 				break;
-				case 38: /*TMeter*/
-					if(service->val.type == INTEGER_64) 
+				case 37: /*TMeter*/
+					if(service->val.type == INTEGER_32) 
 					{
 						 if(service->idPath.id[2] == 23)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.TMeter=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.TMeter=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 17)
+						} else if(service->idPath.id[2] == 17)
 						{ 
-							service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.TMeter=service->val.int64;
+							service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.TMeter=service->val.int32;
 							
 						}
 					} 
@@ -1415,12 +1400,12 @@ static int deserializeElement(struct v2gService* service)
 			}
 		break;case 5:
 			switch(service->eqn.localPart) {
-				case 33:/* ServiceSessionID */	
+				case 32:/* ServiceSessionID */	
 
  					/* is used */
 					service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
 				break;	
-				case 25:/* ProtocolVersion */	
+				case 24:/* ProtocolVersion */	
 
  					/* is used */
 					service->v2gMsg.Header.SessionInformation.isused.ProtocolVersion=1;
@@ -1440,17 +1425,17 @@ static int deserializeElement(struct v2gService* service)
  					/* is used */
 					service->v2gMsg.Header.Notification.isused.EventList=1;
 				break;	
-				case 31:/* ServiceName */	
+				case 30:/* ServiceName */	
 
  					/* is used */
 					service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceName=1;
 				break;	
-				case 34:/* ServiceType */	
+				case 33:/* ServiceType */	
 
  					/* is used */
 					service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceType=1;
 				break;	
-				case 32:/* ServiceScope */	
+				case 31:/* ServiceScope */	
 
  					/* is used */
 					service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceScope=1;
@@ -1460,7 +1445,7 @@ static int deserializeElement(struct v2gService* service)
  					/* is used */
 					service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].isused.EPrice=1;
 				break;	
-				case 41:/* TariffDescription */	
+				case 40:/* TariffDescription */	
 
  					/* is used */
 					service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].isused.TariffDescription=1;
@@ -1470,22 +1455,17 @@ static int deserializeElement(struct v2gService* service)
  					/* is used */
 					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1;
 				break;	
-				case 18:/* MeterPubKey */	
-
- 					/* is used */
-					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterPubKey=1;
-				break;	
-				case 19:/* MeterReading */	
+				case 18:/* MeterReading */	
 
  					/* is used */
 					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterReading=1;
 				break;	
-				case 20:/* MeterStatus */	
+				case 19:/* MeterStatus */	
 
  					/* is used */
 					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
 				break;	
-				case 38:/* TMeter */	
+				case 37:/* TMeter */	
 
  					/* is used */
 					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.TMeter=1;
@@ -1514,49 +1494,49 @@ static int deserializeElement(struct v2gService* service)
 static int deserializeMessage(struct v2gService* service)
 {
 	int noEndOfDocument = 1; /* true */
-	int errno=0;
+	int returnCode=0;
 	
 
 	do {
 			exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event));
-			if (errno < 0) {
-				printf("[ERROR] %d \n", errno);
-				return errno;
+			if (returnCode < 0) {
+				printf("[ERROR] %d \n", returnCode);
+				return returnCode;
 			}
 
 			switch (service->event) {
 			case START_DOCUMENT:
 
-				errno = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode));
+				returnCode = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode));
 
 				break;
 			case END_DOCUMENT:
 
-				errno = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode));
+				returnCode = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode));
 				noEndOfDocument = 0; /* false */
 				break;
 			case START_ELEMENT:
-				errno = exiDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
+				returnCode = exiDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
 				service->idPath.id[service->idPath.pos++]=service->eqn.localPart;
 				 
 				break;
 			case END_ELEMENT:
 
-				errno = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
+				returnCode = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
 				service->idPath.pos--;
 				 
-				errno = deserializeElement(service);
+				returnCode = deserializeElement(service);
 				break;
 			case CHARACTERS:
 				/* decode */
-				errno = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
+				returnCode = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
 				 
 				/* assign character data to the v2g message structure */
-				errno = deserializeElementCharacter(service);
+				returnCode = deserializeElementCharacter(service);
 				break;
 			case ATTRIBUTE:
 				/* decode */
-				/*	errno = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */
+				/*	returnCode = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */
 				break;
 			default:
 				/* ERROR */
@@ -1571,7 +1551,7 @@ static int deserializeMessage(struct v2gService* service)
  
  
  /* Initialize the v2g client */
- int init_v2gServiceClient(struct v2gService* service, bytes_t bytes, string_ucs_t string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size)
+int init_v2gServiceClient(struct v2gService* service, bytes_t bytes, string_ucs_t string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size, uint16_t transportHeaderOffset)
 {
 
 	/* init byte array */
@@ -1587,6 +1567,8 @@ static int deserializeMessage(struct v2gService* service)
 	 service->outStream.data=outStream;
 	 service->outStream.size=max_outStream_size;
 
+	/* init offset for transport protocoll */
+	 service->transportHeaderOffset=transportHeaderOffset;
 
 	return 0;
 }

+ 2 - 2
src/service/v2g_serviceClientStubs.h

@@ -22,7 +22,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -96,7 +96,7 @@ extern "C" {
 	
 
 /* Initialize the v2g client */
-int init_v2gServiceClient(struct v2gService* service, bytes_t bytes, string_ucs_t string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size);
+int init_v2gServiceClient(struct v2gService* service, bytes_t bytes, string_ucs_t string, uint8_t* inStream, size_t max_inStream_size, uint8_t* outStream, size_t max_outStream_size, uint16_t transportHeaderOffset);
  
 #endif
 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 139 - 127
src/service/v2g_serviceDataSerialization.c


+ 1 - 1
src/service/v2g_serviceDataSerializiation.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 2 - 10
src/service/v2g_serviceDataTypes.c

@@ -19,7 +19,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -314,18 +314,10 @@ static  void init_MeterInfoType_MeterID(struct MeterInfoType_MeterID* type)
 
 }
 
-static  void init_MeterInfoType_MeterPubKey(struct MeterInfoType_MeterPubKey* type)
-{	
-	type->arraylen.data=0;
-
-}
-
 static  void init_MeterInfoType(struct MeterInfoType* type)
 {	
 	init_MeterInfoType_MeterID(&(type->MeterID));	
-	type->isused.MeterID=0;	
-	init_MeterInfoType_MeterPubKey(&(type->MeterPubKey));	
-	type->isused.MeterPubKey=0;		
+	type->isused.MeterID=0;		
 	type->isused.MeterReading=0;		
 	type->isused.MeterStatus=0;		
 	type->isused.TMeter=0;

+ 19 - 36
src/service/v2g_serviceDataTypes.h

@@ -19,7 +19,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -128,18 +128,12 @@ enum unitSymbolType
 	F, 
 	g, 
 	h, 
-	H, 
-	Hz, 
-	Hz_1, 
 	J, 
 	J_s, 
 	kg_J, 
 	min, 
 	N, 
-	C, 
 	ohm, 
-	Pa, 
-	rad, 
 	s, 
 	S, 
 	s_1, 
@@ -243,6 +237,7 @@ struct selection_SessionInformationType
 	unsigned int ServiceSessionID:1;
 	unsigned int ProtocolVersion:1;
 
+
 };
 
 struct arraylen_SessionInformationType_ProtocolVersion
@@ -274,6 +269,7 @@ struct selection_NotificationType
 	unsigned int FaultMsg:1;
 	unsigned int EventList:1;
 
+
 };
 
 struct arraylen_NotificationType_FaultMsg
@@ -379,6 +375,7 @@ struct selection_BodyType
 	unsigned int MeteringReceiptReq:1;
 	unsigned int MeteringReceiptRes:1;
 
+
 };
 
 struct arraylen_SessionSetupResType_EVSEID
@@ -402,7 +399,7 @@ struct EVSEStatusType
 	int ConnectorLocked;
 	int PowerSwitchClosed;
 	int RCD;
-	int64_t ShutDownTime;
+	int32_t ShutDownTime;
 
 
 };
@@ -412,7 +409,7 @@ struct SessionSetupResType
 	enum responseCode_SessionSetupType ResponseCode;
 	struct SessionSetupResType_EVSEID EVSEID;
 	struct EVSEStatusType EVSEStatus;
-	int64_t TCurrent;
+	int32_t TCurrent;
 
 
 };
@@ -620,7 +617,7 @@ struct FloatingValueType
 {
 	enum unitMultiplierType Multiplier;
 	enum unitSymbolType Unit;
-	int64_t Value;
+	int32_t Value;
 
 
 };
@@ -628,10 +625,10 @@ struct FloatingValueType
 struct PowerDiscoveryReqType
 {
 	struct PEVStatusType PEVStatus;
-	int64_t EoC;
+	int32_t EoC;
 	struct FloatingValueType EAmount;
 	struct FloatingValueType PEVMaxPower;
-	int32_t PEVMaxPhases;
+	int16_t PEVMaxPhases;
 	struct FloatingValueType PEVMaxVoltage;
 	struct FloatingValueType PEVMinVoltage;
 
@@ -657,6 +654,7 @@ struct selection_PowerDiscoveryResType
 	unsigned int EnergyProvider:1;
 	unsigned int TariffTable:1;
 
+
 };
 
 struct arraylen_TariffTableType_Currency
@@ -691,6 +689,7 @@ struct selection_TariffDescrType
 {
 	unsigned int TariffDescription:1;
 
+
 };
 
 struct selection_TariffEntryType
@@ -753,7 +752,7 @@ struct PowerDiscoveryResType
 	struct EVSEStatusType EVSEStatus;
 	struct FloatingValueType EVSEVoltage;
 	struct FloatingValueType EVSEIMax;
-	int32_t EVSEMaxPhases;
+	int16_t EVSEMaxPhases;
 	struct PowerDiscoveryResType_EnergyProvider EnergyProvider;
 	struct TariffTableType TariffTable;
 	struct selection_PowerDiscoveryResType isused;
@@ -786,7 +785,7 @@ struct selection_PowerDeliveryReqType
 
 struct ChargingProfileType
 {
-	int64_t ChargingProfileEntryStart;
+	int32_t ChargingProfileEntryStart;
 	struct FloatingValueType ChargingProfileEntryMaxPower;
 
 
@@ -833,8 +832,8 @@ struct MeteringStatusResType_EVSEID
 
 struct selection_MeteringStatusResType
 {
-    unsigned int PCurrent:1;
-    unsigned int MeterInfo:1;
+	unsigned int PCurrent:1;
+	unsigned int MeterInfo:1;
 
 
 };
@@ -856,7 +855,6 @@ struct MeterInfoType_MeterID
 struct selection_MeterInfoType
 {
 	unsigned int MeterID:1;
-	unsigned int MeterPubKey:1;
 	unsigned int MeterReading:1;
 	unsigned int MeterStatus:1;
 	unsigned int TMeter:1;
@@ -864,27 +862,12 @@ struct selection_MeterInfoType
 
 };
 
-struct arraylen_MeterInfoType_MeterPubKey
-{
-	size_t data;
-
-
-};
-
-struct MeterInfoType_MeterPubKey
-{
-	uint8_t data[64];
-	struct arraylen_MeterInfoType_MeterPubKey arraylen;
-
-};
-
 struct MeterInfoType
 {
 	struct MeterInfoType_MeterID MeterID;
-	struct MeterInfoType_MeterPubKey MeterPubKey;
 	struct FloatingValueType MeterReading;
-	int32_t MeterStatus;
-	int64_t TMeter;
+	int16_t MeterStatus;
+	int32_t TMeter;
 	struct selection_MeterInfoType isused;
 
 };
@@ -894,7 +877,7 @@ struct MeteringStatusResType
 	enum responseCode_MeteringStatusType ResponseCode;
 	struct MeteringStatusResType_EVSEID EVSEID;
 	struct EVSEStatusType EVSEStatus;
-	int64_t TCurrent;
+	int32_t TCurrent;
 	struct FloatingValueType EVSEMaxPower;
 	struct FloatingValueType PCurrent;
 	struct MeterInfoType MeterInfo;
@@ -928,7 +911,7 @@ struct MeteringReceiptReqType
 {
 	struct MeteringReceiptReqType_PEVID PEVID;
 	struct PEVStatusType PEVStatus;
-	int64_t TCurrent;
+	int32_t TCurrent;
 	enum tariffIDType Tariff;
 	struct MeterInfoType MeterInfo;
 	struct selection_MeteringReceiptReqType isused;

+ 216 - 118
src/service/v2g_serviceDispatcher.c

@@ -21,7 +21,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -128,9 +128,9 @@ static int deserializeElementCharacter(struct v2gService* service)
 		
 				break;
 				case 10: /*EoC*/
-					if(service->val.type == INTEGER_64) 
+					if(service->val.type == INTEGER_32) 
 					{
-							service->v2gMsg.Body.PowerDiscoveryReq.EoC=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.EoC=service->val.int32;
 					} 
 					else
 					{
@@ -185,9 +185,9 @@ static int deserializeElementCharacter(struct v2gService* service)
 					service->v2gMsg.Body.PowerDeliveryReq.isused.Tariff=1;
 				break;
 				case 63: /*TCurrent*/
-					if(service->val.type == INTEGER_64) 
+					if(service->val.type == INTEGER_32) 
 					{
-							service->v2gMsg.Body.MeteringReceiptReq.TCurrent=service->val.int64;
+							service->v2gMsg.Body.MeteringReceiptReq.TCurrent=service->val.int32;
 					} 
 					else
 					{
@@ -201,7 +201,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 		break;
 		case 5:
 			switch(service->eqn.localPart) {
-				case 35: /*SessionID*/
+				case 34: /*SessionID*/
 		
 				if(service->val.type == BINARY_HEX) 
 				{
@@ -216,7 +216,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 33: /*ServiceSessionID*/
+				case 32: /*ServiceSessionID*/
 		
 				if(service->val.type == BINARY_HEX) 
 				{
@@ -233,7 +233,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					/* is used */
 					service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
 				break;
-				case 25: /*ProtocolVersion*/
+				case 24: /*ProtocolVersion*/
 		
 				if(service->val.type == STRING) 
 				{
@@ -312,7 +312,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.PowerDeliveryReq.PEVStatus.ConnectorLocked=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 17)
+						} else if(service->idPath.id[2] == 17)
 						{ 
 							service->v2gMsg.Body.MeteringReceiptReq.PEVStatus.ConnectorLocked=service->val.boolean;
 							
@@ -343,7 +343,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.PowerDeliveryReq.PEVStatus.ChargerStandby=service->val.boolean;
 							
-						} else if(service->idPath.id[1] == 17)
+						} else if(service->idPath.id[2] == 17)
 						{ 
 							service->v2gMsg.Body.MeteringReceiptReq.PEVStatus.ChargerStandby=service->val.boolean;
 							
@@ -355,7 +355,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 21: /*Multiplier*/
+				case 20: /*Multiplier*/
 					if(service->val.type == ENUMERATION) 
 					{
 						 if(service->idPath.id[3] == 2)
@@ -386,7 +386,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[2] == 25)
+						} else if(service->idPath.id[3] == 25)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Multiplier=service->val.enumeration;
 							
@@ -394,15 +394,15 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[7] == 47)
+						} else if(service->idPath.id[7] == 46)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Multiplier=service->val.enumeration;
 							
-						} else if(service->idPath.id[6] == 6)
+						} else if(service->idPath.id[7] == 6)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Multiplier=service->val.enumeration;
 							
@@ -414,7 +414,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 50: /*Unit*/
+				case 49: /*Unit*/
 					if(service->val.type == ENUMERATION) 
 					{
 						 if(service->idPath.id[3] == 2)
@@ -445,7 +445,7 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[2] == 25)
+						} else if(service->idPath.id[3] == 25)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Unit=service->val.enumeration;
 							
@@ -453,15 +453,15 @@ static int deserializeElementCharacter(struct v2gService* service)
 						{ 
 							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[7] == 47)
+						} else if(service->idPath.id[7] == 46)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Unit=service->val.enumeration;
 							
-						} else if(service->idPath.id[6] == 6)
+						} else if(service->idPath.id[7] == 6)
 						{ 
 							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Unit=service->val.enumeration;
 							
@@ -473,56 +473,56 @@ static int deserializeElementCharacter(struct v2gService* service)
 					}
 		
 				break;
-				case 51: /*Value*/
-					if(service->val.type == INTEGER_64) 
+				case 50: /*Value*/
+					if(service->val.type == INTEGER_32) 
 					{
 						 if(service->idPath.id[3] == 2)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.EAmount.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.EAmount.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 28)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxPower.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxPower.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 29)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxVoltage.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.PEVMaxVoltage.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 30)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryReq.PEVMinVoltage.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryReq.PEVMinVoltage.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 8)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.EVSEVoltage.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.EVSEVoltage.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 4)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.EVSEIMax.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.EVSEIMax.Value=service->val.int32;
 							
 						} else if(service->idPath.id[3] == 6)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Value=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.EVSEMaxPower.Value=service->val.int32;
 							
-						} else if(service->idPath.id[2] == 25)
+						} else if(service->idPath.id[3] == 25)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Value=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.PCurrent.Value=service->val.int32;
 							
 						} else if(service->idPath.id[2] == 37)
 						{ 
-							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryMaxPower.Value=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 23)
+						} else if(service->idPath.id[2] == 23)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Value=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterReading.Value=service->val.int32;
 							
-						} else if(service->idPath.id[7] == 47)
+						} else if(service->idPath.id[7] == 46)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].TariffPMax.Value=service->val.int32;
 							
-						} else if(service->idPath.id[6] == 6)
+						} else if(service->idPath.id[7] == 6)
 						{ 
-							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Value=service->val.int64;
+							service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.TariffEntry[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffEntries.arraylen.TariffEntry].EPrice.Value=service->val.int32;
 							
 						}
 					} 
@@ -533,9 +533,9 @@ static int deserializeElementCharacter(struct v2gService* service)
 		
 				break;
 				case 2: /*ChargingProfileEntryStart*/
-					if(service->val.type == INTEGER_64) 
+					if(service->val.type == INTEGER_32) 
 					{
-							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryStart=service->val.int64;
+							service->v2gMsg.Body.PowerDeliveryReq.ChargingProfile.ChargingProfileEntryStart=service->val.int32;
 					} 
 					else
 					{
@@ -561,31 +561,14 @@ static int deserializeElementCharacter(struct v2gService* service)
 					/* is used */
 					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1;
 				break;
-				case 18: /*MeterPubKey*/
-		
-				if(service->val.type == BINARY_HEX) 
-				{
-					/* array copy and array length assignment */
-					memcpy(service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterPubKey.data, service->val.binary.data,service->val.binary.len);
-					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterPubKey.arraylen.data = service->val.binary.len;
-		
-					} 
-					else
-					{
-						return -1; /* wrong data type */
-					}
-		
-					/* is used */
-					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterPubKey=1;
-				break;
-				case 20: /*MeterStatus*/
+				case 19: /*MeterStatus*/
 					if(service->val.type == INTEGER_16) 
 					{
 						 if(service->idPath.id[2] == 23)
 						{ 
 							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterStatus=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 17)
+						} else if(service->idPath.id[2] == 17)
 						{ 
 							service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.MeterStatus=service->val.int32;
 							
@@ -599,16 +582,16 @@ static int deserializeElementCharacter(struct v2gService* service)
 					/* is used */
 					service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
 				break;
-				case 38: /*TMeter*/
-					if(service->val.type == INTEGER_64) 
+				case 37: /*TMeter*/
+					if(service->val.type == INTEGER_32) 
 					{
 						 if(service->idPath.id[2] == 23)
 						{ 
-							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.TMeter=service->val.int64;
+							service->v2gMsg.Body.MeteringStatusRes.MeterInfo.TMeter=service->val.int32;
 							
-						} else if(service->idPath.id[1] == 17)
+						} else if(service->idPath.id[2] == 17)
 						{ 
-							service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.TMeter=service->val.int64;
+							service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.TMeter=service->val.int32;
 							
 						}
 					} 
@@ -676,6 +659,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 59:/* SessionSetupReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					sessionSetup(&(service->v2gMsg.Body.SessionSetupReq), &(service->v2gMsg.Body.SessionSetupRes));
 							
@@ -683,7 +675,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.SessionSetupRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -691,6 +687,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 48:/* ServiceDiscoveryReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					serviceDiscovery(&(service->v2gMsg.Body.ServiceDiscoveryReq), &(service->v2gMsg.Body.ServiceDiscoveryRes));
 							
@@ -698,7 +703,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.ServiceDiscoveryRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -706,6 +715,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 53:/* ServicePaymentSelectionReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					selectedServicePayment(&(service->v2gMsg.Body.ServicePaymentSelectionReq), &(service->v2gMsg.Body.ServicePaymentSelectionRes));
 							
@@ -713,7 +731,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.ServicePaymentSelectionRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -721,6 +743,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 33:/* PaymentDetailsReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					paymentDetails(&(service->v2gMsg.Body.PaymentDetailsReq), &(service->v2gMsg.Body.PaymentDetailsRes));
 							
@@ -728,7 +759,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.PaymentDetailsRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -736,6 +771,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 41:/* PowerDiscoveryReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					powerDiscovery(&(service->v2gMsg.Body.PowerDiscoveryReq), &(service->v2gMsg.Body.PowerDiscoveryRes));
 							
@@ -743,7 +787,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.PowerDiscoveryRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -751,6 +799,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 11:/* LineLockReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					lineLock(&(service->v2gMsg.Body.LineLockReq), &(service->v2gMsg.Body.LineLockRes));
 							
@@ -758,7 +815,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.LineLockRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -766,6 +827,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 37:/* PowerDeliveryReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					powerDelivery(&(service->v2gMsg.Body.PowerDeliveryReq), &(service->v2gMsg.Body.PowerDeliveryRes));
 							
@@ -773,7 +843,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.PowerDeliveryRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -781,6 +855,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 21:/* MeteringStatusReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					meteringStatus(&(service->v2gMsg.Body.MeteringStatusReq), &(service->v2gMsg.Body.MeteringStatusRes));
 							
@@ -788,7 +871,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.MeteringStatusRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -796,6 +883,15 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				case 17:/* MeteringReceiptReq */	
 	
  		
+			
+							
+					/* test, if data length is unequal to the expected payload  */
+					if((service->inStream.size)!= *(service->inStream.pos))
+					{
+						service->errorCode = V2G_NON_VALID_MESSAGE;
+						return -1;
+					}			
+			
 					/* service call */
 					meteringReceipt(&(service->v2gMsg.Body.MeteringReceiptReq), &(service->v2gMsg.Body.MeteringReceiptRes));
 							
@@ -803,7 +899,11 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 					service->v2gMsg.Body.isused.MeteringReceiptRes=1;
 					
 					/* serialize the response data */
-					serialize_message(service); 
+					if(serialize_message(service))
+					{
+						/* serializiation error*/
+						service->errorCode= V2G_SERIALIZATION_FAILED;
+					} 
 
 			
 		
@@ -812,13 +912,13 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 		break;
 		case 5:
 			switch(service->eqn.localPart) {
-				case 33:/* ServiceSessionID */	
+				case 32:/* ServiceSessionID */	
 	
  				
 				/* is used */
 				service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
 				break;
-				case 25:/* ProtocolVersion */	
+				case 24:/* ProtocolVersion */	
 	
  				
 				/* is used */
@@ -848,25 +948,19 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 				/* is used */
 				service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1;
 				break;
-				case 18:/* MeterPubKey */	
-	
- 				
-				/* is used */
-				service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterPubKey=1;
-				break;
-				case 19:/* MeterReading */	
+				case 18:/* MeterReading */	
 	
  				
 				/* is used */
 				service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterReading=1;
 				break;
-				case 20:/* MeterStatus */	
+				case 19:/* MeterStatus */	
 	
  				
 				/* is used */
 				service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
 				break;
-				case 38:/* TMeter */	
+				case 37:/* TMeter */	
 	
  				
 				/* is used */
@@ -897,49 +991,55 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
 static int deserializeMessage(struct v2gService* service)
 {
 	int noEndOfDocument = 1; /* true */
-	int errno=0;
+	int returnCode=0;
 
 
 	do {
 			exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event));
-			if (errno < 0) {
-				printf("[ERROR] %d \n", errno);
-				return errno;
+			if (returnCode) 
+			{
+				
+				if(service->errorCode==0) 
+				{
+					service->errorCode= V2G_NON_VALID_MESSAGE;
+				}
+			
+				return returnCode;
 			}
 
 			switch (service->event) {
 			case START_DOCUMENT:
 
-				errno = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode));
+				returnCode = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode));
 
 				break;
 			case END_DOCUMENT:
 
-				errno = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode));
+				returnCode = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode));
 				noEndOfDocument = 0; /* false */
 				break;
 			case START_ELEMENT:
-				errno = exiDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
+				returnCode = exiDecodeStartElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
 				service->idPath.id[service->idPath.pos++]=service->eqn.localPart;
 				 
 				break;
 			case END_ELEMENT:
 
-				errno = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
-				errno = deserializeElementOrServiceCall(service);
+				returnCode = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
+				returnCode = deserializeElementOrServiceCall(service);
 				service->idPath.pos--;
 				 
 				break;
 			case CHARACTERS:
 				/* decode */
-				errno = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
+				returnCode = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
 				 
 				/* assign data to the v2g message structure */
-				errno = deserializeElementCharacter(service);
+				returnCode = deserializeElementCharacter(service);
 				break;
 			case ATTRIBUTE:
 				/* decode */
-				/*	errno = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */
+				/*	returnCode = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */
 				break;
 			default:
 				/* ERROR */
@@ -956,28 +1056,30 @@ static int deserializeMessage(struct v2gService* service)
  * Takes the EXI stream, invokes the called service method, and provides the response EXI stream 
  * @return 0 = 0K; -1 = ERROR
  */
-int messageDispatcher(struct v2gService* service, uint8_t* inStream, size_t sizeInStream, size_t* inPos, uint8_t* outStream, size_t sizeOutStream, size_t* outPos)
+int messageDispatcher(struct v2gService* service, uint8_t* inStream, size_t sizeInStream, uint8_t* outStream, size_t sizeOutStream, size_t* outStreamLength)
 {
 
-	int responseCode;
-
+	size_t inPos, outPos;
+	
 	/* assign inStream data to service v2g structure */
+	inPos = service->transportHeaderOffset;
 	service->inStream.data = inStream;
-	service->inStream.size = sizeInStream;
-	service->inStream.pos = inPos;
+	service->inStream.size = sizeInStream+inPos;
+	service->inStream.pos = &inPos;
 	service->inStream.buffer=0;
 	service->inStream.capacity=0;
-	
-	
+
 	
 	/* assign outStream data to service v2g structure */
+	outPos=service->transportHeaderOffset;
 	service->outStream.data = outStream;
 	service->outStream.size = sizeOutStream;
-	service->outStream.pos = outPos;
+	service->outStream.pos = &outPos;
 	service->outStream.buffer=0;
 	service->outStream.capacity=8;
 	
-	
+	/* clear error code */
+	service->errorCode = 0;
 	
 	/* init EXI decoder (read header, set initial state) */
 	exiInitDecoder(&(service->inStream), &(service->stateDecode));
@@ -992,30 +1094,24 @@ int messageDispatcher(struct v2gService* service, uint8_t* inStream, size_t size
 	init_AnonType_V2G_Message(&(service->v2gMsg));
 
 	/* deserialize the input stream and call the corresponding service */
-	responseCode = deserializeMessage(service);
-	
-	
-
-	if(responseCode<0)
-	{
-		/* an error occurred */
-		return -1;
-	} else if(responseCode==1)
+	if(deserializeMessage(service))
 	{
-		
-		return 0;
+		return -1; /* something went wrong */
 	}
 
+	/* determine payload size (without transport offset) */	
+	outPos -= service->transportHeaderOffset;
+	*outStreamLength = outPos;
 
+	
 	return 0;
-
 }
 
 /** 
  * Init the service
  * @return 0 = 0K; -1 = ERROR
  */
-int init_v2gservice(struct v2gService* service, bytes_t bytes, string_ucs_t string)
+int init_v2gservice(struct v2gService* service, bytes_t bytes, string_ucs_t string, uint16_t transportHeaderOffset)
 {
 
 	/* init byte array */
@@ -1024,6 +1120,8 @@ int init_v2gservice(struct v2gService* service, bytes_t bytes, string_ucs_t stri
 	/* init string array */
 	 service->val.string = string;
 
+	/* init offset for transport protocoll */
+	 service->transportHeaderOffset=transportHeaderOffset;
 
 	return 0;
 }

+ 3 - 3
src/service/v2g_serviceDispatcher.h

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -33,8 +33,8 @@ extern "C" {
 #include "v2g_serviceDataTypes.h"
 
 
-int init_v2gservice(struct v2gService* service,bytes_t bytes, string_ucs_t string);
-int messageDispatcher(struct v2gService* service, uint8_t* inStream, size_t sizeInStream, size_t* inPos, uint8_t* outStream, size_t sizeOutStream, size_t* outPos);
+int init_v2gservice(struct v2gService* service,bytes_t bytes, string_ucs_t string, uint16_t transportHeaderOffset);
+int messageDispatcher(struct v2gService* service, uint8_t* inStream, size_t sizeInStream, uint8_t* outStream, size_t sizeOutStream, size_t* outPos);
 
 #endif /* V2GSERVER_H_ */
 

+ 1 - 1
src/service/v2g_serviceMethods.h

@@ -22,7 +22,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

+ 3 - 5
src/test/main.c

@@ -19,10 +19,10 @@
  *
  * @author Daniel.Peintner.EXT@siemens.com
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
- * <p>Switch for sample programs: EXI codec only or for entire service</p>
+ * <p>Switch for sample programs: EXI codec only or for entire V2G service</p>
  *
  ********************************************************************/
 
@@ -33,12 +33,10 @@
 
 int main(int argc, char *argv[]) {
 	/* EXI codec only */
-	/* return main_codec(argc, argv);*/
+	 /*return main_codec(argc, argv);*/
 
 	/* V2G client / service example scenario */
 	return main_service(argc, argv);
 
-	/* network example 1 */
-	/* return main_network_1(argc, argv); */
 }
 

+ 1 - 2
src/test/main.h

@@ -19,7 +19,7 @@
  *
  * @author Daniel.Peintner.EXT@siemens.com
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  *
@@ -30,6 +30,5 @@
 
 int main_codec(int argc, char *argv[]);
 int main_service(int argc, char *argv[]);
-int main_network_1(int argc, char *argv[]);
 
 #endif

+ 2 - 2
src/test/main_codec.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Daniel.Peintner.EXT@siemens.com
- * @version 0.1
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  * <p>Sample program to illustrate how to read an EXI stream and
@@ -47,7 +47,7 @@ uint8_t bufferOut[BUFFER_SIZE];
 uint8_t data[ARRAY_SIZE_BYTES];
 uint32_t codepoints[ARRAY_SIZE_STRINGS];
 
-int mainX(int argc, char *argv[]) {
+int main_codec(int argc, char *argv[]) {
 
 	int errn = 0;
 	unsigned int i;

+ 48 - 19
src/test/main_service.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -29,6 +29,7 @@
 #include "v2g_serviceDataTypes.h"
 #include "v2g_serviceClientStubs.h"
 #include "EXITypes.h"
+#include "doIP.h"
 
 #include <stdio.h>
 
@@ -36,6 +37,8 @@
 #define MAX_STRING_SIZE 256
 #define MAX_STREAM_SIZE 60
 
+static void printErrorMessage(struct v2gService* service);
+
 int main_service(int argc, char *argv[])
 {
 
@@ -46,14 +49,19 @@ int main_service(int argc, char *argv[])
 	uint8_t inStream[MAX_STREAM_SIZE]; /* define MAX_STREAM_SIZE before */
 	uint8_t outStream[MAX_STREAM_SIZE]; /* define MAX_STREAM_SIZE before */
 
+	/* define offset variable for transport header data */
+	uint16_t transportHeaderOffset;
+
+
 	/* service data structure */
 	struct v2gService service;
 	struct HeaderType v2gHeader;
 	struct SessionSetupReqType sessionSetup;
 	struct SessionSetupResType resultSessionSetup;
-/*	struct PowerDiscoveryReqType powerDiscovery;
-	struct PowerDiscoveryResType resultPowerDiscovery;
-*/
+	/*struct PowerDiscoveryReqType powerDiscovery;
+	struct PowerDiscoveryResType resultPowerDiscovery; */
+
+
 
 	/* BINARY memory setup */
 	bytes_t bytes = { MAX_BYTE_SIZE, byte_array, 0 };
@@ -61,6 +69,9 @@ int main_service(int argc, char *argv[])
 	/* STRING memory setup */
 	string_ucs_t string = { MAX_STRING_SIZE, string_array, 0 };
 
+	/* setup offset for DoIP header (otherwise set
+	 * transportHeaderOffset=0 if no transfer protocol is used)*/
+	transportHeaderOffset = DOIP_HEADER_LENGTH;
 
 
 	printf("+++Start V2G Client / Service Example+++\n\n");
@@ -69,7 +80,7 @@ int main_service(int argc, char *argv[])
 	 * Init V2G Client *
 	 *******************/
 
-	init_v2gServiceClient(&service,bytes,string,inStream,MAX_STREAM_SIZE, outStream, MAX_STREAM_SIZE);
+	init_v2gServiceClient(&service,bytes,string,inStream,MAX_STREAM_SIZE, outStream, MAX_STREAM_SIZE, transportHeaderOffset);
 
 	/*******************************
 	 * Setup data for sessionSetup *
@@ -82,32 +93,50 @@ int main_service(int argc, char *argv[])
 	v2gHeader.SessionInformation.isused.ProtocolVersion = 1; /* important: signalize, protocol version is used */
 	v2gHeader.isused.Notification=0; /* no notification */
 
-	/* setup sessionSetup parameters */
+	/* setup sessionSetup parameter */
 	sessionSetup.isused.PEVID=1; /* no PEVID is transported */
 	sessionSetup.PEVStatus.ChargerStandby=1; /* charger standby = true */
 	sessionSetup.PEVStatus.ConnectorLocked=0; /* connector locked = false */
 
 
 	printf("PEV: call EVSE sessionSetup\n");
+
 	/*********************
 	 * Call sessionSetup *
 	 *********************/
-	call_sessionSetup(&service,&v2gHeader,&sessionSetup,&resultSessionSetup);
-
-	/* show results of the answer message of EVSE sessionSetup*/
-	printf("PEV: received response message from EVSE\n");
-	printf("\tResponseCode=%d\n",resultSessionSetup.ResponseCode);
-	printf("\tEVSEID=%d\n",	resultSessionSetup.EVSEID.data[0]);
-	printf("\tEVSEStatus:\n\t\tConnectorLocked=%d\n",resultSessionSetup.EVSEStatus.ConnectorLocked);
-	printf("\t\tEVSEStandby=%d\n",resultSessionSetup.EVSEStatus.EVSEStandby);
-	printf("\t\tFatalError=%d\n",resultSessionSetup.EVSEStatus.FatalError);
-	printf("\t\tPowerSwitchClosed=%d\n",resultSessionSetup.EVSEStatus.PowerSwitchClosed);
-	printf("\t\tRCD=%d\n",resultSessionSetup.EVSEStatus.RCD);
-	printf("\t\tShutDownTime=%lld\n",resultSessionSetup.EVSEStatus.ShutDownTime);
-	printf("\tTCurrent=%lld\n",resultSessionSetup.TCurrent);
+	if(call_sessionSetup(&service,&v2gHeader,&sessionSetup,&resultSessionSetup))
+	{
+		printErrorMessage(&service);
+	}
+	else
+	{
+		/* show result of the answer message of EVSE sessionSetup*/
+		printf("PEV: received response message from EVSE\n");
+		printf("\tResponseCode=%d\n",resultSessionSetup.ResponseCode);
+		printf("\tEVSEID=%d\n",	resultSessionSetup.EVSEID.data[0]);
+		printf("\tEVSEStatus:\n\t\tConnectorLocked=%d\n",resultSessionSetup.EVSEStatus.ConnectorLocked);
+		printf("\t\tEVSEStandby=%d\n",resultSessionSetup.EVSEStatus.EVSEStandby);
+		printf("\t\tFatalError=%d\n",resultSessionSetup.EVSEStatus.FatalError);
+		printf("\t\tPowerSwitchClosed=%d\n",resultSessionSetup.EVSEStatus.PowerSwitchClosed);
+		printf("\t\tRCD=%d\n",resultSessionSetup.EVSEStatus.RCD);
+		printf("\t\tShutDownTime=%d\n",resultSessionSetup.EVSEStatus.ShutDownTime);
+		printf("\tTCurrent=%d\n",resultSessionSetup.TCurrent);
+	}
 
 	printf("\n+++Terminate V2G Client / Service Example+++");
 
 	return 0;
 }
 
+static void printErrorMessage(struct v2gService* service)
+{
+	if(service->errorCode==V2G_NON_VALID_MESSAGE)
+	{
+		printf("PEV did not send a valid V2G message!\n");
+	}
+	else if(service->errorCode==V2G_SERIALIZATION_FAILED)
+	{
+		printf("EVSE error: Could not serialize the response message\n");
+	}
+}
+

+ 33 - 13
src/test/v2g_server.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
@@ -26,18 +26,19 @@
 #include "v2g_server.h"
 #include "v2g_service.h"
 #include "v2g_serviceDispatcher.h"
+#include "doIP.h"
 
 #define MAX_BYTE_SIZE 128
 #define MAX_STRING_SIZE 256
 #define MAX_STREAM_SIZE 60
 
-/* Simple EVSE server implementation */
-int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream)
+int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream, size_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*/
 
-	size_t posIn, posOut;
+
+	size_t exiMsgLength;
 
 	struct v2gService service;
 
@@ -49,22 +50,41 @@ int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream)
 
 	/**********************************************
 	 * Init V2G server and initialize array types *
-	 * for the EXI decoding						  *
+	 * for the EXI decoding	as well as the offset *
+	 * for the transportation header			  *
 	 **********************************************/
 
-	init_v2gservice(&service, bytes, string);
+	init_v2gservice(&service, bytes, string, DOIP_HEADER_LENGTH);
+
+	/* check, if the DoIP header is correct and determine payload */
+	if(read_doIPHeader(inStream,inStreamLength, &exiMsgLength))
+	{
+		/* DoIP header not correct */
+		write_doIPNack(outStream, outStreamLength, service.errorCode);
 
-	/* assign the position where to read / write in the inStream / outStream */
-	posIn=0;
-	posOut=0;
+		return -1;
+	}
 
 	/****************************************************************************
-	 * Pass the received EXI message stream (inStream + inStreamLength) to the  *
-	 * message dispatcher. 	The outStream contains the response message stream. *
-	 * posOut==length of outStream                                              *
+	 * Pass the received EXI message stream (inStream + exiMsgLength) to the    *
+	 * v2g message dispatcher. 	The outStream contains the response message     *
+	 * stream.  																*
 	 ****************************************************************************/
 
-	messageDispatcher(&service, inStream, inStreamLength, &posIn, outStream, MAX_STREAM_SIZE, &posOut);
+	if(messageDispatcher(&service, inStream, exiMsgLength, outStream, MAX_STREAM_SIZE, outStreamLength))
+	{
+		/* write DoIP failure */
+		write_doIPNack(outStream, outStreamLength, service.errorCode);
+
+	}
+	else
+	{
+		/* write DoIP header */
+		write_doIPHeader(outStream, outStreamLength, DOIP_EXI_TYPE);
+
+	}
+
 
 	return 0;
+
 }

+ 3 - 2
src/test/v2g_server.h

@@ -18,15 +18,16 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
+
 #ifndef V2G_SERVER_H_
 #define V2G_SERVER_H_
 
 #include "EXITypes.h"
 
-int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream);
+int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream,size_t* outStreamLength);
 
 #endif /* V2G_SERVER_H_ */

+ 11 - 4
src/test/v2g_serviceClientDataTransmitter.c

@@ -18,14 +18,14 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/
 
 #include "v2g_serviceClientDataTransmitter.h"
 #include "v2g_server.h"
-
+#include "doip.h"
 
 /* This method has to be implemented!
  * Send EXI stream (outStream) to EVSE and receive response stream (inStream)*/
@@ -34,7 +34,14 @@ int serviceDataTransmitter(uint8_t* outStream, size_t outStreamLength, uint8_t*
 	/* send output stream to the underlying network to the EVSE and wait for response
 	 * --> here provide data to the V2G server directly*/
 
-	testV2GService(outStream,  outStreamLength, inStream);
+	size_t inStreamLength = 0;
+	size_t payloadLength = 0;
+
+	/* setup DoIP header information; outStreamLength==payloadLength*/
+	write_doIPHeader(outStream,&outStreamLength,DOIP_EXI_TYPE);
+
+	/* send data to EVSE server (add DoIP offset)*/
+	testV2GService(outStream, outStreamLength, inStream, &inStreamLength);
 
-	return 0;
+	return read_doIPHeader(inStream,inStreamLength, &payloadLength);
 }

+ 1 - 1
src/test/v2g_serviceMethods.c

@@ -18,7 +18,7 @@
 /*******************************************************************
  *
  * @author Sebastian.Kaebisch.EXT@siemens.com
- * @version 0.2.2
+ * @version 0.3
  * @contact Joerg.Heuer@siemens.com
  *
  ********************************************************************/

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно