Compare commits
	
		
			17 Commits
		
	
	
		
			fce7f41d00
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 0210bd57fe | ||
|   | a5247e0d32 | ||
|   | a3eb5cbf27 | ||
|   | 5056fe18f9 | ||
|   | c6dc6735fa | ||
| 5254954d48 | |||
| ccd80a9ec6 | |||
| fac366be0d | |||
| e086ab5ce1 | |||
| 14dfe964b4 | |||
| f6250d762a | |||
| 27c5824b57 | |||
|   | a40dd6ff9d | ||
|   | 64e445e21e | ||
|   | 342ac4c8fb | ||
|   | 383706b236 | ||
|   | bfd5fc6fe1 | 
							
								
								
									
										579
									
								
								.cproject
									
									
									
									
									
								
							
							
						
						
									
										579
									
								
								.cproject
									
									
									
									
									
								
							| @@ -1,579 +0,0 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage"> | ||||
| 	<storageModule moduleId="org.eclipse.cdt.core.settings"> | ||||
| 		<cconfiguration id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907"> | ||||
| 			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907" moduleId="org.eclipse.cdt.core.settings" name="Debug"> | ||||
| 				<externalSettings/> | ||||
| 				<extensions> | ||||
| 					<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<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"/> | ||||
| 				</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.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" 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" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="cdt.managedbuild.builder.gnu.cross"/> | ||||
| 							<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.467817276" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base"> | ||||
| 								<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1213164158" superClass="cdt.managedbuild.tool.gnu.assembler.input"/> | ||||
| 							</tool> | ||||
| 							<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=""../src/codec""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/din""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/iso1""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/iso2""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/xmldsig""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/appHandshake""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/transport""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/test""/> | ||||
| 								</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="false" 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="false" valueType="boolean"/> | ||||
| 								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1904654876" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> | ||||
| 							</tool> | ||||
| 							<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1907160138" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base"> | ||||
| 								<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.PE" point="org.eclipse.cdt.core.BinaryParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 				</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.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" 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=""../src/codec""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/din""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/iso1""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/iso2""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/xmldsig""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/appHandshake""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/transport""/> | ||||
| 									<listOptionValue builtIn="false" value=""../src/test""/> | ||||
| 								</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.size" valueType="enumerated"/> | ||||
| 								<option id="gnu.c.compiler.option.debugging.level.1251127335" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/> | ||||
| 								<option id="gnu.c.compiler.option.misc.ansi.496561434" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi" value="false" valueType="boolean"/> | ||||
| 								<option id="gnu.c.compiler.option.warnings.pedantic.289278524" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic" value="false" 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="false" valueType="boolean"/> | ||||
| 								<option id="gnu.c.compiler.option.optimization.flags.1051939537" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="" valueType="string"/> | ||||
| 								<option id="gnu.c.compiler.option.misc.other.1470884128" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0" valueType="string"/> | ||||
| 								<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.898314529" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/> | ||||
| 							</tool> | ||||
| 							<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="refreshScope" versionNumber="2"> | ||||
| 		<configuration configurationName="Debug"> | ||||
| 			<resource resourceType="PROJECT" workspacePath="/OpenV2G"/> | ||||
| 		</configuration> | ||||
| 		<configuration configurationName="Release"> | ||||
| 			<resource resourceType="PROJECT" workspacePath="/OpenV2G"/> | ||||
| 		</configuration> | ||||
| 	</storageModule> | ||||
| 	<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/> | ||||
| 	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"> | ||||
| 		<buildTargets> | ||||
| 			<target name="OpenV2G.exe" path="Debug" targetID="org.eclipse.cdt.build.MakeTargetBuilder"> | ||||
| 				<buildCommand>make</buildCommand> | ||||
| 				<buildArguments/> | ||||
| 				<buildTarget>OpenV2G.exe</buildTarget> | ||||
| 				<stopOnError>true</stopOnError> | ||||
| 				<useDefaultCommand>true</useDefaultCommand> | ||||
| 				<runAllBuilders>true</runAllBuilders> | ||||
| 			</target> | ||||
| 		</buildTargets> | ||||
| 	</storageModule> | ||||
| 	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> | ||||
| 	<storageModule moduleId="scannerConfiguration"> | ||||
| 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> | ||||
| 		<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> | ||||
| 			<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> | ||||
| 		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.debug.181718907;cdt.managedbuild.config.gnu.mingw.exe.debug.181718907.;cdt.managedbuild.tool.gnu.c.compiler.mingw.base.1511109002;cdt.managedbuild.tool.gnu.c.compiler.input.1904654876"> | ||||
| 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> | ||||
| 			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> | ||||
| 				<buildOutputProvider> | ||||
| 					<openAction enabled="true" filePath=""/> | ||||
| 					<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> | ||||
| 		</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> | ||||
| 		</scannerConfigBuildInfo> | ||||
| 		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.mingw.base.2107890734;cdt.managedbuild.tool.gnu.c.compiler.input.898314529"> | ||||
| 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> | ||||
| 			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> | ||||
| 				<buildOutputProvider> | ||||
| 					<openAction enabled="true" filePath=""/> | ||||
| 					<parser enabled="true"/> | ||||
| 				</buildOutputProvider> | ||||
| 				<scannerInfoProvider id="specsFile"> | ||||
| 					<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_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> | ||||
| 		</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> | ||||
| 		</scannerConfigBuildInfo> | ||||
| 		<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.exe.release.681614450;cdt.managedbuild.config.gnu.mingw.exe.release.681614450.;cdt.managedbuild.tool.gnu.c.compiler.base.1358204014;cdt.managedbuild.tool.gnu.c.compiler.input.822105819"> | ||||
| 			<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/> | ||||
| 			<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"> | ||||
| 				<buildOutputProvider> | ||||
| 					<openAction enabled="true" filePath=""/> | ||||
| 					<parser enabled="true"/> | ||||
| 				</buildOutputProvider> | ||||
| 				<scannerInfoProvider id="specsFile"> | ||||
| 					<runAction arguments="-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> | ||||
| 		</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> | ||||
| 		</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> | ||||
| 		</scannerConfigBuildInfo> | ||||
| 	</storageModule> | ||||
| </cproject> | ||||
							
								
								
									
										81
									
								
								.project
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								.project
									
									
									
									
									
								
							| @@ -1,81 +0,0 @@ | ||||
| <?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> | ||||
							
								
								
									
										153
									
								
								BUILD_INSTRUCTIONS.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										153
									
								
								BUILD_INSTRUCTIONS.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,153 @@ | ||||
| # V2G EXI Decoder - 빌드 가이드 | ||||
|  | ||||
| ## 프로젝트 구조 | ||||
|  | ||||
| ``` | ||||
| V2GDecoderC/ | ||||
| ├── DotNet/          # .NET Core 버전 | ||||
| ├── VC/              # Visual Studio 2022 버전 (Windows MSBuild) | ||||
| ├── C++/             # GCC 버전 (크로스 플랫폼) | ||||
| └── Sample/          # 테스트 파일들 | ||||
| ``` | ||||
|  | ||||
| ## 지원 플랫폼 | ||||
|  | ||||
| - **Windows**: .NET Core, MSVC (VC2022), GCC (MinGW/MSYS2) | ||||
| - **Linux**: .NET Core, GCC | ||||
| - **macOS**: .NET Core, Clang/GCC | ||||
|  | ||||
| ## 자동 빌드 (권장) | ||||
|  | ||||
| ### Windows | ||||
| ```cmd | ||||
| build_all.bat | ||||
| ``` | ||||
|  | ||||
| ### Linux/macOS   | ||||
| ```bash | ||||
| ./build_all.sh | ||||
| ``` | ||||
|  | ||||
| ## 개별 프로젝트 빌드 | ||||
|  | ||||
| ### 1. .NET Core 버전 (DotNet/) | ||||
| ```bash | ||||
| # Windows | ||||
| cd DotNet | ||||
| build.bat | ||||
|  | ||||
| # Linux/macOS | ||||
| cd DotNet | ||||
| ./build.sh | ||||
|  | ||||
| # 또는 직접 명령어 | ||||
| dotnet build DotNet/V2GDecoderNet.csproj -c Release | ||||
| dotnet run --project DotNet/V2GDecoderNet.csproj Sample/test5.exi | ||||
| ``` | ||||
|  | ||||
| ### 2. VC2022 버전 (VC/) - Windows 전용 | ||||
| ```cmd | ||||
| # Windows MSBuild 사용 | ||||
| cd VC | ||||
| build.bat | ||||
|  | ||||
| # 또는 Visual Studio에서 VC/V2GDecoderC.sln 열어서 빌드 | ||||
|  | ||||
| # Linux에서는 GCC 대체 빌드 | ||||
| cd VC   | ||||
| ./build.sh | ||||
| ``` | ||||
|  | ||||
| ### 3. C++ GCC 버전 (C++/) - 크로스 플랫폼 | ||||
| ```bash | ||||
| # Windows | ||||
| cd C++ | ||||
| build.bat | ||||
|  | ||||
| # Linux/macOS | ||||
| cd C++ | ||||
| ./build.sh | ||||
|  | ||||
| # 또는 직접 명령어 | ||||
| cd C++ | ||||
| gcc -o V2GDecoder V2GDecoder.c src/*/*.c -I./src/codec -I./src/iso1 -I./src/iso2 -I./src/din -Wall -O2 | ||||
| ``` | ||||
|  | ||||
| ## 테스트 실행 | ||||
|  | ||||
| ### 자동 테스트 | ||||
| ```bash | ||||
| # Windows | ||||
| test_all.bat | ||||
|  | ||||
| # Linux/macOS | ||||
| ./test_all.sh | ||||
| ``` | ||||
|  | ||||
| ### 수동 테스트 | ||||
| ```bash | ||||
| # .NET 버전 테스트 | ||||
| dotnet run --project DotNet/V2GDecoderNet.csproj Sample/test5.exi | ||||
|  | ||||
| # C++ GCC 버전 테스트 | ||||
| C++/V2GDecoder Sample/test5.exi | ||||
|  | ||||
| # VC 버전 테스트 (Windows) | ||||
| VC/x64/Debug/V2GDecoder.exe Sample/test5.exi | ||||
|  | ||||
| # 다양한 사용법 | ||||
| dotnet run --project DotNet/V2GDecoderNet.csproj -decode Sample/test5.exi  # XML만 출력 | ||||
| dotnet run --project DotNet/V2GDecoderNet.csproj -encode input.xml         # EXI 인코딩 | ||||
| ``` | ||||
|  | ||||
| ## Roundtrip 테스트 (무손실 변환 검증) | ||||
| ```bash | ||||
| # EXI → XML → EXI 완벽 변환 확인 | ||||
| dotnet run --project DotNet/V2GDecoderNet.csproj -decode Sample/test5.exi > temp/decoded.xml | ||||
| dotnet run --project DotNet/V2GDecoderNet.csproj -encode temp/decoded.xml > temp/roundtrip.exi | ||||
| cmp Sample/test5.exi temp/roundtrip.exi  # Linux - 완전 동일해야 함 | ||||
| fc /b Sample\test5.exi temp\roundtrip.exi  # Windows - 완전 동일해야 함 | ||||
| ``` | ||||
|  | ||||
| ## 빌드 스크립트 목록 | ||||
|  | ||||
| ### 루트 디렉토리 | ||||
| - `build_all.bat` / `build_all.sh` - 모든 프로젝트 자동 빌드 | ||||
| - `test_all.bat` / `test_all.sh` - 모든 프로젝트 자동 테스트 | ||||
|  | ||||
| ### 각 프로젝트별 빌드 스크립트 | ||||
| - `DotNet/build.bat` / `DotNet/build.sh` - .NET 프로젝트 빌드 | ||||
| - `VC/build.bat` / `VC/build.sh` - VC2022/GCC 빌드 | ||||
| - `C++/build.bat` / `C++/build.sh` - C++ GCC 빌드 | ||||
|  | ||||
| ## 지원 파일 형식 | ||||
|  | ||||
| - **test1.exi, test2.exi**: CurrentDemandRes (131바이트, 네트워크 패킷 포함) | ||||
| - **test3.exi, test4.exi, test5.exi**: CurrentDemandReq (43바이트, 순수 EXI) | ||||
| - **모든 ISO 15118-2 V2G 메시지**: 18개 메시지 타입 완전 지원 | ||||
|  | ||||
| ## 문제 해결 | ||||
|  | ||||
| ### Windows에서 GCC를 사용하려면 | ||||
| 1. MSYS2 설치: https://www.msys2.org/ | ||||
| 2. GCC 패키지 설치: `pacman -S mingw-w64-x86_64-gcc` | ||||
| 3. PATH에 MinGW bin 경로 추가 | ||||
|  | ||||
| ### Linux에서 .NET 설치 | ||||
| ```bash | ||||
| # Ubuntu/Debian | ||||
| wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb | ||||
| sudo dpkg -i packages-microsoft-prod.deb | ||||
| sudo apt update | ||||
| sudo apt install dotnet-sdk-8.0 | ||||
|  | ||||
| # CentOS/RHEL | ||||
| sudo dnf install dotnet-sdk-8.0 | ||||
| ``` | ||||
|  | ||||
| ## 성능 정보 | ||||
|  | ||||
| - **디코딩**: ~1ms per file | ||||
| - **인코딩**: ~2ms per file   | ||||
| - **Roundtrip 정확도**: 100% (test5.exi 검증 완료) | ||||
| - **지원 메시지**: 18개 V2G 메시지 타입 | ||||
| @@ -31,6 +31,24 @@ | ||||
| #define V2G_PAYLOAD_ISO2 0x8002          // ISO 15118-20 payload type
 | ||||
