OpenV2G 0.8

git-svn-id: https://svn.code.sf.net/p/openv2g/code/trunk@83 d9f2db14-54d0-4bde-b00c-16405c910529
This commit is contained in:
sebastiankb 2014-04-15 09:19:53 +00:00
parent 85cb922c5a
commit 7814569390
106 changed files with 67975 additions and 0 deletions

649
.cproject Normal file
View file

@ -0,0 +1,649 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="OpenV2G" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907" name="Debug" parent="cdt.managedbuild.config.gnu.mingw.exe.debug">
<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.186426714" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.base">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.PE" id="cdt.managedbuild.target.gnu.platform.mingw.base.208578740" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
<builder buildPath="${workspace_loc:/OpenV2G}/Debug" id="cdt.managedbuild.builder.gnu.cross.474380604" superClass="cdt.managedbuild.builder.gnu.cross"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.467817276" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1213164158" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.260408959" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.1208420490" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
<option id="gnu.cpp.compiler.option.optimization.level.650473997" 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.2034188123" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.1511109002" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
<option id="gnu.c.compiler.option.include.paths.229245493" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;../src/codec&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/codec/appHandCodec&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/appHandshake&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/transport&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/service&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/test&quot;"/>
</option>
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1880660058" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.890071608" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.warnings.pedantic.1983095151" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic" value="true" valueType="boolean"/>
<option id="gnu.c.compiler.option.misc.ansi.1916749690" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="true" valueType="boolean"/>
<option id="gnu.c.compiler.option.warnings.toerrors.990186240" name="Warnings as errors (-Werror)" superClass="gnu.c.compiler.option.warnings.toerrors" value="false" valueType="boolean"/>
<option id="gnu.c.compiler.option.warnings.pedantic.error.145905553" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error" value="true" valueType="boolean"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1904654876" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1907160138" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1866282924" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.521623519" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="OpenV2G" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450" name="Release" parent="cdt.managedbuild.config.gnu.mingw.exe.release">
<folderInfo id="cdt.managedbuild.config.gnu.mingw.exe.release.681614450." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.544862828" 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.452289502" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
<builder buildPath="${workspace_loc:/OpenV2G/Release}" id="cdt.managedbuild.builder.gnu.cross.288561722" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.586100401" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1634756901" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.934860510" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.596457747" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
<option id="gnu.cpp.compiler.option.optimization.level.2131218410" 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.1665313885" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.2107890734" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
<option id="gnu.c.compiler.option.include.paths.289860304" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;../src/codec&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/codec/appHandCodec&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/appHandshake&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/transport&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/service&quot;"/>
<listOptionValue builtIn="false" value="&quot;../src/test&quot;"/>
</option>
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.option.optimization.level.899621054" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" value="gnu.c.optimization.level.most" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.1251127335" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.misc.ansi.496561434" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="true" valueType="boolean"/>
<option id="gnu.c.compiler.option.warnings.pedantic.289278524" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic" value="true" valueType="boolean"/>
<option id="gnu.c.compiler.option.warnings.pedantic.error.822372173" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error" value="true" valueType="boolean"/>
<option id="gnu.c.compiler.option.optimization.flags.1051939537" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-Os" valueType="string"/>
<option id="gnu.c.compiler.option.misc.other.1470884128" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.898314529" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.2082341498" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
<option id="gnu.c.link.option.other.71044722" name="Other options (-Xlinker [option])" superClass="gnu.c.link.option.other"/>
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.153003457" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.557104889" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="OpenV2G.cdt.managedbuild.target.gnu.mingw.exe.1420366407" name="Executable" projectType="cdt.managedbuild.target.gnu.mingw.exe"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.base.1358204014;cdt.managedbuild.tool.gnu.c.compiler.input.822105819">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.150928873;cdt.managedbuild.tool.gnu.c.compiler.input.2117635578">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907;cdt.managedbuild.config.gnu.mingw.exe.debug.181718907.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.113647340;cdt.managedbuild.tool.gnu.c.compiler.input.67299528">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.1536681007;cdt.managedbuild.config.gnu.mingw.exe.debug.1536681007.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.debug.1257453970;cdt.managedbuild.tool.gnu.c.compiler.input.1901507773">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.1091708379;cdt.managedbuild.config.gnu.mingw.exe.release.1091708379.;cdt.managedbuild.tool.gnu.c.compiler.mingw.exe.release.1844784508;cdt.managedbuild.tool.gnu.c.compiler.input.1276057383">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="Release">
<resource resourceType="PROJECT" workspacePath="/OpenV2G"/>
</configuration>
<configuration configurationName="Debug">
<resource resourceType="PROJECT" workspacePath="/OpenV2G"/>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
<buildTargets>
<target name="OpenV2G.exe" path="Debug" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
<buildCommand>make</buildCommand>
<buildArguments/>
<buildTarget>OpenV2G.exe</buildTarget>
<stopOnError>true</stopOnError>
<useDefaultCommand>true</useDefaultCommand>
<runAllBuilders>true</runAllBuilders>
</target>
</buildTargets>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
</cproject>

