robot class + serial class ok. Tcp server class seems ok
This commit is contained in:
		
							parent
							
								
									5beb9ad12d
								
							
						
					
					
						commit
						d6c8a54215
					
				
					 58 changed files with 2210 additions and 1720 deletions
				
			
		
							
								
								
									
										16
									
								
								.vscode/c_cpp_properties.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.vscode/c_cpp_properties.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| { | ||||
|     "configurations": [ | ||||
|         { | ||||
|             "name": "Linux", | ||||
|             "includePath": [ | ||||
|                 "${workspaceFolder}/**" | ||||
|             ], | ||||
|             "defines": [], | ||||
|             "compilerPath": "/usr/bin/clang", | ||||
|             "cStandard": "c11", | ||||
|             "cppStandard": "c++17", | ||||
|             "intelliSenseMode": "clang-x64" | ||||
|         } | ||||
|     ], | ||||
|     "version": 4 | ||||
| } | ||||
							
								
								
									
										16
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| { | ||||
|   // See https://go.microsoft.com/fwlink/?LinkId=733558 | ||||
|     // for the documentation about the tasks.json format | ||||
|     "version": "2.0.0", | ||||
|     "tasks": [ | ||||
|         { | ||||
|             "taskName": "Compile on raspberry", | ||||
|             "command": "rsync -az '${file}' 10.105.1.6:~ && ssh server.example.org 'chmod +x ./${fileBasename}; ./${fileBasename}'", | ||||
|             "type": "shell", | ||||
|             "group": { | ||||
|                 "kind": "build", | ||||
|                 "isDefault": true | ||||
|             } | ||||
|         } | ||||
|     ] | ||||
| } | ||||
|  | @ -0,0 +1,7 @@ | |||
| cmake_minimum_required(VERSION 3.9) | ||||
| project(stress) | ||||
| 
 | ||||
| set(CMAKE_CXX_STANDARD 11) | ||||
| 
 | ||||
| set(SOURCE_FILES main.cpp ../src/robot.cpp ../src/robot.h) | ||||
| add_executable(stress ${SOURCE_FILES}) | ||||
|  | @ -1,6 +1,6 @@ | |||
| #include <iostream> | ||||
| #include "../../src/definitions.h" | ||||
| #include "../../src/robot.h" | ||||
| #include "../src/definitions.h" | ||||
| #include "../src/robot.h" | ||||
| #include <ctime> | ||||
| 
 | ||||
| #define NB_TEST 50 | ||||
|  | @ -19,7 +19,7 @@ int nb_unknown_cmd; | |||
| int flipflop; | ||||
| 
 | ||||
| int main() { | ||||
|     if (open_communication_robot("/dev/ttyUSB0") != 0) { | ||||
|     if (open_communication_robot() != 0) { | ||||
|         std::cout << "Unable to open com port" << std::endl; | ||||
| 
 | ||||
|         return -1; | ||||
							
								
								
									
										145
									
								
								software/raspberry/superviseur-robot/example/.cproject
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								software/raspberry/superviseur-robot/example/.cproject
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,145 @@ | |||
| <?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="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908"> | ||||
| 			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908" moduleId="org.eclipse.cdt.core.settings" name="serialTest"> | ||||
| 				<externalSettings/> | ||||
| 				<extensions> | ||||
| 					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GASErrorParser" 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.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 				</extensions> | ||||
| 			</storageModule> | ||||
| 			<storageModule moduleId="cdtBuildSystem" version="4.0.0"> | ||||
| 				<configuration artifactName="${ProjName}" 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="Test RF quality" id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908" name="serialTest" parent="com.atollic.managedbuild.pctools.config.gnu.exe.debug"> | ||||
| 					<folderInfo id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908." name="/" resourcePath=""> | ||||
| 						<toolChain id="com.atollic.managedbuild.pctoolschain.gnu.exe.debug.1644719303" name="Atollic Linux PC Tools" superClass="com.atollic.managedbuild.pctoolschain.gnu.exe.debug"> | ||||
| 							<targetPlatform id="com.atollic.pctools.managedbuild.target.gnu.platform.exe.debug.444948895" name="Debug Platform" superClass="com.atollic.pctools.managedbuild.target.gnu.platform.exe.debug"/> | ||||
| 							<builder buildPath="${workspace_loc:/Dumber-Robot-Exemple}/Debug" customBuilderProperties="toolChainpathType=1|toolChainpathString=/opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.0.0/ARMTools/bin|" id="com.atollic.pctools.managedbuild.target.gnu.builder.exe.debug.703691933" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.atollic.pctools.managedbuild.target.gnu.builder.exe.debug"/> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.archiver.base.754185313" name="Archiver" superClass="com.atollic.managedbuild.pctools.gnu.archiver.base"/> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.cpp.compiler.exe.debug.460714726" name="C++ Compiler" superClass="com.atollic.managedbuild.pctools.gnu.cpp.compiler.exe.debug"> | ||||
| 								<option id="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.optimization.level.759860919" name="Optimization Level" superClass="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="com.atollic.pctools.gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.debugging.level.1134609705" name="Debug Level" superClass="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" value="com.atollic.pctools.gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.cpp.compiler.option.include.paths.1092205484" name="Include paths (-I)" superClass="com.atollic.pctools.gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/lib}""/> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> | ||||
| 								</option> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.cpp.compiler.input.18466674" superClass="com.atollic.managedbuild.pctools.gnu.cpp.compiler.input"/> | ||||
| 							</tool> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.c.compiler.exe.debug.1524457175" name="C Compiler" superClass="com.atollic.managedbuild.pctools.gnu.c.compiler.exe.debug"> | ||||
| 								<option defaultValue="com.atollic.pctools.gnu.c.optimization.level.none" id="com.atollic.pctools.gnu.c.compiler.exe.debug.option.optimization.level.602619486" name="Optimization Level" superClass="com.atollic.pctools.gnu.c.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.c.compiler.exe.debug.option.debugging.level.1202784327" name="Debug Level" superClass="com.atollic.pctools.gnu.c.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" value="com.atollic.pctools.gnu.c.debugging.level.max" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.c.compiler.option.include.paths.608880272" name="Include paths (-I)" superClass="com.atollic.pctools.gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/lib}""/> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> | ||||
| 								</option> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.c.compiler.input.978460249" superClass="com.atollic.managedbuild.pctools.gnu.c.compiler.input"/> | ||||
| 							</tool> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.c.linker.exe.debug.650018959" name="C Linker" superClass="com.atollic.managedbuild.pctools.gnu.c.linker.exe.debug"/> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.cpp.linker.exe.debug.949894658" name="C++ Linker" superClass="com.atollic.managedbuild.pctools.gnu.cpp.linker.exe.debug"> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.cpp.linker.input.520817887" superClass="com.atollic.managedbuild.pctools.gnu.cpp.linker.input"> | ||||
| 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> | ||||
| 									<additionalInput kind="additionalinput" paths="$(LIBS)"/> | ||||
| 								</inputType> | ||||
| 							</tool> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.assembler.exe.debug.1090002007" name="Assembler" superClass="com.atollic.managedbuild.pctools.gnu.assembler.exe.debug"> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.assembler.input.665455269" superClass="com.atollic.managedbuild.pctools.gnu.assembler.input"/> | ||||
| 							</tool> | ||||
| 						</toolChain> | ||||
| 					</folderInfo> | ||||
| 					<fileInfo id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.107079152" name="image.h" rcbsApplicability="disable" resourcePath="lib/image.h" toolsToInvoke=""/> | ||||
| 					<fileInfo id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.2136136082" name="Makefile" rcbsApplicability="disable" resourcePath="src/Makefile" toolsToInvoke=""/> | ||||
| 					<sourceEntries> | ||||
| 						<entry excluding="monitor.cpp|image.h|image.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="lib"/> | ||||
| 						<entry excluding="Makefile|videoExample.cpp|uiExample.cpp|serialExample.cpp|rtvideoExample.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/> | ||||
| 					</sourceEntries> | ||||
| 				</configuration> | ||||
| 			</storageModule> | ||||
| 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> | ||||
| 		</cconfiguration> | ||||
| 		<cconfiguration id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353"> | ||||
| 			<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353" moduleId="org.eclipse.cdt.core.settings" name="Server test"> | ||||
| 				<externalSettings/> | ||||
| 				<extensions> | ||||
| 					<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GASErrorParser" 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.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 					<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/> | ||||
| 				</extensions> | ||||
| 			</storageModule> | ||||
| 			<storageModule moduleId="cdtBuildSystem" version="4.0.0"> | ||||
| 				<configuration artifactName="ServerTest" 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="Test server setup" id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353" name="Server test" parent="com.atollic.managedbuild.pctools.config.gnu.exe.debug"> | ||||
| 					<folderInfo id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353." name="/" resourcePath=""> | ||||
| 						<toolChain id="com.atollic.managedbuild.pctoolschain.gnu.exe.debug.1769978487" name="Atollic Linux PC Tools" superClass="com.atollic.managedbuild.pctoolschain.gnu.exe.debug"> | ||||
| 							<targetPlatform id="com.atollic.pctools.managedbuild.target.gnu.platform.exe.debug.1135891617" name="Debug Platform" superClass="com.atollic.pctools.managedbuild.target.gnu.platform.exe.debug"/> | ||||
| 							<builder buildPath="${workspace_loc:/Dumber-Robot-Exemple}/Debug" customBuilderProperties="toolChainpathType=1|toolChainpathString=/opt/Atollic_TrueSTUDIO_for_STM32_x86_64_9.0.0/ARMTools/bin|" id="com.atollic.pctools.managedbuild.target.gnu.builder.exe.debug.1461439116" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make Builder" superClass="com.atollic.pctools.managedbuild.target.gnu.builder.exe.debug"/> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.archiver.base.1426655308" name="Archiver" superClass="com.atollic.managedbuild.pctools.gnu.archiver.base"/> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.cpp.compiler.exe.debug.115182827" name="C++ Compiler" superClass="com.atollic.managedbuild.pctools.gnu.cpp.compiler.exe.debug"> | ||||
| 								<option id="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.optimization.level.1103169709" name="Optimization Level" superClass="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="com.atollic.pctools.gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.debugging.level.1900144654" name="Debug Level" superClass="com.atollic.pctools.gnu.cpp.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" value="com.atollic.pctools.gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.cpp.compiler.option.include.paths.2096629070" name="Include paths (-I)" superClass="com.atollic.pctools.gnu.cpp.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/lib}""/> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> | ||||
| 								</option> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.cpp.compiler.input.928183158" superClass="com.atollic.managedbuild.pctools.gnu.cpp.compiler.input"/> | ||||
| 							</tool> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.c.compiler.exe.debug.1435027661" name="C Compiler" superClass="com.atollic.managedbuild.pctools.gnu.c.compiler.exe.debug"> | ||||
| 								<option defaultValue="com.atollic.pctools.gnu.c.optimization.level.none" id="com.atollic.pctools.gnu.c.compiler.exe.debug.option.optimization.level.169974575" name="Optimization Level" superClass="com.atollic.pctools.gnu.c.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.c.compiler.exe.debug.option.debugging.level.980419679" name="Debug Level" superClass="com.atollic.pctools.gnu.c.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" value="com.atollic.pctools.gnu.c.debugging.level.max" valueType="enumerated"/> | ||||
| 								<option id="com.atollic.pctools.gnu.c.compiler.option.include.paths.967863685" name="Include paths (-I)" superClass="com.atollic.pctools.gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath"> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/lib}""/> | ||||
| 									<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/src}""/> | ||||
| 								</option> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.c.compiler.input.1991549921" superClass="com.atollic.managedbuild.pctools.gnu.c.compiler.input"/> | ||||
| 							</tool> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.c.linker.exe.debug.1530079011" name="C Linker" superClass="com.atollic.managedbuild.pctools.gnu.c.linker.exe.debug"/> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.cpp.linker.exe.debug.1993338495" name="C++ Linker" superClass="com.atollic.managedbuild.pctools.gnu.cpp.linker.exe.debug"> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.cpp.linker.input.774293629" superClass="com.atollic.managedbuild.pctools.gnu.cpp.linker.input"> | ||||
| 									<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> | ||||
| 									<additionalInput kind="additionalinput" paths="$(LIBS)"/> | ||||
| 								</inputType> | ||||
| 							</tool> | ||||
| 							<tool id="com.atollic.managedbuild.pctools.gnu.assembler.exe.debug.210875902" name="Assembler" superClass="com.atollic.managedbuild.pctools.gnu.assembler.exe.debug"> | ||||
| 								<inputType id="com.atollic.managedbuild.pctools.gnu.assembler.input.61333264" superClass="com.atollic.managedbuild.pctools.gnu.assembler.input"/> | ||||
| 							</tool> | ||||
| 						</toolChain> | ||||
| 					</folderInfo> | ||||
| 					<fileInfo id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353.lib/image.h" name="image.h" rcbsApplicability="disable" resourcePath="lib/image.h" toolsToInvoke=""/> | ||||
| 					<fileInfo id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353.src/Makefile" name="Makefile" rcbsApplicability="disable" resourcePath="src/Makefile" toolsToInvoke=""/> | ||||
| 					<sourceEntries> | ||||
| 						<entry excluding="monitor.cpp|image.h|image.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="lib"/> | ||||
| 						<entry excluding="serialTest.cpp|Makefile|videoExample.cpp|uiExample.cpp|serialExample.cpp|rtvideoExample.cpp" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/> | ||||
| 					</sourceEntries> | ||||
| 				</configuration> | ||||
| 			</storageModule> | ||||
| 			<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/> | ||||
| 		</cconfiguration> | ||||
| 	</storageModule> | ||||
| 	<storageModule moduleId="cdtBuildSystem" version="4.0.0"> | ||||
| 		<project id="Dumber-Robot-Exemple.com.atollic.pctools.managedbuild.target.gnu.exe.162302072" name="Executable" projectType="com.atollic.pctools.managedbuild.target.gnu.exe"/> | ||||
| 	</storageModule> | ||||
| 	<storageModule moduleId="scannerConfiguration"> | ||||
| 		<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/> | ||||
| 	</storageModule> | ||||
| 	<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/> | ||||
| 	<storageModule moduleId="refreshScope" versionNumber="2"> | ||||
| 		<configuration configurationName="Server test"> | ||||
| 			<resource resourceType="PROJECT" workspacePath="/Dumber-Robot-Exemple"/> | ||||
| 		</configuration> | ||||
| 		<configuration configurationName="serialTest"> | ||||
| 			<resource resourceType="PROJECT" workspacePath="/Dumber-Robot-Exemple"/> | ||||
| 		</configuration> | ||||
| 		<configuration configurationName="Debug"> | ||||
| 			<resource resourceType="PROJECT" workspacePath="/Dumber-Robot-Exemple"/> | ||||
| 		</configuration> | ||||
| 		<configuration configurationName="Release"> | ||||
| 			<resource resourceType="PROJECT" workspacePath="/Dumber-Robot-Exemple"/> | ||||
| 		</configuration> | ||||
| 	</storageModule> | ||||
| 	<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> | ||||
| </cproject> | ||||
							
								
								
									
										2
									
								
								software/raspberry/superviseur-robot/example/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								software/raspberry/superviseur-robot/example/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| /Debug/ | ||||
| /Server test/ | ||||
							
								
								
									
										0
									
								
								software/raspberry/superviseur-robot/example/.gitignores
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								software/raspberry/superviseur-robot/example/.gitignores
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										27
									
								
								software/raspberry/superviseur-robot/example/.project
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								software/raspberry/superviseur-robot/example/.project
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <projectDescription> | ||||
| 	<name>Dumber-Robot-Exemple</name> | ||||
| 	<comment></comment> | ||||
| 	<projects> | ||||
| 	</projects> | ||||
| 	<buildSpec> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name> | ||||
| 			<triggers>clean,full,incremental,</triggers> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 		<buildCommand> | ||||
| 			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name> | ||||
| 			<triggers>full,incremental,</triggers> | ||||
| 			<arguments> | ||||
| 			</arguments> | ||||
| 		</buildCommand> | ||||
| 	</buildSpec> | ||||
| 	<natures> | ||||
| 		<nature>org.eclipse.cdt.core.cnature</nature> | ||||
| 		<nature>org.eclipse.cdt.core.ccnature</nature> | ||||
| 		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> | ||||
| 		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> | ||||
| 	</natures> | ||||
| </projectDescription> | ||||
|  | @ -0,0 +1,25 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <project> | ||||
| 	<configuration id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908" name="serialTest"> | ||||
| 		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> | ||||
| 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> | ||||
| 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> | ||||
| 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> | ||||
| 			<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="205429042390110507" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> | ||||
| 				<language-scope id="org.eclipse.cdt.core.gcc"/> | ||||
| 				<language-scope id="org.eclipse.cdt.core.g++"/> | ||||
| 			</provider> | ||||
| 		</extension> | ||||
| 	</configuration> | ||||
| 	<configuration id="com.atollic.managedbuild.pctools.config.gnu.exe.debug.119910908.1158593353" name="Server test"> | ||||
| 		<extension point="org.eclipse.cdt.core.LanguageSettingsProvider"> | ||||
| 			<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> | ||||
| 			<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> | ||||
| 			<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> | ||||
| 			<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="205429042390110507" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true"> | ||||
| 				<language-scope id="org.eclipse.cdt.core.gcc"/> | ||||
| 				<language-scope id="org.eclipse.cdt.core.g++"/> | ||||
| 			</provider> | ||||
| 		</extension> | ||||
| 	</configuration> | ||||
| </project> | ||||
							
								
								
									
										1
									
								
								software/raspberry/superviseur-robot/example/lib
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								software/raspberry/superviseur-robot/example/lib
									
									
									
									
									
										Symbolic link
									
								
							|  | @ -0,0 +1 @@ | |||