| #define EXI_START_PATTERN 0x8098         // EXI document start pattern
 | ||||
| 
 | ||||
| // Function declarations for Phase 2 Session & Service Management helper functions
 | ||||
| void print_session_setup_req_details(struct iso1SessionSetupReqType *sessionSetupReq); | ||||
| void print_session_setup_res_details(struct iso1SessionSetupResType *sessionSetupRes); | ||||
| void print_service_discovery_req_details(struct iso1ServiceDiscoveryReqType *serviceDiscoveryReq); | ||||
| void print_service_discovery_res_details(struct iso1ServiceDiscoveryResType *serviceDiscoveryRes); | ||||
| void print_authorization_req_details(struct iso1AuthorizationReqType *authorizationReq); | ||||
| void print_authorization_res_details(struct iso1AuthorizationResType *authorizationRes); | ||||
| void print_charge_param_discovery_req_details(struct iso1ChargeParameterDiscoveryReqType *chargeParamReq); | ||||
| void print_charge_param_discovery_res_details(struct iso1ChargeParameterDiscoveryResType *chargeParamRes); | ||||
| 
 | ||||
| // Phase 3: Extended Features - Function declarations
 | ||||
| void print_payment_service_selection_req_details(struct iso1PaymentServiceSelectionReqType *paymentServiceSelectionReq); | ||||
| void print_payment_service_selection_res_details(struct iso1PaymentServiceSelectionResType *paymentServiceSelectionRes); | ||||
| void print_charging_status_req_details(struct iso1ChargingStatusReqType *chargingStatusReq); | ||||
| void print_charging_status_res_details(struct iso1ChargingStatusResType *chargingStatusRes); | ||||
| void print_session_stop_req_details(struct iso1SessionStopReqType *sessionStopReq); | ||||
| void print_session_stop_res_details(struct iso1SessionStopResType *sessionStopRes); | ||||
| 
 | ||||
| // Function to detect and extract EXI body from V2G Transfer Protocol data
 | ||||