81
.project Normal file
View file

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

49
Debug/makefile Normal file
View file

@ -0,0 +1,49 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include src/transport/subdir.mk
-include src/test/subdir.mk
-include src/service/subdir.mk
-include src/codec/appHandCodec/subdir.mk
-include src/codec/subdir.mk
-include src/appHandshake/subdir.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: OpenV2G.exe
# Tool invocations
OpenV2G.exe: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: MinGW C Linker'
gcc -o "OpenV2G.exe" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES) OpenV2G.exe
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets

8
Debug/objects.mk Normal file
View file

@ -0,0 +1,8 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
USER_OBJS :=
LIBS :=

22
Debug/sources.mk Normal file
View file

@ -0,0 +1,22 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
O_SRCS :=
C_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
OBJS :=
C_DEPS :=
EXECUTABLES :=
# Every subdirectory with source files must be described here
SUBDIRS := \
src/transport \
src/test \
src/service \
src/codec \
src/codec/appHandCodec \
src/appHandshake \

View file

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

View file

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

87
Debug/src/codec/subdir.mk Normal file
View file

@ -0,0 +1,87 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../src/codec/AbstractDecoderChannel.c \
../src/codec/AbstractEncoderChannel.c \
../src/codec/BitDecoderChannel.c \
../src/codec/BitEncoderChannel.c \
../src/codec/BitInputStream.c \
../src/codec/BitOutputStream.c \
../src/codec/ByteDecoderChannel.c \
../src/codec/ByteEncoderChannel.c \
../src/codec/ByteStream.c \
../src/codec/DynamicMemory.c \
../src/codec/EXIHeaderDecoder.c \
../src/codec/EXIHeaderEncoder.c \
../src/codec/MethodsBag.c \
../src/codec/StringNameTable.c \
../src/codec/StringValueTable.c \
../src/codec/UCSString.c \
../src/codec/main_codec.c \
../src/codec/v2gEXICoder.c \
../src/codec/v2gEXIDecoder.c \
../src/codec/v2gEXIEncoder.c \
../src/codec/v2gNameTableEntries.c \
../src/codec/v2gQNames.c
OBJS += \
./src/codec/AbstractDecoderChannel.o \
./src/codec/AbstractEncoderChannel.o \
./src/codec/BitDecoderChannel.o \
./src/codec/BitEncoderChannel.o \
./src/codec/BitInputStream.o \
./src/codec/BitOutputStream.o \
./src/codec/ByteDecoderChannel.o \
./src/codec/ByteEncoderChannel.o \
./src/codec/ByteStream.o \
./src/codec/DynamicMemory.o \
./src/codec/EXIHeaderDecoder.o \
./src/codec/EXIHeaderEncoder.o \
./src/codec/MethodsBag.o \
./src/codec/StringNameTable.o \
./src/codec/StringValueTable.o \
./src/codec/UCSString.o \
./src/codec/main_codec.o \
./src/codec/v2gEXICoder.o \
./src/codec/v2gEXIDecoder.o \
./src/codec/v2gEXIEncoder.o \
./src/codec/v2gNameTableEntries.o \
./src/codec/v2gQNames.o
C_DEPS += \
./src/codec/AbstractDecoderChannel.d \
./src/codec/AbstractEncoderChannel.d \
./src/codec/BitDecoderChannel.d \
./src/codec/BitEncoderChannel.d \
./src/codec/BitInputStream.d \
./src/codec/BitOutputStream.d \
./src/codec/ByteDecoderChannel.d \
./src/codec/ByteEncoderChannel.d \
./src/codec/ByteStream.d \
./src/codec/DynamicMemory.d \
./src/codec/EXIHeaderDecoder.d \
./src/codec/EXIHeaderEncoder.d \
./src/codec/MethodsBag.d \
./src/codec/StringNameTable.d \
./src/codec/StringValueTable.d \
./src/codec/UCSString.d \
./src/codec/main_codec.d \
./src/codec/v2gEXICoder.d \
./src/codec/v2gEXIDecoder.d \
./src/codec/v2gEXIEncoder.d \
./src/codec/v2gNameTableEntries.d \
./src/codec/v2gQNames.d
# Each subdirectory must supply rules for building sources it contributes
src/codec/%.o: ../src/codec/%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O0 -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '

View file

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

36
Debug/src/test/subdir.mk Normal file
View file

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

View file

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

165
LICENSE.txt Normal file
View file

@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

108
README.txt Normal file
View file

@ -0,0 +1,108 @@
-------------------------------------------------------------------------
OpenV2G - an open source project implementing the basic functionality of the ISO IEC 15118 vehicle to grid (V2G) communication interface
Version 0.8, released January, 2014
http://openv2g.sourceforge.net/
Please report bugs via the SourceForge bug tracking system at http://sourceforge.net/tracker/?group_id=350113.
Thank you.
Copyright (C) 2007-2014 Siemens AG
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-------------------------------------------------------------------------
CHANGES from version 0.7:
-------------------------------------------------------------------------
* adaption of V2G schema changes (reflects the ISO/IEC 15118-2 FDIS status)
* bug-fixes
-------------------------------------------------------------------------
CHANGES from version 0.6:
-------------------------------------------------------------------------
* adaption of V2G schema changes (reflects the ISO/IEC 15118-2 DIS status and DIN 70121)
* reduced memory usage
* EXI decoder skips schema deviations according to EXI Profile
* bug-fixes
-------------------------------------------------------------------------
CHANGES from version 0.5:
-------------------------------------------------------------------------
* adaption of V2G schema changes
* application handshake protocol implementation
* asynchronised communication
* reduced memory usage
* changed V2GTP byte order from little endian to big endian
* bug-fixes
* updated AC demo interaction between EV and EVSE, and
* updated DC demo interaction between EV and EVSE
-------------------------------------------------------------------------
CHANGES from version 0.4:
-------------------------------------------------------------------------
* adaption of V2G schema changes
* V2GTP implementation (replaces the DoIP implementation)
* EXI default coder for the 15118 schema (replaces the strict mode of EXI)
* AC demo interaction between PEV and EVSE, and
* DC demo interaction between PEV and EVSE
-------------------------------------------------------------------------
CHANGES from version 0.3.1:
-------------------------------------------------------------------------
* adaption of V2G schema changes
* supporting of DC messages
* example program showing the message sequence of AC charging and
DC charging
* bug-fixes
-------------------------------------------------------------------------
CHANGES from version 0.3:
-------------------------------------------------------------------------
* Bug-fixes
* reduced memory usage
* some type changes in the EXI codec and V2G service:
** struct v2gService->struct EXIService in v2g_service.h
** size_t->uint16_t in v2g_serviceClientDataTransmitter.h and doIP.h
* renaming of some enumeration values in v2g_serviceDataTypes.h
-------------------------------------------------------------------------
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:
-------------------------------------------------------------------------
* Bug-fixes
* Fixed compiler warnings
-------------------------------------------------------------------------
CHANGES from version 0.1:
-------------------------------------------------------------------------
* Bug-fixes
* Service and Client added

