0.3 release zum testen

git-svn-id: https://svn.code.sf.net/p/openv2g/code/trunk@22 d9f2db14-54d0-4bde-b00c-16405c910529
This commit is contained in:
sebastiankb 2010-10-27 13:02:01 +00:00
parent 3e4a8426d8
commit 12bd32bd8a
49 changed files with 3100 additions and 2861 deletions

210
.cproject
View file

@ -18,23 +18,26 @@
<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907." name="/" resourcePath=""> <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"> <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"/> <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"/> <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"> <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"/> <inputType id="cdt.managedbuild.tool.gnu.assembler.input.1866737768" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool> </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.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"> <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.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" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" 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>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.949740711" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base"> <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"> <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/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/service}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/>
</option> </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 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" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" 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"/> <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2007502172" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool> </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"> <tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1261045096" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
@ -51,6 +54,9 @@
</sourceEntries> </sourceEntries>
</configuration> </configuration>
</storageModule> </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"> <storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
@ -133,6 +139,89 @@
<parser enabled="true"/> <parser enabled="true"/>
</scannerInfoProvider> </scannerInfoProvider>
</profile> </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"> <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"/> <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
@ -466,9 +555,6 @@
</profile> </profile>
</scannerConfigBuildInfo> </scannerConfigBuildInfo>
</storageModule> </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>
<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450"> <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"> <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">
@ -478,28 +564,29 @@
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> <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.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.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.MakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions> </extensions>
</storageModule> </storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> <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"> <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=""> <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"> <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"/> <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"/> <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.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"> <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.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" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" 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>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1358204014" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"> <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"> <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/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/service}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/> <listOptionValue builtIn="false" value="&quot;${workspace_loc:/OpenV2G/src/test}&quot;"/>
</option> </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 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" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" 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"/> <inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.822105819" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool> </tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1432229809" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"> <tool id="cdt.managedbuild.tool.gnu.c.linker.base.1432229809" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base">
@ -516,6 +603,9 @@
</folderInfo> </folderInfo>
</configuration> </configuration>
</storageModule> </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"> <storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
@ -598,6 +688,89 @@
<parser enabled="true"/> <parser enabled="true"/>
</scannerInfoProvider> </scannerInfoProvider>
</profile> </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"> <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"/> <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
@ -931,9 +1104,6 @@
</profile> </profile>
</scannerConfigBuildInfo> </scannerConfigBuildInfo>
</storageModule> </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>
</storageModule> </storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0"> <storageModule moduleId="cdtBuildSystem" version="4.0.0">

View file

@ -1,6 +1,6 @@
------------------------------------------------------------------------- -------------------------------------------------------------------------
OpenV2G - an open source project implementing the basic functionality of the ISO IEC 15118 vehicle to grid (V2G) communication interface 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/ http://openv2g.sourceforge.net/
Please report bugs via the SourceForge bug tracking system at http://sourceforge.net/tracker/?group_id=350113. 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 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/>. 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: CHANGES from version 0.2:
------------------------------------------------------------------------- -------------------------------------------------------------------------

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -18,7 +18,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
@ -58,9 +58,19 @@ struct v2gService
/* unique id for ambiguous elements */ /* unique id for ambiguous elements */
struct uniqueIDPath idPath; 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_ */ #endif /* V2G_SERVICE_H_ */

View file

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

View file