| ../src/ | ||||
|  | @ -0,0 +1,28 @@ | |||
| ################################################################################
 | ||||
| # Automatically-generated file. Do not edit!
 | ||||
| ################################################################################
 | ||||
| 
 | ||||
| # Add inputs and outputs from these tool invocations to the build variables 
 | ||||
| CPP_SRCS += \
 | ||||
| ../lib/Robot.cpp \ | ||||
| ../lib/Serial.cpp \ | ||||
| ../lib/TcpServer.cpp \ | ||||
| ../lib/message.cpp  | ||||
| 
 | ||||
| OBJS += \
 | ||||
| ./lib/Robot.o \ | ||||
| ./lib/Serial.o \ | ||||
| ./lib/TcpServer.o \ | ||||
| ./lib/message.o  | ||||
| 
 | ||||
| CPP_DEPS += \
 | ||||
| ./lib/Robot.d \ | ||||
| ./lib/Serial.d \ | ||||
| ./lib/TcpServer.d \ | ||||
| ./lib/message.d  | ||||
| 
 | ||||
| 
 | ||||
| # Each subdirectory must supply rules for building sources it contributes
 | ||||
| lib/%.o: ../lib/%.cpp | ||||
| 	g++ -I"/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/example/lib" -I"/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/example/src" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" | ||||
| 
 | ||||
|  | @ -0,0 +1,56 @@ | |||
| ################################################################################
 | ||||
| # 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/subdir.mk | ||||
| -include lib/subdir.mk | ||||
| -include subdir.mk | ||||
| -include objects.mk | ||||
| 
 | ||||
| ifneq ($(MAKECMDGOALS),clean) | ||||
| ifneq ($(strip $(CC_DEPS)),) | ||||
| -include $(CC_DEPS) | ||||
| endif | ||||
| ifneq ($(strip $(C++_DEPS)),) | ||||
| -include $(C++_DEPS) | ||||
| endif | ||||
| ifneq ($(strip $(C_UPPER_DEPS)),) | ||||
| -include $(C_UPPER_DEPS) | ||||
| endif | ||||
| ifneq ($(strip $(CXX_DEPS)),) | ||||
| -include $(CXX_DEPS) | ||||
| endif | ||||
| ifneq ($(strip $(CPP_DEPS)),) | ||||
| -include $(CPP_DEPS) | ||||
| endif | ||||
| 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: Dumber-Robot-Exemple | ||||
| 
 | ||||
| # Tool invocations
 | ||||
| Dumber-Robot-Exemple: $(OBJS) $(USER_OBJS) | ||||
| 	g++  -o "Dumber-Robot-Exemple" $(OBJS) $(USER_OBJS) $(LIBS) | ||||
| 
 | ||||
| # Other Targets
 | ||||
| clean: | ||||
| 	-$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(C_UPPER_DEPS)$(CXX_DEPS)$(OBJS)$(CPP_DEPS)$(C_DEPS) Dumber-Robot-Exemple | ||||
| 	-@echo ' ' | ||||
| 
 | ||||
| .PHONY: all clean dependents | ||||
| .SECONDARY: | ||||
| 
 | ||||
| -include ../makefile.targets | ||||
|  | @ -0,0 +1,8 @@ | |||
| ################################################################################
 | ||||
| # Automatically-generated file. Do not edit!
 | ||||
| ################################################################################
 | ||||
| 
 | ||||
| USER_OBJS := | ||||
| 
 | ||||
| LIBS := | ||||
| 
 | ||||
|  | @ -0,0 +1,28 @@ | |||
| ################################################################################
 | ||||
| # Automatically-generated file. Do not edit!
 | ||||
| ################################################################################
 | ||||
| 
 | ||||
| C_UPPER_SRCS :=  | ||||
| CXX_SRCS :=  | ||||
| C++_SRCS :=  | ||||
| OBJ_SRCS :=  | ||||
| CC_SRCS :=  | ||||
| ASM_SRCS :=  | ||||
| CPP_SRCS :=  | ||||
| C_SRCS :=  | ||||
| O_SRCS :=  | ||||
| S_UPPER_SRCS :=  | ||||
| CC_DEPS :=  | ||||
| C++_DEPS :=  | ||||
| EXECUTABLES :=  | ||||
| C_UPPER_DEPS :=  | ||||
| CXX_DEPS :=  | ||||
| OBJS :=  | ||||
| CPP_DEPS :=  | ||||
| C_DEPS :=  | ||||
| 
 | ||||
| # Every subdirectory with source files must be described here
 | ||||
| SUBDIRS := \
 | ||||
| lib \ | ||||
| src \ | ||||
| 
 | ||||
|  | @ -0,0 +1,22 @@ | |||
| ################################################################################
 | ||||
| # Automatically-generated file. Do not edit!
 | ||||
| ################################################################################
 | ||||
| 
 | ||||
| # Add inputs and outputs from these tool invocations to the build variables 
 | ||||
| CPP_SRCS += \
 | ||||
| ../src/serialTest.cpp \ | ||||
| ../src/serverTest.cpp  | ||||
| 
 | ||||
| OBJS += \
 | ||||
| ./src/serialTest.o \ | ||||
| ./src/serverTest.o  | ||||
| 
 | ||||
| CPP_DEPS += \
 | ||||
| ./src/serialTest.d \ | ||||
| ./src/serverTest.d  | ||||
| 
 | ||||
| 
 | ||||
| # Each subdirectory must supply rules for building sources it contributes
 | ||||
| src/%.o: ../src/%.cpp | ||||
| 	g++ -I"/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/example/lib" -I"/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/example/src" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -o "$@" "$<" | ||||
| 
 | ||||
							
								
								
									
										186
									
								
								software/raspberry/superviseur-robot/example/src/serialTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								software/raspberry/superviseur-robot/example/src/serialTest.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,186 @@ | |||
| /*******************************************************************************
 | ||||
|  * Copyright (c) 2018 INSA - GEI, Toulouse, France. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available "AS IS", without any warranty of any kind. | ||||
|  * | ||||
|  * INSA assumes no responsibility for errors or omissions in the  | ||||
|  * software or documentation available.  | ||||
|  * | ||||
|  * Part of code Copyright ST Microelectronics. | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     Lucien Senaneuch - Initial API and implementation | ||||
|  *     Sebastien DI MERCURIO - Maintainer since Octobre 2018 | ||||
|  *******************************************************************************/ | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <ctime> | ||||
| #include "Robot.h" | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| #define NB_TEST 50 | ||||
| #define DELAY_BETWEEN_TEST 1000000 // 1 seconde
 | ||||
| 
 | ||||
| int nb_retries; | ||||
| int nb_test; | ||||
| 
 | ||||
| int laststatus; | ||||
| int nb_success; | ||||
| int nb_timeout; | ||||
| int nb_unknown_cmd; | ||||
| 
 | ||||
| int flipflop; | ||||
| 
 | ||||