49
Release/makefile Normal file
View file

@ -0,0 +1,49 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include src/transport/subdir.mk
-include src/test/subdir.mk
-include src/service/subdir.mk
-include src/codec/appHandCodec/subdir.mk
-include src/codec/subdir.mk
-include src/appHandshake/subdir.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: OpenV2G.exe
# Tool invocations
OpenV2G.exe: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: MinGW C Linker'
gcc -o "OpenV2G.exe" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES) OpenV2G.exe
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets

8
Release/objects.mk Normal file
View file

@ -0,0 +1,8 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
USER_OBJS :=
LIBS :=

22
Release/sources.mk Normal file
View file

@ -0,0 +1,22 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
O_SRCS :=
C_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
OBJS :=
C_DEPS :=
EXECUTABLES :=
# Every subdirectory with source files must be described here
SUBDIRS := \
src/transport \
src/test \
src/service \
src/codec \
src/codec/appHandCodec \
src/appHandshake \

View file

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

View file

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

View file

@ -0,0 +1,87 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../src/codec/AbstractDecoderChannel.c \
../src/codec/AbstractEncoderChannel.c \
../src/codec/BitDecoderChannel.c \
../src/codec/BitEncoderChannel.c \
../src/codec/BitInputStream.c \
../src/codec/BitOutputStream.c \
../src/codec/ByteDecoderChannel.c \
../src/codec/ByteEncoderChannel.c \
../src/codec/ByteStream.c \
../src/codec/DynamicMemory.c \
../src/codec/EXIHeaderDecoder.c \
../src/codec/EXIHeaderEncoder.c \
../src/codec/MethodsBag.c \
../src/codec/StringNameTable.c \
../src/codec/StringValueTable.c \
../src/codec/UCSString.c \
../src/codec/main_codec.c \
../src/codec/v2gEXICoder.c \
../src/codec/v2gEXIDecoder.c \
../src/codec/v2gEXIEncoder.c \
../src/codec/v2gNameTableEntries.c \
../src/codec/v2gQNames.c
OBJS += \
./src/codec/AbstractDecoderChannel.o \
./src/codec/AbstractEncoderChannel.o \
./src/codec/BitDecoderChannel.o \
./src/codec/BitEncoderChannel.o \
./src/codec/BitInputStream.o \
./src/codec/BitOutputStream.o \
./src/codec/ByteDecoderChannel.o \
./src/codec/ByteEncoderChannel.o \
./src/codec/ByteStream.o \
./src/codec/DynamicMemory.o \
./src/codec/EXIHeaderDecoder.o \
./src/codec/EXIHeaderEncoder.o \
./src/codec/MethodsBag.o \
./src/codec/StringNameTable.o \
./src/codec/StringValueTable.o \
./src/codec/UCSString.o \
./src/codec/main_codec.o \
./src/codec/v2gEXICoder.o \
./src/codec/v2gEXIDecoder.o \
./src/codec/v2gEXIEncoder.o \
./src/codec/v2gNameTableEntries.o \
./src/codec/v2gQNames.o
C_DEPS += \
./src/codec/AbstractDecoderChannel.d \
./src/codec/AbstractEncoderChannel.d \
./src/codec/BitDecoderChannel.d \
./src/codec/BitEncoderChannel.d \
./src/codec/BitInputStream.d \
./src/codec/BitOutputStream.d \
./src/codec/ByteDecoderChannel.d \
./src/codec/ByteEncoderChannel.d \
./src/codec/ByteStream.d \
./src/codec/DynamicMemory.d \
./src/codec/EXIHeaderDecoder.d \
./src/codec/EXIHeaderEncoder.d \
./src/codec/MethodsBag.d \
./src/codec/StringNameTable.d \
./src/codec/StringValueTable.d \
./src/codec/UCSString.d \
./src/codec/main_codec.d \
./src/codec/v2gEXICoder.d \
./src/codec/v2gEXIDecoder.d \
./src/codec/v2gEXIEncoder.d \
./src/codec/v2gNameTableEntries.d \
./src/codec/v2gQNames.d
# Each subdirectory must supply rules for building sources it contributes
src/codec/%.o: ../src/codec/%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
gcc -I"../src/codec" -I"../src/codec/appHandCodec" -I"../src/appHandshake" -I"../src/transport" -I"../src/service" -I"../src/test" -O3 -Os -g3 -pedantic -pedantic-errors -Wall -c -fmessage-length=0 -ansi -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '

View file

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

View file

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

View file

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

16
data/sessionSetupReq.xml Normal file
View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<v2gci_d:V2G_Message xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:v2gci_t="urn:iso:15118:2:2013:MsgDataTypes"
xmlns:v2gci_d="urn:iso:15118:2:2013:MsgDef"
xmlns:v2gci_h="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v2gci_d:Header>
<v2gci_h:SessionID>00</v2gci_h:SessionID>
</v2gci_d:Header>
<v2gci_d:Body>
<v2gci_b:SessionSetupReq>
<v2gci_b:EVCCID>01</v2gci_b:EVCCID>
</v2gci_b:SessionSetupReq>
</v2gci_d:Body>
</v2gci_d:V2G_Message>

Binary file not shown.

18
data/sessionSetupRes.xml Normal file
View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<v2gci_d:V2G_Message xmlns:v2gci_h="urn:iso:15118:2:2013:MsgHeader"
xmlns:v2gci_b="urn:iso:15118:2:2013:MsgBody"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
xmlns:v2gci_t="urn:iso:15118:2:2013:MsgDataTypes"
xmlns:v2gci_d="urn:iso:15118:2:2013:MsgDef"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v2gci_d:Header>
<v2gci_h:SessionID>010203040506</v2gci_h:SessionID>
</v2gci_d:Header>
<v2gci_d:Body>
<v2gci_b:SessionSetupRes>
<v2gci_b:ResponseCode>OK</v2gci_b:ResponseCode>
<v2gci_b:EVSEID>ABC01234</v2gci_b:EVSEID>
<v2gci_b:EVSETimeStamp>123456789</v2gci_b:EVSETimeStamp>
</v2gci_b:SessionSetupRes>
</v2gci_d:Body>
</v2gci_d:V2G_Message>

Binary file not shown.

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

106
src/codec/BitInputStream.c Normal file
View file

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

View file

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

125
src/codec/BitOutputStream.c Normal file
View file

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

View file

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

View file

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

View file

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

89
src/codec/ByteStream.c Normal file
View file