@ -20,7 +20,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
@ -46,7 +46,7 @@ int call_sessionSetup(struct v2gService* service, struct HeaderType* header, str
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -55,7 +55,7 @@ int call_sessionSetup(struct v2gService* service, struct HeaderType* header, str
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=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; service->v2gMsg.Body.isused.SessionSetupReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -109,7 +110,7 @@ int call_serviceDiscovery(struct v2gService* service, struct HeaderType* header,
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -118,7 +119,7 @@ int call_serviceDiscovery(struct v2gService* service, struct HeaderType* header,
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=0; service->inStream.capacity=0;
@ -134,14 +135,15 @@ int call_serviceDiscovery(struct v2gService* service, struct HeaderType* header,
service->v2gMsg.Body.isused.ServiceDiscoveryReq=1; service->v2gMsg.Body.isused.ServiceDiscoveryReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -172,7 +174,7 @@ int call_selectedServicePayment(struct v2gService* service, struct HeaderType* h
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -181,7 +183,7 @@ int call_selectedServicePayment(struct v2gService* service, struct HeaderType* h
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=0; service->inStream.capacity=0;
@ -197,14 +199,15 @@ int call_selectedServicePayment(struct v2gService* service, struct HeaderType* h
service->v2gMsg.Body.isused.ServicePaymentSelectionReq=1; service->v2gMsg.Body.isused.ServicePaymentSelectionReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -235,7 +238,7 @@ int call_paymentDetails(struct v2gService* service, struct HeaderType* header, s
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -244,7 +247,7 @@ int call_paymentDetails(struct v2gService* service, struct HeaderType* header, s
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=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; service->v2gMsg.Body.isused.PaymentDetailsReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -298,7 +302,7 @@ int call_powerDiscovery(struct v2gService* service, struct HeaderType* header, s
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -307,7 +311,7 @@ int call_powerDiscovery(struct v2gService* service, struct HeaderType* header, s
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=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; service->v2gMsg.Body.isused.PowerDiscoveryReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -361,7 +366,7 @@ int call_lineLock(struct v2gService* service, struct HeaderType* header, struct
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -370,7 +375,7 @@ int call_lineLock(struct v2gService* service, struct HeaderType* header, struct
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=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; service->v2gMsg.Body.isused.LineLockReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -424,7 +430,7 @@ int call_powerDelivery(struct v2gService* service, struct HeaderType* header, st
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -433,7 +439,7 @@ int call_powerDelivery(struct v2gService* service, struct HeaderType* header, st
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=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; service->v2gMsg.Body.isused.PowerDeliveryReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -487,7 +494,7 @@ int call_meteringStatus(struct v2gService* service, struct HeaderType* header, s
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -496,7 +503,7 @@ int call_meteringStatus(struct v2gService* service, struct HeaderType* header, s
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=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; service->v2gMsg.Body.isused.MeteringStatusReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -549,7 +557,7 @@ int call_meteringReceipt(struct v2gService* service, struct HeaderType* header,
service->idPath.pos=0; service->idPath.pos=0;
/* init outStream data structure */ /* init outStream data structure */
posEncode = 0; posEncode = service->transportHeaderOffset;
service->outStream.pos = &posEncode; service->outStream.pos = &posEncode;
service->outStream.buffer = 0; service->outStream.buffer = 0;
service->outStream.capacity = 8; service->outStream.capacity = 8;
@ -558,7 +566,7 @@ int call_meteringReceipt(struct v2gService* service, struct HeaderType* header,
exiInitEncoder(&(service->outStream), &(service->stateEncode)); exiInitEncoder(&(service->outStream), &(service->stateEncode));
/* init inStream data structure */ /* init inStream data structure */
posDecode = 0; posDecode = service->transportHeaderOffset;
service->inStream.pos = &posDecode; service->inStream.pos = &posDecode;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=0; service->inStream.capacity=0;
@ -574,14 +582,15 @@ int call_meteringReceipt(struct v2gService* service, struct HeaderType* header,
service->v2gMsg.Body.isused.MeteringReceiptReq=1; service->v2gMsg.Body.isused.MeteringReceiptReq=1;
/* encode data to exi stream*/ /* encode data to exi stream*/
if(serialize_message(service)<0) if(serialize_message(service))
{ {
return -1; return -1;
} }
/* send data to server and wait for the response message */ /* 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; return -1;
} }
@ -650,7 +659,7 @@ static int deserializeElementCharacter(struct v2gService* service)
{ {
service->v2gMsg.Body.MeteringReceiptRes.ResponseCode=service->val.enumeration; 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; service->v2gMsg.Body.SessionSetupRes.ResponseCode=service->val.enumeration;
@ -670,6 +679,10 @@ static int deserializeElementCharacter(struct v2gService* service)
memcpy(service->v2gMsg.Body.SessionSetupRes.EVSEID.data, service->val.binary.data,service->val.binary.len); 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; 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 else
{ {
@ -678,9 +691,9 @@ static int deserializeElementCharacter(struct v2gService* service)
break; break;
case 63: /*TCurrent*/ 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 else
{ {
@ -738,7 +751,7 @@ static int deserializeElementCharacter(struct v2gService* service)
break; break;
case 5: case 5:
switch(service->eqn.localPart) { switch(service->eqn.localPart) {
case 35: /*SessionID*/ case 34: /*SessionID*/
if(service->val.type == BINARY_HEX) if(service->val.type == BINARY_HEX)
{ {
@ -753,7 +766,7 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 33: /*ServiceSessionID*/ case 32: /*ServiceSessionID*/
if(service->val.type == BINARY_HEX) if(service->val.type == BINARY_HEX)
{ {
@ -770,7 +783,7 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1; service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
break; break;
case 25: /*ProtocolVersion*/ case 24: /*ProtocolVersion*/
if(service->val.type == STRING) if(service->val.type == STRING)
{ {
@ -834,7 +847,7 @@ static int deserializeElementCharacter(struct v2gService* service)
{ {
service->v2gMsg.Body.LineLockRes.EVSEStatus.FatalError=service->val.boolean; 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; 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; 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; 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; 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; service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.ConnectorLocked=service->val.boolean;
@ -900,7 +913,7 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 24: /*PowerSwitchClosed*/ case 23: /*PowerSwitchClosed*/
if(service->val.type == BOOLEAN) if(service->val.type == BOOLEAN)
{ {
if(service->idPath.id[2] == 61) 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; 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; service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.PowerSwitchClosed=service->val.boolean;
@ -927,7 +940,7 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 26: /*RCD*/ case 25: /*RCD*/
if(service->val.type == BOOLEAN) if(service->val.type == BOOLEAN)
{ {
if(service->idPath.id[2] == 61) 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; 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; service->v2gMsg.Body.MeteringStatusRes.EVSEStatus.RCD=service->val.boolean;
@ -954,24 +967,24 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 37: /*ShutDownTime*/ case 36: /*ShutDownTime*/
if(service->val.type == INTEGER_64) if(service->val.type == INTEGER_32)
{ {
if(service->idPath.id[2] == 61) 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) } 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) } 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; break;
case 29: /*ServiceID*/ case 28: /*ServiceID*/
if(service->val.type == BINARY_HEX) if(service->val.type == BINARY_HEX)
{ {
@ -996,7 +1009,7 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 31: /*ServiceName*/ case 30: /*ServiceName*/
if(service->val.type == STRING) if(service->val.type == STRING)
{ {
@ -1014,7 +1027,7 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceName=1; service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceName=1;
break; break;
case 34: /*ServiceType*/ case 33: /*ServiceType*/
if(service->val.type == ENUMERATION) if(service->val.type == ENUMERATION)
{ {
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].ServiceType=service->val.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 */ /* is used */
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceType=1; service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceType=1;
break; break;
case 32: /*ServiceScope*/ case 31: /*ServiceScope*/
if(service->val.type == STRING) if(service->val.type == STRING)
{ {
@ -1045,7 +1058,7 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceScope=1; service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceScope=1;
break; break;
case 21: /*Multiplier*/ case 20: /*Multiplier*/
if(service->val.type == ENUMERATION) if(service->val.type == ENUMERATION)
{ {
if(service->idPath.id[3] == 2) 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; 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; 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; 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; 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; 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; 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; break;
case 50: /*Unit*/ case 49: /*Unit*/
if(service->val.type == ENUMERATION) if(service->val.type == ENUMERATION)
{ {
if(service->idPath.id[3] == 2) 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; 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; 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; 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; 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; 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; 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; break;
case 51: /*Value*/ case 50: /*Value*/
if(service->val.type == INTEGER_64) if(service->val.type == INTEGER_32)
{ {
if(service->idPath.id[3] == 2) 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) } 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) } 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) } 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) } 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) } 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) } 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) } 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; break;
case 48: /*TariffStart*/ case 45: /*TariffID*/
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*/
if(service->val.type == ENUMERATION) if(service->val.type == ENUMERATION)
{ {
service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].TariffID=service->val.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; break;
case 41: /*TariffDescription*/ case 40: /*TariffDescription*/
if(service->val.type == STRING) if(service->val.type == STRING)
{ {
@ -1262,31 +1264,14 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].isused.TariffDescription=1; service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].isused.TariffDescription=1;
break; break;
case 18: /*MeterPubKey*/ case 19: /*MeterStatus*/
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*/
if(service->val.type == INTEGER_16) if(service->val.type == INTEGER_16)
{ {
if(service->idPath.id[2] == 23) if(service->idPath.id[2] == 23)
{ {
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterStatus=service->val.int32; 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; service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.MeterStatus=service->val.int32;
@ -1300,16 +1285,16 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
break; break;
case 38: /*TMeter*/ case 37: /*TMeter*/
if(service->val.type == INTEGER_64) if(service->val.type == INTEGER_32)
{ {
if(service->idPath.id[2] == 23) 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: break;case 5:
switch(service->eqn.localPart) { switch(service->eqn.localPart) {
case 33:/* ServiceSessionID */ case 32:/* ServiceSessionID */
/* is used */ /* is used */
service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1; service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
break; break;
case 25:/* ProtocolVersion */ case 24:/* ProtocolVersion */
/* is used */ /* is used */
service->v2gMsg.Header.SessionInformation.isused.ProtocolVersion=1; service->v2gMsg.Header.SessionInformation.isused.ProtocolVersion=1;
@ -1440,17 +1425,17 @@ static int deserializeElement(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Header.Notification.isused.EventList=1; service->v2gMsg.Header.Notification.isused.EventList=1;
break; break;
case 31:/* ServiceName */ case 30:/* ServiceName */
/* is used */ /* is used */
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceName=1; service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceName=1;
break; break;
case 34:/* ServiceType */ case 33:/* ServiceType */
/* is used */ /* is used */
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceType=1; service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceType=1;
break; break;
case 32:/* ServiceScope */ case 31:/* ServiceScope */
/* is used */ /* is used */
service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.Service[service->v2gMsg.Body.ServiceDiscoveryRes.ServiceList.arraylen.Service].isused.ServiceScope=1; 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 */ /* 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; 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; break;
case 41:/* TariffDescription */ case 40:/* TariffDescription */
/* is used */ /* is used */
service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.Tariff[service->v2gMsg.Body.PowerDiscoveryRes.TariffTable.arraylen.Tariff].isused.TariffDescription=1; 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 */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1;
break; break;
case 18:/* MeterPubKey */ case 18:/* MeterReading */
/* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterPubKey=1;
break;
case 19:/* MeterReading */
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterReading=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterReading=1;
break; break;
case 20:/* MeterStatus */ case 19:/* MeterStatus */
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
break; break;
case 38:/* TMeter */ case 37:/* TMeter */
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.TMeter=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.TMeter=1;
@ -1514,49 +1494,49 @@ static int deserializeElement(struct v2gService* service)
static int deserializeMessage(struct v2gService* service) static int deserializeMessage(struct v2gService* service)
{ {
int noEndOfDocument = 1; /* true */ int noEndOfDocument = 1; /* true */
int errno=0; int returnCode=0;
do { do {
exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event)); exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event));
if (errno < 0) { if (returnCode < 0) {
printf("[ERROR] %d \n", errno); printf("[ERROR] %d \n", returnCode);
return errno; return returnCode;
} }
switch (service->event) { switch (service->event) {
case START_DOCUMENT: case START_DOCUMENT:
errno = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode)); returnCode = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode));
break; break;
case END_DOCUMENT: case END_DOCUMENT:
errno = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode)); returnCode = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode));
noEndOfDocument = 0; /* false */ noEndOfDocument = 0; /* false */
break; break;
case START_ELEMENT: 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; service->idPath.id[service->idPath.pos++]=service->eqn.localPart;
break; break;
case END_ELEMENT: case END_ELEMENT:
errno = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn)); returnCode = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
service->idPath.pos--; service->idPath.pos--;
errno = deserializeElement(service); returnCode = deserializeElement(service);
break; break;
case CHARACTERS: case CHARACTERS:
/* decode */ /* 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 */ /* assign character data to the v2g message structure */
errno = deserializeElementCharacter(service); returnCode = deserializeElementCharacter(service);
break; break;
case ATTRIBUTE: case ATTRIBUTE:
/* decode */ /* decode */
/* errno = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */ /* returnCode = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */
break; break;
default: default:
/* ERROR */ /* ERROR */
@ -1571,7 +1551,7 @@ static int deserializeMessage(struct v2gService* service)
/* Initialize the v2g client */ /* 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 */ /* init byte array */
@ -1587,6 +1567,8 @@ static int deserializeMessage(struct v2gService* service)
service->outStream.data=outStream; service->outStream.data=outStream;
service->outStream.size=max_outStream_size; service->outStream.size=max_outStream_size;
/* init offset for transport protocoll */
service->transportHeaderOffset=transportHeaderOffset;
return 0; return 0;
} }

View file

@ -22,7 +22,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
@ -96,7 +96,7 @@ extern "C" {
/* Initialize the v2g client */ /* 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 #endif

File diff suppressed because it is too large Load diff

View file

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

View file

@ -19,7 +19,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @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) static void init_MeterInfoType(struct MeterInfoType* type)
{ {
init_MeterInfoType_MeterID(&(type->MeterID)); init_MeterInfoType_MeterID(&(type->MeterID));
type->isused.MeterID=0; type->isused.MeterID=0;
init_MeterInfoType_MeterPubKey(&(type->MeterPubKey));
type->isused.MeterPubKey=0;
type->isused.MeterReading=0; type->isused.MeterReading=0;
type->isused.MeterStatus=0; type->isused.MeterStatus=0;
type->isused.TMeter=0; type->isused.TMeter=0;

View file

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

View file

@ -21,7 +21,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
@ -128,9 +128,9 @@ static int deserializeElementCharacter(struct v2gService* service)
break; break;
case 10: /*EoC*/ 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 else
{ {
@ -185,9 +185,9 @@ static int deserializeElementCharacter(struct v2gService* service)
service->v2gMsg.Body.PowerDeliveryReq.isused.Tariff=1; service->v2gMsg.Body.PowerDeliveryReq.isused.Tariff=1;
break; break;
case 63: /*TCurrent*/ 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 else
{ {
@ -201,7 +201,7 @@ static int deserializeElementCharacter(struct v2gService* service)
break; break;
case 5: case 5:
switch(service->eqn.localPart) { switch(service->eqn.localPart) {
case 35: /*SessionID*/ case 34: /*SessionID*/
if(service->val.type == BINARY_HEX) if(service->val.type == BINARY_HEX)
{ {
@ -216,7 +216,7 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 33: /*ServiceSessionID*/ case 32: /*ServiceSessionID*/
if(service->val.type == BINARY_HEX) if(service->val.type == BINARY_HEX)
{ {
@ -233,7 +233,7 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1; service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
break; break;
case 25: /*ProtocolVersion*/ case 24: /*ProtocolVersion*/
if(service->val.type == STRING) if(service->val.type == STRING)
{ {
@ -312,7 +312,7 @@ static int deserializeElementCharacter(struct v2gService* service)
{ {
service->v2gMsg.Body.PowerDeliveryReq.PEVStatus.ConnectorLocked=service->val.boolean; 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; 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; 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; service->v2gMsg.Body.MeteringReceiptReq.PEVStatus.ChargerStandby=service->val.boolean;
@ -355,7 +355,7 @@ static int deserializeElementCharacter(struct v2gService* service)
} }
break; break;
case 21: /*Multiplier*/ case 20: /*Multiplier*/
if(service->val.type == ENUMERATION) if(service->val.type == ENUMERATION)
{ {
if(service->idPath.id[3] == 2) 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; 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; 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; 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; 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; 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; 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; break;
case 50: /*Unit*/ case 49: /*Unit*/
if(service->val.type == ENUMERATION) if(service->val.type == ENUMERATION)
{ {
if(service->idPath.id[3] == 2) 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; 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; 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; 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; 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; 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; 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; break;
case 51: /*Value*/ case 50: /*Value*/
if(service->val.type == INTEGER_64) if(service->val.type == INTEGER_32)
{ {
if(service->idPath.id[3] == 2) 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) } 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) } 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) } 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) } 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) } 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) } 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) } 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; break;
case 2: /*ChargingProfileEntryStart*/ 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 else
{ {
@ -561,31 +561,14 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1;
break; break;
case 18: /*MeterPubKey*/ case 19: /*MeterStatus*/
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*/
if(service->val.type == INTEGER_16) if(service->val.type == INTEGER_16)
{ {
if(service->idPath.id[2] == 23) if(service->idPath.id[2] == 23)
{ {
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.MeterStatus=service->val.int32; 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; service->v2gMsg.Body.MeteringReceiptReq.MeterInfo.MeterStatus=service->val.int32;
@ -599,16 +582,16 @@ static int deserializeElementCharacter(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
break; break;
case 38: /*TMeter*/ case 37: /*TMeter*/
if(service->val.type == INTEGER_64) if(service->val.type == INTEGER_32)
{ {
if(service->idPath.id[2] == 23) 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 */ 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 */ /* service call */
sessionSetup(&(service->v2gMsg.Body.SessionSetupReq), &(service->v2gMsg.Body.SessionSetupRes)); 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; service->v2gMsg.Body.isused.SessionSetupRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
serviceDiscovery(&(service->v2gMsg.Body.ServiceDiscoveryReq), &(service->v2gMsg.Body.ServiceDiscoveryRes)); 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; service->v2gMsg.Body.isused.ServiceDiscoveryRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
selectedServicePayment(&(service->v2gMsg.Body.ServicePaymentSelectionReq), &(service->v2gMsg.Body.ServicePaymentSelectionRes)); 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; service->v2gMsg.Body.isused.ServicePaymentSelectionRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
paymentDetails(&(service->v2gMsg.Body.PaymentDetailsReq), &(service->v2gMsg.Body.PaymentDetailsRes)); 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; service->v2gMsg.Body.isused.PaymentDetailsRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
powerDiscovery(&(service->v2gMsg.Body.PowerDiscoveryReq), &(service->v2gMsg.Body.PowerDiscoveryRes)); 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; service->v2gMsg.Body.isused.PowerDiscoveryRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
lineLock(&(service->v2gMsg.Body.LineLockReq), &(service->v2gMsg.Body.LineLockRes)); 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; service->v2gMsg.Body.isused.LineLockRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
powerDelivery(&(service->v2gMsg.Body.PowerDeliveryReq), &(service->v2gMsg.Body.PowerDeliveryRes)); 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; service->v2gMsg.Body.isused.PowerDeliveryRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
meteringStatus(&(service->v2gMsg.Body.MeteringStatusReq), &(service->v2gMsg.Body.MeteringStatusRes)); 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; service->v2gMsg.Body.isused.MeteringStatusRes=1;
/* serialize the response data */ /* 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 */ 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 */ /* service call */
meteringReceipt(&(service->v2gMsg.Body.MeteringReceiptReq), &(service->v2gMsg.Body.MeteringReceiptRes)); 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; service->v2gMsg.Body.isused.MeteringReceiptRes=1;
/* serialize the response data */ /* 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; break;
case 5: case 5:
switch(service->eqn.localPart) { switch(service->eqn.localPart) {
case 33:/* ServiceSessionID */ case 32:/* ServiceSessionID */
/* is used */ /* is used */
service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1; service->v2gMsg.Header.SessionInformation.isused.ServiceSessionID=1;
break; break;
case 25:/* ProtocolVersion */ case 24:/* ProtocolVersion */
/* is used */ /* is used */
@ -848,25 +948,19 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterID=1;
break; break;
case 18:/* MeterPubKey */ case 18:/* MeterReading */
/* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterPubKey=1;
break;
case 19:/* MeterReading */
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterReading=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterReading=1;
break; break;
case 20:/* MeterStatus */ case 19:/* MeterStatus */
/* is used */ /* is used */
service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1; service->v2gMsg.Body.MeteringStatusRes.MeterInfo.isused.MeterStatus=1;
break; break;
case 38:/* TMeter */ case 37:/* TMeter */
/* is used */ /* is used */
@ -897,49 +991,55 @@ static int deserializeElementOrServiceCall(struct v2gService* service)
static int deserializeMessage(struct v2gService* service) static int deserializeMessage(struct v2gService* service)
{ {
int noEndOfDocument = 1; /* true */ int noEndOfDocument = 1; /* true */
int errno=0; int returnCode=0;
do { do {
exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event)); exiDecodeNextEvent(&(service->inStream), &(service->stateDecode), &(service->event));
if (errno < 0) { if (returnCode)
printf("[ERROR] %d \n", errno); {
return errno;
if(service->errorCode==0)
{
service->errorCode= V2G_NON_VALID_MESSAGE;
}
return returnCode;
} }
switch (service->event) { switch (service->event) {
case START_DOCUMENT: case START_DOCUMENT:
errno = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode)); returnCode = exiDecodeStartDocument(&(service->inStream), &(service->stateDecode));
break; break;
case END_DOCUMENT: case END_DOCUMENT:
errno = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode)); returnCode = exiDecodeEndDocument(&(service->inStream), &(service->stateDecode));
noEndOfDocument = 0; /* false */ noEndOfDocument = 0; /* false */
break; break;
case START_ELEMENT: 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; service->idPath.id[service->idPath.pos++]=service->eqn.localPart;
break; break;
case END_ELEMENT: case END_ELEMENT:
errno = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn)); returnCode = exiDecodeEndElement(&(service->inStream), &(service->stateDecode), &(service->eqn));
errno = deserializeElementOrServiceCall(service); returnCode = deserializeElementOrServiceCall(service);
service->idPath.pos--; service->idPath.pos--;
break; break;
case CHARACTERS: case CHARACTERS:
/* decode */ /* decode */
errno = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val)); returnCode = exiDecodeCharacters(&(service->inStream), &(service->stateDecode), &(service->val));
/* assign data to the v2g message structure */ /* assign data to the v2g message structure */
errno = deserializeElementCharacter(service); returnCode = deserializeElementCharacter(service);
break; break;
case ATTRIBUTE: case ATTRIBUTE:
/* decode */ /* decode */
/* errno = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */ /* returnCode = exiDecodeAttribute(&isStream, &stateDecode, &eqn, &val); */
break; break;
default: default:
/* ERROR */ /* 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 * Takes the EXI stream, invokes the called service method, and provides the response EXI stream
* @return 0 = 0K; -1 = ERROR * @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 */ /* assign inStream data to service v2g structure */
inPos = service->transportHeaderOffset;
service->inStream.data = inStream; service->inStream.data = inStream;
service->inStream.size = sizeInStream; service->inStream.size = sizeInStream+inPos;
service->inStream.pos = inPos; service->inStream.pos = &inPos;
service->inStream.buffer=0; service->inStream.buffer=0;
service->inStream.capacity=0; service->inStream.capacity=0;
/* assign outStream data to service v2g structure */ /* assign outStream data to service v2g structure */
outPos=service->transportHeaderOffset;
service->outStream.data = outStream; service->outStream.data = outStream;
service->outStream.size = sizeOutStream; service->outStream.size = sizeOutStream;
service->outStream.pos = outPos; service->outStream.pos = &outPos;
service->outStream.buffer=0; service->outStream.buffer=0;
service->outStream.capacity=8; service->outStream.capacity=8;
/* clear error code */
service->errorCode = 0;
/* init EXI decoder (read header, set initial state) */ /* init EXI decoder (read header, set initial state) */
exiInitDecoder(&(service->inStream), &(service->stateDecode)); 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)); init_AnonType_V2G_Message(&(service->v2gMsg));
/* deserialize the input stream and call the corresponding service */ /* deserialize the input stream and call the corresponding service */
responseCode = deserializeMessage(service); if(deserializeMessage(service))
if(responseCode<0)
{ {
/* an error occurred */ return -1; /* something went wrong */
return -1;
} else if(responseCode==1)
{
return 0;
} }
/* determine payload size (without transport offset) */
outPos -= service->transportHeaderOffset;
*outStreamLength = outPos;
return 0; return 0;
} }
/** /**
* Init the service * Init the service
* @return 0 = 0K; -1 = ERROR * @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 */ /* init byte array */
@ -1024,6 +1120,8 @@ int init_v2gservice(struct v2gService* service, bytes_t bytes, string_ucs_t stri
/* init string array */ /* init string array */
service->val.string = string; service->val.string = string;
/* init offset for transport protocoll */
service->transportHeaderOffset=transportHeaderOffset;
return 0; return 0;
} }

View file

@ -18,7 +18,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
@ -33,8 +33,8 @@ extern "C" {
#include "v2g_serviceDataTypes.h" #include "v2g_serviceDataTypes.h"
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);
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* outPos);
#endif /* V2GSERVER_H_ */ #endif /* V2GSERVER_H_ */

View file

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

View file

@ -19,10 +19,10 @@
* *
* @author Daniel.Peintner.EXT@siemens.com * @author Daniel.Peintner.EXT@siemens.com
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @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>
* *
********************************************************************/ ********************************************************************/
@ -38,7 +38,5 @@ int main(int argc, char *argv[]) {
/* V2G client / service example scenario */ /* V2G client / service example scenario */
return main_service(argc, argv); return main_service(argc, argv);
/* network example 1 */
/* return main_network_1(argc, argv); */
} }

View file

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

View file

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

View file

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

View file

@ -18,7 +18,7 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
@ -26,18 +26,19 @@
#include "v2g_server.h" #include "v2g_server.h"
#include "v2g_service.h" #include "v2g_service.h"
#include "v2g_serviceDispatcher.h" #include "v2g_serviceDispatcher.h"
#include "doIP.h"
#define MAX_BYTE_SIZE 128 #define MAX_BYTE_SIZE 128
#define MAX_STRING_SIZE 256 #define MAX_STRING_SIZE 256
#define MAX_STREAM_SIZE 60 #define MAX_STREAM_SIZE 60
/* Simple EVSE server implementation */ int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream, size_t* outStreamLength)
int testV2GService(uint8_t* inStream, size_t inStreamLength, uint8_t* outStream)
{ {
static uint8_t byte_array[MAX_BYTE_SIZE]; /* define MAX_BYTE_SIZE before*/ 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*/ static uint32_t string_array[MAX_STRING_SIZE]; /* define MAX_STRING_SIZE before*/
size_t posIn, posOut;
size_t exiMsgLength;
struct v2gService service; 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 * * 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);
/* assign the position where to read / write in the inStream / outStream */ /* check, if the DoIP header is correct and determine payload */
posIn=0; if(read_doIPHeader(inStream,inStreamLength, &exiMsgLength))
posOut=0; {
/* DoIP header not correct */
write_doIPNack(outStream, outStreamLength, service.errorCode);
return -1;
}
/**************************************************************************** /****************************************************************************
* Pass the received EXI message stream (inStream + inStreamLength) to the * * Pass the received EXI message stream (inStream + exiMsgLength) to the *
* message dispatcher. The outStream contains the response message stream. * * v2g message dispatcher. The outStream contains the response message *
* posOut==length of outStream * * 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; return 0;
} }

View file

@ -18,15 +18,16 @@
/******************************************************************* /*******************************************************************
* *
* @author Sebastian.Kaebisch.EXT@siemens.com * @author Sebastian.Kaebisch.EXT@siemens.com
* @version 0.2.2 * @version 0.3
* @contact Joerg.Heuer@siemens.com * @contact Joerg.Heuer@siemens.com
* *
********************************************************************/ ********************************************************************/
#ifndef V2G_SERVER_H_ #ifndef V2G_SERVER_H_
#define V2G_SERVER_H_ #define V2G_SERVER_H_
#include "EXITypes.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_ */ #endif /* V2G_SERVER_H_ */

View file

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

View file

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