| int Test(Robot rob) { | ||||
|     try { | ||||
|         if (flipflop == 0) { | ||||
|             rob.Move(100); | ||||
|         } else { | ||||
|             rob.Move(-100); | ||||
|         } | ||||
|     } catch (string e) { | ||||
|         //if (e.find("Timeout")==string.npos)
 | ||||
|         //    status=ROBOT_TIMED_OUT;
 | ||||
| 
 | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     return rob.GetLastCommandStatus();; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     Robot myRobot; | ||||
| 
 | ||||
|     if (myRobot.Open("/dev/ttyUSB0") == SUCCESS) { // ouverture de la com avec le robot
 | ||||
| 
 | ||||
|         std::cout << "Start robot: "; | ||||
|         try { | ||||
|             myRobot.StartWithoutWatchdog(); | ||||
|         } catch ( string e ) { | ||||
|             std::cerr << std::endl << e << std::endl; | ||||
|             return 1; | ||||
|         } | ||||
| 
 | ||||
|         if (myRobot.GetLastCommandStatus()==SUCCESS) | ||||
|             std::cout << "Ok" <<std::endl; | ||||
|         else { | ||||
|             std::cout << " Error: GetLastCommand returns " << myRobot.GetLastCommandStatus() <<std::endl; | ||||
|             return 2; | ||||
|         } | ||||
| 
 | ||||
|         std::cout << "Start stress test" << std::endl; | ||||
|         time_t t_debut, t_fin; | ||||
|         struct tm *tm_debut, *tm_fin; | ||||
| 
 | ||||
|         time(&t_debut); | ||||
|         tm_debut = localtime((const time_t*)&t_debut); | ||||
|         std::cout << "[start time]: " << asctime(tm_debut) << std::endl; | ||||
| 
 | ||||
|         nb_success =0; | ||||
|         nb_timeout =0; | ||||
|         nb_unknown_cmd =0; | ||||
|         flipflop = 0; | ||||
| 
 | ||||
|         for (nb_test=0; nb_test < NB_TEST; nb_test++) { | ||||
|             laststatus=Test(myRobot); | ||||
| 
 | ||||
|             if (flipflop ==0) flipflop=1; | ||||
|             else flipflop =0; | ||||
| 
 | ||||
|             if (laststatus == SUCCESS) nb_success++; | ||||
|             else if (laststatus == TIMEOUT_COMMAND) nb_timeout++; | ||||
|             else if ((laststatus == INVALID_ANSWER) || (laststatus == INVALID_COMMAND)) nb_unknown_cmd ++; | ||||
| 
 | ||||
|             std::cout << "Test " << nb_test << " [s " << nb_success | ||||
|                     << ": t " << nb_timeout << ": u " << nb_unknown_cmd | ||||
|                     << "]"<< "\x1B" <<"[30D"<<std::flush; | ||||
| 
 | ||||
|             usleep(DELAY_BETWEEN_TEST); | ||||
|         } | ||||
| 
 | ||||
|         time(&t_fin); | ||||
|         tm_fin = localtime((const time_t*)&t_fin); | ||||
|         std::cout << std::endl << std::endl << "[end time]: " << asctime(tm_fin) << std::endl; | ||||
| 
 | ||||
|         std::cout << "Reset robot" <<std::endl; | ||||
|         myRobot.Reset(); | ||||
| 
 | ||||
|         std::cout << "Close com" <<std::endl; | ||||
|         myRobot.Close(); | ||||
| 
 | ||||
|     } else { | ||||
|         std::cerr << "Unable to open \\dev\\ttyUSB0" << std::endl; | ||||
| 
 | ||||
|         return 2; | ||||
|     } | ||||
| 
 | ||||
|     //    if (open_communication_robot("/dev/ttyUSB0") != 0) {
 | ||||
|     //        std::cout << "Unable to open com port" << std::endl;
 | ||||
|     //
 | ||||
|     //        return -1;
 | ||||
|     //    }
 | ||||
|     //
 | ||||
|     //    std::cout << "Debut du test de stress" << std::endl;
 | ||||
|     //    time_t t_debut, t_fin;
 | ||||
|     //    struct tm *tm_debut, *tm_fin;
 | ||||
|     //
 | ||||
|     //    time(&t_debut);
 | ||||
|     //    tm_debut = localtime((const time_t*)&t_debut);
 | ||||
|     //
 | ||||
|     //    std::cout << "[heure debut]: " << asctime(tm_debut) << std::endl;
 | ||||
|     //
 | ||||
|     //    nb_retries=-1;
 | ||||
|     //    do {
 | ||||
|     //        usleep(DELAY_BETWEEN_RETRIES);
 | ||||
|     //        nb_retries++;
 | ||||
|     //        laststatus = send_command_to_robot(DMB_START_WITHOUT_WD);
 | ||||
|     //    } while ((nb_retries<NB_RETRIES_MAX) && (laststatus != 0));
 | ||||
|     //
 | ||||
|     //    if(nb_retries == NB_RETRIES_MAX) {
 | ||||
|     //        std::cout << "Unable to start robot" <<std::endl;
 | ||||
|     //
 | ||||
|     //        return -1;
 | ||||
|     //    }
 | ||||
|     //
 | ||||
|     //    nb_success =0;
 | ||||
|     //    nb_timeout =0;
 | ||||
|     //    nb_unknown_cmd =0;
 | ||||
|     //    flipflop = 0;
 | ||||
|     //
 | ||||
|     //    for (nb_test=0; nb_test < NB_TEST; nb_test++) {
 | ||||
|     //        nb_retries=-1;
 | ||||
|     //
 | ||||
|     //        do {
 | ||||
|     //            usleep(DELAY_BETWEEN_RETRIES);
 | ||||
|     //            nb_retries++;
 | ||||
|     //            if (flipflop == 0) {
 | ||||
|     //                laststatus = send_command_to_robot(DMB_TURN, "100");
 | ||||
|     //            } else {
 | ||||
|     //                laststatus = send_command_to_robot(DMB_TURN, "-100");
 | ||||
|     //            }
 | ||||
|     //
 | ||||
|     //        } while ((nb_retries<NB_RETRIES_MAX) && (laststatus != 0));
 | ||||
|     //
 | ||||
|     //        if (flipflop ==0) flipflop=1;
 | ||||
|     //        else flipflop =0;
 | ||||
|     //
 | ||||
|     //        if (laststatus == 0) nb_success++;
 | ||||
|     //        else if (laststatus == ROBOT_TIMED_OUT) nb_timeout++;
 | ||||
|     //        else if (laststatus == ROBOT_UKNOWN_CMD) nb_unknown_cmd ++;
 | ||||
|     //
 | ||||
|     //        std::cout << "Test " << nb_test << " [s " << nb_success
 | ||||
|     //                  << ": t " << nb_timeout << ": u " << nb_unknown_cmd
 | ||||
|     //                  << "]"<< "\x1B" <<"[30D"<<std::flush;
 | ||||
|     //
 | ||||
|     //        usleep(DELAY_BETWEEN_TEST);
 | ||||
|     //    }
 | ||||
|     //
 | ||||
|     //    time(&t_fin);
 | ||||
|     //    tm_fin = localtime((const time_t*)&t_fin);
 | ||||
|     //
 | ||||
|     //    std::cout << std::endl << std::endl << "[heure fin]: " << asctime(tm_fin) << std::endl;
 | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
							
								
								
									
										111
									
								
								software/raspberry/superviseur-robot/example/src/serverTest.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								software/raspberry/superviseur-robot/example/src/serverTest.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,111 @@ | |||
| /*******************************************************************************
 | ||||
|  * Copyright (c) 2018 INSA - GEI, Toulouse, France. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available "AS IS", without any warranty of any kind. | ||||
|  * | ||||
|  * INSA assumes no responsibility for errors or omissions in the  | ||||
|  * software or documentation available.  | ||||
|  * | ||||
|  * Part of code Copyright ST Microelectronics. | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     Lucien Senaneuch - Initial API and implementation | ||||
|  *     Sebastien DI MERCURIO - Maintainer since Octobre 2018 | ||||
|  *******************************************************************************/ | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include "Robot.h" | ||||
| #include "TcpServer.h" | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|     TcpServer server; | ||||
|     int clientFD; | ||||
|     string msgIn, msgOut,tmp; | ||||
|     bool finish; | ||||
| 
 | ||||
|     Robot robot; | ||||
| 
 | ||||
|     cout << "TCP server example" << endl; | ||||
| 
 | ||||
|     cout << "Bind and listen on port 1337: "; | ||||
|     try { | ||||
|         server.Listen(1337); | ||||
|     } | ||||
|     catch ( const invalid_argument &ia ) { | ||||
|         cerr << "Error binding server: " << ia.what() << endl; | ||||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
|     cout << "Ok" <<endl; | ||||
| 
 | ||||
|     cout << "Open com with robot: "; | ||||
|     try { | ||||
|         robot.Open ("/dev/ttyUSB0"); | ||||
|     } catch (string e) | ||||
|     { | ||||
|         cerr << e << endl; | ||||
|         return 3; | ||||
|     } | ||||
| 
 | ||||
|     cout << "Ok" <<endl; | ||||
| 
 | ||||
|     while (1) | ||||
|     { | ||||
|         cout << "Wait for client to connect: "; | ||||
|         try { | ||||
|             clientFD= server.AcceptClient(); | ||||
|         } | ||||
|         catch ( const invalid_argument &ia ) { | ||||
|             cerr << "Error during client accept: " << ia.what() << endl; | ||||
|             return 2; | ||||
|         } | ||||
| 
 | ||||
|         cout << to_string(clientFD) << endl; | ||||
| 
 | ||||
|         msgIn.clear(); | ||||
|         finish=false; | ||||
| 
 | ||||
|         do { | ||||
|             msgIn = server.Receive(clientFD, 2); // cmd + \n
 | ||||
| 
 | ||||
|             if (msgIn.empty()) finish=true; | ||||
|             else { | ||||
|                 try { | ||||
|                     switch (msgIn[0]) { | ||||
|                         case 's': | ||||
|                             // Start robot
 | ||||
|                             robot.StartWithoutWatchdog(); | ||||
|                             break; | ||||
|                         case 'f': | ||||
|                             robot.Move(100); | ||||
|                             break; | ||||
|                         case 'b': | ||||
|                             robot.Move(-100); | ||||
|                             break; | ||||
|                         case 'r': | ||||
|                             robot.Turn(90); | ||||
|                             break; | ||||
|                         case 'l': | ||||
|                             robot.Turn(-90); | ||||
|                             break; | ||||
|                         case 'Q': | ||||
|                             robot.Reset(); | ||||
|                             break; | ||||
|                     } | ||||
|                 } catch (string e) { | ||||
|                     cerr << e; | ||||
|                 } | ||||
| 
 | ||||
|                 if (robot.GetLastCommandStatus() == SUCCESS) | ||||
|                     server.Send(clientFD, "OK\n"); | ||||
|                 else server.Send(clientFD, "ERR\n"); | ||||
|             } | ||||
|         } while (finish==false); | ||||
| 
 | ||||
|         cout << "Client disconnected" <<endl; | ||||
|         clientFD=-1; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
|  | @ -1,8 +0,0 @@ | |||
| *.o | ||||
| *.d | ||||
| CMakeTmp | ||||
| stress.dir | ||||
| 3.9.6 | ||||
| *.log | ||||
| *.bin | ||||
| 
 | ||||
|  | @ -1,29 +0,0 @@ | |||
| <component name="ProjectCodeStyleConfiguration"> | ||||
|   <code_scheme name="Project" version="173"> | ||||
|     <Objective-C-extensions> | ||||
|       <file> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" /> | ||||
|       </file> | ||||
|       <class> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" /> | ||||
|         <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" /> | ||||
|       </class> | ||||
|       <extensions> | ||||
|         <pair source="cpp" header="h" fileNamingConvention="NONE" /> | ||||
|         <pair source="c" header="h" fileNamingConvention="NONE" /> | ||||
|       </extensions> | ||||
|     </Objective-C-extensions> | ||||
|   </code_scheme> | ||||
| </component> | ||||
|  | @ -1,4 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> | ||||
| </project> | ||||
|  | @ -1,8 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ProjectModuleManager"> | ||||
|     <modules> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/stress.iml" filepath="$PROJECT_DIR$/.idea/stress.iml" /> | ||||
|     </modules> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -1,2 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module classpath="CMake" type="CPP_MODULE" version="4" /> | ||||
|  | @ -1,6 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$/../.." vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -1,294 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true" buildAllGenerated="true"> | ||||
|     <generated> | ||||
|       <config projectName="stress" targetName="stress" /> | ||||
|     </generated> | ||||
|   </component> | ||||
|   <component name="CMakeSettings"> | ||||
|     <configurations> | ||||
|       <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> | ||||
|     </configurations> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="6f68a0e1-52e9-471a-8d47-af63db94b711" name="Default" comment=""> | ||||
|       <change beforePath="" afterPath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" /> | ||||
|       <change beforePath="" afterPath="$PROJECT_DIR$/.idea/misc.xml" /> | ||||
|       <change beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" /> | ||||
|     </list> | ||||
|     <ignored path="$PROJECT_DIR$/cmake-build-debug/" /> | ||||
|     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> | ||||
|     <option name="TRACKING_ENABLED" value="true" /> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
|     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||||
|     <option name="LAST_RESOLUTION" value="IGNORE" /> | ||||
|   </component> | ||||
|   <component name="ExecutionTargetManager" SELECTED_TARGET="CMakeBuildProfile:Debug" /> | ||||
|   <component name="FileEditorManager"> | ||||
|     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> | ||||
|       <file leaf-file-name="CMakeLists.txt" pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/CMakeLists.txt"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="108"> | ||||
|               <caret line="6" column="16" lean-forward="false" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" /> | ||||
|               <folding /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file leaf-file-name="main.cpp" pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/main.cpp"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="144"> | ||||
|               <caret line="8" column="28" lean-forward="false" selection-start-line="8" selection-start-column="28" selection-end-line="8" selection-end-column="28" /> | ||||
|               <folding> | ||||
|                 <element signature="e#0#19#0" expanded="true" /> | ||||
|               </folding> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file leaf-file-name="robot.h" pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/../../src/robot.h"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="-378"> | ||||
|               <caret line="18" column="19" lean-forward="true" selection-start-line="18" selection-start-column="19" selection-end-line="18" selection-end-column="19" /> | ||||
|               <folding /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file leaf-file-name="robot.cpp" pinned="false" current-in-tab="true"> | ||||
|         <entry file="file://$PROJECT_DIR$/../../src/robot.cpp"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="-1890"> | ||||
|               <caret line="6" column="9" lean-forward="true" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="9" /> | ||||
|               <folding /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file leaf-file-name="definitions.h" pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/../../src/definitions.h"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="252"> | ||||
|               <caret line="35" column="24" lean-forward="false" selection-start-line="35" selection-start-column="8" selection-end-line="35" selection-end-column="24" /> | ||||
|               <folding /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|     </leaf> | ||||
|   </component> | ||||
|   <component name="Git.Settings"> | ||||
|     <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../.." /> | ||||
|   </component> | ||||
|   <component name="IdeDocumentHistory"> | ||||
|     <option name="CHANGED_PATHS"> | ||||
|       <list> | ||||
|         <option value="$PROJECT_DIR$/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/main.cpp" /> | ||||
|       </list> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> | ||||
|   <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> | ||||
|   <component name="JsGulpfileManager"> | ||||
|     <detection-done>true</detection-done> | ||||
|     <sorting>DEFINITION_ORDER</sorting> | ||||
|   </component> | ||||
|   <component name="ProjectFrameBounds"> | ||||
|     <option name="x" value="331" /> | ||||
|     <option name="y" value="64" /> | ||||
|     <option name="width" value="1400" /> | ||||
|     <option name="height" value="873" /> | ||||
|   </component> | ||||
|   <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> | ||||
|   <component name="ProjectView"> | ||||
|     <navigator currentView="ProjectPane" proportions="" version="1"> | ||||
|       <flattenPackages /> | ||||
|       <showMembers /> | ||||
|       <showModules /> | ||||
|       <showLibraryContents /> | ||||
|       <hideEmptyPackages /> | ||||
|       <abbreviatePackageNames /> | ||||
|       <autoscrollToSource /> | ||||
|       <autoscrollFromSource /> | ||||
|       <sortByType /> | ||||
|       <manualOrder /> | ||||
|       <foldersAlwaysOnTop value="true" /> | ||||
|     </navigator> | ||||
|     <panes> | ||||
|       <pane id="ProjectPane"> | ||||
|         <subPane> | ||||
|           <expand> | ||||
|             <path> | ||||
|               <item name="stress" type="dad4c3:CidrFilesViewHelper$MyProjectTreeStructure$1" /> | ||||
|               <item name="stress" type="47feb1d3:ProjectViewModuleNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="stress" type="dad4c3:CidrFilesViewHelper$MyProjectTreeStructure$1" /> | ||||
|               <item name="stress" type="47feb1d3:ProjectViewModuleNode" /> | ||||
|               <item name="stress" type="462c0819:PsiDirectoryNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="stress" type="dad4c3:CidrFilesViewHelper$MyProjectTreeStructure$1" /> | ||||
|               <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="stress" type="dad4c3:CidrFilesViewHelper$MyProjectTreeStructure$1" /> | ||||
|               <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" /> | ||||
|               <item name="Header Search Paths" type="70bed36:NamedLibraryElementNode" /> | ||||
|             </path> | ||||
|           </expand> | ||||
|           <select /> | ||||
|         </subPane> | ||||
|       </pane> | ||||
|     </panes> | ||||
|   </component> | ||||
|   <component name="PropertiesComponent"> | ||||
|     <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> | ||||
|     <property name="WebServerToolWindowFactoryState" value="false" /> | ||||
|     <property name="settings.editor.selected.configurable" value="preferences.lookFeel" /> | ||||
|     <property name="last_opened_file_path" value="$PROJECT_DIR$/../../src/definitions.h" /> | ||||
|   </component> | ||||
|   <component name="RunDashboard"> | ||||
|     <option name="ruleStates"> | ||||
|       <list> | ||||
|         <RuleState> | ||||
|           <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> | ||||
|         </RuleState> | ||||
|         <RuleState> | ||||
|           <option name="name" value="StatusDashboardGroupingRule" /> | ||||
|         </RuleState> | ||||
|       </list> | ||||
|     </option> | ||||
|   </component> | ||||
|   <component name="RunManager" selected="Application.stress"> | ||||
|     <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="stress" RUN_TARGET_NAME="stress" EXPLICIT_BUILD_TARGET_NAME="all"> | ||||
|       <envs /> | ||||
|     </configuration> | ||||
|     <configuration name="stress" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="stress" TARGET_NAME="stress" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="stress" RUN_TARGET_NAME="stress"> | ||||
|       <envs /> | ||||
|     </configuration> | ||||
|     <list size="2"> | ||||
|       <item index="0" class="java.lang.String" itemvalue="Application.Build All" /> | ||||
|       <item index="1" class="java.lang.String" itemvalue="Application.stress" /> | ||||
|     </list> | ||||
|   </component> | ||||
|   <component name="ShelveChangesManager" show_recycled="false"> | ||||
|     <option name="remove_strategy" value="false" /> | ||||
|   </component> | ||||
|   <component name="TaskManager"> | ||||
|     <task active="true" id="Default" summary="Default task"> | ||||
|       <changelist id="6f68a0e1-52e9-471a-8d47-af63db94b711" name="Default" comment="" /> | ||||
|       <created>1518169204762</created> | ||||
|       <option name="number" value="Default" /> | ||||
|       <option name="presentableId" value="Default" /> | ||||
|       <updated>1518169204762</updated> | ||||
|       <workItem from="1518169206682" duration="106000" /> | ||||
|       <workItem from="1518169334602" duration="6358000" /> | ||||
|     </task> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="TimeTrackingManager"> | ||||
|     <option name="totallyTimeSpent" value="6464000" /> | ||||
|   </component> | ||||
|   <component name="ToolWindowManager"> | ||||
|     <frame x="331" y="64" width="1400" height="873" extended-state="0" /> | ||||
|     <editor active="true" /> | ||||
|     <layout> | ||||
|       <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18785714" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" /> | ||||
|       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Messages" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.18037136" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="CMake" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.47612733" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" /> | ||||
|       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> | ||||
|       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" /> | ||||
|       <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> | ||||
|       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> | ||||
|     </layout> | ||||
|   </component> | ||||
|   <component name="TypeScriptGeneratedFilesManager"> | ||||
|     <option name="version" value="1" /> | ||||
|   </component> | ||||
|   <component name="VcsContentAnnotationSettings"> | ||||
|     <option name="myLimit" value="2678400000" /> | ||||
|   </component> | ||||
|   <component name="XDebuggerManager"> | ||||
|     <breakpoint-manager /> | ||||
|     <watches-manager /> | ||||
|   </component> | ||||
|   <component name="editorHistoryManager"> | ||||
|     <entry file="file://$PROJECT_DIR$/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="0"> | ||||
|           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> | ||||
|           <folding /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/main.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="0"> | ||||
|           <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> | ||||
|           <folding> | ||||
|             <element signature="e#0#19#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="108"> | ||||
|           <caret line="6" column="16" lean-forward="false" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" /> | ||||
|           <folding /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/../../src/definitions.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="252"> | ||||
|           <caret line="35" column="24" lean-forward="false" selection-start-line="35" selection-start-column="8" selection-end-line="35" selection-end-column="24" /> | ||||
|           <folding /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/main.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="144"> | ||||
|           <caret line="8" column="28" lean-forward="false" selection-start-line="8" selection-start-column="28" selection-end-line="8" selection-end-column="28" /> | ||||
|           <folding> | ||||
|             <element signature="e#0#19#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/../../src/robot.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-378"> | ||||
|           <caret line="18" column="19" lean-forward="true" selection-start-line="18" selection-start-column="19" selection-end-line="18" selection-end-column="19" /> | ||||
|           <folding /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/../../src/robot.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-1890"> | ||||
|           <caret line="6" column="9" lean-forward="true" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="9" /> | ||||
|           <folding /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|   </component> | ||||
| </project> | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -1,16 +0,0 @@ | |||
| # CMAKE generated file: DO NOT EDIT! | ||||
| # Generated by "Unix Makefiles" Generator, CMake Version 3.9 | ||||
| 
 | ||||
| # Relative path conversion top directories. | ||||
| set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/dimercur/Travail/git/C-TP-RT/example/stress") | ||||
| set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug") | ||||
| 
 | ||||
| # Force unix paths in dependencies. | ||||
| set(CMAKE_FORCE_UNIX_PATHS 1) | ||||
| 
 | ||||
| 
 | ||||
| # The C and CXX include file regular expressions for this directory. | ||||
| set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") | ||||
| set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") | ||||
| set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) | ||||
| set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) | ||||
|  | @ -1,49 +0,0 @@ | |||
| # CMAKE generated file: DO NOT EDIT! | ||||
| # Generated by "Unix Makefiles" Generator, CMake Version 3.9 | ||||
| 
 | ||||
| # The generator used is: | ||||
| set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") | ||||
| 
 | ||||
| # The top level Makefile was generated from the following files: | ||||
| set(CMAKE_MAKEFILE_DEPENDS | ||||
|   "CMakeCache.txt" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeCInformation.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeCXXInformation.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeCommonLanguageInclude.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeFindCodeBlocks.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeGenericSystem.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeLanguageInformation.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeSystemSpecificInformation.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/CMakeSystemSpecificInitialize.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Compiler/CMakeCommonCompilerMacros.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Compiler/GNU-C.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Compiler/GNU-CXX.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Compiler/GNU.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Platform/Linux-GNU-C.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Platform/Linux-GNU-CXX.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Platform/Linux-GNU.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Platform/Linux.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/Platform/UnixPaths.cmake" | ||||
|   "/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/share/cmake-3.9/Modules/ProcessorCount.cmake" | ||||
|   "../CMakeLists.txt" | ||||
|   "CMakeFiles/3.9.6/CMakeCCompiler.cmake" | ||||
|   "CMakeFiles/3.9.6/CMakeCXXCompiler.cmake" | ||||
|   "CMakeFiles/3.9.6/CMakeSystem.cmake" | ||||
|   ) | ||||
| 
 | ||||
| # The corresponding makefile is: | ||||
| set(CMAKE_MAKEFILE_OUTPUTS | ||||
|   "Makefile" | ||||
|   "CMakeFiles/cmake.check_cache" | ||||
|   ) | ||||
| 
 | ||||
| # Byproducts of CMake generate step: | ||||
| set(CMAKE_MAKEFILE_PRODUCTS | ||||
|   "CMakeFiles/CMakeDirectoryInformation.cmake" | ||||
|   ) | ||||
| 
 | ||||
| # Dependency information for all targets: | ||||
| set(CMAKE_DEPEND_INFO_FILES | ||||
|   "CMakeFiles/stress.dir/DependInfo.cmake" | ||||
|   ) | ||||
|  | @ -1,108 +0,0 @@ | |||
| # CMAKE generated file: DO NOT EDIT! | ||||
| # Generated by "Unix Makefiles" Generator, CMake Version 3.9 | ||||
| 
 | ||||
| # Default target executed when no arguments are given to make. | ||||
| default_target: all | ||||
| 
 | ||||
| .PHONY : default_target | ||||
| 
 | ||||
| # The main recursive all target | ||||
| all: | ||||
| 
 | ||||
| .PHONY : all | ||||
| 
 | ||||
| # The main recursive preinstall target | ||||
| preinstall: | ||||
| 
 | ||||
| .PHONY : preinstall | ||||
| 
 | ||||
| #============================================================================= | ||||
| # Special targets provided by cmake. | ||||
| 
 | ||||
| # Disable implicit rules so canonical targets will work. | ||||
| .SUFFIXES: | ||||
| 
 | ||||
| 
 | ||||
| # Remove some rules from gmake that .SUFFIXES does not remove. | ||||
| SUFFIXES = | ||||
| 
 | ||||
| .SUFFIXES: .hpux_make_needs_suffix_list | ||||
| 
 | ||||
| 
 | ||||
| # Suppress display of executed commands. | ||||
| $(VERBOSE).SILENT: | ||||
| 
 | ||||
| 
 | ||||
| # A target that is always out of date. | ||||
| cmake_force: | ||||
| 
 | ||||
| .PHONY : cmake_force | ||||
| 
 | ||||
| #============================================================================= | ||||
| # Set environment variables for the build. | ||||
| 
 | ||||
| # The shell in which to execute make rules. | ||||
| SHELL = /bin/sh | ||||
| 
 | ||||
| # The CMake executable. | ||||
| CMAKE_COMMAND = /home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake | ||||
| 
 | ||||
| # The command to remove a file. | ||||
| RM = /home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake -E remove -f | ||||
| 
 | ||||
| # Escaping for special characters. | ||||
| EQUALS = = | ||||
| 
 | ||||
| # The top-level source directory on which CMake was run. | ||||
| CMAKE_SOURCE_DIR = /home/dimercur/Travail/git/C-TP-RT/example/stress | ||||
| 
 | ||||
| # The top-level build directory on which CMake was run. | ||||
| CMAKE_BINARY_DIR = /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug | ||||
| 
 | ||||
| #============================================================================= | ||||
| # Target rules for target CMakeFiles/stress.dir | ||||
| 
 | ||||
| # All Build rule for target. | ||||
| CMakeFiles/stress.dir/all: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/depend | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/build | ||||
| 	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles --progress-num=1,2,3 "Built target stress" | ||||
| .PHONY : CMakeFiles/stress.dir/all | ||||
| 
 | ||||
| # Include target in all. | ||||
| all: CMakeFiles/stress.dir/all | ||||
| 
 | ||||
| .PHONY : all | ||||
| 
 | ||||
| # Build rule for subdir invocation for target. | ||||
| CMakeFiles/stress.dir/rule: cmake_check_build_system | ||||
| 	$(CMAKE_COMMAND) -E cmake_progress_start /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles 3 | ||||
| 	$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/stress.dir/all | ||||
| 	$(CMAKE_COMMAND) -E cmake_progress_start /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles 0 | ||||
| .PHONY : CMakeFiles/stress.dir/rule | ||||
| 
 | ||||
| # Convenience name for target. | ||||
| stress: CMakeFiles/stress.dir/rule | ||||
| 
 | ||||
| .PHONY : stress | ||||
| 
 | ||||
| # clean rule for target. | ||||
| CMakeFiles/stress.dir/clean: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/clean | ||||
| .PHONY : CMakeFiles/stress.dir/clean | ||||
| 
 | ||||
| # clean rule for target. | ||||
| clean: CMakeFiles/stress.dir/clean | ||||
| 
 | ||||
| .PHONY : clean | ||||
| 
 | ||||
| #============================================================================= | ||||
| # Special targets to cleanup operation of make. | ||||
| 
 | ||||
| # Special rule to run CMake to check the build system integrity. | ||||
| # No rule that depends on this can have commands that come from listfiles | ||||
| # because they might be regenerated. | ||||
| cmake_check_build_system: | ||||
| 	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 | ||||
| .PHONY : cmake_check_build_system | ||||
| 
 | ||||
|  | @ -1,3 +0,0 @@ | |||
| /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles/rebuild_cache.dir | ||||
| /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles/edit_cache.dir | ||||
| /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles/stress.dir | ||||
|  | @ -1,3 +0,0 @@ | |||
| Options:  | ||||
| 
 | ||||
| Options: | ||||
|  | @ -1,4 +0,0 @@ | |||
| /home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /home/dimercur/Travail/git/C-TP-RT/example/stress | ||||
| -- Configuring done | ||||
| -- Generating done | ||||
| -- Build files have been written to: /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug | ||||
|  | @ -1 +0,0 @@ | |||
| # This file is generated by cmake for dependency checking of the CMakeCache.txt file | ||||
|  | @ -1,34 +0,0 @@ | |||
| 
 | ||||
|   const char features[] = {"\n" | ||||
| "C_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "c_function_prototypes\n" | ||||
| "C_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "c_restrict\n" | ||||
| "C_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "c_static_assert\n" | ||||
| "C_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "c_variadic_macros\n" | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| int main(int argc, char** argv) { (void)argv; return features[argc]; } | ||||
|  | @ -1,405 +0,0 @@ | |||
| 
 | ||||
|   const char features[] = {"\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_aggregate_default_initializers\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_alias_templates\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_alignas\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_alignof\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_attributes\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_attribute_deprecated\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_auto_type\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_binary_literals\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_constexpr\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_contextual_conversions\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_decltype\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_decltype_auto\n" | ||||
| "CXX_FEATURE:" | ||||
| #if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_decltype_incomplete_return_types\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_default_function_template_args\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_defaulted_functions\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_defaulted_move_initializers\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_delegating_constructors\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_deleted_functions\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_digit_separators\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_enum_forward_declarations\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_explicit_conversions\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_extended_friend_declarations\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_extern_templates\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_final\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_func_identifier\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_generalized_initializers\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_generic_lambdas\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_inheriting_constructors\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_inline_namespaces\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_lambdas\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_lambda_init_captures\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_local_type_template_args\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_long_long_type\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_noexcept\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_nonstatic_member_init\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_nullptr\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_override\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_range_for\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_raw_string_literals\n" | ||||
| "CXX_FEATURE:" | ||||
| #if ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40801) && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_reference_qualified_functions\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_relaxed_constexpr\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409 && __cplusplus > 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_return_type_deduction\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_right_angle_brackets\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_rvalue_references\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_sizeof_member\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_static_assert\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_strong_enums\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && __cplusplus | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_template_template_parameters\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_thread_local\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_trailing_return_types\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_unicode_literals\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_uniform_initialization\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_unrestricted_unions\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && __cplusplus >= 201103L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_user_literals\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 500 && __cplusplus >= 201402L | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_variable_templates\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_variadic_macros\n" | ||||
| "CXX_FEATURE:" | ||||
| #if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 && (__cplusplus >= 201103L || (defined(__GXX_EXPERIMENTAL_CXX0X__) && __GXX_EXPERIMENTAL_CXX0X__)) | ||||
| "1" | ||||
| #else | ||||
| "0" | ||||
| #endif | ||||
| "cxx_variadic_templates\n" | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| int main(int argc, char** argv) { (void)argv; return features[argc]; } | ||||
|  | @ -1 +0,0 @@ | |||
| 3 | ||||
|  | @ -1,208 +0,0 @@ | |||
| # CMAKE generated file: DO NOT EDIT!
 | ||||
| # Generated by "Unix Makefiles" Generator, CMake Version 3.9
 | ||||
| 
 | ||||
| # Default target executed when no arguments are given to make.
 | ||||
| default_target: all | ||||
| 
 | ||||
| .PHONY : default_target | ||||
| 
 | ||||
| # Allow only one "make -f Makefile2" at a time, but pass parallelism.
 | ||||
| .NOTPARALLEL: | ||||
| 
 | ||||
| 
 | ||||
| #=============================================================================
 | ||||
| # Special targets provided by cmake.
 | ||||
| 
 | ||||
| # Disable implicit rules so canonical targets will work.
 | ||||
| .SUFFIXES: | ||||
| 
 | ||||
| 
 | ||||
| # Remove some rules from gmake that .SUFFIXES does not remove.
 | ||||
| SUFFIXES = | ||||
| 
 | ||||
| .SUFFIXES: .hpux_make_needs_suffix_list | ||||
| 
 | ||||
| 
 | ||||
| # Suppress display of executed commands.
 | ||||
| $(VERBOSE).SILENT: | ||||
| 
 | ||||
| 
 | ||||
| # A target that is always out of date.
 | ||||
| cmake_force: | ||||
| 
 | ||||
| .PHONY : cmake_force | ||||
| 
 | ||||
| #=============================================================================
 | ||||
| # Set environment variables for the build.
 | ||||
| 
 | ||||
| # The shell in which to execute make rules.
 | ||||
| SHELL = /bin/sh | ||||
| 
 | ||||
| # The CMake executable.
 | ||||
| CMAKE_COMMAND = /home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake | ||||
| 
 | ||||
| # The command to remove a file.
 | ||||
| RM = /home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake -E remove -f | ||||
| 
 | ||||
| # Escaping for special characters.
 | ||||
| EQUALS = = | ||||
| 
 | ||||
| # The top-level source directory on which CMake was run.
 | ||||
| CMAKE_SOURCE_DIR = /home/dimercur/Travail/git/C-TP-RT/example/stress | ||||
| 
 | ||||
| # The top-level build directory on which CMake was run.
 | ||||
| CMAKE_BINARY_DIR = /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug | ||||
| 
 | ||||
| #=============================================================================
 | ||||
| # Targets provided globally by CMake.
 | ||||
| 
 | ||||
| # Special rule for the target rebuild_cache
 | ||||
| rebuild_cache: | ||||
| 	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." | ||||
| 	/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) | ||||
| .PHONY : rebuild_cache | ||||
| 
 | ||||
| # Special rule for the target rebuild_cache
 | ||||
| rebuild_cache/fast: rebuild_cache | ||||
| 
 | ||||
| .PHONY : rebuild_cache/fast | ||||
| 
 | ||||
| # Special rule for the target edit_cache
 | ||||
| edit_cache: | ||||
| 	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." | ||||
| 	/home/Applications/JetBrains/clion-2017.3.3/bin/cmake/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. | ||||
| .PHONY : edit_cache | ||||
| 
 | ||||
| # Special rule for the target edit_cache
 | ||||
| edit_cache/fast: edit_cache | ||||
| 
 | ||||
| .PHONY : edit_cache/fast | ||||
| 
 | ||||
| # The main all target
 | ||||
| all: cmake_check_build_system | ||||
| 	$(CMAKE_COMMAND) -E cmake_progress_start /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles/progress.marks | ||||
| 	$(MAKE) -f CMakeFiles/Makefile2 all | ||||
| 	$(CMAKE_COMMAND) -E cmake_progress_start /home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/CMakeFiles 0 | ||||
| .PHONY : all | ||||
| 
 | ||||
| # The main clean target
 | ||||
| clean: | ||||
| 	$(MAKE) -f CMakeFiles/Makefile2 clean | ||||
| .PHONY : clean | ||||
| 
 | ||||
| # The main clean target
 | ||||
| clean/fast: clean | ||||
| 
 | ||||
| .PHONY : clean/fast | ||||
| 
 | ||||
| # Prepare targets for installation.
 | ||||
| preinstall: all | ||||
| 	$(MAKE) -f CMakeFiles/Makefile2 preinstall | ||||
| .PHONY : preinstall | ||||
| 
 | ||||
| # Prepare targets for installation.
 | ||||
| preinstall/fast: | ||||
| 	$(MAKE) -f CMakeFiles/Makefile2 preinstall | ||||
| .PHONY : preinstall/fast | ||||
| 
 | ||||
| # clear depends
 | ||||
| depend: | ||||
| 	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 | ||||
| .PHONY : depend | ||||
| 
 | ||||
| #=============================================================================
 | ||||
| # Target rules for targets named stress
 | ||||
| 
 | ||||
| # Build rule for target.
 | ||||
| stress: cmake_check_build_system | ||||
| 	$(MAKE) -f CMakeFiles/Makefile2 stress | ||||
| .PHONY : stress | ||||
| 
 | ||||
| # fast build rule for target.
 | ||||
| stress/fast: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/build | ||||
| .PHONY : stress/fast | ||||
| 
 | ||||
| home/dimercur/Travail/git/C-TP-RT/src/robot.o: home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.o | ||||
| 
 | ||||
| .PHONY : home/dimercur/Travail/git/C-TP-RT/src/robot.o | ||||
| 
 | ||||
| # target to build an object file
 | ||||
| home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.o: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.o | ||||
| .PHONY : home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.o | ||||
| 
 | ||||
| home/dimercur/Travail/git/C-TP-RT/src/robot.i: home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.i | ||||
| 
 | ||||
| .PHONY : home/dimercur/Travail/git/C-TP-RT/src/robot.i | ||||
| 
 | ||||
| # target to preprocess a source file
 | ||||
| home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.i: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.i | ||||
| .PHONY : home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.i | ||||
| 
 | ||||
| home/dimercur/Travail/git/C-TP-RT/src/robot.s: home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.s | ||||
| 
 | ||||
| .PHONY : home/dimercur/Travail/git/C-TP-RT/src/robot.s | ||||
| 
 | ||||
| # target to generate assembly for a file
 | ||||
| home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.s: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.s | ||||
| .PHONY : home/dimercur/Travail/git/C-TP-RT/src/robot.cpp.s | ||||
| 
 | ||||
| main.o: main.cpp.o | ||||
| 
 | ||||
| .PHONY : main.o | ||||
| 
 | ||||
| # target to build an object file
 | ||||
| main.cpp.o: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/main.cpp.o | ||||
| .PHONY : main.cpp.o | ||||
| 
 | ||||
| main.i: main.cpp.i | ||||
| 
 | ||||
| .PHONY : main.i | ||||
| 
 | ||||
| # target to preprocess a source file
 | ||||
| main.cpp.i: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/main.cpp.i | ||||
| .PHONY : main.cpp.i | ||||
| 
 | ||||
| main.s: main.cpp.s | ||||
| 
 | ||||
| .PHONY : main.s | ||||
| 
 | ||||
| # target to generate assembly for a file
 | ||||
| main.cpp.s: | ||||
| 	$(MAKE) -f CMakeFiles/stress.dir/build.make CMakeFiles/stress.dir/main.cpp.s | ||||
| .PHONY : main.cpp.s | ||||
| 
 | ||||
| # Help Target
 | ||||
| help: | ||||
| 	@echo "The following are some of the valid targets for this Makefile:" | ||||
| 	@echo "... all (the default if no target is provided)" | ||||
| 	@echo "... clean" | ||||
| 	@echo "... depend" | ||||
| 	@echo "... rebuild_cache" | ||||
| 	@echo "... edit_cache" | ||||
| 	@echo "... stress" | ||||
| 	@echo "... home/dimercur/Travail/git/C-TP-RT/src/robot.o" | ||||
| 	@echo "... home/dimercur/Travail/git/C-TP-RT/src/robot.i" | ||||
| 	@echo "... home/dimercur/Travail/git/C-TP-RT/src/robot.s" | ||||
| 	@echo "... main.o" | ||||
| 	@echo "... main.i" | ||||
| 	@echo "... main.s" | ||||
| .PHONY : help | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #=============================================================================
 | ||||
| # Special targets to cleanup operation of make.
 | ||||
| 
 | ||||
| # Special rule to run CMake to check the build system integrity.
 | ||||
| # No rule that depends on this can have commands that come from listfiles
 | ||||
| # because they might be regenerated.
 | ||||
| cmake_check_build_system: | ||||
| 	$(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 | ||||
| .PHONY : cmake_check_build_system | ||||
| 
 | ||||
|  | @ -1,44 +0,0 @@ | |||
| # Install script for directory: /home/dimercur/Travail/git/C-TP-RT/example/stress | ||||
| 
 | ||||
| # Set the install prefix | ||||
| if(NOT DEFINED CMAKE_INSTALL_PREFIX) | ||||
|   set(CMAKE_INSTALL_PREFIX "/usr/local") | ||||
| endif() | ||||
| string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") | ||||
| 
 | ||||
| # Set the install configuration name. | ||||
| if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) | ||||
|   if(BUILD_TYPE) | ||||
|     string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" | ||||
|            CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") | ||||
|   else() | ||||
|     set(CMAKE_INSTALL_CONFIG_NAME "Debug") | ||||
|   endif() | ||||
|   message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") | ||||
| endif() | ||||
| 
 | ||||
| # Set the component getting installed. | ||||
| if(NOT CMAKE_INSTALL_COMPONENT) | ||||
|   if(COMPONENT) | ||||
|     message(STATUS "Install component: \"${COMPONENT}\"") | ||||
|     set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") | ||||
|   else() | ||||
|     set(CMAKE_INSTALL_COMPONENT) | ||||
|   endif() | ||||
| endif() | ||||
| 
 | ||||
| # Install shared libraries without execute permission? | ||||
| if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) | ||||
|   set(CMAKE_INSTALL_SO_NO_EXE "1") | ||||
| endif() | ||||
| 
 | ||||
| if(CMAKE_INSTALL_COMPONENT) | ||||
|   set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") | ||||
| else() | ||||
|   set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") | ||||
| endif() | ||||
| 
 | ||||
| string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT | ||||
|        "${CMAKE_INSTALL_MANIFEST_FILES}") | ||||
| file(WRITE "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/${CMAKE_INSTALL_MANIFEST}" | ||||
|      "${CMAKE_INSTALL_MANIFEST_CONTENT}") | ||||
										
											Binary file not shown.
										
									
								
							|  | @ -1,100 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <CodeBlocks_project_file> | ||||
| 	<FileVersion major="1" minor="6"/> | ||||
| 	<Project> | ||||
| 		<Option title="stress"/> | ||||
| 		<Option makefile_is_custom="1"/> | ||||
| 		<Option compiler="gcc"/> | ||||
| 		<Option virtualFolders="CMake Files\;"/> | ||||
| 		<Build> | ||||
| 			<Target title="all"> | ||||
| 				<Option working_dir="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug"/> | ||||
| 				<Option type="4"/> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 all"/> | ||||
| 					<CompileFile command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="rebuild_cache"> | ||||
| 				<Option working_dir="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug"/> | ||||
| 				<Option type="4"/> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 rebuild_cache"/> | ||||
| 					<CompileFile command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="edit_cache"> | ||||
| 				<Option working_dir="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug"/> | ||||
| 				<Option type="4"/> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 edit_cache"/> | ||||
| 					<CompileFile command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="stress"> | ||||
| 				<Option output="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/stress" prefix_auto="0" extension_auto="0"/> | ||||
| 				<Option working_dir="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug"/> | ||||
| 				<Option object_output="./"/> | ||||
| 				<Option type="1"/> | ||||
| 				<Option compiler="gcc"/> | ||||
| 				<Compiler> | ||||
| 					<Add directory="/usr/include/c++/7"/> | ||||
| 					<Add directory="/usr/include/x86_64-linux-gnu/c++/7"/> | ||||
| 					<Add directory="/usr/include/c++/7/backward"/> | ||||
| 					<Add directory="/usr/lib/gcc/x86_64-linux-gnu/7/include"/> | ||||
| 					<Add directory="/usr/local/include"/> | ||||
| 					<Add directory="/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed"/> | ||||
| 					<Add directory="/usr/include/x86_64-linux-gnu"/> | ||||
| 					<Add directory="/usr/include"/> | ||||
| 				</Compiler> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 stress"/> | ||||
| 					<CompileFile command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="stress/fast"> | ||||
| 				<Option output="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/stress" prefix_auto="0" extension_auto="0"/> | ||||
| 				<Option working_dir="/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug"/> | ||||
| 				<Option object_output="./"/> | ||||
| 				<Option type="1"/> | ||||
| 				<Option compiler="gcc"/> | ||||
| 				<Compiler> | ||||
| 					<Add directory="/usr/include/c++/7"/> | ||||
| 					<Add directory="/usr/include/x86_64-linux-gnu/c++/7"/> | ||||
| 					<Add directory="/usr/include/c++/7/backward"/> | ||||
| 					<Add directory="/usr/lib/gcc/x86_64-linux-gnu/7/include"/> | ||||
| 					<Add directory="/usr/local/include"/> | ||||
| 					<Add directory="/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed"/> | ||||
| 					<Add directory="/usr/include/x86_64-linux-gnu"/> | ||||
| 					<Add directory="/usr/include"/> | ||||
| 				</Compiler> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 stress/fast"/> | ||||
| 					<CompileFile command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -j4 -f "/home/dimercur/Travail/git/C-TP-RT/example/stress/cmake-build-debug/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 		</Build> | ||||
| 		<Unit filename="/home/dimercur/Travail/git/C-TP-RT/example/stress/main.cpp"> | ||||
| 			<Option target="stress"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Travail/git/C-TP-RT/src/robot.cpp"> | ||||
| 			<Option target="stress"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Travail/git/C-TP-RT/src/robot.h"> | ||||
| 			<Option target="stress"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Travail/git/C-TP-RT/example/stress/CMakeLists.txt"> | ||||
| 			<Option virtualFolder="CMake Files\"/> | ||||
| 		</Unit> | ||||
| 	</Project> | ||||
| </CodeBlocks_project_file> | ||||
							
								
								
									
										57
									
								
								software/raspberry/superviseur-robot/src.sav/definitions.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								software/raspberry/superviseur-robot/src.sav/definitions.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| /*
 | ||||
|  * To change this license header, choose License Headers in Project Properties. | ||||
|  * To change this template file, choose Tools | Templates | ||||
|  * and open the template in the editor. | ||||
|  */ | ||||
| 
 | ||||
| /* 
 | ||||
|  * File:   msg.h | ||||
|  * Author: pehladik | ||||
|  * | ||||
|  * Created on 15 janvier 2018, 20:45 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef DEFINITIONS_H | ||||
| #define DEFINITIONS_H | ||||
| 
 | ||||
| #define OPEN_COM_DMB  'o' | ||||
| #define CLOSE_COM_DMB 'C' | ||||
| 
 | ||||
| #define DMB_PING                'p' | ||||
| #define DMB_IDLE                'r' | ||||
| #define DMB_START_WITHOUT_WD    'u' | ||||
| #define DMB_START_WITH_WD       'W' | ||||
| #define DMB_RELOAD_WD           'w' | ||||
| #define DMB_GET_VBAT            'v' | ||||
| #define DMB_IS_BUSY             'b' | ||||
| #define DMB_MOVE                'M' | ||||
| #define DMB_TURN                'T' | ||||
| #define DMB_GO_FORWARD          'F' | ||||
| #define DMB_GO_BACK             'B' | ||||
| #define DMB_GO_LEFT             'L' | ||||
| #define DMB_GO_RIGHT            'R' | ||||
| #define DMB_STOP_MOVE           'S' | ||||
| 
 | ||||
| #define ROBOT_TIMED_OUT -3 | ||||
| #define ROBOT_UKNOWN_CMD -2 | ||||
| #define ROBOT_ERROR  -1 | ||||
| #define ROBOT_CHECKSUM  -4 | ||||
| #define ROBOT_OK    0 | ||||
| 
 | ||||
| #define CAM_OPEN                    'A' | ||||
| #define CAM_CLOSE                   'I' | ||||
| #define CAM_ASK_ARENA               'y' | ||||
| #define CAM_ARENA_CONFIRM           'x' | ||||
| #define CAM_ARENA_INFIRM            'z' | ||||
| #define CAM_COMPUTE_POSITION        'p' | ||||
| #define CAM_STOP_COMPUTE_POSITION   's' | ||||
| 
 | ||||
| #define DMB_BAT_LOW 0 | ||||
| #define DMB_BAT_MEDIUM 1 | ||||
| #define DMB_BAT_HIGHT 2 | ||||
| 
 | ||||
| #define DMB_BUSY 1 | ||||
| #define DMB_DO_NOTHING 0 | ||||
| 
 | ||||
| #endif /* MSG_H */ | ||||
| 
 | ||||
							
								
								
									
										211
									
								
								software/raspberry/superviseur-robot/src.sav/image.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										211
									
								
								software/raspberry/superviseur-robot/src.sav/image.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,211 @@ | |||
| /**
 | ||||
|  * \file      image.cpp | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  * \brief     Fonctions de traitement d'image utilisable pour la détection du robot. | ||||
|  * | ||||
|  * \details   Ce fichier utilise la libraire openCV2 pour faciliter le traitement d'image dans le projet Destijl. | ||||
|  *            Il permet de faciliter la détection de l'arène et la détection du robot. | ||||
|  *			  /!\ Attention Bien que celui-ci soit un .cpp la structure du code n'est pas sous forme d'objet. | ||||
|  */ | ||||
| 
 | ||||
| #include "image.h" | ||||
| #include <iostream> | ||||
| 
 | ||||
| using namespace cv; | ||||
| #ifndef __STUB__ | ||||
| using namespace raspicam; | ||||
| #else | ||||
| Image stubImg; | ||||
| #endif | ||||
| using namespace std; | ||||
| 
 | ||||
| float calculAngle(Position * positionRobot); | ||||
| int cropArena(Image *imgInput, Image *imgOutput, Arene *AreneInput); | ||||
| float euclideanDist(Point& p, Point& q); | ||||
| 
 | ||||
| void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene) | ||||
| { | ||||
|     if(imgInput!=imgOutput) | ||||
|         *imgOutput=imgInput->clone(); | ||||
|     rectangle(*imgOutput,monArene->tl(),monArene->br(),Scalar(0,0,125),2,8,0); | ||||
| } | ||||
| 
 | ||||