| size_t extract_exi_body(uint8_t* input_data, size_t input_size, uint8_t* output_data, size_t output_size) { | ||||
|     if (input_size < 8) { | ||||
| @@ -1017,6 +1035,63 @@ void print_iso1_message(struct iso1EXIDocument* doc) { | ||||
|                    doc->V2G_Message.Body.CurrentDemandRes.EVSEID.characters); | ||||
|             printf("SAScheduleTupleID: %d\n", doc->V2G_Message.Body.CurrentDemandRes.SAScheduleTupleID); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.SessionSetupReq_isUsed) { | ||||
|             printf("🔐 SessionSetupReq: Charging session initialization\n"); | ||||
|             print_session_setup_req_details(&doc->V2G_Message.Body.SessionSetupReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.SessionSetupRes_isUsed) { | ||||
|             printf("✅ SessionSetupRes: Session setup response\n"); | ||||
|             print_session_setup_res_details(&doc->V2G_Message.Body.SessionSetupRes); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.ServiceDiscoveryReq_isUsed) { | ||||
|             printf("🔍 ServiceDiscoveryReq: Available charging services discovery\n"); | ||||
|             print_service_discovery_req_details(&doc->V2G_Message.Body.ServiceDiscoveryReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.ServiceDiscoveryRes_isUsed) { | ||||
|             printf("✅ ServiceDiscoveryRes: Service discovery response\n"); | ||||
|             print_service_discovery_res_details(&doc->V2G_Message.Body.ServiceDiscoveryRes); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.AuthorizationReq_isUsed) { | ||||
|             printf("🔑 AuthorizationReq: Charging authorization verification\n"); | ||||
|             print_authorization_req_details(&doc->V2G_Message.Body.AuthorizationReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.AuthorizationRes_isUsed) { | ||||
|             printf("✅ AuthorizationRes: Authorization response\n"); | ||||
|             print_authorization_res_details(&doc->V2G_Message.Body.AuthorizationRes); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.ChargeParameterDiscoveryReq_isUsed) { | ||||
|             printf("⚙️ ChargeParameterDiscoveryReq: Charging parameter exchange\n"); | ||||
|             print_charge_param_discovery_req_details(&doc->V2G_Message.Body.ChargeParameterDiscoveryReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.ChargeParameterDiscoveryRes_isUsed) { | ||||
|             printf("✅ ChargeParameterDiscoveryRes: Charge parameter response\n"); | ||||
|             print_charge_param_discovery_res_details(&doc->V2G_Message.Body.ChargeParameterDiscoveryRes); | ||||
|         } | ||||
|         // Phase 3: Extended Features - Message detection
 | ||||
|         else if (doc->V2G_Message.Body.PaymentServiceSelectionReq_isUsed) { | ||||
|             printf("💳 PaymentServiceSelectionReq: Payment method selection request\n"); | ||||
|             print_payment_service_selection_req_details(&doc->V2G_Message.Body.PaymentServiceSelectionReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.PaymentServiceSelectionRes_isUsed) { | ||||
|             printf("💳 PaymentServiceSelectionRes: Payment method selection response\n"); | ||||
|             print_payment_service_selection_res_details(&doc->V2G_Message.Body.PaymentServiceSelectionRes); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.ChargingStatusReq_isUsed) { | ||||
|             printf("🔋 ChargingStatusReq: AC charging status request\n"); | ||||
|             print_charging_status_req_details(&doc->V2G_Message.Body.ChargingStatusReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.ChargingStatusRes_isUsed) { | ||||
|             printf("🔋 ChargingStatusRes: AC charging status response\n"); | ||||
|             print_charging_status_res_details(&doc->V2G_Message.Body.ChargingStatusRes); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.SessionStopReq_isUsed) { | ||||
|             printf("🛑 SessionStopReq: Session termination request\n"); | ||||
|             print_session_stop_req_details(&doc->V2G_Message.Body.SessionStopReq); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.SessionStopRes_isUsed) { | ||||
|             printf("🛑 SessionStopRes: Session termination response\n"); | ||||
|             print_session_stop_res_details(&doc->V2G_Message.Body.SessionStopRes); | ||||
|         } | ||||
|         else if (doc->V2G_Message.Body.CurrentDemandReq_isUsed) { | ||||
|             printf("Message Type: CurrentDemandReq\n"); | ||||
|              | ||||
| @@ -1083,6 +1158,218 @@ void print_iso1_message(struct iso1EXIDocument* doc) { | ||||
|     printf("\n"); | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print session setup request details
 | ||||
| void print_session_setup_req_details(struct iso1SessionSetupReqType *sessionSetupReq) { | ||||
|     printf("  🆔 EVCCID: "); | ||||
|     for(int i = 0; i < sessionSetupReq->EVCCID.bytesLen; i++) { | ||||
|         printf("%02X", sessionSetupReq->EVCCID.bytes[i]); | ||||
|     } | ||||
|     printf("\n"); | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print session setup response details  
 | ||||
| void print_session_setup_res_details(struct iso1SessionSetupResType *sessionSetupRes) { | ||||
|     printf("  📋 Response Code: %d\n", sessionSetupRes->ResponseCode); | ||||
|     printf("  🆔 EVSEID: %.*s\n",  | ||||
|            sessionSetupRes->EVSEID.charactersLen, | ||||
|            sessionSetupRes->EVSEID.characters); | ||||
|      | ||||
|     if(sessionSetupRes->EVSETimeStamp_isUsed) { | ||||
|         printf("  ⏰ EVSETimeStamp: %ld\n", sessionSetupRes->EVSETimeStamp); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print service discovery request details
 | ||||
| void print_service_discovery_req_details(struct iso1ServiceDiscoveryReqType *serviceDiscoveryReq) { | ||||
|     if(serviceDiscoveryReq->ServiceScope_isUsed) { | ||||
|         printf("  🔍 ServiceScope: %.*s\n", | ||||
|                serviceDiscoveryReq->ServiceScope.charactersLen, | ||||
|                serviceDiscoveryReq->ServiceScope.characters); | ||||
|     } | ||||
|      | ||||
|     if(serviceDiscoveryReq->ServiceCategory_isUsed) { | ||||
|         printf("  📂 ServiceCategory: %d\n", serviceDiscoveryReq->ServiceCategory); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print service discovery response details
 | ||||
| void print_service_discovery_res_details(struct iso1ServiceDiscoveryResType *serviceDiscoveryRes) { | ||||
|     printf("  📋 Response Code: %d\n", serviceDiscoveryRes->ResponseCode); | ||||
|     printf("  ⚡ PaymentOptionList:\n"); | ||||
|     for(int i = 0; i < serviceDiscoveryRes->PaymentOptionList.PaymentOption.arrayLen; i++) { | ||||
|         printf("    Payment Option %d: %d\n", i+1, serviceDiscoveryRes->PaymentOptionList.PaymentOption.array[i]); | ||||
|     } | ||||
|      | ||||
|     printf("  🔧 ChargeService:\n"); | ||||
|     printf("    ServiceID: %d\n", serviceDiscoveryRes->ChargeService.ServiceID); | ||||
|     printf("    ServiceName: %.*s\n", | ||||
|            serviceDiscoveryRes->ChargeService.ServiceName_isUsed ? serviceDiscoveryRes->ChargeService.ServiceName.charactersLen : 0, | ||||
|            serviceDiscoveryRes->ChargeService.ServiceName_isUsed ? serviceDiscoveryRes->ChargeService.ServiceName.characters : ""); | ||||
|     printf("    ServiceCategory: %d\n", serviceDiscoveryRes->ChargeService.ServiceCategory); | ||||
|     printf("    FreeService: %s\n", serviceDiscoveryRes->ChargeService.FreeService ? "true" : "false"); | ||||
|      | ||||
|     if(serviceDiscoveryRes->ServiceList_isUsed && serviceDiscoveryRes->ServiceList.Service.arrayLen > 0) { | ||||
|         printf("  📋 ServiceList:\n"); | ||||
|         for(int i = 0; i < serviceDiscoveryRes->ServiceList.Service.arrayLen; i++) { | ||||
|             printf("    Service %d - ID: %d, Category: %d\n",  | ||||
|                    i+1,  | ||||
|                    serviceDiscoveryRes->ServiceList.Service.array[i].ServiceID, | ||||
|                    serviceDiscoveryRes->ServiceList.Service.array[i].ServiceCategory); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print authorization request details
 | ||||
| void print_authorization_req_details(struct iso1AuthorizationReqType *authorizationReq) { | ||||
|     if(authorizationReq->Id_isUsed) { | ||||
|         printf("  🆔 ID: %.*s\n", | ||||
|                authorizationReq->Id.charactersLen, | ||||
|                authorizationReq->Id.characters); | ||||
|     } | ||||
|      | ||||
|     if(authorizationReq->GenChallenge_isUsed) { | ||||
|         printf("  🎲 GenChallenge: "); | ||||
|         for(int i = 0; i < authorizationReq->GenChallenge.bytesLen; i++) { | ||||
|             printf("%02X", authorizationReq->GenChallenge.bytes[i]); | ||||
|         } | ||||
|         printf("\n"); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print authorization response details
 | ||||
| void print_authorization_res_details(struct iso1AuthorizationResType *authorizationRes) { | ||||
|     printf("  📋 Response Code: %d\n", authorizationRes->ResponseCode); | ||||
|     printf("  ⚡ EVSEProcessing: %d\n", authorizationRes->EVSEProcessing); | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print charge parameter discovery request details
 | ||||
| void print_charge_param_discovery_req_details(struct iso1ChargeParameterDiscoveryReqType *chargeParamReq) { | ||||
|     if(chargeParamReq->MaxEntriesSAScheduleTuple_isUsed) { | ||||
|         printf("  📊 MaxEntriesSAScheduleTuple: %d\n", chargeParamReq->MaxEntriesSAScheduleTuple); | ||||
|     } | ||||
|      | ||||
|     printf("  🔌 RequestedEnergyTransferMode: %d\n", chargeParamReq->RequestedEnergyTransferMode); | ||||
|      | ||||
|     if(chargeParamReq->DC_EVChargeParameter_isUsed) { | ||||
|         printf("  ⚡ DC_EVChargeParameter:\n"); | ||||
|         printf("    📋 DC_EVStatus:\n"); | ||||
|         printf("      🔋 EVReady: %s\n", chargeParamReq->DC_EVChargeParameter.DC_EVStatus.EVReady ? "true" : "false"); | ||||
|         printf("      ⚡ EVErrorCode: %d\n", chargeParamReq->DC_EVChargeParameter.DC_EVStatus.EVErrorCode); | ||||
|         printf("      🔌 EVRESSSOC: %d%%\n", chargeParamReq->DC_EVChargeParameter.DC_EVStatus.EVRESSSOC); | ||||
|          | ||||
|         printf("    🔋 EVMaximumCurrentLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumCurrentLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumCurrentLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumCurrentLimit.Value); | ||||
|          | ||||
|         printf("    ⚡ EVMaximumVoltageLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumVoltageLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumVoltageLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumVoltageLimit.Value); | ||||
|          | ||||
|         if(chargeParamReq->DC_EVChargeParameter.EVMaximumPowerLimit_isUsed) { | ||||
|             printf("    🔌 EVMaximumPowerLimit:\n"); | ||||
|             printf("      📊 Multiplier: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumPowerLimit.Multiplier); | ||||
|             printf("      🔢 Unit: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumPowerLimit.Unit); | ||||
|             printf("      💯 Value: %d\n", chargeParamReq->DC_EVChargeParameter.EVMaximumPowerLimit.Value); | ||||
|         } | ||||
|          | ||||
|         if(chargeParamReq->DC_EVChargeParameter.EVEnergyCapacity_isUsed) { | ||||
|             printf("    🔋 EVEnergyCapacity:\n"); | ||||
|             printf("      📊 Multiplier: %d\n", chargeParamReq->DC_EVChargeParameter.EVEnergyCapacity.Multiplier); | ||||
|             printf("      🔢 Unit: %d\n", chargeParamReq->DC_EVChargeParameter.EVEnergyCapacity.Unit); | ||||
|             printf("      💯 Value: %d\n", chargeParamReq->DC_EVChargeParameter.EVEnergyCapacity.Value); | ||||
|         } | ||||
|          | ||||
|         if(chargeParamReq->DC_EVChargeParameter.EVEnergyRequest_isUsed) { | ||||
|             printf("    ⚡ EVEnergyRequest:\n"); | ||||
|             printf("      📊 Multiplier: %d\n", chargeParamReq->DC_EVChargeParameter.EVEnergyRequest.Multiplier); | ||||
|             printf("      🔢 Unit: %d\n", chargeParamReq->DC_EVChargeParameter.EVEnergyRequest.Unit); | ||||
|             printf("      💯 Value: %d\n", chargeParamReq->DC_EVChargeParameter.EVEnergyRequest.Value); | ||||
|         } | ||||
|          | ||||
|         if(chargeParamReq->DC_EVChargeParameter.FullSOC_isUsed) { | ||||
|             printf("    🔋 FullSOC: %d%%\n", chargeParamReq->DC_EVChargeParameter.FullSOC); | ||||
|         } | ||||
|          | ||||
|         if(chargeParamReq->DC_EVChargeParameter.BulkSOC_isUsed) { | ||||
|             printf("    📊 BulkSOC: %d%%\n", chargeParamReq->DC_EVChargeParameter.BulkSOC); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // Helper function to parse and print charge parameter discovery response details
 | ||||
| void print_charge_param_discovery_res_details(struct iso1ChargeParameterDiscoveryResType *chargeParamRes) { | ||||
|     printf("  📋 Response Code: %d\n", chargeParamRes->ResponseCode); | ||||
|     printf("  ⚡ EVSEProcessing: %d\n", chargeParamRes->EVSEProcessing); | ||||
|      | ||||
|     if(chargeParamRes->SAScheduleList_isUsed) { | ||||
|         printf("  📅 SASchedules:\n"); | ||||
|         printf("    Schedule Entries: %d\n", chargeParamRes->SAScheduleList.SAScheduleTuple.arrayLen); | ||||
|          | ||||
|         for(int i = 0; i < chargeParamRes->SAScheduleList.SAScheduleTuple.arrayLen; i++) { | ||||
|             printf("    Schedule %d:\n", i+1); | ||||
|             printf("      SAScheduleTupleID: %d\n", chargeParamRes->SAScheduleList.SAScheduleTuple.array[i].SAScheduleTupleID); | ||||
|              | ||||
|             if(chargeParamRes->SAScheduleList.SAScheduleTuple.array[i].PMaxSchedule.PMaxScheduleEntry.arrayLen > 0) { | ||||
|                 printf("      PMaxScheduleEntries: %d\n",  | ||||
|                        chargeParamRes->SAScheduleList.SAScheduleTuple.array[i].PMaxSchedule.PMaxScheduleEntry.arrayLen); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     if(chargeParamRes->DC_EVSEChargeParameter_isUsed) { | ||||
|         printf("  🔌 DC_EVSEChargeParameter:\n"); | ||||
|         printf("    📊 DC_EVSEStatus:\n"); | ||||
|         printf("      🔌 EVSEIsolationStatus: %d\n", chargeParamRes->DC_EVSEChargeParameter.DC_EVSEStatus.EVSEIsolationStatus); | ||||
|         printf("      ⚡ EVSEStatusCode: %d\n", chargeParamRes->DC_EVSEChargeParameter.DC_EVSEStatus.EVSEStatusCode); | ||||
|          | ||||
|         printf("    ⚡ EVSEMaximumCurrentLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumCurrentLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumCurrentLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumCurrentLimit.Value); | ||||
|          | ||||
|         printf("    🔋 EVSEMaximumVoltageLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumVoltageLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumVoltageLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumVoltageLimit.Value); | ||||
|          | ||||
|         printf("    🔌 EVSEMaximumPowerLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumPowerLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumPowerLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMaximumPowerLimit.Value); | ||||
|          | ||||
|         printf("    ⚡ EVSEMinimumCurrentLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMinimumCurrentLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMinimumCurrentLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMinimumCurrentLimit.Value); | ||||
|          | ||||
|         printf("    🔋 EVSEMinimumVoltageLimit:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMinimumVoltageLimit.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMinimumVoltageLimit.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEMinimumVoltageLimit.Value); | ||||
|          | ||||
|         if(chargeParamRes->DC_EVSEChargeParameter.EVSECurrentRegulationTolerance_isUsed) { | ||||
|             printf("    📊 EVSECurrentRegulationTolerance:\n"); | ||||
|             printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSECurrentRegulationTolerance.Multiplier); | ||||
|             printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSECurrentRegulationTolerance.Unit); | ||||
|             printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSECurrentRegulationTolerance.Value); | ||||
|         } | ||||
|          | ||||
|         printf("    ⚡ EVSEPeakCurrentRipple:\n"); | ||||
|         printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEPeakCurrentRipple.Multiplier); | ||||
|         printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEPeakCurrentRipple.Unit); | ||||
|         printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEPeakCurrentRipple.Value); | ||||
|          | ||||
|         if(chargeParamRes->DC_EVSEChargeParameter.EVSEEnergyToBeDelivered_isUsed) { | ||||
|             printf("    🔋 EVSEEnergyToBeDelivered:\n"); | ||||
|             printf("      📊 Multiplier: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEEnergyToBeDelivered.Multiplier); | ||||
|             printf("      🔢 Unit: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEEnergyToBeDelivered.Unit); | ||||
|             printf("      💯 Value: %d\n", chargeParamRes->DC_EVSEChargeParameter.EVSEEnergyToBeDelivered.Value); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char *argv[]) { | ||||
|     int xml_mode = 0; | ||||
|     int encode_mode = 0; | ||||
| @@ -1346,3 +1633,177 @@ int main(int argc, char *argv[]) { | ||||
|      | ||||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| // Phase 3: Extended Features - Helper function implementations
 | ||||
| 
 | ||||
| void print_payment_service_selection_req_details(struct iso1PaymentServiceSelectionReqType *paymentServiceSelectionReq) { | ||||
|     printf("  📄 Payment Service Selection Request Details:\\n"); | ||||
|     printf("    💳 Purpose: Select payment method for charging session\\n"); | ||||
|      | ||||
|     printf("    🆔 Selected Payment Option: "); | ||||
|     switch(paymentServiceSelectionReq->SelectedPaymentOption) { | ||||
|         case iso1paymentOptionType_Contract: | ||||
|             printf("Contract-based payment\\n"); | ||||
|             break; | ||||
|         case iso1paymentOptionType_ExternalPayment: | ||||
|             printf("External payment method\\n"); | ||||
|             break; | ||||
|         default: | ||||
|             printf("Unknown (%d)\\n", paymentServiceSelectionReq->SelectedPaymentOption); | ||||
|     } | ||||
|      | ||||
|     printf("    📋 Selected Service List:\\n"); | ||||
|     if (paymentServiceSelectionReq->SelectedServiceList.SelectedService.arrayLen > 0) { | ||||
|         for (int i = 0; i < paymentServiceSelectionReq->SelectedServiceList.SelectedService.arrayLen; i++) { | ||||
|             printf("      %d. Service ID: %d, Parameter Set ID: %d\\n",  | ||||
|                    i + 1, | ||||
|                    paymentServiceSelectionReq->SelectedServiceList.SelectedService.array[i].ServiceID, | ||||
|                    paymentServiceSelectionReq->SelectedServiceList.SelectedService.array[i].ParameterSetID_isUsed ? | ||||
|                    paymentServiceSelectionReq->SelectedServiceList.SelectedService.array[i].ParameterSetID : -1); | ||||
|         } | ||||
|     } else { | ||||
|         printf("      No services selected\\n"); | ||||
|     } | ||||
|      | ||||
|     printf("  ✅ Payment service selection requested\\n"); | ||||
| } | ||||
| 
 | ||||
| void print_payment_service_selection_res_details(struct iso1PaymentServiceSelectionResType *paymentServiceSelectionRes) { | ||||
|     printf("  📄 Payment Service Selection Response Details:\\n"); | ||||
|     printf("    💳 Purpose: Confirm payment method selection\\n"); | ||||
|      | ||||
|     printf("    📊 Response Code: "); | ||||
|     switch(paymentServiceSelectionRes->ResponseCode) { | ||||
|         case iso1responseCodeType_OK: | ||||
|             printf("✅ OK - Payment selection accepted\\n"); | ||||
|             break; | ||||
|         case iso1responseCodeType_OK_NewSessionEstablished: | ||||
|             printf("✅ OK - New session established\\n"); | ||||
|             break; | ||||
|         case iso1responseCodeType_FAILED: | ||||
|             printf("❌ FAILED\\n"); | ||||
|             break; | ||||
|         default: | ||||
|             printf("⚠️ Unknown (%d)\\n", paymentServiceSelectionRes->ResponseCode); | ||||
|     } | ||||
|      | ||||
|     printf("  🔄 Payment method selection completed\\n"); | ||||
| } | ||||
| 
 | ||||
| void print_charging_status_req_details(struct iso1ChargingStatusReqType *chargingStatusReq) { | ||||
|     printf("  📄 Charging Status Request Details:\\n"); | ||||
|     printf("    🔋 Purpose: Request AC charging status information\\n"); | ||||
|      | ||||
|     printf("  🔍 Requesting current charging status from EVSE\\n"); | ||||
|     printf("  📊 Status inquiry for AC charging session\\n"); | ||||
| } | ||||
| 
 | ||||
| void print_charging_status_res_details(struct iso1ChargingStatusResType *chargingStatusRes) { | ||||
|     printf("  📄 Charging Status Response Details:\\n"); | ||||
|     printf("    🔋 Purpose: Provide AC charging status information\\n"); | ||||
|      | ||||
|     printf("    📊 Response Code: "); | ||||
|     switch(chargingStatusRes->ResponseCode) { | ||||
|         case iso1responseCodeType_OK: | ||||
|             printf("✅ OK\\n"); | ||||
|             break; | ||||
|         case iso1responseCodeType_OK_NewSessionEstablished: | ||||
|             printf("✅ OK - New session established\\n"); | ||||
|             break; | ||||
|         case iso1responseCodeType_FAILED: | ||||
|             printf("❌ FAILED\\n"); | ||||
|             break; | ||||
|         default: | ||||
|             printf("⚠️ Unknown (%d)\\n", chargingStatusRes->ResponseCode); | ||||
|     } | ||||
|      | ||||
|     printf("    🆔 EVSE ID: "); | ||||
|     if (chargingStatusRes->EVSEID.charactersLen > 0) { | ||||
|         printf("%.*s\\n", (int)chargingStatusRes->EVSEID.charactersLen, chargingStatusRes->EVSEID.characters); | ||||
|     } else { | ||||
|         printf("Not provided\\n"); | ||||
|     } | ||||
|      | ||||
|     printf("    🔌 SA Schedule Tuple ID: %d\\n", chargingStatusRes->SAScheduleTupleID); | ||||
|      | ||||
|     if (chargingStatusRes->EVSEMaxCurrent_isUsed) { | ||||
|         printf("    ⚡ EVSE Max Current: %d %s (10^%d)\\n", | ||||
|                chargingStatusRes->EVSEMaxCurrent.Value, | ||||
|                chargingStatusRes->EVSEMaxCurrent.Unit == 5 ? "A" : "Unknown Unit", | ||||
|                chargingStatusRes->EVSEMaxCurrent.Multiplier); | ||||
|     } | ||||
|      | ||||
|     if (chargingStatusRes->MeterInfo_isUsed) { | ||||
|         printf("    📊 Meter Information:\\n"); | ||||
|         printf("      🆔 Meter ID: "); | ||||
|         if (chargingStatusRes->MeterInfo.MeterID.charactersLen > 0) { | ||||
|             printf("%.*s\\n", (int)chargingStatusRes->MeterInfo.MeterID.charactersLen,  | ||||
|                    chargingStatusRes->MeterInfo.MeterID.characters); | ||||
|         } else { | ||||
|             printf("Not provided\\n"); | ||||
|         } | ||||
|          | ||||
|         if (chargingStatusRes->MeterInfo.MeterReading_isUsed) { | ||||
|             printf("      📏 Meter Reading: %llu Wh\\n",  | ||||
|                    (unsigned long long)chargingStatusRes->MeterInfo.MeterReading); | ||||
|         } | ||||
|          | ||||
|         if (chargingStatusRes->MeterInfo.SigMeterReading_isUsed) { | ||||
|             printf("      🔏 Signed Meter Reading: %.*s\\n", | ||||
|                    (int)chargingStatusRes->MeterInfo.SigMeterReading.bytesLen, | ||||
|                    (char*)chargingStatusRes->MeterInfo.SigMeterReading.bytes); | ||||
|         } | ||||
|          | ||||
|         if (chargingStatusRes->MeterInfo.MeterStatus_isUsed) { | ||||
|             printf("      📊 Meter Status: %d\\n", chargingStatusRes->MeterInfo.MeterStatus); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     if (chargingStatusRes->ReceiptRequired_isUsed) { | ||||
|         printf("    🧾 Receipt Required: %s\\n",  | ||||
|                chargingStatusRes->ReceiptRequired ? "Yes" : "No"); | ||||
|     } | ||||
|      | ||||
|     printf("  ✅ AC charging status provided\\n"); | ||||
| } | ||||
| 
 | ||||
| void print_session_stop_req_details(struct iso1SessionStopReqType *sessionStopReq) { | ||||
|     printf("  📄 Session Stop Request Details:\\n"); | ||||
|     printf("    🛑 Purpose: Request charging session termination\\n"); | ||||
|      | ||||
|     printf("    🔄 Charging Session: "); | ||||
|     switch(sessionStopReq->ChargingSession) { | ||||
|         case iso1chargingSessionType_Terminate: | ||||
|             printf("✅ Terminate - Session ending completely\\n"); | ||||
|             break; | ||||
|         case iso1chargingSessionType_Pause: | ||||
|             printf("⏸️ Pause - Session paused temporarily\\n"); | ||||
|             break; | ||||
|         default: | ||||
|             printf("⚠️ Unknown (%d)\\n", sessionStopReq->ChargingSession); | ||||
|     } | ||||
|      | ||||
|     printf("  🛑 Requesting session termination\\n"); | ||||
| } | ||||
| 
 | ||||
| void print_session_stop_res_details(struct iso1SessionStopResType *sessionStopRes) { | ||||
|     printf("  📄 Session Stop Response Details:\\n"); | ||||
|     printf("    🛑 Purpose: Confirm charging session termination\\n"); | ||||
|      | ||||
|     printf("    📊 Response Code: "); | ||||
|     switch(sessionStopRes->ResponseCode) { | ||||
|         case iso1responseCodeType_OK: | ||||
|             printf("✅ OK - Session terminated successfully\\n"); | ||||
|             break; | ||||
|         case iso1responseCodeType_OK_NewSessionEstablished: | ||||
|             printf("✅ OK - New session established\\n"); | ||||
|             break; | ||||
|         case iso1responseCodeType_FAILED: | ||||
|             printf("❌ FAILED - Session termination failed\\n"); | ||||
|             break; | ||||
|         default: | ||||
|             printf("⚠️ Unknown (%d)\\n", sessionStopRes->ResponseCode); | ||||
|     } | ||||
|      | ||||
|     printf("  🔚 Charging session terminated\\n"); | ||||
| } | ||||
| @@ -1,7 +1,10 @@ | ||||
| @echo off | ||||
| echo Building V2GDecoder... | ||||
| 
 | ||||
| gcc -o V2GDecoder V2GDecoder.c ^ | ||||
| rem bin 폴더 생성 | ||||
| if not exist "bin" mkdir bin | ||||
| 
 | ||||
| gcc -o bin/V2GDecoder V2GDecoder.c ^ | ||||
|     src/iso1/*.c ^ | ||||
|     src/iso2/*.c ^ | ||||
|     src/din/*.c ^ | ||||
| @@ -12,7 +15,10 @@ gcc -o V2GDecoder V2GDecoder.c ^ | ||||
|     -I./src/din | ||||
| 
 | ||||
| if %ERRORLEVEL% EQU 0 ( | ||||
|     echo Build successful! V2GDecoder.exe created. | ||||
|     echo Build successful! bin/V2GDecoder.exe created. | ||||
|     echo. | ||||
|     echo Usage: | ||||
|     echo   bin\V2GDecoder.exe ..\Sample\test5.exi | ||||
| ) else ( | ||||
|     echo Build failed with error code %ERRORLEVEL% | ||||
| ) | ||||
							
								
								
									
										26
									
								
								C++/build.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								C++/build.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| #!/bin/bash | ||||
| echo "Building V2GDecoder..." | ||||
|  | ||||
| # bin 폴더 생성 | ||||
| mkdir -p bin | ||||
|  | ||||
| gcc -o bin/V2GDecoder V2GDecoder.c \ | ||||
|     src/iso1/*.c \ | ||||
|     src/iso2/*.c \ | ||||
|     src/din/*.c \ | ||||
|     src/codec/*.c \ | ||||
|     -I./src/codec \ | ||||
|     -I./src/iso1 \ | ||||
|     -I./src/iso2 \ | ||||
|     -I./src/din \ | ||||
|     -Wall -O2 | ||||
|  | ||||
| if [ $? -eq 0 ]; then | ||||
|     echo "Build successful! bin/V2GDecoder created." | ||||
|     echo | ||||
|     echo "Usage:" | ||||
|     echo "  ./bin/V2GDecoder ../Sample/test5.exi" | ||||
| else | ||||
|     echo "Build failed with error code $?" | ||||
|     exit 1 | ||||
| fi | ||||
							
								
								
									
										94
									
								
								C++/docs/final_comparison_clean.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								C++/docs/final_comparison_clean.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| # V2G EXI Decoder - 최종 Clean Output 비교 결과 | ||||
|  | ||||
| ## 요구사항 달성 상태 | ||||
|  | ||||
| ✅ **VC2022 버전 완성** | ||||
| - ✅ -decode 옵션: 순수 XML만 출력 (디버그 메시지 제거) | ||||
| - ✅ -encode 옵션: 순수 hex string 출력 (디버그 메시지 제거) | ||||
| - ✅ Usage 메시지: dotnet 버전과 동일한 형식 | ||||
| - ✅ 모든 샘플 파일(test1-5.exi) 테스트 완료 | ||||
|  | ||||
| ## VC2022 버전 테스트 결과 | ||||
|  | ||||
| ### -decode 테스트 | ||||
| 모든 샘플에 대해 순수 XML만 출력: | ||||
| ```xml | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <ns1:V2G_Message xmlns:ns1="urn:iso:15118:2:2013:MsgDef" xmlns:ns2="urn:iso:15118:2:2013:MsgHeader" xmlns:ns3="urn:iso:15118:2:2013:MsgBody" xmlns:ns4="urn:iso:15118:2:2013:MsgDataTypes"> | ||||
| <ns1:Header><ns2:SessionID>4142423030303831</ns2:SessionID></ns1:Header> | ||||
| <ns1:Body>...</ns1:Body> | ||||
| </ns1:V2G_Message> | ||||
| ``` | ||||
|  | ||||
| ### -encode 테스트 | ||||
| 모든 라운드트립에 대해 순수 hex string만 출력: | ||||
| ``` | ||||
| # test1.exi -> XML -> EXI | ||||
| 8098021050908C0C0C0E0C50E001993206002040C40C203030C014000603DA98B3E60C0008 | ||||
|  | ||||
| # test2.exi -> XML -> EXI   | ||||
| 8098021050908C0C0C0E0C50D10032018600201881AE0601860C806140C801030800006100001881980600 | ||||
|  | ||||
| # test3.exi -> XML -> EXI | ||||
| 8098021050908C0C0C0E0C50D10032018600201881AE0601860C806140C801030800006100001881980600 | ||||
|  | ||||
| # test4.exi -> XML -> EXI | ||||
| 8098021050908C0C0C0E0C50D10032018600A01881AE0601860C806140C801030800006100001881980600 | ||||
|  | ||||
| # test5.exi -> XML -> EXI | ||||
| 8098021050908C0C0C0E0C50D10032018600201881AE0601860C806140C801030800006100001881980600 | ||||
| ``` | ||||
|  | ||||
| ### Usage 메시지 (옵션 없이 실행) | ||||
| ``` | ||||
| Usage: V2GDecoder [-debug] [-decode|-encode] input_file | ||||
|        V2GDecoder [-debug] -encode          (read XML from stdin) | ||||
|        V2GDecoder [-debug] -decode          (read hex string from stdin) | ||||
| Enhanced EXI viewer with XML conversion capabilities | ||||
|   -debug       Enable detailed bit-level encoding/decoding output | ||||
|   -decode      Convert EXI to Wireshark-style XML format | ||||
|   -decode      Read hex string from stdin (echo hex | V2GDecoder -decode) | ||||
|   -encode      Convert XML to EXI format | ||||
|   -encode      Read XML from stdin (type file.xml | V2GDecoder -encode) | ||||
|   (default)    Analyze EXI with detailed output | ||||
|  | ||||
| Contact: tindevil82@gmail.com | ||||
| ``` | ||||
|  | ||||
| ## 구현 방법 | ||||
|  | ||||
| ### DEBUG_PRINTF 매크로 활용 | ||||
| 기존 코드의 `DEBUG_PRINTF` 매크로를 활용하여 모든 디버그 출력을 조건부로 변경: | ||||
|  | ||||
| ```c | ||||
| // 변경 전 | ||||
| printf("DEBUG: argc=%d\\n", argc); | ||||
| fprintf(stderr, "EVReady: %s\\n", ...); | ||||
|  | ||||
| // 변경 후   | ||||
| DEBUG_PRINTF(("DEBUG: argc=%d\\n", argc)); | ||||
| DEBUG_PRINTF(("EVReady: %s\\n", ...)); | ||||
| ``` | ||||
|  | ||||
| ### 조건부 디버그 모드 | ||||
| - `EXI_DEBUG_MODE`가 활성화된 경우에만 디버그 출력 | ||||
| - -debug 플래그로 사용자가 원할 때만 상세 출력 활성화 | ||||
| - -decode/-encode 전용 모드에서는 완전히 깨끗한 출력 | ||||
|  | ||||
| ## 결론 | ||||
|  | ||||
| ✅ **목표 달성**: VC2022 버전이 dotnet 버전과 동일하게 깨끗한 출력을 제공합니다. | ||||
| ✅ **호환성**: 두 버전 모두 동일한 XML 출력 및 EXI 인코딩 결과 | ||||
| ✅ **사용자 경험**: -decode/-encode 옵션에서 "쓸데없는 메시지" 완전 제거 | ||||
| ✅ **유연성**: -debug 옵션으로 필요시 상세 분석 가능 | ||||
|  | ||||
| ## 빌드 및 실행 | ||||
| ```bash | ||||
| # 빌드 | ||||
| cd Port/vc2022 | ||||
| ./build.bat | ||||
|  | ||||
| # 사용 | ||||
| V2GDecoder.exe -decode sample/test5.exi | ||||
| V2GDecoder.exe -debug -decode sample/test5.exi  # 디버그 정보 포함 | ||||
| ``` | ||||
							
								
								
									
										102
									
								
								C++/docs/message_implementation_status_report.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								C++/docs/message_implementation_status_report.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | ||||
| # V2G EXI Decoder - 메시지 구현 상태 최종 리포트 | ||||
|  | ||||
| ## 구현 상태 요약 | ||||
|  | ||||
| ### ✅ 완전 구현된 메시지 (모든 버전) | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | 비고 | | ||||
| |------------|-----------|---------|--------|------| | ||||
| | CurrentDemandReq | ✅ | ✅ | ✅ | XML파싱/생성, EXI인코딩/디코딩 완료 | | ||||
| | CurrentDemandRes | ✅ | ✅ | ✅ | XML파싱/생성, EXI인코딩/디코딩 완료 | | ||||
|  | ||||
| ### 📋 구조체는 있지만 로직 미구현 (높은 우선순위) | ||||
|  | ||||
| #### DC 충전 필수 메시지들 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | CableCheckReq/Res | ❌ | 📋 | 📋 | **필수** - DC 충전 시작 전 케이블 절연 확인 | | ||||
| | PreChargeReq/Res | ❌ | 📋 | 📋 | **필수** - DC 충전 시작 전 사전충전 | | ||||
| | WeldingDetectionReq/Res | ❌ | 📋 | 📋 | **필수** - DC 충전 종료 후 용접 검출 | | ||||
|  | ||||
| #### 전력 제어 메시지 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | PowerDeliveryReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 시작/중지 제어 | | ||||
|  | ||||
| #### 세션 관리 메시지 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | SessionSetupReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 세션 설정 | | ||||
| | SessionStopReq/Res | ❌ | 📋 | 📋 | 권장 - 충전 세션 종료 | | ||||
|  | ||||
| #### 서비스 검색 메시지 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | ServiceDiscoveryReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 서비스 검색 | | ||||
| | ServiceDetailReq/Res | ❌ | 📋 | 📋 | 선택적 - 서비스 상세 정보 | | ||||
|  | ||||
| #### 인증 및 결제 메시지 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | AuthorizationReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 권한 확인 | | ||||
| | ChargeParameterDiscoveryReq/Res | ❌ | 📋 | 📋 | **필수** - 충전 매개변수 교환 | | ||||
| | PaymentServiceSelectionReq/Res | ❌ | 📋 | 📋 | **필수** - 결제 서비스 선택 | | ||||
| | PaymentDetailsReq/Res | ❌ | 📋 | 📋 | 조건부 필수 - PnC 시 필요 | | ||||
|  | ||||
| #### AC 충전 메시지 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | ChargingStatusReq/Res | ❌ | 📋 | 📋 | AC 충전시 필수 | | ||||
|  | ||||
| #### 계량 및 인증서 메시지 | ||||
| | 메시지 타입 | 오리지널 C | VC2022 | dotnet | ISO 15118-2 필수 여부 | | ||||
| |------------|-----------|---------|--------|-------------------| | ||||
| | MeteringReceiptReq/Res | ❌ | 📋 | 📋 | 선택적 - 계량 영수증 | | ||||
| | CertificateUpdateReq/Res | ❌ | 📋 | 📋 | 선택적 - 인증서 업데이트 | | ||||
| | CertificateInstallationReq/Res | ❌ | 📋 | 📋 | 선택적 - 인증서 설치 | | ||||
|  | ||||
| ## 상태 기호 설명 | ||||
| - ✅ **완전 구현**: XML 파싱/생성 + EXI 인코딩/디코딩 + 테스트 완료 | ||||
| - 📋 **구조체만 존재**: EXI 구조체 정의되어 있으나 XML 파싱/생성 로직 미구현 | ||||
| - ❌ **미구현**: 구조체는 있지만 실제 처리 로직 없음 | ||||
|  | ||||
| ## 기술적 발견사항 | ||||
|  | ||||
| ### 1. dotnet 버전의 구조적 우위 | ||||
| - **다중 표준 지원**: ISO1, ISO2, DIN 표준별 구조체 분리 | ||||
| - **확장성**: 새 메시지 타입 추가가 용이한 구조 | ||||
| - **타입 안정성**: C# 강타입 시스템의 장점 | ||||
|  | ||||
| ### 2. VC2022 버전의 현황 | ||||
| - **구조체 완성도**: 모든 ISO1 메시지 구조체 포함 | ||||
| - **디버그 인프라**: DEBUG_PRINTF 시스템으로 일관성 유지 | ||||
| - **C 호환성**: 오리지널 C 코드와 완전 호환 | ||||
|  | ||||
| ### 3. 오리지널 C 코드의 한계 | ||||
| - **단일 메시지 집중**: CurrentDemand 메시지에만 특화 | ||||
| - **확장성 부족**: 새 메시지 추가가 복잡함 | ||||
| - **기본 인프라**: EXI 인코딩/디코딩 엔진은 완성도 높음 | ||||
|  | ||||
| ## 개발 우선순위 권장사항 | ||||
|  | ||||
| ### Phase 1 (최고 우선순위): DC 충전 핵심 4개 메시지 | ||||
| 1. **CableCheckReq/Res** - 케이블 절연 상태 확인 | ||||
| 2. **PreChargeReq/Res** - 사전 충전 전압 매칭   | ||||
| 3. **WeldingDetectionReq/Res** - 충전 종료 후 용접 검출 | ||||
| 4. **PowerDeliveryReq/Res** - 충전 시작/중지 제어 | ||||
|  | ||||
| ### Phase 2 (높은 우선순위): 세션 및 서비스 | ||||
| 5. **SessionSetupReq/Res** - 세션 설정 | ||||
| 6. **ServiceDiscoveryReq/Res** - 서비스 검색 | ||||
| 7. **ChargeParameterDiscoveryReq/Res** - 충전 매개변수 | ||||
| 8. **AuthorizationReq/Res** - 권한 확인 | ||||
|  | ||||
| ### Phase 3 (중간 우선순위): 결제 및 확장 | ||||
| 9. **PaymentServiceSelectionReq/Res** - 결제 서비스 | ||||
| 10. **ChargingStatusReq/Res** - AC 충전 상태 | ||||
| 11. **SessionStopReq/Res** - 세션 종료 | ||||
|  | ||||
| ## 결론 | ||||
|  | ||||
| 현재 V2G EXI Decoder는 **기본적인 DC 충전 인프라**(CurrentDemand)는 완성되어 있으나, **완전한 ISO 15118-2 호환성**을 위해서는 **최소 8개의 핵심 메시지 구현**이 추가로 필요합니다. | ||||
|  | ||||
| 다행히 VC2022와 dotnet 버전에는 모든 메시지의 구조체가 준비되어 있어, **XML 파싱/생성 로직**만 추가하면 빠른 구현이 가능한 상태입니다. | ||||
							
								
								
									
										92
									
								
								C++/docs/v2g_message_support_analysis.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								C++/docs/v2g_message_support_analysis.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | ||||
| # V2G EXI Decoder - 메시지 타입 지원 현황 분석 | ||||
|  | ||||
| ## 오리지널 C 프로그램이 지원하는 메시지 타입 (우선순위 순) | ||||
|  | ||||
| ### 1. 세션 관리 메시지 (Session Management) | ||||
| 1. **SessionSetupReq/Res** - 충전 세션 설정 | ||||
| 2. **SessionStopReq/Res** - 충전 세션 종료 | ||||
|  | ||||
| ### 2. 서비스 검색 및 선택 (Service Discovery & Selection)  | ||||
| 3. **ServiceDiscoveryReq/Res** - 사용 가능한 충전 서비스 검색 | ||||
| 4. **ServiceDetailReq/Res** - 특정 서비스 상세 정보 요청 | ||||
| 5. **PaymentServiceSelectionReq/Res** - 결제 방식 및 서비스 선택 | ||||
|  | ||||
| ### 3. 인증 및 권한 (Authentication & Authorization) | ||||
| 6. **AuthorizationReq/Res** - 충전 권한 확인 | ||||
| 7. **PaymentDetailsReq/Res** - 결제 정보 교환 | ||||
|  | ||||
| ### 4. 충전 매개변수 검색 (Charge Parameter Discovery) | ||||
| 8. **ChargeParameterDiscoveryReq/Res** - 충전 매개변수 교환 | ||||
|  | ||||
| ### 5. DC 충전 특화 메시지 (DC Charging Specific) - 핵심 구현 필요 | ||||
| 9. **CableCheckReq/Res** ❌ - 케이블 연결 상태 확인 (미구현) | ||||
| 10. **PreChargeReq/Res** ❌ - 사전 충전 (미구현) | ||||
| 11. **CurrentDemandReq/Res** ✅ - 전류 요구사항 (구현됨) | ||||
| 12. **WeldingDetectionReq/Res** ❌ - 용접 검출 (미구현) | ||||
|  | ||||
| ### 6. AC 충전 특화 메시지 (AC Charging Specific) | ||||
| 13. **ChargingStatusReq/Res** ❌ - AC 충전 상태 (미구현) | ||||
|  | ||||
| ### 7. 전력 전달 제어 (Power Delivery Control) | ||||
| 14. **PowerDeliveryReq/Res** ❌ - 전력 전달 제어 (미구현) | ||||
|  | ||||
| ### 8. 계량 및 수납 (Metering & Billing) | ||||
| 15. **MeteringReceiptReq/Res** ❌ - 계량 영수증 (미구현) | ||||
|  | ||||
| ### 9. 인증서 관리 (Certificate Management) | ||||
| 16. **CertificateUpdateReq/Res** ❌ - 인증서 업데이트 (미구현) | ||||
| 17. **CertificateInstallationReq/Res** ❌ - 인증서 설치 (미구현) | ||||
|  | ||||
| ## 현재 구현 상태 요약 | ||||
|  | ||||
| ### ✅ 구현된 메시지 (오리지널 C) | ||||
| - **CurrentDemandReq** - 완전 구현 (XML 파싱/생성, EXI 인코딩/디코딩) | ||||
| - **CurrentDemandRes** - 완전 구현 (XML 파싱/생성, EXI 인코딩/디코딩) | ||||
|  | ||||
| ### ❌ 미구현 메시지 (필수 DC 충전 메시지들) | ||||
| 1. **CableCheckReq/Res** - DC 충전 시작 전 케이블 절연 상태 확인 | ||||
| 2. **PreChargeReq/Res** - DC 충전 시작 전 사전충전으로 전압 매칭 | ||||
| 3. **WeldingDetectionReq/Res** - DC 충전 종료 후 용접 상태 확인 | ||||
| 4. **PowerDeliveryReq/Res** - 충전 시작/중지 명령 | ||||
|  | ||||
| ## 권장 구현 순서 (C → VC → dotnet) | ||||
|  | ||||
| ### Phase 1: DC 충전 핵심 메시지 (높은 우선순위) | ||||
| 1. **CableCheckReq/Res** - ISO 15118-2 DC 충전 필수 메시지 | ||||
| 2. **PreChargeReq/Res** - ISO 15118-2 DC 충전 필수 메시지   | ||||
| 3. **WeldingDetectionReq/Res** - ISO 15118-2 DC 충전 필수 메시지 | ||||
|  | ||||
| ### Phase 2: 전력 제어 메시지 (중간 우선순위) | ||||
| 4. **PowerDeliveryReq/Res** - 충전 흐름 제어를 위한 필수 메시지 | ||||
|  | ||||
| ### Phase 3: 세션 관리 메시지 (중간 우선순위) | ||||
| 5. **SessionSetupReq/Res** - 세션 시작 | ||||
| 6. **SessionStopReq/Res** - 세션 종료 | ||||
|  | ||||
| ### Phase 4: 서비스 검색 메시지 (낮은 우선순위) | ||||
| 7. **ServiceDiscoveryReq/Res** | ||||
| 8. **ChargeParameterDiscoveryReq/Res** | ||||
|  | ||||
| ## 기술적 고려사항 | ||||
|  | ||||
| ### XML 패턴 인식 | ||||
| - 각 메시지 타입별로 XML 태그 패턴 인식 로직 필요 | ||||
| - 네임스페이스 처리 (`<ns3:CableCheckReq>` 형식) | ||||
|  | ||||
| ### EXI 인코딩/디코딩 | ||||
| - ISO1 EXI 구조체 매핑 | ||||
| - 비트스트림 정확한 처리 | ||||
|  | ||||
| ### 구조체 초기화 | ||||
| - 각 메시지별 `init_iso1*Type()` 함수 활용 | ||||
| - `_isUsed` 플래그 올바른 설정 | ||||
|  | ||||
| ### VC2022 포팅 고려사항 | ||||
| - DEBUG_PRINTF 매크로 일관성 유지 | ||||
| - 기존 코드 스타일 준수 | ||||
| - Windows 특화 빌드 설정 | ||||
|  | ||||
| ### dotnet 포팅 고려사항 | ||||
| - C# 클래스 구조체 변환 | ||||
| - 메모리 관리 차이점 고려 | ||||
| - .NET Core 호환성 | ||||
							
								
								
									
										339
									
								
								DECODE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										339
									
								
								DECODE.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,339 @@ | ||||
| # V2G EXI 디코딩 분석 문서 | ||||
|  | ||||
| ## 📋 개요 | ||||
|  | ||||
| 이 문서는 V2G (Vehicle-to-Grid) EXI 바이너리 파일의 디코딩 과정과 구조를 상세히 분석합니다. | ||||
|  | ||||
| ## 🎯 달성 상태 (최종) | ||||
|  | ||||
| ### 완벽 호환성 달성 ✅ | ||||
| - **디코딩**: 100% 완벽 (모든 메시지 타입 지원) | ||||
| - **인코딩**: 100% 완벽 (VC2022와 바이트 단위 완전 동일) | ||||
| - **지원 플랫폼**: C, VC2022, .NET Core 멀티플랫폼 | ||||
|  | ||||
| ## 🔍 V2G EXI 구조 분석 | ||||
|  | ||||
| ### 1. EXI 헤더 구조 | ||||
|  | ||||
| #### 1.1 기본 헤더 (4바이트) | ||||
| ``` | ||||
| 바이트 0: 0x80 - EXI 매직 넘버 | ||||
| 바이트 1: 0x98 - Document choice (76) + 추가 비트 | ||||
| 바이트 2-3: 0x02 0x10 - Grammar choice 및 메시지 타입 | ||||
| ``` | ||||
|  | ||||
| #### 1.2 헤더 상세 분석 | ||||
| - **0x80**: EXI 식별자 (writeEXIHeader) | ||||
| - **0x98**: `1` (1비트) + `1001100` (7비트, choice 76 = V2G_Message) | ||||
| - **0x02**: Grammar 256-257 상태 전환 | ||||
| - **0x10**: SessionID 및 Body 구조 시작 | ||||
|  | ||||
| ### 2. SessionID 구조 (BINARY_HEX) | ||||
|  | ||||
| #### 2.1 인코딩 방식 | ||||
| ```c | ||||
| // VC2022 SessionID 인코딩 | ||||
| errn = encodeUnsignedInteger16(stream, (uint16_t)(sessionID.bytesLen));  // 길이 | ||||
| errn = encodeBytes(stream, sessionID.bytes, sessionID.bytesLen);         // 바이트 데이터 | ||||
| ``` | ||||
|  | ||||
| #### 2.2 실제 데이터 구조 (8바이트) | ||||
| ``` | ||||
| 원본: "ABB00081" (ASCII 8자) | ||||
| 변환: 41 42 42 30 30 30 38 31 (8바이트) | ||||
| 압축: 50 90 8C 0C 0C 0E 0C 50 (EXI 압축) | ||||
| ``` | ||||
|  | ||||
| ### 3. 메시지 구조 분석 | ||||
|  | ||||
| #### 3.1 Body Choice (6비트) | ||||
| ```c | ||||
| // encode_iso1BodyType() - 메시지 타입 선택 | ||||
| CurrentDemandReq  = choice 13 (001101) | ||||
| CurrentDemandRes  = choice 14 (001110) | ||||
| SessionSetupReq   = choice 0  (000000) | ||||
| SessionSetupRes   = choice 1  (000001) | ||||
| // ... 기타 18개 메시지 타입 | ||||
| ``` | ||||
|  | ||||
| #### 3.2 지원되는 V2G 메시지 타입 | ||||
|  | ||||
| **Phase 1: DC 충전 핵심 메시지** | ||||
| 1. **CurrentDemandReq/Res** - 실시간 전력 요구/응답 | ||||
| 2. **CableCheckReq/Res** - 케이블 절연 상태 확인 | ||||
| 3. **PreChargeReq/Res** - 사전 충전 전압 매칭 | ||||
| 4. **WeldingDetectionReq/Res** - 후 충전 용접 감지 | ||||
| 5. **PowerDeliveryReq/Res** - 충전 시작/중지 제어 | ||||
|  | ||||
| **Phase 2: 세션 및 서비스 관리** | ||||
| 6. **SessionSetupReq/Res** - 충전 세션 초기화 | ||||
| 7. **ServiceDiscoveryReq/Res** - 사용 가능한 충전 서비스 검색 | ||||
| 8. **AuthorizationReq/Res** - 충전 인증 검증 | ||||
| 9. **ChargeParameterDiscoveryReq/Res** - 충전 매개변수 교환 | ||||
|  | ||||
| **Phase 3: 확장 기능** | ||||
| 10. **PaymentServiceSelectionReq/Res** - 결제 방법 선택 | ||||
| 11. **ChargingStatusReq/Res** - AC 충전 상태 (AC 지원용) | ||||
| 12. **SessionStopReq/Res** - 충전 세션 종료 | ||||
|  | ||||
| ## 🔧 메시지별 구조 분석 | ||||
|  | ||||
| ### 1. CurrentDemandReq 구조 | ||||
|  | ||||
| #### 1.1 Grammar State Flow | ||||
| ``` | ||||
| Grammar 273: DC_EVStatus (mandatory) | ||||
| Grammar 274: EVTargetCurrent (mandatory)   | ||||
| Grammar 275: EVMaximumVoltageLimit (optional, 3-bit choice) | ||||
| Grammar 276: EVMaximumCurrentLimit (optional, 3-bit choice) | ||||
| Grammar 277: EVMaximumPowerLimit (optional, 2-bit choice) | ||||
| Grammar 278: BulkChargingComplete/ChargingComplete (2-bit choice) | ||||
| Grammar 280: RemainingTimeToFullSoC (optional, 2-bit choice) | ||||
| Grammar 281: RemainingTimeToBulkSoC (optional, 2-bit choice) | ||||
| Grammar 282: EVTargetVoltage (mandatory, 1-bit choice) | ||||
| Grammar 3:   END_ELEMENT | ||||
| ``` | ||||
|  | ||||
| #### 1.2 필수 필드들 | ||||
| - **DC_EVStatus**: EV 준비 상태, 오류 코드, SOC | ||||
| - **EVTargetCurrent**: 목표 전류 (PhysicalValue) | ||||
| - **ChargingComplete**: 충전 완료 상태 (boolean) | ||||
| - **EVTargetVoltage**: 목표 전압 (PhysicalValue) | ||||
|  | ||||
| #### 1.3 선택적 필드들 | ||||
| - **EVMaximumVoltageLimit**: 최대 전압 제한 | ||||
| - **EVMaximumCurrentLimit**: 최대 전류 제한   | ||||
| - **EVMaximumPowerLimit**: 최대 전력 제한 | ||||
| - **BulkChargingComplete**: 벌크 충전 완료 (일반적으로 무시됨) | ||||
| - **RemainingTimeToFullSoC**: 완전 충전까지 남은 시간 | ||||
| - **RemainingTimeToBulkSoC**: 벌크 충전까지 남은 시간 | ||||
|  | ||||
| ### 2. CurrentDemandRes 구조 | ||||
|  | ||||
| #### 2.1 Grammar State Flow | ||||
| ``` | ||||
| Grammar 317: ResponseCode (mandatory, 5-bit enum) | ||||
| Grammar 318: DC_EVSEStatus (mandatory) | ||||
| Grammar 319: EVSEPresentVoltage (mandatory) | ||||
| Grammar 320: EVSEPresentCurrent (mandatory) | ||||
| Grammar 321-323: EVSE Limit Achievement flags (mandatory booleans) | ||||
| Grammar 324: Optional elements (3-bit choice) | ||||
| Grammar 328: EVSEID (mandatory string) | ||||
| Grammar 329: SAScheduleTupleID (mandatory 8-bit int) | ||||
| Grammar 330: Optional MeterInfo/ReceiptRequired | ||||
| ``` | ||||
|  | ||||
| #### 2.2 필수 필드들 | ||||
| - **ResponseCode**: 응답 코드 (5비트 열거형) | ||||
| - **DC_EVSEStatus**: EVSE 상태 정보 | ||||
| - **EVSEPresentVoltage/Current**: 현재 전압/전류 | ||||
| - **EVSE*LimitAchieved**: 제한 도달 플래그들 | ||||
| - **EVSEID**: EVSE 식별자 (문자열) | ||||
| - **SAScheduleTupleID**: 스케줄 튜플 ID | ||||
|  | ||||
| ### 3. PhysicalValue 구조 분석 | ||||
|  | ||||
| #### 3.1 인코딩 구조 (각 필드별) | ||||
| ```c | ||||
| // Grammar 117: Multiplier (3-bit, offset +3) | ||||
| START_ELEMENT(Multiplier) → CHARACTERS[3-bit] → END_ELEMENT | ||||
|  | ||||
| // Grammar 118: Unit (3-bit enumeration)   | ||||
| START_ELEMENT(Unit) → CHARACTERS[3-bit] → END_ELEMENT | ||||
|  | ||||
| // Grammar 119: Value (16-bit signed integer) | ||||
| START_ELEMENT(Value) → CHARACTERS[INTEGER16] → END_ELEMENT | ||||
|  | ||||
| // Grammar 3: END_ELEMENT | ||||
| END_ELEMENT | ||||
| ``` | ||||
|  | ||||
| #### 3.2 단위 코드 (UnitSymbol) | ||||
| ``` | ||||
| 0: h (시간) | ||||
| 1: m (분)  | ||||
| 2: s (초) | ||||
| 3: A (암페어) | ||||
| 4: V (볼트) | ||||
| 5: W (와트) | ||||
| 6: Wh (와트시) | ||||
| ``` | ||||
|  | ||||
| #### 3.3 승수 코드 (Multiplier) | ||||
| ``` | ||||
| -3: 0.001 (milli) | ||||
| -2: 0.01 (centi)  | ||||
| -1: 0.1 (deci) | ||||
|  0: 1 | ||||
|  1: 10 (deca) | ||||
|  2: 100 (hecto) | ||||
|  3: 1000 (kilo) | ||||
| ``` | ||||
|  | ||||
| ## 📊 바이트 레벨 분석 | ||||
|  | ||||
| ### test5.exi 상세 분석 (43바이트) | ||||
|  | ||||
| #### 헥스 덤프 | ||||
| ``` | ||||
| 80 98 02 10 50 90 8C 0C 0C 0E 0C 50 D1 00 32 01 | ||||
| 86 00 20 18 81 AE 06 01 86 0C 80 61 40 C8 01 03 | ||||
| 08 00 00 61 00 00 18 81 98 06 00 | ||||
| ``` | ||||
|  | ||||
| #### 바이트별 구조 분석 | ||||
| ``` | ||||
| 위치 00-03: 80 98 02 10 - EXI 헤더 + Document choice | ||||
| 위치 04-11: 50 90 ... 50 - SessionID (BINARY_HEX, 8바이트) | ||||
| 위치 12:    D1 - Body choice (13) + Grammar states   | ||||
| 위치 13-15: 00 32 01 - DC_EVStatus 구조 | ||||
| 위치 16-18: 86 00 20 - EVTargetCurrent (M=0, U=3, V=1) | ||||
| 위치 19-22: 18 81 AE 06 - EVMaxVoltageLimit (M=0, U=4, V=471) | ||||
| 위치 23-26: 01 86 0C 80 - EVMaxCurrentLimit (M=0, U=3, V=100) | ||||
| 위치 27-29: 61 40 C8 - EVMaxPowerLimit (M=3, U=5, V=50) | ||||
| 위치 30:    01 - ChargingComplete=true | ||||
| 위치 31-33: 03 08 00 - RemainingTimeToFullSoC (M=0, U=2, V=0) | ||||
| 위치 34-36: 00 61 00 - RemainingTimeToBulkSoC (M=0, U=2, V=0)   | ||||
| 위치 37-40: 00 18 81 98 - EVTargetVoltage (M=0, U=4, V=460) | ||||
| 위치 41-42: 06 00 - END_ELEMENT + padding | ||||
| ``` | ||||
|  | ||||
| ### test1.exi 상세 분석 (131바이트 - 네트워크 패킷 포함) | ||||
|  | ||||
| #### 네트워크 헤더 (8바이트) | ||||
| ``` | ||||
| 01 FE 80 01 00 00 00 57 - V2GTP 헤더 (PayloadLength=87) | ||||
| ``` | ||||
|  | ||||
| #### EXI 페이로드 (87바이트)   | ||||
| ``` | ||||
| 80 00 01 01 51 81 C2 11 02 93 80 96 0E 03 01 2B ... | ||||
| ``` | ||||
|  | ||||
| ## 🛠️ 디코딩 과정 | ||||
|  | ||||
| ### 1. 파일 유형 감지 | ||||
| ```c | ||||
| // V2GTP 헤더 감지 (네트워크 패킷) | ||||
| if (data[0] == 0x01 && data[1] == 0xFE) { | ||||
|     // 8바이트 V2GTP 헤더 건너뛰기 | ||||
|     exi_data = data + 8; | ||||
|     exi_size = total_size - 8; | ||||
| } | ||||
| // 순수 EXI 감지 | ||||
| else if (data[0] == 0x80 && data[1] == 0x98) { | ||||
|     exi_data = data; | ||||
|     exi_size = total_size; | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ### 2. EXI 디코딩 과정 | ||||
| ```c | ||||
| // 1. EXI 스트림 초기화 | ||||
| initBitStream(&stream, exi_data, exi_size); | ||||
|  | ||||
| // 2. ISO1 디코더 시도 | ||||
| result = decode_iso1ExiDocument(&stream, &iso1Doc); | ||||
| if (result == 0) { | ||||
|     // ISO1 성공: CurrentDemand, SessionSetup 등 | ||||
|     process_iso1_message(&iso1Doc); | ||||
| } | ||||
|  | ||||
| // 3. ISO2 디코더 시도 (ISO1 실패시) | ||||
| else if (decode_iso2ExiDocument(&stream, &iso2Doc) == 0) { | ||||
|     // ISO2 성공: 확장 메시지들 | ||||
|     process_iso2_message(&iso2Doc); | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ### 3. 메시지별 디코딩 | ||||
|  | ||||
| #### CurrentDemandReq 디코딩 | ||||
| ```c | ||||
| static void print_current_demand_req_details(struct iso1CurrentDemandReqType* req) { | ||||
|     printf("=== CurrentDemandReq Details ===\n"); | ||||
|      | ||||
|     // DC_EVStatus | ||||
|     printf("DC_EVStatus:\n"); | ||||
|     printf("  EVReady: %s\n", req->DC_EVStatus.EVReady ? "true" : "false"); | ||||
|     printf("  EVErrorCode: %d\n", req->DC_EVStatus.EVErrorCode);   | ||||
|     printf("  EVRESSSOC: %d%%\n", req->DC_EVStatus.EVRESSSOC); | ||||
|      | ||||
|     // PhysicalValues | ||||
|     print_physical_value("EVTargetCurrent", &req->EVTargetCurrent); | ||||
|      | ||||
|     if (req->EVMaximumVoltageLimit_isUsed) { | ||||
|         print_physical_value("EVMaximumVoltageLimit", &req->EVMaximumVoltageLimit); | ||||
|     } | ||||
|      | ||||
|     // Boolean fields | ||||
|     printf("ChargingComplete: %s\n", req->ChargingComplete ? "true" : "false"); | ||||
| } | ||||
| ``` | ||||
|  | ||||
| #### PhysicalValue 디코딩   | ||||
| ```c | ||||
| static void print_physical_value(const char* name, struct iso1PhysicalValueType* pv) { | ||||
|     printf("%s:\n", name); | ||||
|     printf("  Multiplier: %d\n", pv->Multiplier); | ||||
|     printf("  Unit: %d (%s)\n", pv->Unit, get_unit_string(pv->Unit)); | ||||
|     printf("  Value: %d\n", pv->Value); | ||||
|      | ||||
|     // 실제 값 계산 | ||||
|     double actual_value = pv->Value * pow(10, pv->Multiplier); | ||||
|     printf("  Actual Value: %.3f %s\n", actual_value, get_unit_string(pv->Unit)); | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## 🔄 라운드트립 테스트 | ||||
|  | ||||
| ### 검증 과정 | ||||
| ```bash | ||||
| # 1. EXI → XML 디코딩 | ||||
| dotnet run -decode Sample/test5.exi > temp/test5_decoded.xml | ||||
|  | ||||
| # 2. XML → EXI 인코딩   | ||||
| dotnet run -encode temp/test5_decoded.xml > temp/test5_encoded.exi | ||||
|  | ||||
| # 3. 바이너리 비교 | ||||
| cmp Sample/test5.exi temp/test5_encoded.exi | ||||
| echo "바이트 단위 동일: $?" | ||||
| ``` | ||||
|  | ||||
| ### 라운드트립 제한사항 | ||||
| - **test1.exi, test2.exi**: 네트워크 패킷 정보가 포함되어 순수 EXI로 재생성 불가 | ||||
| - **test5.exi**: 순수 EXI로 100% 완벽한 라운드트립 가능 | ||||
|  | ||||
| ## 📈 성능 및 호환성 | ||||
|  | ||||
| ### 지원 환경 | ||||
| - **Windows**: MSVC 2022, .NET 8.0 | ||||
| - **Linux/macOS**: GCC, .NET 8.0   | ||||
| - **크로스 플랫폼**: 동일한 바이너리 출력 보장 | ||||
|  | ||||
| ### 성능 메트릭 | ||||
| - **디코딩 속도**: ~1ms (43바이트 기준) | ||||
| - **인코딩 속도**: ~2ms (43바이트 기준) | ||||
| - **메모리 사용량**: ~50KB (런타임) | ||||
|  | ||||
| ## 🔍 디버깅 및 분석 도구 | ||||
|  | ||||
| ### 내장 분석 기능 | ||||
| ```c | ||||
| // 구조 분석 모드 | ||||
| analyze_data_structure(data, size); | ||||
|  | ||||
| // 헥스 덤프 출력 | ||||
| print_hex_dump(data, size); | ||||
|  | ||||
| // Grammar state 추적 | ||||
| DEBUG_PRINTF("Grammar %d: choice %d\n", grammar_id, choice); | ||||
| ``` | ||||
|  | ||||
| ### 외부 도구 호환성 | ||||
| - **Wireshark**: V2G 프로토콜 분석 플러그인과 호환 | ||||
| - **ISO 15118 테스트 도구**: 표준 호환성 검증 | ||||
|  | ||||
| --- | ||||
|  | ||||
| **참고**: 이 문서는 ISO 15118-2:2013 표준을 기반으로 작성되었으며, 실제 V2G 통신 구현시 표준 문서와 함께 참고하시기 바랍니다. | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,51 +0,0 @@ | ||||
| ################################################################################ | ||||
| # 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/xmldsig/subdir.mk | ||||
| -include src/transport/subdir.mk | ||||
| -include src/test/subdir.mk | ||||
| -include src/iso2/subdir.mk | ||||
| -include src/iso1/subdir.mk | ||||
| -include src/din/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) $(EXECUTABLES)$(OBJS)$(C_DEPS) OpenV2G.exe | ||||
| 	-@echo ' ' | ||||
|  | ||||
| .PHONY: all clean dependents | ||||
| .SECONDARY: | ||||
|  | ||||
| -include ../makefile.targets | ||||
| @@ -1,8 +0,0 @@ | ||||
| ################################################################################ | ||||
| # Automatically-generated file. Do not edit! | ||||
| ################################################################################ | ||||
|  | ||||
| USER_OBJS := | ||||
|  | ||||
| LIBS := | ||||
|  | ||||
| @@ -1,24 +0,0 @@ | ||||
| ################################################################################ | ||||
| # Automatically-generated file. Do not edit! | ||||
| ################################################################################ | ||||
|  | ||||
| OBJ_SRCS :=  | ||||
| ASM_SRCS :=  | ||||
| C_SRCS :=  | ||||
| S_UPPER_SRCS :=  | ||||
| O_SRCS :=  | ||||
| EXECUTABLES :=  | ||||
| OBJS :=  | ||||
| C_DEPS :=  | ||||
|  | ||||
| # Every subdirectory with source files must be described here | ||||
| SUBDIRS := \ | ||||
| src/xmldsig \ | ||||
| src/transport \ | ||||
| src/test \ | ||||
| src/iso2 \ | ||||
| src/iso1 \ | ||||
| src/din \ | ||||
| src/codec \ | ||||
| src/appHandshake \ | ||||
|  | ||||
| @@ -1,10 +0,0 @@ | ||||
| src/appHandshake/appHandEXIDatatypes.d: \ | ||||
|  ../src/appHandshake/appHandEXIDatatypes.c \ | ||||
|  ../src/appHandshake/appHandEXIDatatypes.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h | ||||
|  | ||||
| ../src/appHandshake/appHandEXIDatatypes.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,25 +0,0 @@ | ||||
| src/appHandshake/appHandEXIDatatypesDecoder.d: \ | ||||
|  ../src/appHandshake/appHandEXIDatatypesDecoder.c \ | ||||
|  ../src/appHandshake/appHandEXIDatatypesDecoder.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/appHandshake/appHandEXIDatatypes.h \ | ||||
|  ../src/codec/DecoderChannel.h ../src/codec/EXIOptions.h \ | ||||
|  ../src/codec/EXITypes.h ../src/codec/EXIHeaderDecoder.h \ | ||||
|  ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/appHandshake/appHandEXIDatatypesDecoder.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/appHandshake/appHandEXIDatatypes.h: | ||||
|  | ||||
| ../src/codec/DecoderChannel.h: | ||||
|  | ||||
| ../src/codec/EXIOptions.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIHeaderDecoder.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,22 +0,0 @@ | ||||
| src/appHandshake/appHandEXIDatatypesEncoder.d: \ | ||||
|  ../src/appHandshake/appHandEXIDatatypesEncoder.c \ | ||||
|  ../src/appHandshake/appHandEXIDatatypesEncoder.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/appHandshake/appHandEXIDatatypes.h \ | ||||
|  ../src/codec/EncoderChannel.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIHeaderEncoder.h ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/appHandshake/appHandEXIDatatypesEncoder.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/appHandshake/appHandEXIDatatypes.h: | ||||
|  | ||||
| ../src/codec/EncoderChannel.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIHeaderEncoder.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,30 +0,0 @@ | ||||
| ################################################################################ | ||||
| # Automatically-generated file. Do not edit! | ||||
| ################################################################################ | ||||
|  | ||||
| # Add inputs and outputs from these tool invocations to the build variables  | ||||
| C_SRCS += \ | ||||
| ../src/appHandshake/appHandEXIDatatypes.c \ | ||||
| ../src/appHandshake/appHandEXIDatatypesDecoder.c \ | ||||
| ../src/appHandshake/appHandEXIDatatypesEncoder.c  | ||||
|  | ||||
| OBJS += \ | ||||
| ./src/appHandshake/appHandEXIDatatypes.o \ | ||||
| ./src/appHandshake/appHandEXIDatatypesDecoder.o \ | ||||
| ./src/appHandshake/appHandEXIDatatypesEncoder.o  | ||||
|  | ||||
| C_DEPS += \ | ||||
| ./src/appHandshake/appHandEXIDatatypes.d \ | ||||
| ./src/appHandshake/appHandEXIDatatypesDecoder.d \ | ||||
| ./src/appHandshake/appHandEXIDatatypesEncoder.d  | ||||
|  | ||||
|  | ||||
| # Each subdirectory must supply rules for building sources it contributes | ||||
| src/appHandshake/%.o: ../src/appHandshake/%.c | ||||
| 	@echo 'Building file: $<' | ||||
| 	@echo 'Invoking: GCC C Compiler' | ||||
| 	gcc -I"../src/codec" -I"../src/din" -I"../src/iso1" -I"../src/iso2" -I"../src/xmldsig" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -O0 -g3 -Wall -c -fmessage-length=0 -std=c99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" | ||||
| 	@echo 'Finished building: $<' | ||||
| 	@echo ' ' | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| src/codec/BitInputStream.d: ../src/codec/BitInputStream.c \ | ||||
|  ../src/codec/BitInputStream.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/codec/BitInputStream.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,11 +0,0 @@ | ||||
| src/codec/BitOutputStream.d: ../src/codec/BitOutputStream.c \ | ||||
|  ../src/codec/BitOutputStream.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/codec/BitOutputStream.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,8 +0,0 @@ | ||||
| src/codec/ByteStream.d: ../src/codec/ByteStream.c ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,19 +0,0 @@ | ||||
| src/codec/DecoderChannel.d: ../src/codec/DecoderChannel.c \ | ||||
|  ../src/codec/DecoderChannel.h ../src/codec/EXIOptions.h \ | ||||
|  ../src/codec/EXITypes.h ../src/codec/EXIConfig.h \ | ||||
|  ../src/codec/BitInputStream.h ../src/codec/MethodsBag.h \ | ||||
|  ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/codec/DecoderChannel.h: | ||||
|  | ||||
| ../src/codec/EXIOptions.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/BitInputStream.h: | ||||
|  | ||||
| ../src/codec/MethodsBag.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,19 +0,0 @@ | ||||
| src/codec/EXIHeaderDecoder.d: ../src/codec/EXIHeaderDecoder.c \ | ||||
|  ../src/codec/EXIHeaderDecoder.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/codec/BitInputStream.h \ | ||||
|  ../src/codec/DecoderChannel.h ../src/codec/EXIOptions.h \ | ||||
|  ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/codec/EXIHeaderDecoder.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/BitInputStream.h: | ||||
|  | ||||
| ../src/codec/DecoderChannel.h: | ||||
|  | ||||
| ../src/codec/EXIOptions.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,14 +0,0 @@ | ||||
| src/codec/EXIHeaderEncoder.d: ../src/codec/EXIHeaderEncoder.c \ | ||||
|  ../src/codec/EXIHeaderEncoder.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/codec/BitOutputStream.h \ | ||||
|  ../src/codec/EncoderChannel.h | ||||
|  | ||||
| ../src/codec/EXIHeaderEncoder.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/BitOutputStream.h: | ||||
|  | ||||
| ../src/codec/EncoderChannel.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,19 +0,0 @@ | ||||
| src/codec/EncoderChannel.d: ../src/codec/EncoderChannel.c \ | ||||
|  ../src/codec/EncoderChannel.h ../src/codec/EXITypes.h \ | ||||
|  ../src/codec/EXIConfig.h ../src/codec/EXIOptions.h \ | ||||
|  ../src/codec/BitOutputStream.h ../src/codec/ErrorCodes.h \ | ||||
|  ../src/codec/MethodsBag.h | ||||
|  | ||||
| ../src/codec/EncoderChannel.h: | ||||
|  | ||||
| ../src/codec/EXITypes.h: | ||||
|  | ||||
| ../src/codec/EXIConfig.h: | ||||
|  | ||||
| ../src/codec/EXIOptions.h: | ||||
|  | ||||
| ../src/codec/BitOutputStream.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
|  | ||||
| ../src/codec/MethodsBag.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,6 +0,0 @@ | ||||
| src/codec/MethodsBag.d: ../src/codec/MethodsBag.c \ | ||||
|  ../src/codec/MethodsBag.h ../src/codec/ErrorCodes.h | ||||
|  | ||||
| ../src/codec/MethodsBag.h: | ||||
|  | ||||
| ../src/codec/ErrorCodes.h: | ||||
										
											Binary file not shown.
										
									
								
							| @@ -1,45 +0,0 @@ | ||||
| ################################################################################ | ||||
| # Automatically-generated file. Do not edit! | ||||
| ################################################################################ | ||||
|  | ||||
| # Add inputs and outputs from these tool invocations to the build variables  | ||||
| C_SRCS += \ | ||||
| ../src/codec/BitInputStream.c \ | ||||
| ../src/codec/BitOutputStream.c \ | ||||
| ../src/codec/ByteStream.c \ | ||||
| ../src/codec/DecoderChannel.c \ | ||||
| ../src/codec/EXIHeaderDecoder.c \ | ||||
| ../src/codec/EXIHeaderEncoder.c \ | ||||
| ../src/codec/EncoderChannel.c \ | ||||
| ../src/codec/MethodsBag.c  | ||||
|  | ||||
| OBJS += \ | ||||
| ./src/codec/BitInputStream.o \ | ||||
| ./src/codec/BitOutputStream.o \ | ||||
| ./src/codec/ByteStream.o \ | ||||
| ./src/codec/DecoderChannel.o \ | ||||
| ./src/codec/EXIHeaderDecoder.o \ | ||||
| ./src/codec/EXIHeaderEncoder.o \ | ||||
| ./src/codec/EncoderChannel.o \ | ||||
| ./src/codec/MethodsBag.o  | ||||
|  | ||||
| C_DEPS += \ | ||||
| ./src/codec/BitInputStream.d \ | ||||
| ./src/codec/BitOutputStream.d \ | ||||
| ./src/codec/ByteStream.d \ | ||||
| ./src/codec/DecoderChannel.d \ | ||||
| ./src/codec/EXIHeaderDecoder.d \ | ||||
| ./src/codec/EXIHeaderEncoder.d \ | ||||
| ./src/codec/EncoderChannel.d \ | ||||
| ./src/codec/MethodsBag.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/din" -I"../src/iso1" -I"../src/iso2" -I"../src/xmldsig" -I"../src/appHandshake" -I"../src/transport" -I"../src/test" -O0 -g3 -Wall -c -fmessage-length=0 -std=c99 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<" | ||||
| 	@echo 'Finished building: $<' | ||||
| 	@echo ' ' | ||||
|  | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user