@ -0,0 +1,89 @@
/*
* Copyright (C) 2007-2013 Siemens AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************
*
* @author Daniel.Peintner.EXT@siemens.com
* @version 0.8
* @contact Joerg.Heuer@siemens.com
*
* <p>Code generated by EXIdizer.com</p>
* <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
*
*
********************************************************************/
/* Avoid VS warning, put before your included header files */
/* warning C4996: fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. */
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include "EXITypes.h"
#include "ErrorCodes.h"
#ifndef BYTE_STREAM_C
#define BYTE_STREAM_C
int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint32_t* pos) {
FILE* f;
int character;
int errn = 0;
f = fopen(filename, "rb");
if (f == NULL) {
errn = EXI_ERROR_INPUT_FILE_HANDLE;
} else {
/* read bytes */
while (errn == 0 && (character = getc(f)) != EOF) {
if (*pos >= size) {
errn = EXI_ERROR_OUT_OF_BYTE_BUFFER;
} else {
data[(*pos)++] = (uint8_t) character;
}
}
fclose(f);
}
return errn;
}
int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename) {
size_t rlen;
FILE* f = fopen(filename, "wb+");
if (f == NULL) {
return -1;
} else {
rlen = fwrite(data, sizeof(uint8_t), len, f);
fflush(f);
fclose(f);
if(rlen == len) {
return 0;
} else {
return EXI_ERROR_OUTPUT_FILE;
}
}
}
#endif /* BYTE_STREAM_C */

76
src/codec/ByteStream.h Normal file
View file

@ -0,0 +1,76 @@
/*
* Copyright (C) 2007-2013 Siemens AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************
*
* @author Daniel.Peintner.EXT@siemens.com
* @version 0.8
* @contact Joerg.Heuer@siemens.com
*
* <p>Code generated by EXIdizer.com</p>
* <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
*
*
********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "EXITypes.h"
/**
* \file ByteStream.h
* \brief Byte Stream utilities
*
*/
#ifndef BYTE_STREAM_H
#define BYTE_STREAM_H
/**
* \brief Write bytes to file
*
* \param data byte array
* \param len length
* \param filename File name
* \return Error-Code <> 0
*
*/
int writeBytesToFile(uint8_t* data, uint32_t len, const char * filename);
/**
* \brief Read bytes from file
*
* \param filename File name
* \param data byte array
* \param size byte array size
* \param pos byte array position
* \return Error-Code <> 0
*
*/
int readBytesFromFile(const char * filename, uint8_t* data, uint32_t size, uint32_t* pos);
#endif /* BYTE_STREAM_H */
#ifdef __cplusplus
}
#endif

51
src/codec/CoderChannel.h Normal file
View file

@ -0,0 +1,51 @@
/*
* Copyright (C) 2007-2012 Siemens AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************
*
* @author Daniel.Peintner.EXT@siemens.com
* @version 0.7
* @contact Joerg.Heuer@siemens.com
*
* <p>Code generated by EXIdizer.com</p>
********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "EXITypes.h"
#ifndef CODER_CHANNEL_H
#define CODER_CHANNEL_H
/** EXI alignment mode - Option bit-packed */
#define BIT_PACKED 1
/** EXI alignment mode - Option byte-packed */
#define BYTE_ALIGNMENT 2
/** EXI alignment mode */
#define EXI_ALIGNMENT BIT_PACKED
#endif
#ifdef __cplusplus
}
#endif

359
src/codec/DecoderChannel.h Normal file
View file

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

101
src/codec/DynamicMemory.c Normal file
View file

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

101
src/codec/DynamicMemory.h Normal file
View file

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

103
src/codec/EXIConfig.h Normal file
View file

@ -0,0 +1,103 @@
/*
* Copyright (C) 2007-2013 Siemens AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************
*
* @author Daniel.Peintner.EXT@siemens.com
* @version 0.8
* @contact Joerg.Heuer@siemens.com
*
* <p>Code generated by EXIdizer.com</p>
* <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
*
*
********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/**
* \file EXIConfig.h
* \brief EXI Configurations for the EXI Codec
*
*/
#ifndef EXI_CONFIG_H
#define EXI_CONFIG_H
/** EXI stream - Option Byte Array */
#define BYTE_ARRAY 1
/** EXI stream - Option File */
#define FILE_STREAM 2
/** \brief EXI stream
*
* Byte array or file
* */
#define EXI_STREAM BYTE_ARRAY
/** Memory allocation - static */
#define STATIC_ALLOCATION 1
/** Memory allocation - dynamic */
#define DYNAMIC_ALLOCATION 2
/** */
/** \brief Memory allocation mode
*
* static or dynamic memory allocation
* */
#define MEMORY_ALLOCATION STATIC_ALLOCATION
/** Maximum number of cascading elements, XML tree depth */
#define EXI_ELEMENT_STACK_SIZE 24
#endif /* EXI_CONFIG_H */
#ifdef __cplusplus
}
#endif

View file

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

View file

@ -0,0 +1,62 @@
/*
* Copyright (C) 2007-2013 Siemens AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************
*
* @author Daniel.Peintner.EXT@siemens.com
* @version 0.8
* @contact Joerg.Heuer@siemens.com
*
* <p>Code generated by EXIdizer.com</p>
* <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
*
*
********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "EXITypes.h"
/**
* \file EXIHeaderDecoder.h
* \brief EXI Header Decoder
*
*/
#ifndef EXI_HEADER_DECODER_H
#define EXI_HEADER_DECODER_H
/**
* \brief Reads EXI header
*
* \param stream Input Stream
* \return Error-Code <> 0
*
*/
int readEXIHeader(bitstream_t* stream);
#endif
#ifdef __cplusplus
}
#endif

View file

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

View file

@ -0,0 +1,63 @@
/*
* Copyright (C) 2007-2013 Siemens AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*******************************************************************
*
* @author Daniel.Peintner.EXT@siemens.com
* @version 0.8
* @contact Joerg.Heuer@siemens.com
*
* <p>Code generated by EXIdizer.com</p>
* <p>Schema: input/test_v2g/V2G_CI_MsgDef.xsd</p>
*
*
********************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "EXITypes.h"
/**
* \file EXIHeaderEncoder.h
* \brief EXI Header Encoder
*
*/
#ifndef EXI_HEADER_ENCODER_H
#define EXI_HEADER_ENCODER_H
/**
* \brief Writes EXI header
*
* \param stream Output Stream
* \return Error-Code <> 0
*
*/
int writeEXIHeader(bitstream_t* stream);
#endif
#ifdef __cplusplus
}
#endif

96
src/codec/EXIOptions.h Normal file
View file

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

557
src/codec/EXITypes.h Normal file
View file

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

323
src/codec/EncoderChannel.h Normal file
View file

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

116
src/codec/ErrorCodes.h Normal file
View file

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

118
src/codec/MethodsBag.c Normal file
View file

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

70
src/codec/MethodsBag.h Normal file
View file

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

118
src/codec/StringNameTable.c Normal file
View file

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

119
src/codec/StringNameTable.h Normal file
View file

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

View file

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

View file

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

95
src/codec/UCSString.c Normal file
View file

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

78
src/codec/UCSString.h Normal file
View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

604
src/codec/main_codec.c Normal file
View file

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

3167
src/codec/v2gEXICoder.c Normal file

File diff suppressed because one or more lines are too long

74
src/codec/v2gEXICoder.h Normal file
View file

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

15616
src/codec/v2gEXIDecoder.c Normal file

File diff suppressed because one or more lines are too long

225
src/codec/v2gEXIDecoder.h Normal file
View file

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

13891
src/codec/v2gEXIEncoder.c Normal file

File diff suppressed because one or more lines are too long

274
src/codec/v2gEXIEncoder.h Normal file
View file

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

View file

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

View file

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

View file

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

989
src/codec/v2gQNames.c Normal file
View file

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

77
src/codec/v2gQNames.h Normal file
View file

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

692
src/service/v2g_dataTypes.c Normal file
View file

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

1681
src/service/v2g_dataTypes.h Normal file

File diff suppressed because it is too large Load diff

83
src/service/v2g_service.h Normal file
View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

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

View file

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

192
src/test/evse_server.c Normal file
View file

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

33
src/test/evse_server.h Normal file
View file

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

View file

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

Some files were not shown because too many files have changed in this diff Show more