| int open_camera(Camera  *camera) | ||||
| { | ||||
| #ifndef __STUB__ | ||||
|     camera->set(CV_CAP_PROP_FORMAT, CV_8UC3); | ||||
|     camera->set(CV_CAP_PROP_FRAME_WIDTH,WIDTH); | ||||
|     camera->set(CV_CAP_PROP_FRAME_HEIGHT,HEIGHT); | ||||
| 
 | ||||
|     printf("Opening Camera...\n"); | ||||
|     if (!(camera->open())) { | ||||
|         perror("Can't open Camera\n") ; | ||||
|         return -1; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         printf("Camera warmup 2sec\n"); | ||||
|         sleep(2); | ||||
|         printf("Start capture\n"); | ||||
|         return 0; | ||||
|     }    | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void get_image(Camera *camera, Image * monImage, const char  * fichier) // getImg(Camera, Image img); | ||||
| { | ||||
| #ifndef __STUB__ | ||||
|     camera->grab(); | ||||
|     camera->retrieve(*monImage); | ||||
|     cvtColor(*monImage,*monImage,CV_BGR2RGB); | ||||
| #else | ||||
|     stubImg = imread(fichier, CV_LOAD_IMAGE_COLOR); | ||||
|     stubImg.copyTo(*monImage); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void close_camera(Camera *camera) // closeCam(Camera) : camera Entrer
 | ||||
| { | ||||
| #ifndef __STUB__ | ||||
|     camera->release(); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int detect_arena(Image *monImage, Arene *rectangle) // Image en entrée // rectangle en sortie
 | ||||
| { | ||||
|     vector<vector<Point> > contours; | ||||
|     vector<Point> approx; | ||||
|     vector<Vec4i> hierarchy; | ||||
| 
 | ||||
|     Image imageTrt; | ||||
|     cvtColor(*monImage,imageTrt,CV_RGB2GRAY); // conversion en niveau de gris
 | ||||
|     threshold(imageTrt,imageTrt,128,255,CV_THRESH_BINARY); // Threshold les éléments les plus clair
 | ||||
|     Canny(imageTrt, imageTrt, 100,200,3); // detection d'angle
 | ||||
| 
 | ||||
|     findContours(imageTrt, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); | ||||
|     for(unsigned int i = 0; i < contours.size();i++) | ||||
| 	{ | ||||
|         approxPolyDP(Image(contours[i]), approx, arcLength(Image(contours[i]), true)*0.1, true); | ||||
|         if(approx.size()==4 && fabs(cv::contourArea(contours[i])) > 100000) | ||||
|         { | ||||
|             *rectangle = boundingRect(Image(contours[i])); | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|     return -1; | ||||
| } | ||||
| 
 | ||||
| int cropArena(Image *imgInput, Image *imgOutput, Arene *areneInput) // image // rectangle // image2
 | ||||
| { | ||||
|     Image img; | ||||
|     img=imgInput->clone(); | ||||
| 
 | ||||
|     *imgOutput = img(*areneInput); | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| float euclideanDist(Point& p, Point& q) { | ||||
|     Point diff = p - q; | ||||
|     return cv::sqrt(diff.x*diff.x + diff.y*diff.y); | ||||
| } | ||||
| 
 | ||||
| void compress_image(Image *imgInput, Jpg *imageCompress) // image entrée // imageEncodé en sortie
 | ||||
| { | ||||
|     imencode(".jpg",*imgInput,*imageCompress); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int detect_position(Image *imgInput, Position *posTriangle, Arene * monArene) // entree : image  / sortie tab pos
 | ||||
| { | ||||
|     vector<vector<Point> > contours; | ||||
|     vector<Point> approx; | ||||
|     vector<Vec4i> hierarchy; | ||||
| 
 | ||||
|     Image imgTraitment; | ||||
| 
 | ||||
|     if(monArene==NULL) | ||||
|         imgTraitment=imgInput->clone(); | ||||
|     else | ||||
|         cropArena(imgInput,&imgTraitment, monArene); | ||||
| 
 | ||||
|     cvtColor(imgTraitment,imgTraitment,CV_RGB2GRAY); | ||||
|     threshold(imgTraitment,imgTraitment,128,255,CV_THRESH_BINARY); | ||||
|     findContours(imgTraitment, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); | ||||
| 
 | ||||
|     int nbrTriangle = 0; | ||||
|     for(unsigned int i = 0;i < contours.size();i++) | ||||
| 	{ | ||||
|         approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.17, true); | ||||
|         if(approx.size() == 3 && fabs(contourArea(contours[i])) > 200 && fabs(contourArea(contours[i])) < 700) | ||||
|         { | ||||
| 
 | ||||
|             Point a,b,c; | ||||
|             Point center; | ||||
| 
 | ||||
| 
 | ||||
|             a = approx[0]; | ||||
|             b = approx[1]; | ||||
|             c = approx[2]; | ||||
| 
 | ||||
| 
 | ||||
|             if(monArene !=NULL) // ajout de l'offset de l'arène
 | ||||
|             { | ||||
|                a.x += monArene->x; | ||||
|                a.y += monArene->y; | ||||
|                b.x += monArene->x; | ||||
|                b.y += monArene->y; | ||||
|                c.x += monArene->x; | ||||
|                c.y += monArene->y;		     | ||||
|             } | ||||
| 		 | ||||
|             center.x = (a.x + b.x + c.x)/3; | ||||
|             center.y = (a.y + b.y + c.y)/3; | ||||
| 
 | ||||
|             posTriangle[nbrTriangle].center=center; | ||||
| 
 | ||||
|             if(euclideanDist(center,b) > euclideanDist(center,a) && euclideanDist(center,b) > euclideanDist(center,c) ) | ||||
|             { | ||||
| 
 | ||||
|                 posTriangle[nbrTriangle].direction=b; | ||||
|                 //line(img,center,b,Scalar(0,125,0),2,8,0);
 | ||||
|             } | ||||
|             else if(euclideanDist(center,a) > euclideanDist(center,c)) | ||||
|             { | ||||
|                 posTriangle[nbrTriangle].direction=a; | ||||
|                 //line(img,center,a,Scalar(0,125,0),2,8,0);
 | ||||
| 
 | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 posTriangle[nbrTriangle].direction=c; | ||||
|                 //line(img,center,c,Scalar(0,125,0),2,8,0);
 | ||||
|             } | ||||
|             posTriangle[nbrTriangle].angle=calculAngle(&posTriangle[nbrTriangle]); | ||||
| 
 | ||||
|             nbrTriangle++; | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
|     return nbrTriangle; | ||||
| } | ||||
| 
 | ||||
| void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot) // img E/S   pos : E
 | ||||
| { | ||||
|     if(imgInput!=imgOutput) | ||||
|     { | ||||
|         *imgOutput=imgInput->clone(); | ||||
|     } | ||||
|     line(*imgOutput,positionRobot->center,positionRobot->direction,Scalar(0,125,0),2,8,0); | ||||
| } | ||||
| 
 | ||||
| float calculAngle(Position * positionRobot) // position en entree
 | ||||
| { | ||||
|     float a = positionRobot->direction.x - positionRobot->center.x; | ||||
|     float b = positionRobot->direction.y - positionRobot->center.y ; | ||||
|     float angle = atan2(b,a); | ||||
|     return angle * 180.f/M_PI; | ||||
| 
 | ||||
| } | ||||
							
								
								
									
										128
									
								
								software/raspberry/superviseur-robot/src.sav/image.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								software/raspberry/superviseur-robot/src.sav/image.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,128 @@ | |||
| /**
 | ||||
|  * \file      image.h | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  * \brief     Fonctions de traitement d'image utilisable pour la d<EFBFBD>tection du robot. | ||||
|  * | ||||
|  * \details   Ce fichier utilise la libraire openCV2 pour faciliter le traitement d'image dans le projet Destijl. | ||||
|  *            Il permet de faciliter la d<EFBFBD>tection de l'ar<EFBFBD>ne et la d<EFBFBD>tection du robot. | ||||
|  *			  /!\ Attention Bien que celui-ci soit un .cpp la structure du code n'est pas sous forme d'objet. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef IMAGERIE_H | ||||
| #define IMAGERIE_H | ||||
| 
 | ||||
| #ifndef __STUB__ | ||||
| #include <raspicam/raspicam_cv.h> | ||||
| #else | ||||
| #include <opencv2/highgui/highgui.hpp> | ||||
| #endif | ||||
| #include "opencv2/imgproc/imgproc.hpp" | ||||
| #include <unistd.h> | ||||
| #include <math.h> | ||||
| 
 | ||||
| #define WIDTH 480 //1280 1024 640 480
 | ||||
| #define HEIGHT 360 // 960 768 480 360
 | ||||
| 
 | ||||
| using namespace std; | ||||
| using namespace cv; | ||||
| #ifndef __STUB__ | ||||
| using namespace raspicam; | ||||
| #endif | ||||
| 
 | ||||
| typedef Mat Image; | ||||
| #ifndef __STUB__ | ||||
| typedef RaspiCam_Cv Camera; | ||||
| #else | ||||
| typedef int Camera; | ||||
| #endif | ||||
| typedef Rect Arene; | ||||
| typedef vector<unsigned char> Jpg; | ||||
| 
 | ||||
| struct Position { | ||||
|     Point center; | ||||
|     Point direction; | ||||
|     float angle; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Ouvre une camera. | ||||
|  * \details    Met à jour le descripteur de fichier passé en paramètre pour correspondre à la camera ouverte | ||||
|  *              | ||||
|  * \param    *Camera      	Pointeur d'un file descriptor d'une camera ouverte | ||||
|  * \return retourne 0 si la camera a été ouverte correctement et -1 si une erreur survient. | ||||
|  */ | ||||
| int open_camera(Camera *camera); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Ferme la camera passé en paramètre | ||||
|  *              | ||||
|  * \param    *Camera       Pointeur sur la camera à fermer | ||||
|  */ | ||||
| void close_camera(Camera *camera); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Capture une image avec la camera passée en entrée. En cas de test | ||||
|  * sans camera, la fonction charge une image  | ||||
|  * \details    La camera doit préalablement être ouverte via \a openCamera(...) | ||||
|  *              | ||||
|  * \param    *Camera       Pointeur sur la camera passée en entrée. | ||||
|  * \param    *monImage 	   Pointeur sur une image capturée.  | ||||
|  * \param    *fichier         chemin du fichier d'image | ||||
|  * \return    Retourne -1 si une erreur survient. | ||||
|  */ | ||||
| void get_image(Camera *camera, Image * monImage, const char *fichier = NULL); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Détecte une arène dans une image fournis en paramètre. | ||||
|  *              | ||||
|  * \param    *monImage       Pointeur sur l'image d'entrée | ||||
|  * \param    *rectangle 	 Pointeur sur les coordonnées du rectangles trouvé.  | ||||
|  * \return    Retourne -1 si aucune arène n'est détectée. Sinon retourne 0 | ||||
|  */ | ||||
| int detect_arena(Image *monImage, Arene *rectangle); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Dessine le plus petit rectangle contenant l'arène | ||||
|   | ||||
|  * \param    *imgInput       Pointeur sur l'image d'entrée. | ||||
|  * \param    *imgOutput      Pointeur sur l'image de sortie (image d'entrée + arène marquée) | ||||
|  * \param    *monArene		 Pointeur de type Arène contenant les information à dessiner | ||||
|  */ | ||||
| void draw_arena(Image *imgInput, Image *imgOutput, Arene *monArene); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Détecte la position d'un robot. | ||||
|  * \details    Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer. | ||||
|  *              | ||||
|  * \param    *imgInput       Pointeur sur l'image sur laquelle chercher la position du des robots. | ||||
|  * \param    *posTriangle    Pointeur sur un tableau de position ou seront stocké les positions des triangles détectés. | ||||
|  * \param    *monArene       Pointeur de type Arène si nécessaire d'affiner la recherche (optionnel)  | ||||
|  * \return    Le nombre de triangles détectés. | ||||
|  */ | ||||
| int detect_position(Image *imgInput, Position *posTriangle, Arene * monArene = NULL); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Dessine sur une image en entrée la position d'un robot et sa direction. | ||||
|  * \details    Sauvegarde l'image des coordonnées passées par positionRobot  | ||||
|  * superposée à l'image d'entrée sur imgOutput. | ||||
|  *              | ||||
|  * \param      *imgInput	      	Pointeur sur l'image d'entrée | ||||
|  * \param      *imgOutput    		Pointeur sur l'image de sortie ( image  | ||||
|  * d'entrée + dessin de la position) | ||||
|  * \param      *positionRobot   	Pointeur sur la structure position d'un robot. | ||||
|  */ | ||||
| void draw_position(Image *imgInput, Image *imgOutput, Position *positionRobot); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Détecte la position d'un robot. | ||||
|  * \details    Détecte la position de triangles blanc sur une image /a imgInput passé en paramètre d'entrer. | ||||
|  *              | ||||
|  * \param    *imgInput      	Pointeur sur l'image à sauvegarder en mémoire sous format jpg. | ||||
|  * \param    *imageCompress	Pointeur sur une image .jpg. | ||||
|  */ | ||||
| void compress_image(Image *imgInput, Jpg *imageCompress); | ||||
| 
 | ||||
| #endif // IMAGERIE_H
 | ||||
							
								
								
									
										29
									
								
								software/raspberry/superviseur-robot/src.sav/message.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								software/raspberry/superviseur-robot/src.sav/message.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,29 @@ | |||
| /*
 | ||||
|  * To change this license header, choose License Headers in Project Properties. | ||||
|  * To change this template file, choose Tools | Templates | ||||
|  * and open the template in the editor. | ||||
|  */ | ||||
| #include "message.h" | ||||
| 
 | ||||
| void set_msgToMon_header(MessageToMon *msg, char *header) { | ||||
|     memcpy(msg->header, header, sizeof (header)); | ||||
| } | ||||
| 
 | ||||
| void set_msgToMon_data(MessageToMon *msg, void * data) { | ||||
|     if (msg->data != NULL) { | ||||
|         free(msg->data); | ||||
|     } | ||||
|     msg->data = malloc(sizeof (data)); | ||||
|     memcpy(msg->data, data, sizeof (data)); | ||||
| } | ||||
| 
 | ||||
| void free_msgToMon_data(MessageToMon *msg) { | ||||
|     if (msg->data != NULL) { | ||||
|         free(msg->data); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void print_msgToMon(MessageToMon *msg) { | ||||
|     printf("header: %s\n", msg->header); | ||||
|     printf("data: %s\n", msg->data); | ||||
| } | ||||
							
								
								
									
										33
									
								
								software/raspberry/superviseur-robot/src.sav/message.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								software/raspberry/superviseur-robot/src.sav/message.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| /*
 | ||||
|  * To change this license header, choose License Headers in Project Properties. | ||||
|  * To change this template file, choose Tools | Templates | ||||
|  * and open the template in the editor. | ||||
|  */ | ||||
| 
 | ||||
| /* 
 | ||||
|  * File:   message.h | ||||
|  * Author: pehladik | ||||
|  * | ||||
|  * Created on 7 février 2018, 17:20 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef MESSAGE_H | ||||
| #define MESSAGE_H | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <unistd.h> | ||||
| #include <string.h> | ||||
| 
 | ||||
| typedef struct { | ||||
|     char header[4]; | ||||
|     void *data = NULL; | ||||
| } MessageToMon; | ||||
| 
 | ||||
| void set_msgToMon_header(MessageToMon *msg, char *header); | ||||
| void set_msgToMon_data(MessageToMon *msg, void * data); | ||||
| void free_msgToMon_data(MessageToMon *msg); | ||||
| void print_msgToMon(MessageToMon *msg); | ||||
| 
 | ||||
| #endif /* MESSAGE_H */ | ||||
| 
 | ||||
							
								
								
									
										161
									
								
								software/raspberry/superviseur-robot/src.sav/monitor.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								software/raspberry/superviseur-robot/src.sav/monitor.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,161 @@ | |||
| #include "monitor.h" | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| SOCKADDR_IN ssin; | ||||
| SOCKET sock; | ||||
| socklen_t recsize = sizeof (ssin); | ||||
| 
 | ||||
| /*Socket et contexte d'adressage du client */ | ||||
| SOCKADDR_IN csin; | ||||
| SOCKET csock; | ||||
| socklen_t crecsize = sizeof (csin); | ||||
| 
 | ||||
| int sock_err; | ||||
| pid_t pidNodejs; | ||||
| 
 | ||||
| string serverReceive(int size); | ||||
| int serverSend(const void *data, int dataLength); | ||||
| int receive(char *data); | ||||
| 
 | ||||
| int run_nodejs(const char * path, char * file) { | ||||
|     int ret; | ||||
|     //char *const parmList[] = {"/bin/ls", "-l", "/home", NULL};
 | ||||
|     char * const parmList[] = {"node", file, NULL}; | ||||
| 
 | ||||
|     if ((ret = fork()) == -1) | ||||
|         perror("fork error"); | ||||
|     else if (ret == 0) { | ||||
|         ret = execv(path, parmList); | ||||
|     } | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| int kill_nodejs() { | ||||
| #ifdef __VERBOSE__   | ||||
|     printf("kill nodejs\n"); | ||||
| #endif | ||||
|     return kill(pidNodejs, SIGTERM); | ||||
| } | ||||
| 
 | ||||
| int open_server(int port) { | ||||
|     /* Création d'un socket */ | ||||
|     sock = socket(AF_INET, SOCK_STREAM, 0); | ||||
|     int enable = 1; | ||||
| 
 | ||||
|     /* Si la socket est valide */ | ||||
|     if (sock != INVALID_SOCKET) { | ||||
| #ifdef _WITH_TRACE_ | ||||
|         printf("TCP/IP Socket %d opened\n", sock); | ||||
| #endif | ||||
|         setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof (enable)); | ||||
| 
 | ||||
|         /* Configuration */ | ||||
|         ssin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */ | ||||
|         ssin.sin_family = AF_INET; /* Protocole familial (IP) */ | ||||
|         ssin.sin_port = htons(port); /* Listage du port */ | ||||
|         sock_err = bind(sock, (SOCKADDR*) & ssin, recsize); | ||||
| 
 | ||||
|         /* Si la socket fonctionne */ | ||||
|         if (sock_err != SOCKET_ERROR) { | ||||
|             /* Démarrage du listage (mode server) */ | ||||
|             sock_err = listen(sock, 1); | ||||
| 
 | ||||
|             /* Si la socket fonctionne */ | ||||
|             if (sock_err != SOCKET_ERROR) { | ||||
|                 /* Attente pendant laquelle le client se connecte */ | ||||
| #ifdef _WITH_TRACE_ | ||||
|                 printf("Waiting a client on port %d\n", port); | ||||
| #endif | ||||
|                 csock = accept(sock, (SOCKADDR*) & csin, &crecsize); | ||||
| #ifdef _WITH_TRACE_ | ||||
|                 printf("Client connected\n"); | ||||
| #endif | ||||
|                 return 0; | ||||
|             } else { | ||||
|                 perror("listen"); | ||||
|             } | ||||
|         } else { | ||||
|             perror("bind"); | ||||
|             return (-1); | ||||
|         } | ||||
|     } else { | ||||
|         perror("socket"); | ||||
|         return (-1); | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int close_server(void) { | ||||
|     /* Fermeture de la socket client et de la socket serveur */ | ||||
|     close(csock); | ||||
|     close(sock); | ||||
|     printf("Socket fermé\n"); | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int send_message_to_monitor(const char* typeMessage, const void * data) { | ||||
|     if ((string) typeMessage == HEADER_STM_IMAGE) { | ||||
|         Jpg * imgC = (Jpg*) data; | ||||
|         serverSend("IMG", 3); | ||||
|         serverSend(imgC->data(), imgC->size()); | ||||
|         serverSend("TRAME", 5); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_POS) { | ||||
|         char buffer[20]; | ||||
|         Position * maPosition = (Position*) data; | ||||
|         sprintf(buffer, "POScenter: %3d;%3d | %.1fTRAME", maPosition->center.x, maPosition->center.y, maPosition->angle); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_MES) { | ||||
|         char buffer[50]; | ||||
|         sprintf(buffer, "MSG%sTRAME", (const char*) data); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_ACK) { | ||||
|         char buffer[50]; | ||||
|         sprintf(buffer, "ACK%sTRAME", (const char*) data); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_BAT) { | ||||
|         char buffer[50]; | ||||
|         sprintf(buffer, "BAT%sTRAME", (const char*) data); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_NO_ACK) { | ||||
|         char buffer[50]; | ||||
|         sprintf(buffer, "NAK%sTRAME", (const char*) data); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_LOST_DMB) { | ||||
|         char buffer[50]; | ||||
|         sprintf(buffer, "LCD%sTRAME", (const char*) data); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|         return 0; | ||||
|     } else { | ||||
|         return -1; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int receive_message_from_monitor(char *typeMessage, char *data) { | ||||
|     char buffer[20]; | ||||
|     int tBuffer = receive(buffer); | ||||
|     sscanf(buffer, "%3s:%s", typeMessage, data); | ||||
|     return tBuffer; | ||||
| } | ||||
| 
 | ||||
| int receive(char *data) { | ||||
|     int result; | ||||
|     result = recv(csock, data, 20, 0); | ||||
|     //cout <<"Data : " << data << endl;
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| int serverSend(const void *data, int dataLength) { | ||||
|     if (send(csock, data, dataLength, 0) != dataLength) { | ||||
|         perror("Send failed : "); | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
							
								
								
									
										115
									
								
								software/raspberry/superviseur-robot/src.sav/monitor.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								software/raspberry/superviseur-robot/src.sav/monitor.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,115 @@ | |||
| //
 | ||||
| // Created by lucien on 05/04/17.
 | ||||
| //
 | ||||
| 
 | ||||
| #ifndef TCPSERVER_H | ||||
| #define TCPSERVER_H | ||||
| 
 | ||||
| #include <sys/types.h> | ||||
| #include <sys/socket.h> | ||||
| #include <netinet/in.h> | ||||
| #include <arpa/inet.h> | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include "image.h" | ||||
| #include "definitions.h" | ||||
| 
 | ||||
| #define HEADER_STM_IMAGE "IMG" // Envoi d'une image
 | ||||
| #define HEADER_STM_BAT "BAT" // Envoi de l'état de la batterie
 | ||||
| #define HEADER_STM_POS "POS" // Envoi de la position
 | ||||
| #define HEADER_STM_NO_ACK "NAK" // Acquittement d'un échec
 | ||||
| #define HEADER_STM_ACK "ACK" // Acquittement d'un succès
 | ||||
| #define HEADER_STM_MES "MSG" // Message textuel
 | ||||
| #define HEADER_STM_LOST_DMB "LCD" // Perte de la communication avec le robot
 | ||||
| 
 | ||||
| #define HEADER_MTS_MSG "MSG" // Message directe pour Console Dumber
 | ||||
| #define HEADER_MTS_DMB_ORDER "DMB" // Message d'ordre pour le robot
 | ||||
| #define HEADER_MTS_COM_DMB "COM" // Message de gestion de la communication avec le robot
 | ||||
| #define HEADER_MTS_CAMERA "CAM" // Message de gestion de la camera
 | ||||
| #define HEADER_MTS_STOP "STO" // Message d'arrêt du system
 | ||||
| 
 | ||||
| #define INVALID_SOCKET -1 | ||||
| #define SOCKET_ERROR -1 | ||||
| 
 | ||||
| #define DEFAULT_PORT  8080 | ||||
| #define DEFAULT_PARITY 0 | ||||
| 
 | ||||
| #define DETECT_ARENA    (1) | ||||
| #define CHECK_ARENA     (2) | ||||
| #define NO_ARENA        (3) | ||||
| 
 | ||||
| #define DEFAULT_NODEJS_PATH "/usr/bin/nodejs" | ||||
| #define DEFAULT_INTERFACE_FILE "./interface.js" | ||||
| 
 | ||||
| #define closesocket(param) close(param) | ||||
| 
 | ||||
| typedef int SOCKET; | ||||
| typedef struct sockaddr_in SOCKADDR_IN; | ||||
| typedef struct sockaddr SOCKADDR; | ||||
| 
 | ||||
| typedef struct { | ||||
|     char header[4]; | ||||
|     char data[100]; | ||||
| } MessageFromMon; | ||||
| 
 | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief    Lance nodejs . | ||||
|  * \param    path    chemin de l'executable nodejs (défaut /usr/bin/nodejs) | ||||
|  * \param    file  chemin du fichier de l'interface (défaut ./interface.js) | ||||
|  * \return   retourne 0 si le process a été lancé et -1 sinon. | ||||
|  */ | ||||
| int run_nodejs(const char * path = DEFAULT_NODEJS_PATH, char * file = DEFAULT_INTERFACE_FILE); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief    Tue le process exécutant nodejs. | ||||
|  * \return   retourne 0 en cas de succès et -1 sinon. | ||||
|  */ | ||||
| int kill_nodejs(); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief      Mise en place du serveur (port 8080 par défaut). | ||||
|  * \param    port    numéro du port utilisé par le serveur (8080 par défaut). | ||||
|  * \return   retourne 0 si le serveur est mis en place et -1 en cas de problème. | ||||
|  */ | ||||
| int open_server(int port = DEFAULT_PORT); //public
 | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief    Ferme le serveur. | ||||
|  * \return   retourne 0 si le serveur est fermé et -1 en cas de problème. | ||||
|  */ | ||||
| int close_server(void); // public
 | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief    Envoi d'un message vers l'interface graphique | ||||
|  * \param    typeMessage     Type du message envoyé. Les valeurs possibles sont  | ||||
|  * IMG pour une image, MES pour un message à afficher dans la console, POS pour | ||||
|  * la position du robot, BAT pour une valeur de la batterie et ACK pour valider | ||||
|  * un message de l'interface. | ||||
|  * \param  data   données associées au message. Le type de la donnée doit | ||||
|  * correspondre au message : Image pour IMG, char * MES, Position pour POS,  | ||||
|  * char * pour BAT et rien pour ACK. Attention, il n'y a aucune vérification | ||||
|  * a posterio. | ||||
|  * \return   retourne 0 si l'envoie a bien été réalisé et -1 en cas de problème. | ||||
|  */ | ||||
| int send_message_to_monitor(const char* typeMessage, const void * data = NULL); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief    Réception d'un message. La fonction est bloquante et retourne par | ||||
|  * référence le type de message reçu (DMB pour un ordre au robot, ARN pour la | ||||
|  * détection des arènes et POS pour un calcul de position) ainsi que les données | ||||
|  * associées. | ||||
|  * \param    typeMessage     Type du message reçu : DMB pour un ordre au robot,  | ||||
|  * ARN pour la demande de détection de l'arène, POS pour un calcul de position | ||||
|  * et MSG pour un message de l'interface | ||||
|  * \param  data   données associées au message reçu. | ||||
|  * \return   retourne 0 la taille du message reçu ou une valeur négative si la | ||||
|  * connexion est perdue. | ||||
|  */ | ||||
| int receive_message_from_monitor(char *typeMessage, char *data); | ||||
| 
 | ||||
| 
 | ||||
| #endif // TCPSERVER_H
 | ||||
|  | @ -1,3 +1,13 @@ | |||
| /**
 | ||||
|  * \file      robot.cpp | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  * \brief     Fonction permettant la communication avec le robot. | ||||
|  * | ||||
|  * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART | ||||
|  */ | ||||
| 
 | ||||
| #include "robot.h" | ||||
| 
 | ||||
| int fd; | ||||
|  | @ -190,19 +200,19 @@ int getChar(char * c) | |||
| 
 | ||||
| int readSerial(char * msg) | ||||
| { | ||||
|     char car; | ||||
|     int i =0,j=0; | ||||
|     for(j = 0 ; j < 20 ; j++) | ||||
|     char car=0; | ||||
|     int i=0; | ||||
|     for(int j = 0 ; j < 20 ; j++) | ||||
|         msg[j]=0; | ||||
|     while(car !='\r' && car!='\n') | ||||
|     { | ||||
|         if(i>=20) | ||||
|      | ||||
|     while(car !='\r' && car!='\n') { | ||||
|         if(i>=20)  | ||||
|             return -5; | ||||
| 
 | ||||
|         if(getChar(&car)==ROBOT_TIMED_OUT) | ||||
|         { | ||||
|         if(getChar(&car)==ROBOT_TIMED_OUT) { | ||||
|             return ROBOT_TIMED_OUT; | ||||
|         } | ||||
|          | ||||
|         msg[i] = car; | ||||
|         i++; | ||||
|     } | ||||
|  | @ -1,5 +1,5 @@ | |||
| /**
 | ||||
|  * \file      serial.h | ||||
|  * \file      robot.h | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
							
								
								
									
										349
									
								
								software/raspberry/superviseur-robot/src/Robot.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										349
									
								
								software/raspberry/superviseur-robot/src/Robot.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,349 @@ | |||
| /*******************************************************************************
 | ||||
|  * Copyright (c) 2018 INSA - GEI, Toulouse, France. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available "AS IS", without any warranty of any kind. | ||||
|  * | ||||
|  * INSA assumes no responsibility for errors or omissions in the  | ||||
|  * software or documentation available.  | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     Lucien Senaneuch - Initial API and implementation | ||||
|  *     Sebastien DI MERCURIO - Maintainer since Octobre 2018 | ||||
|  *******************************************************************************/ | ||||
| 
 | ||||
| /**
 | ||||
|  * \file      robot.cpp | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  * \brief     Fonction permettant la communication avec le robot. | ||||
|  * | ||||
|  * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART | ||||
|  */ | ||||
| 
 | ||||
| #include "Robot.h" | ||||
| 
 | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
| #include <termios.h> | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| #include "definitions.h" | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| #define ROBOT_CMD_ENDING_CHAR           '\r' | ||||
| 
 | ||||
| #define ROBOT_CMD_PING                  'p' | ||||
| #define ROBOT_CMD_RESET                 'r' | ||||
| #define ROBOT_CMD_START_WITHOUT_WD      'u' | ||||
| #define ROBOT_CMD_START_WITH_WD         'W' | ||||
| #define ROBOT_CMD_RELOAD_WD             'w' | ||||
| #define ROBOT_CMD_GET_VBAT              'v' | ||||
| #define ROBOT_CMD_IS_BUSY               'b' | ||||
| #define ROBOT_CMD_MOVE                  'M' | ||||
| #define ROBOT_CMD_TURN                  'T' | ||||
| #define ROBOT_CMD_GET_VERSION           'V' | ||||
| #define ROBOT_CMD_POWER_OFF             'z' | ||||
| 
 | ||||
| #define ROBOT_CMD_OK_ANS                "O" | ||||
| #define ROBOT_CMD_ERR_ANS               "E" | ||||
| #define ROBOT_CMD_UNKNOW_ANS            "C" | ||||
| 
 | ||||
| const string Robot::InvalidAnswerException = "Invalid answer exception"; | ||||
| 
 | ||||
| Robot::Robot() { | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| Robot::~Robot() { | ||||
|     this->Close(); | ||||
| } | ||||
| 
 | ||||
| char Robot::Open() { | ||||
|     return Serial::Open(DEFAULT_SERIAL_PORT,9600); | ||||
| } | ||||
| 
 | ||||
| char Robot::Open(const char *path) { | ||||
|     return Serial::Open(path,9600); | ||||
| } | ||||
| 
 | ||||
| char Robot::Close() { | ||||
|     return Serial::Close(); | ||||
| } | ||||
| 
 | ||||
| int Robot::GetLastCommandStatus() { | ||||
|     return this->lastCommandStatus; | ||||
| } | ||||
| 
 | ||||
| void Robot::Ping() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_PING), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::Reset() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_RESET), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::StartWithoutWatchdog() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_START_WITHOUT_WD), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::StartWithWatchdog() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_START_WITH_WD), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::ResetWatchdog() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_RELOAD_WD), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::Move(int distance) { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_MOVE) + "="+to_string(distance), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::Turn(int angle) { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_TURN) + "="+to_string(angle), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::PowerOff() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
|     SendCommand(string(1,ROBOT_CMD_POWER_OFF), &ans); | ||||
| 
 | ||||
|     CheckAnswer(ans); | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| char Robot::GetBatteryLevel() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
| 
 | ||||
|     SendCommand(string(1,ROBOT_CMD_GET_VBAT), &ans); | ||||
|     lastCommandStatus=SUCCESS; | ||||
| 
 | ||||
|     if (ans.length()==1) { | ||||
|         if ((ans[0] != '2') && (ans[0] != '1') && (ans[0] != '0')) { | ||||
|             lastCommandStatus=INVALID_ANSWER; | ||||
|             throw (InvalidAnswerException + " raised in Robot::GetBatteryLevel. Invalid battery value (" + ans[0] +")\n"); | ||||
|         } | ||||
|     } else { | ||||
|         lastCommandStatus=INVALID_ANSWER; | ||||
|         throw (InvalidAnswerException + " raised in Robot::GetBatteryLevel. Invalid answer length (" + to_string(ans.length())+")\n"); | ||||
|     } | ||||
| 
 | ||||
|     return ans[0]; | ||||
| #else | ||||
|     return BATTERY_FULL; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| string Robot::GetVersion() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
| 
 | ||||
|     SendCommand(string(1,ROBOT_CMD_GET_VERSION), &ans); | ||||
|     lastCommandStatus=SUCCESS; | ||||
| 
 | ||||
|     if (ans.find("version")== string::npos) { | ||||
|         lastCommandStatus=INVALID_ANSWER; | ||||
|         throw (InvalidAnswerException + " raised in Robot::GetVersion. Invalid version (" + ans +")\n"); | ||||
|     } | ||||
| 
 | ||||
|     return ans; | ||||
| #else | ||||
|     return "1.3"; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| bool Robot::IsBusy() { | ||||
| #ifndef __STUB__ | ||||
|     string ans; | ||||
| 
 | ||||
|     SendCommand(string(1,ROBOT_CMD_IS_BUSY), &ans); | ||||
|     lastCommandStatus=SUCCESS; | ||||
| 
 | ||||
|     if (ans.length()!=1) { | ||||
|         lastCommandStatus=INVALID_ANSWER; | ||||
|         throw (InvalidAnswerException + " raised in Robot::GetBatteryLevel. Invalid answer length (" + to_string(ans.length())+")\n"); | ||||
|     } | ||||
| 
 | ||||
|     if (ans[0]=='1') | ||||
|         return true; | ||||
|     else if (ans[0]=='0') | ||||
|         return false; | ||||
|     else { | ||||
|         lastCommandStatus=INVALID_ANSWER; | ||||
|         throw (InvalidAnswerException + " raised in Robot::IsBusy. Invalid value (" + ans[0] +")\n"); | ||||
|     } | ||||
| #else | ||||
|     return false; | ||||
| #endif /* __STUB__ */ | ||||
| } | ||||
| 
 | ||||
| void Robot::CommunicationProlog() {} | ||||
| void Robot::CommunicationEpilog() {} | ||||
| 
 | ||||
| /****************************/ | ||||
| /* PRIVATE                  */ | ||||
| /****************************/ | ||||
| 
 | ||||
| char Robot::SendCommand(string cmd, string *ans) { | ||||
|     string commandString; | ||||
|     commandString = this->AddChecksum(cmd); | ||||
| 
 | ||||
|     this->CommunicationProlog(); // action avant le debut de la commande
 | ||||
| 
 | ||||
|     ssize_t status = Send(commandString); | ||||
| 
 | ||||
|     if (status == (ssize_t)commandString.length()) { | ||||
|         // Recuperation de la reponse
 | ||||
|         string commandResponse; | ||||
|         vector<char> endingChars; | ||||
| 
 | ||||
|         endingChars.push_back('\r'); | ||||
|         try { | ||||
|             commandResponse = Serial::Receive(endingChars,30); | ||||
|         } catch (string e) { | ||||
|             if (e.find("Timeout")!= string::npos) | ||||
|                 lastCommandStatus= TIMEOUT_COMMAND; | ||||
|             else | ||||
|                 lastCommandStatus=INVALID_ANSWER; | ||||
| 
 | ||||
|             if (lastCommandStatus == TIMEOUT_COMMAND) | ||||
|                 throw (Serial::TimeoutException + " raised in Robot::SendCommand. Timeout while receiving answer from robot.\n"); | ||||
|             else | ||||
|                 throw (e + " raised in Robot::SendCommand.\n"); | ||||
|         } | ||||
| 
 | ||||
|         this->CommunicationEpilog(); // Action a faire apres la commande
 | ||||
| 
 | ||||
|         if (ValidateChecksum(&commandResponse, commandResponse)) { | ||||
|             ans->assign(commandResponse); | ||||
|         } else { | ||||
|             lastCommandStatus = INVALID_ANSWER; | ||||
|             throw InvalidAnswerException; | ||||
|         } | ||||
| 
 | ||||
|         lastCommandStatus=SUCCESS; | ||||
|     } else { | ||||
|         lastCommandStatus=INVALID_COMMUNICATION_PORT; | ||||
| 
 | ||||
|         throw IOErrorException; | ||||
|     } | ||||
| 
 | ||||
|     return lastCommandStatus; | ||||
| } | ||||
| 
 | ||||
| void Robot::CheckAnswer(string ans) { | ||||
| 
 | ||||
|     if (ans.length()==1) | ||||
|     { | ||||
|         switch (ans.at(0)) { | ||||
|             case 'o': | ||||
|             case 'O': | ||||
|                 lastCommandStatus=SUCCESS; | ||||
|                 break; | ||||
|             case 'e': | ||||
|             case 'E': | ||||
|                 lastCommandStatus=REJECTED_COMMAND; | ||||
|                 break; | ||||
|             case 'c': | ||||
|             case 'C': | ||||
|                 lastCommandStatus=INVALID_COMMAND; | ||||
|                 break; | ||||
|             default: | ||||
|                 lastCommandStatus = INVALID_ANSWER; | ||||
|                 throw InvalidAnswerException; | ||||
|         } | ||||
|     } else { | ||||
|         lastCommandStatus = INVALID_ANSWER; | ||||
|         throw InvalidAnswerException; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| string Robot::AddChecksum(string cmd) { | ||||
|     string commandWithChecksum(cmd); | ||||
|     char checksum=0; | ||||
| 
 | ||||
|     commandWithChecksum.resize(cmd.length()+2, ' '); | ||||
| 
 | ||||
|     for (size_t i=0; i<commandWithChecksum.length()-2; i++) { | ||||
|         checksum = checksum^commandWithChecksum.at(i); | ||||
|     } | ||||
| 
 | ||||
|     commandWithChecksum.at(commandWithChecksum.length()-2) = checksum; | ||||
|     commandWithChecksum.at(commandWithChecksum.length()-1) = '\r'; | ||||
| 
 | ||||
|     return commandWithChecksum; | ||||
| } | ||||
| 
 | ||||
| bool Robot::ValidateChecksum(string *answerWithoutChecksum, string answer) { | ||||
|     string localAnswer(answer, 0, answer.length()-1); // recopie de la chaine initiale, sans le dernier caractere (checksum)
 | ||||
|     char checksum=0; | ||||
|     bool status=false; | ||||
| 
 | ||||
|     if (answer.length()<2) // trop court pour contenir un checksum
 | ||||
|         throw InvalidAnswerException; | ||||
|     else { | ||||
|         for (size_t i=0; i< answer.length()-1; i++) { | ||||
|             checksum = checksum^answer.at(i); | ||||
|         } | ||||
| 
 | ||||
|         if (answer.at(answer.length()-1) == checksum) { | ||||
|             status=true; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     answerWithoutChecksum->assign(localAnswer); | ||||
|     return status; | ||||
| } | ||||
							
								
								
									
										84
									
								
								software/raspberry/superviseur-robot/src/Robot.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								software/raspberry/superviseur-robot/src/Robot.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,84 @@ | |||
| /*******************************************************************************
 | ||||
|  * Copyright (c) 2018 INSA - GEI, Toulouse, France. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available "AS IS", without any warranty of any kind. | ||||
|  * | ||||
|  * INSA assumes no responsibility for errors or omissions in the  | ||||
|  * software or documentation available.  | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     Lucien Senaneuch - Initial API and implementation | ||||
|  *     Sebastien DI MERCURIO - Maintainer since Octobre 2018 | ||||
|  *******************************************************************************/ | ||||
| /**
 | ||||
|  * \file      robot.h | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  * \brief     Fonction permettant la communication avec le robot. | ||||
|  * | ||||
|  * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART | ||||
|  */ | ||||
| 
 | ||||
| #ifndef __ROBOT_H__ | ||||
| #define __ROBOT_H__ | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <Serial.h> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| #define REJECTED_COMMAND                    -3 | ||||
| #define INVALID_COMMAND                     -4 | ||||
| #define TIMEOUT_COMMAND                     -5 | ||||
| #define INVALID_ANSWER                      -6 | ||||
| 
 | ||||
| #define BATTERY_FULL                        2 | ||||
| #define BATTERY_LOW                         1 | ||||
| #define BATTERY_EMPTY                       0 | ||||
| 
 | ||||
| class Robot : public Serial { | ||||
|     public: | ||||
|         Robot(); | ||||
|         virtual ~Robot(); | ||||
| 
 | ||||
|         char Open(); | ||||
|         char Open(const char *path); | ||||
|         char Close(); | ||||
| 
 | ||||
|         int GetLastCommandStatus(); | ||||
| 
 | ||||
|         void Ping(); | ||||
|         void Reset(); | ||||
| 
 | ||||
|         void StartWithoutWatchdog(); | ||||
|         void StartWithWatchdog(); | ||||
|         void ResetWatchdog(); | ||||
| 
 | ||||
|         void Move(int distance); | ||||
|         void Turn(int angle); | ||||
| 
 | ||||
|         void PowerOff(); | ||||
| 
 | ||||
|         char GetBatteryLevel(); | ||||
|         string GetVersion(); | ||||
|         bool IsBusy(); | ||||
| 
 | ||||
|         // Ces deux methodes virtuelles sont a redefinir (surcharger) dans une classe qui etends la classe Robot
 | ||||
|         // Servez vous en pour faire une action avant (prologue) ou apres (epilogue) une commande au robot
 | ||||
|         virtual void CommunicationProlog(); | ||||
|         virtual void CommunicationEpilog(); | ||||
| 
 | ||||
|         static const string InvalidAnswerException; | ||||
|     private: | ||||
| 
 | ||||
|         int lastCommandStatus; | ||||
| 
 | ||||
|         char SendCommand(string cmd, string *ans); | ||||
|         string AddChecksum(string cmd); | ||||
|         bool ValidateChecksum(string *answerWithoutChecksum, string answer); | ||||
|         void CheckAnswer(string ans); | ||||
| }; | ||||
| 
 | ||||
| #endif //__ROBOT_H__
 | ||||
							
								
								
									
										164
									
								
								software/raspberry/superviseur-robot/src/Serial.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								software/raspberry/superviseur-robot/src/Serial.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,164 @@ | |||
| /*******************************************************************************
 | ||||
|  * Copyright (c) 2018 INSA - GEI, Toulouse, France. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available "AS IS", without any warranty of any kind. | ||||
|  * | ||||
|  * INSA assumes no responsibility for errors or omissions in the  | ||||
|  * software or documentation available.  | ||||
|  * | ||||
|  * Part of code Copyright ST Microelectronics. | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     Lucien Senaneuch - Initial API and implementation | ||||
|  *     Sebastien DI MERCURIO - Maintainer since Octobre 2018 | ||||
|  *******************************************************************************/ | ||||
| 
 | ||||
| #include <Serial.h> | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
| #include <termios.h> | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #include <algorithm> | ||||
| 
 | ||||
| const string Serial::TimeoutException = "Timeout exception"; | ||||
| const string Serial::IOErrorException = "IO error exception"; | ||||
| const string Serial::BufferOverflowException = "Buffer overflow exception"; | ||||
| 
 | ||||
| Serial::Serial() { | ||||
|     this->serialPortDescriptor=-1; | ||||
| } | ||||
| 
 | ||||
| Serial::~Serial() { | ||||
|     this->Close(); | ||||
| } | ||||
| 
 | ||||
| char Serial::Open(void) { | ||||
|     return this->Open(DEFAULT_SERIAL_PORT, DEFAULT_BAUDRATE); | ||||
| } | ||||
| 
 | ||||
| char Serial::Open(int baudrate) { | ||||
|     return this->Open(DEFAULT_SERIAL_PORT, baudrate); | ||||
| } | ||||
| 
 | ||||
| char Serial::Open(const char *path, int baudrate) { | ||||
| #ifndef __STUB__ | ||||
|     struct termios options; | ||||
| 
 | ||||
|     if (this->IsOpen() == true) return COMMUNICATION_PORT_ALREADY_OPENED; | ||||
| 
 | ||||
|     this->serialPortDescriptor = open(path, O_RDWR | O_NOCTTY | O_NDELAY); | ||||
| 
 | ||||
|     if(this->serialPortDescriptor >= 0) { | ||||
|         fcntl(this->serialPortDescriptor, F_SETFL, 0); | ||||
|         tcgetattr(this->serialPortDescriptor, &options); | ||||
|         options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); | ||||
|         cfsetospeed (&options, this->SetBaudrate(baudrate)); | ||||
|         cfsetispeed (&options, this->SetBaudrate(baudrate)); | ||||
|         options.c_cc[VMIN]=0; | ||||
|         options.c_cc[VTIME]=10; | ||||
|         tcsetattr(this->serialPortDescriptor, TCSANOW, &options); | ||||
| 
 | ||||
|         return SUCCESS; | ||||
|     } | ||||
|     else { | ||||
|         std::cerr << "[Robot::Open] Can't open port " << path; | ||||
|         return INVALID_COMMUNICATION_PORT; | ||||
|     } | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| char Serial::Close(void) { | ||||
| #ifndef __STUB__ | ||||
|     if (this->serialPortDescriptor<0) { | ||||
|         if (close(this->serialPortDescriptor) == 0) | ||||
|             return SUCCESS; | ||||
|         else return INVALID_COMMUNICATION_PORT; | ||||
|     } else return SUCCESS; | ||||
| #else | ||||
|     return SUCCESS; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| bool Serial::IsOpen() { | ||||
|     if(this->serialPortDescriptor >= 0) | ||||
|         return true; | ||||
|     else | ||||
|         return false; | ||||
| } | ||||
| 
 | ||||
| ssize_t Serial::Send(string mes) { | ||||
|     ssize_t n; | ||||
| 
 | ||||
|     n=write(this->serialPortDescriptor, (void*)mes.c_str(), mes.length()); | ||||
| 
 | ||||
|     if (n< (ssize_t)mes.length()) | ||||
|         throw (IOErrorException + " raised in Serial::Send. Requested to send " + to_string(mes.length()) + " characters, sent only " + to_string(n) +"\n"); | ||||
|     else | ||||
|         return n; | ||||
| } | ||||
| 
 | ||||
| string Serial::Receive(int size) { | ||||
|     string mes; | ||||
| 
 | ||||
|     while(mes.length() < (unsigned int)size){ | ||||
|         mes += this->GetChar(); | ||||
|     } | ||||
| 
 | ||||
|     return mes; | ||||
| } | ||||
| 
 | ||||
| string Serial::Receive(vector<char> endingChars,int maxLength) { | ||||
|     string mes; | ||||
|     char c; | ||||
| 
 | ||||
|     bool characterFound = false; | ||||
| 
 | ||||
|     do { | ||||
|         c= GetChar(); | ||||
| 
 | ||||
|         if (std::find(endingChars.begin(), endingChars.end(), c)!=endingChars.end()) //recherche du caractere dans la liste des caractere de fin
 | ||||
|             characterFound=true; | ||||
|         else { | ||||
|             mes += c; | ||||
|         } | ||||
|     } while ((mes.length()<(unsigned int)maxLength) && (characterFound==false)); | ||||
| 
 | ||||
|     if (mes.length()>=(unsigned int)maxLength) { | ||||
|         throw (BufferOverflowException + " raised in Serial::Receive. Received data exceed " + to_string(maxLength) + "chars\n"); | ||||
|     } | ||||
| 
 | ||||
|     return mes; | ||||
| } | ||||
| 
 | ||||
| int Serial::SetBaudrate(int baudrate) { | ||||
|     switch(baudrate){ | ||||
|         case 4800: | ||||
|             return baudrate = B4800; | ||||
|         case 9600: | ||||
|             return baudrate = B9600; | ||||
|         case 38400: | ||||
|             return baudrate = B38400; | ||||
|         case 57600: | ||||
|             return baudrate = B57600; | ||||
|         case 115200: | ||||
|             return baudrate = B115200; | ||||
|         default: | ||||
|             std::cerr << "Baudrate not supported" << std::endl; | ||||
|             return -1; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| char Serial::GetChar() { | ||||
|     char c; | ||||
| 
 | ||||
|     if (read(this->serialPortDescriptor, &c, 1) > 0) | ||||
|         return c; | ||||
|     else | ||||
|         throw (TimeoutException + " raised in Serial::GetChar\n"); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										49
									
								
								software/raspberry/superviseur-robot/src/Serial.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								software/raspberry/superviseur-robot/src/Serial.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| /*
 | ||||
|  * Serial.h | ||||
|  * | ||||
|  *  Created on: 12 oct. 2018 | ||||
|  *      Author: dimercur | ||||
|  */ | ||||
| 
 | ||||
| #ifndef SERIAL_H_ | ||||
| #define SERIAL_H_ | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| #define SUCCESS                             0 | ||||
| #define INVALID_COMMUNICATION_PORT          -1 | ||||
| #define COMMUNICATION_PORT_ALREADY_OPENED   -2 | ||||
| 
 | ||||
| #define DEFAULT_SERIAL_PORT             "/dev/ttyS0" | ||||
| #define DEFAULT_BAUDRATE                9600 | ||||
| 
 | ||||
| class Serial { | ||||
|     public: | ||||
|         static const string TimeoutException; | ||||
|         static const string IOErrorException; | ||||
|         static const string BufferOverflowException; | ||||
| 
 | ||||
|         Serial(); | ||||
|         virtual ~Serial(); | ||||
| 
 | ||||
|         char Open(void); | ||||
|         char Open(int baudrate); | ||||
|         char Open(const char *path, int baudrate); | ||||
|         char Close(void); | ||||
| 
 | ||||
|         bool IsOpen(); | ||||
|         ssize_t Send(string mes); | ||||
|         string Receive(int size); | ||||
|         string Receive(vector<char> endingChars, int maxLength); | ||||
| 
 | ||||
|     private: | ||||
|         int serialPortDescriptor; | ||||
|         int SetBaudrate(int baudrate); | ||||
|         char GetChar(); // read 1 char
 | ||||
| }; | ||||
| 
 | ||||
| #endif /* SERIAL_H_ */ | ||||
							
								
								
									
										93
									
								
								software/raspberry/superviseur-robot/src/TcpServer.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								software/raspberry/superviseur-robot/src/TcpServer.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,93 @@ | |||
| /*******************************************************************************
 | ||||
|  * Copyright (c) 2018 INSA - GEI, Toulouse, France. | ||||
|  * All rights reserved. This program and the accompanying materials | ||||
|  * are made available "AS IS", without any warranty of any kind. | ||||
|  * | ||||
|  * INSA assumes no responsibility for errors or omissions in the  | ||||
|  * software or documentation available.  | ||||
|  * | ||||
|  * Part of code Copyright ST Microelectronics. | ||||
|  * | ||||
|  * Contributors: | ||||
|  *     Lucien Senaneuch - Initial API and implementation | ||||
|  *     Sebastien DI MERCURIO - Maintainer since Octobre 2018 | ||||
|  *******************************************************************************/ | ||||
| 
 | ||||
| 
 | ||||
| #include "TcpServer.h" | ||||
| #include <netinet/in.h> | ||||
| #include <zconf.h> | ||||
| #include <vector> | ||||
| 
 | ||||
| TcpServer::TcpServer() { | ||||
|     this->socketFD = -1; | ||||
|     this->socketClients.clear(); | ||||
| } | ||||
| 
 | ||||
| int TcpServer::Listen (int port) { | ||||
|     struct sockaddr_in server; | ||||
| 
 | ||||
|     this->socketFD = socket(AF_INET, SOCK_STREAM, 0); | ||||
|     if(this->socketFD < 0){ | ||||
|         throw invalid_argument("Can not create socket"); | ||||
|     } | ||||
| 
 | ||||
|     server.sin_addr.s_addr = INADDR_ANY; | ||||
|     server.sin_family = AF_INET; | ||||
|     server.sin_port = htons(port); | ||||
| 
 | ||||
|     if(bind(this->socketFD, (struct sockaddr *) &server, sizeof(server)) < 0) { | ||||
|         throw invalid_argument("Can not bind socket"); | ||||
|     } | ||||
| 
 | ||||
|     listen(this->socketFD , NB_CONNECTION_MAX); | ||||
| 
 | ||||
|     return this->socketFD; | ||||
| } | ||||
| 
 | ||||
| int TcpServer::AcceptClient() { | ||||
|     struct sockaddr_in client; | ||||
|     int c = sizeof(struct sockaddr_in); | ||||
| 
 | ||||
|     int fd = accept(this->socketFD,(struct sockaddr *) &client, (socklen_t*)&c); | ||||
| 
 | ||||
|     if (fd >=0 ) | ||||
|         this->socketClients.push_back(fd); | ||||
|     else throw invalid_argument("Accept failed in TcpServer::AcceptClient"); | ||||
| 
 | ||||
|     return fd; | ||||
| } | ||||
| 
 | ||||
| int TcpServer::Send(int client, string mes) { | ||||
|     return write(client, mes.c_str(), mes.size()); | ||||
| } | ||||
| 
 | ||||
| string TcpServer::Receive(int client_fd, int size){ | ||||
|     char tab[size]; | ||||
| 
 | ||||
|     if(recv(client_fd,tab,size,0) >0) { | ||||
|         tab[size] = 0; | ||||
|         return string(tab); | ||||
|     } else | ||||
|         return string(); | ||||
| } | ||||
| 
 | ||||
| int TcpServer::Broadcast(string mes) { | ||||
|     for (int socket : this->socketClients) { | ||||
|         int err = write(socket, mes.c_str(), mes.size()); | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| const vector<int> &TcpServer::getSocketClients() const { | ||||
|     return socketClients; | ||||
| } | ||||
| 
 | ||||
| void TcpServer::SetSocketClients(const std::vector<int> &socketClients) { | ||||
|     this->socketClients = socketClients; | ||||
| } | ||||
| 
 | ||||
| TcpServer::~TcpServer() { | ||||
|     close(this->socketFD); | ||||
| } | ||||
							
								
								
									
										35
									
								
								software/raspberry/superviseur-robot/src/TcpServer.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								software/raspberry/superviseur-robot/src/TcpServer.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| //
 | ||||
| // Created by senaneuc on 12/06/18.
 | ||||
| //
 | ||||
| 
 | ||||
| #ifndef TCP_SERVER_H_ | ||||
| #define TCP_SERVER_H_ | ||||
| 
 | ||||
| #define NB_CONNECTION_MAX 5 | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| class TcpServer { | ||||
| public: | ||||
|     TcpServer(); | ||||
|     virtual ~TcpServer(); | ||||
| 
 | ||||
|     int Listen (int port); | ||||
|     int AcceptClient(); | ||||
|     int Send(int clien_fd, string mes); | ||||
|     int Broadcast(string mes); | ||||
|     string Receive(int client_fd, int size); | ||||
| 
 | ||||
|     const vector<int> &getSocketClients() const; | ||||
| 
 | ||||
|     void SetSocketClients(const vector<int> &socketClients); | ||||
| 
 | ||||
| private: | ||||
|     vector<int> socketClients; | ||||
|     int socketFD; | ||||
| }; | ||||
| 
 | ||||
| #endif /* TCP_SERVER_H_ */ | ||||
|  | @ -14,30 +14,6 @@ | |||
| #ifndef DEFINITIONS_H | ||||
| #define DEFINITIONS_H | ||||
| 
 | ||||
| #define OPEN_COM_DMB  'o' | ||||
| #define CLOSE_COM_DMB 'C' | ||||
| 
 | ||||
| #define DMB_PING                'p' | ||||
| #define DMB_IDLE                'r' | ||||
| #define DMB_START_WITHOUT_WD    'u' | ||||
| #define DMB_START_WITH_WD       'W' | ||||
| #define DMB_RELOAD_WD           'w' | ||||
| #define DMB_GET_VBAT            'v' | ||||
| #define DMB_IS_BUSY             'b' | ||||
| #define DMB_MOVE                'M' | ||||
| #define DMB_TURN                'T' | ||||
| #define DMB_GO_FORWARD          'F' | ||||
| #define DMB_GO_BACK             'B' | ||||
| #define DMB_GO_LEFT             'L' | ||||
| #define DMB_GO_RIGHT            'R' | ||||
| #define DMB_STOP_MOVE           'S' | ||||
| 
 | ||||
| #define ROBOT_TIMED_OUT -3 | ||||
| #define ROBOT_UKNOWN_CMD -2 | ||||
| #define ROBOT_ERROR  -1 | ||||
| #define ROBOT_CHECKSUM  -4 | ||||
| #define ROBOT_OK    0 | ||||
| 
 | ||||
| #define CAM_OPEN                    'A' | ||||
| #define CAM_CLOSE                   'I' | ||||
| #define CAM_ASK_ARENA               'y' | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /**
 | ||||
|  * \file      imagerie.cpp | ||||
|  * \file      image.cpp | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /**
 | ||||
|  * \file      imagerie.h | ||||
|  * \file      image.h | ||||
|  * \author    L.Senaneuch | ||||
|  * \version   1.0 | ||||
|  * \date      06/06/2017 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue