Last commit to branch master.
after that next commits will be in branch dev or stable
This commit is contained in:
		
							parent
							
								
									6bf2742136
								
							
						
					
					
						commit
						2451177ccd
					
				
					 41 changed files with 2211 additions and 841 deletions
				
			
		|  | @ -1,2 +1,11 @@ | |||
| build/ | ||||
| src.sav/ | ||||
| cmake-build-debug/ | ||||
| futur/ | ||||
| build/ | ||||
| CMakeFiles/ | ||||
| 
 | ||||
| Makefile | ||||
| *.cmake | ||||
| CMakeCache.txt | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										1
									
								
								software/raspberry/superviseur-robot/.idea/.name
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								software/raspberry/superviseur-robot/.idea/.name
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| ProjDestijl | ||||
|  | @ -0,0 +1,29 @@ | |||
| <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> | ||||
							
								
								
									
										7
									
								
								software/raspberry/superviseur-robot/.idea/misc.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								software/raspberry/superviseur-robot/.idea/misc.xml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" /> | ||||
|   <component name="JavaScriptSettings"> | ||||
|     <option name="languageLevel" value="ES6" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										8
									
								
								software/raspberry/superviseur-robot/.idea/modules.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								software/raspberry/superviseur-robot/.idea/modules.xml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="ProjectModuleManager"> | ||||
|     <modules> | ||||
|       <module fileurl="file://$PROJECT_DIR$/.idea/superviseur-robot.iml" filepath="$PROJECT_DIR$/.idea/superviseur-robot.iml" /> | ||||
|     </modules> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -0,0 +1,2 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <module classpath="CMake" type="CPP_MODULE" version="4" /> | ||||
							
								
								
									
										6
									
								
								software/raspberry/superviseur-robot/.idea/vcs.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								software/raspberry/superviseur-robot/.idea/vcs.xml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="VcsDirectoryMappings"> | ||||
|     <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" /> | ||||
|   </component> | ||||
| </project> | ||||
							
								
								
									
										864
									
								
								software/raspberry/superviseur-robot/.idea/workspace.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										864
									
								
								software/raspberry/superviseur-robot/.idea/workspace.xml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,864 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project version="4"> | ||||
|   <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true" buildAllGenerated="true"> | ||||
|     <generated> | ||||
|       <config projectName="ProjDestijl" targetName="superviseur" /> | ||||
|       <config projectName="ProjDestijl" targetName="destijl" /> | ||||
|     </generated> | ||||
|   </component> | ||||
|   <component name="CMakeSettings" AUTO_RELOAD="true"> | ||||
|     <configurations> | ||||
|       <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" /> | ||||
|     </configurations> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="4c044020-a391-4234-8366-64abd3f0f464" name="Default Changelist" comment=""> | ||||
|       <change afterPath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Program.cpp" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp" afterDir="false" /> | ||||
|       <change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Tasks.h" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/destijl_init/Makefile" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/examples/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/examples/CMakeLists.txt" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/lib/CMakeLists.txt" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/Robot.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/Serial.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/TcpServer.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/definitions.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/image.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/message.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/monitor.h" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/src/Robot.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/src/Serial.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/src/TcpServer.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/src/image.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/src/message.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/lib/src/monitor.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp" beforeDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h" beforeDir="false" /> | ||||
|     </list> | ||||
|     <ignored path="$PROJECT_DIR$/cmake-build-debug/" /> | ||||
|     <ignored path="$PROJECT_DIR$/CMakeFiles/" /> | ||||
|     <ignored path="$PROJECT_DIR$/superviseur/CMakeFiles/" /> | ||||
|     <ignored path="$PROJECT_DIR$/lib/CMakeFiles/" /> | ||||
|     <option name="EXCLUDED_CONVERTED_TO_IGNORED" 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="FUSProjectUsageTrigger"> | ||||
|     <session id="-329952360"> | ||||
|       <usages-collector id="statistics.lifecycle.project"> | ||||
|         <counts> | ||||
|           <entry key="project.closed" value="2" /> | ||||
|           <entry key="project.open.time.3" value="1" /> | ||||
|           <entry key="project.open.time.9" value="1" /> | ||||
|           <entry key="project.opened" value="2" /> | ||||
|         </counts> | ||||
|       </usages-collector> | ||||
|       <usages-collector id="statistics.file.extensions.open"> | ||||
|         <counts> | ||||
|           <entry key="cmake" value="1" /> | ||||
|           <entry key="cpp" value="36" /> | ||||
|           <entry key="gitignore" value="1" /> | ||||
|           <entry key="h" value="18" /> | ||||
|           <entry key="txt" value="20" /> | ||||
|         </counts> | ||||
|       </usages-collector> | ||||
|       <usages-collector id="statistics.file.types.open"> | ||||
|         <counts> | ||||
|           <entry key="CMakeLists.txt" value="21" /> | ||||
|           <entry key="ObjectiveC" value="54" /> | ||||
|           <entry key="PLAIN_TEXT" value="1" /> | ||||
|         </counts> | ||||
|       </usages-collector> | ||||
|       <usages-collector id="statistics.file.extensions.edit"> | ||||
|         <counts> | ||||
|           <entry key="cpp" value="3165" /> | ||||
|           <entry key="gitignore" value="19" /> | ||||
|           <entry key="h" value="1381" /> | ||||
|           <entry key="txt" value="1035" /> | ||||
|         </counts> | ||||
|       </usages-collector> | ||||
|       <usages-collector id="statistics.file.types.edit"> | ||||
|         <counts> | ||||
|           <entry key="CMakeLists.txt" value="1035" /> | ||||
|           <entry key="Doxygen file" value="2" /> | ||||
|           <entry key="ObjectiveC" value="4544" /> | ||||
|           <entry key="PLAIN_TEXT" value="19" /> | ||||
|         </counts> | ||||
|       </usages-collector> | ||||
|     </session> | ||||
|   </component> | ||||
|   <component name="FileEditorManager"> | ||||
|     <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/lib/CMakeLists.txt"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state> | ||||
|               <caret column="81" selection-start-column="81" selection-end-column="81" /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/lib/image.h"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="209"> | ||||
|               <caret line="17" selection-start-line="17" selection-end-line="17" /> | ||||
|               <folding> | ||||
|                 <element signature="e#566#599#0" expanded="true" /> | ||||
|                 <element signature="e#635#673#0" expanded="true" /> | ||||
|                 <element signature="e#865#890#0" expanded="true" /> | ||||
|                 <element signature="e#935#962#0" expanded="true" /> | ||||
|               </folding> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/lib/src/message.cpp"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="405"> | ||||
|               <caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/lib/monitor.h"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="389"> | ||||
|               <caret line="64" column="94" selection-start-line="64" selection-start-column="94" selection-end-line="64" selection-end-column="94" /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/lib/src/monitor.cpp"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="338"> | ||||
|               <caret line="104" column="23" selection-start-line="104" selection-start-column="23" selection-end-line="104" selection-end-column="23" /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file 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="330"> | ||||
|               <caret line="22" selection-start-line="22" selection-end-line="22" /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/superviseur/CMakeLists.txt"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="135"> | ||||
|               <caret line="9" selection-start-line="9" selection-end-line="9" /> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/superviseur/src/main.cpp"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="75"> | ||||
|               <caret line="89" column="13" selection-start-line="89" selection-start-column="13" selection-end-line="89" selection-end-column="13" /> | ||||
|               <folding> | ||||
|                 <element signature="e#88#106#0" expanded="true" /> | ||||
|               </folding> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="false"> | ||||
|         <entry file="file://$PROJECT_DIR$/superviseur/src/functions.h"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="180"> | ||||
|               <caret line="51" column="21" selection-start-line="51" selection-start-column="12" selection-end-line="51" selection-end-column="21" /> | ||||
|               <folding> | ||||
|                 <element signature="e#319#337#0" expanded="true" /> | ||||
|               </folding> | ||||
|             </state> | ||||
|           </provider> | ||||
|         </entry> | ||||
|       </file> | ||||
|       <file pinned="false" current-in-tab="true"> | ||||
|         <entry file="file://$PROJECT_DIR$/superviseur/src/functions.cpp"> | ||||
|           <provider selected="true" editor-type-id="text-editor"> | ||||
|             <state relative-caret-position="300"> | ||||
|               <caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" /> | ||||
|             </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$/.gitignore" /> | ||||
|         <option value="$PROJECT_DIR$/lib/Definition.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/Robot.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/Image.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/Camera.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/Camera.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/Image.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/destijl_init/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/monitor/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/monitor/src/functions.h" /> | ||||
|         <option value="$PROJECT_DIR$/monitor/src/main.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/monitor-pc/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/monitor-pc/src/functions.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/monitor-pc/src/functions.h" /> | ||||
|         <option value="$PROJECT_DIR$/monitor-pc/src/main.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/monitor-pthread/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-pthread/src/Functions.h" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-pthread/src/Functions.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/TcpServer.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/TcpServer.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/Messages.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/Messages.h" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-pthread/src/Tasks.h" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-pthread/src/Program.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/examples/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-xenomai/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/MsgManager.h" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/lib/image.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/message.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/lib/monitor.h" /> | ||||
|         <option value="$PROJECT_DIR$/lib/src/monitor.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur/src/functions.h" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur/src/functions.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/CMakeLists.txt" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur/src/main.cpp" /> | ||||
|         <option value="$PROJECT_DIR$/superviseur/CMakeLists.txt" /> | ||||
|       </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="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" /> | ||||
|   <component name="ProjectFrameBounds"> | ||||
|     <option name="x" value="260" /> | ||||
|     <option name="y" value="101" /> | ||||
|     <option name="width" value="1660" /> | ||||
|     <option name="height" value="1088" /> | ||||
|   </component> | ||||
|   <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> | ||||
|   <component name="ProjectView"> | ||||
|     <navigator proportions="" version="1"> | ||||
|       <foldersAlwaysOnTop value="true" /> | ||||
|     </navigator> | ||||
|     <panes> | ||||
|       <pane id="Scope" /> | ||||
|       <pane id="ProjectPane"> | ||||
|         <subPane> | ||||
|           <expand> | ||||
|             <path> | ||||
|               <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" /> | ||||
|               <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" /> | ||||
|               <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" /> | ||||
|               <item name="lib" type="462c0819:PsiDirectoryNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" /> | ||||
|               <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" /> | ||||
|               <item name="superviseur" type="462c0819:PsiDirectoryNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" /> | ||||
|               <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" /> | ||||
|               <item name="superviseur" type="462c0819:PsiDirectoryNode" /> | ||||
|               <item name="src" type="462c0819:PsiDirectoryNode" /> | ||||
|             </path> | ||||
|             <path> | ||||
|               <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" /> | ||||
|               <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" /> | ||||
|             </path> | ||||
|           </expand> | ||||
|           <select /> | ||||
|         </subPane> | ||||
|       </pane> | ||||
|     </panes> | ||||
|   </component> | ||||
|   <component name="PropertiesComponent"> | ||||
|     <property name="WebServerToolWindowFactoryState" value="false" /> | ||||
|     <property name="last_opened_file_path" value="$PROJECT_DIR$/superviseur/bin/superviseur" /> | ||||
|     <property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.General" /> | ||||
|   </component> | ||||
|   <component name="RecentsManager"> | ||||
|     <key name="CopyFile.RECENT_KEYS"> | ||||
|       <recent name="$PROJECT_DIR$/destijl_init" /> | ||||
|     </key> | ||||
|     <key name="MoveFile.RECENT_KEYS"> | ||||
|       <recent name="$PROJECT_DIR$/lib" /> | ||||
|       <recent name="$PROJECT_DIR$/destijl_init/src" /> | ||||
|     </key> | ||||
|   </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.superviseur"> | ||||
|     <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" EXPLICIT_BUILD_TARGET_NAME="all"> | ||||
|       <method v="2"> | ||||
|         <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="destijl" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ProjDestijl" TARGET_NAME="destijl" CONFIG_NAME="Debug"> | ||||
|       <method v="2"> | ||||
|         <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <configuration name="superviseur" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ProjDestijl" TARGET_NAME="superviseur" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="ProjDestijl" RUN_TARGET_NAME="superviseur"> | ||||
|       <method v="2"> | ||||
|         <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" /> | ||||
|       </method> | ||||
|     </configuration> | ||||
|     <list> | ||||
|       <item itemvalue="Application.Build All" /> | ||||
|       <item itemvalue="Application.destijl" /> | ||||
|       <item itemvalue="Application.superviseur" /> | ||||
|     </list> | ||||
|   </component> | ||||
|   <component name="SvnConfiguration"> | ||||
|     <configuration /> | ||||
|   </component> | ||||
|   <component name="TaskManager"> | ||||
|     <task active="true" id="Default" summary="Default task"> | ||||
|       <changelist id="4c044020-a391-4234-8366-64abd3f0f464" name="Default Changelist" comment="" /> | ||||
|       <created>1539692092358</created> | ||||
|       <option name="number" value="Default" /> | ||||
|       <option name="presentableId" value="Default" /> | ||||
|       <updated>1539692092358</updated> | ||||
|       <workItem from="1539692095452" duration="3090000" /> | ||||
|       <workItem from="1539698076207" duration="43886000" /> | ||||
|     </task> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="TimeTrackingManager"> | ||||
|     <option name="totallyTimeSpent" value="46976000" /> | ||||
|   </component> | ||||
|   <component name="ToolWindowManager"> | ||||
|     <frame x="260" y="101" width="1660" height="1088" extended-state="0" /> | ||||
|     <layout> | ||||
|       <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.21277915" /> | ||||
|       <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> | ||||
|       <window_info id="Favorites" order="2" side_tool="true" /> | ||||
|       <window_info anchor="bottom" id="Message" order="0" /> | ||||
|       <window_info anchor="bottom" id="Find" order="1" weight="0.2114165" /> | ||||
|       <window_info anchor="bottom" id="Run" order="2" /> | ||||
|       <window_info anchor="bottom" id="Debug" order="3" weight="0.39957717" /> | ||||
|       <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> | ||||
|       <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> | ||||
|       <window_info anchor="bottom" id="TODO" order="6" /> | ||||
|       <window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" /> | ||||
|       <window_info anchor="bottom" id="Messages" order="8" weight="0.3118393" /> | ||||
|       <window_info anchor="bottom" id="Terminal" order="9" weight="0.32980973" /> | ||||
|       <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" /> | ||||
|       <window_info anchor="bottom" id="Version Control" order="11" show_stripe_button="false" /> | ||||
|       <window_info anchor="bottom" id="CMake" order="12" weight="0.32980973" /> | ||||
|       <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> | ||||
|       <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> | ||||
|       <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> | ||||
|       <window_info anchor="right" id="Database" order="3" /> | ||||
|     </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> | ||||
|       <breakpoints> | ||||
|         <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> | ||||
|           <url>file://$PROJECT_DIR$/examples/src/serverTest.cpp</url> | ||||
|           <line>28</line> | ||||
|           <option name="timeStamp" value="1" /> | ||||
|         </line-breakpoint> | ||||
|         <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> | ||||
|           <url>file://$PROJECT_DIR$/superviseur/src/functions.cpp</url> | ||||
|           <line>16</line> | ||||
|           <option name="timeStamp" value="6" /> | ||||
|         </line-breakpoint> | ||||
|       </breakpoints> | ||||
|     </breakpoint-manager> | ||||
|   </component> | ||||
|   <component name="editorHistoryManager"> | ||||
|     <entry file="file://$PROJECT_DIR$/destijl_init/src/functions.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor" /> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/destijl_init/src/main.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor" /> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/Camera.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="795"> | ||||
|           <caret line="53" column="19" selection-start-line="53" selection-start-column="19" selection-end-line="53" selection-end-column="19" /> | ||||
|           <folding> | ||||
|             <element signature="e#43#62#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/Image.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="525"> | ||||
|           <caret line="35" column="52" selection-start-line="35" selection-start-column="52" selection-end-line="35" selection-end-column="52" /> | ||||
|           <folding> | ||||
|             <element signature="e#80#99#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/Definition.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="330"> | ||||
|           <caret line="22" column="10" selection-start-line="22" selection-start-column="10" selection-end-line="22" selection-end-column="10" /> | ||||
|           <folding> | ||||
|             <element signature="e#90#128#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/Camera.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="435"> | ||||
|           <caret line="29" selection-start-line="29" selection-end-line="29" /> | ||||
|           <folding> | ||||
|             <element signature="e#82#120#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/destijl_init/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="90"> | ||||
|           <caret line="6" column="21" selection-start-line="6" selection-start-column="21" selection-end-line="6" selection-end-column="21" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="135"> | ||||
|           <caret line="9" selection-start-line="9" selection-end-line="9" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor/src/functions.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="615"> | ||||
|           <caret line="41" column="41" selection-start-line="41" selection-start-column="41" selection-end-line="41" selection-end-column="41" /> | ||||
|           <folding> | ||||
|             <element signature="e#1028#1087#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor/src/functions.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="203"> | ||||
|           <caret line="33" selection-start-line="24" selection-end-line="33" /> | ||||
|           <folding> | ||||
|             <element signature="e#319#337#0" expanded="true" /> | ||||
|             <element signature="e#446#577#0" expanded="true" /> | ||||
|             <element signature="e#588#616#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/build/CMakeFiles/Makefile.cmake"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="90"> | ||||
|           <caret line="6" column="16" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor-pc/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state> | ||||
|           <caret column="68" selection-start-column="68" selection-end-column="68" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor/src/main.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-1185"> | ||||
|           <caret line="20" selection-start-line="20" selection-end-line="20" /> | ||||
|           <folding> | ||||
|             <element signature="e#88#106#0" expanded="true" /> | ||||
|             <element signature="e#308#328#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor-pc/src/functions.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="434"> | ||||
|           <caret line="68" lean-forward="true" selection-start-line="30" selection-end-line="68" /> | ||||
|           <folding> | ||||
|             <element signature="e#319#337#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor-pc/src/main.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-510"> | ||||
|           <caret line="11" lean-forward="true" selection-start-line="11" selection-end-line="11" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor-pc/src/functions.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="824"> | ||||
|           <caret line="214" column="11" lean-forward="true" selection-start-line="214" selection-start-column="11" selection-end-line="214" selection-end-column="11" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/src.sav/image.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-1260"> | ||||
|           <caret line="12" selection-start-line="12" selection-end-line="12" /> | ||||
|           <folding> | ||||
|             <element signature="e#494#512#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/src.sav/image.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-810" /> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor-pthread/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="30"> | ||||
|           <caret line="2" column="43" lean-forward="true" selection-start-line="2" selection-start-column="43" selection-end-line="2" selection-end-column="43" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/monitor-pthread/src/functions.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-2655" /> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/src.sav/monitor.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="1680"> | ||||
|           <caret line="112" lean-forward="true" selection-start-line="19" selection-end-line="112" /> | ||||
|           <folding> | ||||
|             <element signature="e#82#104#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/src.sav/message.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="135"> | ||||
|           <caret line="9" column="2" lean-forward="true" selection-start-line="9" selection-start-column="2" selection-end-line="9" selection-end-column="2" /> | ||||
|           <folding> | ||||
|             <element signature="e#312#330#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/Serial.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-1080" /> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/src.sav/message.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="405"> | ||||
|           <caret line="27" column="36" lean-forward="true" selection-start-line="26" selection-start-column="4" selection-end-line="27" selection-end-column="36" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/src.sav/monitor.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="433"> | ||||
|           <caret line="151" column="1" selection-start-line="146" selection-end-line="151" selection-end-column="1" /> | ||||
|           <folding> | ||||
|             <element signature="e#1030#1072#0" expanded="true" /> | ||||
|             <element signature="e#1814#1860#0" expanded="true" /> | ||||
|             <element signature="e#1973#2002#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/TcpServer.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="299"> | ||||
|           <caret line="76" selection-start-line="76" selection-end-line="76" /> | ||||
|           <folding> | ||||
|             <element signature="e#648#670#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/Robot.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-495" /> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/TcpServer.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="195"> | ||||
|           <caret line="14" column="17" selection-start-line="14" selection-start-column="17" selection-end-line="14" selection-end-column="17" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Program.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="419"> | ||||
|           <caret line="107" selection-start-line="107" selection-end-line="107" /> | ||||
|           <folding> | ||||
|             <element signature="e#90#108#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/examples/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="135"> | ||||
|           <caret line="9" column="22" selection-start-line="9" selection-start-column="22" selection-end-line="9" selection-end-column="22" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="105"> | ||||
|           <caret line="7" column="60" selection-start-line="7" selection-start-column="60" selection-end-line="7" selection-end-column="60" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Tasks.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="405"> | ||||
|           <caret line="33" column="40" selection-start-line="33" selection-start-column="40" selection-end-line="33" selection-end-column="40" /> | ||||
|           <folding> | ||||
|             <element signature="e#319#338#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="509"> | ||||
|           <caret line="245" column="27" selection-start-line="245" selection-start-column="27" selection-end-line="245" selection-end-column="27" /> | ||||
|           <folding> | ||||
|             <element signature="e#0#18#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="373"> | ||||
|           <caret line="148" column="7" selection-start-line="145" selection-start-column="6" selection-end-line="148" selection-end-column="7" /> | ||||
|           <folding> | ||||
|             <element signature="e#88#106#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/Robot.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="165"> | ||||
|           <caret line="29" column="19" selection-start-line="29" selection-start-column="19" selection-end-line="29" selection-end-column="19" /> | ||||
|           <folding> | ||||
|             <element signature="e#891#909#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="748"> | ||||
|           <caret line="84" column="60" selection-start-line="84" selection-start-column="60" selection-end-line="84" selection-end-column="60" /> | ||||
|           <folding> | ||||
|             <element signature="e#316#341#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/MsgManager.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="-151"> | ||||
|           <caret line="20" column="8" selection-start-line="20" selection-start-column="8" selection-end-line="20" selection-end-column="8" /> | ||||
|           <folding> | ||||
|             <element signature="e#86#105#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="410"> | ||||
|           <caret line="92" column="35" lean-forward="true" selection-start-line="92" selection-start-column="35" selection-end-line="92" selection-end-column="35" /> | ||||
|           <folding> | ||||
|             <element signature="e#0#19#0" expanded="true" /> | ||||
|             <element signature="e#876#929#0" expanded="true" /> | ||||
|             <element signature="e#1024#1083#0" expanded="true" /> | ||||
|             <element signature="e#1218#1293#0" expanded="true" /> | ||||
|             <element signature="e#1799#1852#0" expanded="true" /> | ||||
|             <element signature="e#1939#2002#0" expanded="true" /> | ||||
|             <element signature="e#2104#2194#0" expanded="true" /> | ||||
|             <element signature="e#2383#2442#0" expanded="true" /> | ||||
|             <element signature="e#2683#2730#0" expanded="true" /> | ||||
|             <element signature="e#3232#3297#0" expanded="true" /> | ||||
|             <element signature="e#3735#3816#0" expanded="true" /> | ||||
|             <element signature="e#3922#3978#0" expanded="true" /> | ||||
|             <element signature="e#6217#6275#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/Image.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="419"> | ||||
|           <caret line="51" column="6" selection-start-line="51" selection-start-column="6" selection-end-line="51" selection-end-column="26" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/MsgManager.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="339"> | ||||
|           <caret line="136" column="23" selection-start-line="136" selection-start-column="23" selection-end-line="136" selection-end-column="23" /> | ||||
|           <folding> | ||||
|             <element signature="e#44#64#0" expanded="true" /> | ||||
|             <element signature="e#751#793#0" expanded="true" /> | ||||
|             <element signature="e#832#878#0" expanded="true" /> | ||||
|             <element signature="e#938#967#0" expanded="true" /> | ||||
|             <element signature="e#1253#1282#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur-xenomai/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="60"> | ||||
|           <caret line="4" column="82" selection-start-line="4" selection-start-column="82" selection-end-line="4" selection-end-column="82" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/image.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="209"> | ||||
|           <caret line="17" selection-start-line="17" selection-end-line="17" /> | ||||
|           <folding> | ||||
|             <element signature="e#566#599#0" expanded="true" /> | ||||
|             <element signature="e#635#673#0" expanded="true" /> | ||||
|             <element signature="e#865#890#0" expanded="true" /> | ||||
|             <element signature="e#935#962#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/message.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="405"> | ||||
|           <caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/monitor.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="389"> | ||||
|           <caret line="64" column="94" selection-start-line="64" selection-start-column="94" selection-end-line="64" selection-end-column="94" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/src/monitor.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="338"> | ||||
|           <caret line="104" column="23" selection-start-line="104" selection-start-column="23" selection-end-line="104" selection-end-column="23" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur/src/functions.h"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="180"> | ||||
|           <caret line="51" column="21" selection-start-line="51" selection-start-column="12" selection-end-line="51" selection-end-column="21" /> | ||||
|           <folding> | ||||
|             <element signature="e#319#337#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="330"> | ||||
|           <caret line="22" selection-start-line="22" selection-end-line="22" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/lib/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state> | ||||
|           <caret column="81" selection-start-column="81" selection-end-column="81" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur/CMakeLists.txt"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="135"> | ||||
|           <caret line="9" selection-start-line="9" selection-end-line="9" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur/src/main.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="75"> | ||||
|           <caret line="89" column="13" selection-start-line="89" selection-start-column="13" selection-end-line="89" selection-end-column="13" /> | ||||
|           <folding> | ||||
|             <element signature="e#88#106#0" expanded="true" /> | ||||
|           </folding> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|     <entry file="file://$PROJECT_DIR$/superviseur/src/functions.cpp"> | ||||
|       <provider selected="true" editor-type-id="text-editor"> | ||||
|         <state relative-caret-position="300"> | ||||
|           <caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" /> | ||||
|         </state> | ||||
|       </provider> | ||||
|     </entry> | ||||
|   </component> | ||||
| </project> | ||||
|  | @ -1,13 +1,23 @@ | |||
| cmake_minimum_required(VERSION 3.9) | ||||
| project(ProjDestjil CXX) | ||||
| cmake_minimum_required(VERSION 3.6) | ||||
| project(ProjDestijl CXX) | ||||
| 
 | ||||
| set (ProjDestjil_VERSION_MAJOR 1) | ||||
| set (ProjDestjil_VERSION_MINOR 0) | ||||
| set (CMAKE_CXX_STANDARD 11) | ||||
| 
 | ||||
| set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib) | ||||
| set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib) | ||||
| set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | ||||
| set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) | ||||
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/superviseur/bin) | ||||
| 
 | ||||
| option(BUILD_FOR_XENOMAI "Build for Raspberry" OFF) | ||||
| 
 | ||||
| set(CMAKE_BUILD_TYPE DEBUG) | ||||
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy") | ||||
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy") | ||||
| 
 | ||||
| set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt") | ||||
| 
 | ||||
| add_subdirectory("lib") | ||||
| add_subdirectory("examples") | ||||
| #add_subdirectory("destjil_init") | ||||
| #add_subdirectory("examples") | ||||
| add_subdirectory("superviseur") | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										142
									
								
								software/raspberry/superviseur-robot/ProjDestijl.cbp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								software/raspberry/superviseur-robot/ProjDestijl.cbp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,142 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <CodeBlocks_project_file> | ||||
| 	<FileVersion major="1" minor="6"/> | ||||
| 	<Project> | ||||
| 		<Option title="ProjDestijl"/> | ||||
| 		<Option makefile_is_custom="1"/> | ||||
| 		<Option compiler="gcc"/> | ||||
| 		<Option virtualFolders="CMake Files\;CMake Files\lib\;CMake Files\superviseur\;"/> | ||||
| 		<Build> | ||||
| 			<Target title="all"> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot"/> | ||||
| 				<Option type="4"/> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 all"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="rebuild_cache"> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot"/> | ||||
| 				<Option type="4"/> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 rebuild_cache"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="edit_cache"> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot"/> | ||||
| 				<Option type="4"/> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 edit_cache"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="destijl"> | ||||
| 				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/lib/libdestijl.a" prefix_auto="0" extension_auto="0"/> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib"/> | ||||
| 				<Option object_output="./"/> | ||||
| 				<Option type="2"/> | ||||
| 				<Option compiler="gcc"/> | ||||
| 				<Compiler> | ||||
| 					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/."/> | ||||
| 				</Compiler> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 destijl"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="destijl/fast"> | ||||
| 				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/lib/libdestijl.a" prefix_auto="0" extension_auto="0"/> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib"/> | ||||
| 				<Option object_output="./"/> | ||||
| 				<Option type="2"/> | ||||
| 				<Option compiler="gcc"/> | ||||
| 				<Compiler> | ||||
| 					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/."/> | ||||
| 				</Compiler> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 destijl/fast"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="superviseur"> | ||||
| 				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur/bin/superviseur" prefix_auto="0" extension_auto="0"/> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/../superviseur/bin"/> | ||||
| 				<Option object_output="./"/> | ||||
| 				<Option type="1"/> | ||||
| 				<Option compiler="gcc"/> | ||||
| 				<Compiler> | ||||
| 					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/./src"/> | ||||
| 					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/../lib"/> | ||||
| 					<Add directory="/usr/xenomai/include"/> | ||||
| 					<Add directory="/usr/xenomai/include/mercury"/> | ||||
| 				</Compiler> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 superviseur"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 			<Target title="superviseur/fast"> | ||||
| 				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur/bin/superviseur" prefix_auto="0" extension_auto="0"/> | ||||
| 				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/../superviseur/bin"/> | ||||
| 				<Option object_output="./"/> | ||||
| 				<Option type="1"/> | ||||
| 				<Option compiler="gcc"/> | ||||
| 				<Compiler> | ||||
| 					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/./src"/> | ||||
| 					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/../lib"/> | ||||
| 					<Add directory="/usr/xenomai/include"/> | ||||
| 					<Add directory="/usr/xenomai/include/mercury"/> | ||||
| 				</Compiler> | ||||
| 				<MakeCommands> | ||||
| 					<Build command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 superviseur/fast"/> | ||||
| 					<CompileFile command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 "$file""/> | ||||
| 					<Clean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 clean"/> | ||||
| 					<DistClean command="/usr/bin/make -f "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile"  VERBOSE=1 clean"/> | ||||
| 				</MakeCommands> | ||||
| 			</Target> | ||||
| 		</Build> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp"> | ||||
| 			<Option target="destijl"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp"> | ||||
| 			<Option target="destijl"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp"> | ||||
| 			<Option target="destijl"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp"> | ||||
| 			<Option target="destijl"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.cpp"> | ||||
| 			<Option target="superviseur"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.h"> | ||||
| 			<Option target="superviseur"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/main.cpp"> | ||||
| 			<Option target="superviseur"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/CMakeLists.txt"> | ||||
| 			<Option virtualFolder="CMake Files\"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/CMakeLists.txt"> | ||||
| 			<Option virtualFolder="CMake Files\lib\"/> | ||||
| 		</Unit> | ||||
| 		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/CMakeLists.txt"> | ||||
| 			<Option virtualFolder="CMake Files\superviseur\"/> | ||||
| 		</Unit> | ||||
| 	</Project> | ||||
| </CodeBlocks_project_file> | ||||
							
								
								
									
										32
									
								
								software/raspberry/superviseur-robot/compile_commands.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								software/raspberry/superviseur-robot/compile_commands.json
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| [ | ||||
| { | ||||
|   "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib", | ||||
|   "command": "/usr/bin/g++   -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/.   -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -g3 -gdwarf-2   -std=gnu++11 -o CMakeFiles/destijl.dir/src/robot.cpp.o -c /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp", | ||||
|   "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp" | ||||
| }, | ||||
| { | ||||
|   "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib", | ||||
|   "command": "/usr/bin/g++   -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/.   -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -g3 -gdwarf-2   -std=gnu++11 -o CMakeFiles/destijl.dir/src/monitor.cpp.o -c /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp", | ||||
|   "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp" | ||||
| }, | ||||
| { | ||||
|   "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib", | ||||
|   "command": "/usr/bin/g++   -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/.   -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -g3 -gdwarf-2   -std=gnu++11 -o CMakeFiles/destijl.dir/src/message.cpp.o -c /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp", | ||||
|   "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp" | ||||
| }, | ||||
| { | ||||
|   "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib", | ||||
|   "command": "/usr/bin/g++   -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/.   -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -g3 -gdwarf-2   -std=gnu++11 -o CMakeFiles/destijl.dir/src/image.cpp.o -c /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp", | ||||
|   "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp" | ||||
| }, | ||||
| { | ||||
|   "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur", | ||||
|   "command": "/usr/bin/g++   -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/./src -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury   -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -g3 -gdwarf-2   -std=gnu++11 -o CMakeFiles/superviseur.dir/src/main.cpp.o -c /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/main.cpp", | ||||
|   "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/main.cpp" | ||||
| }, | ||||
| { | ||||
|   "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur", | ||||
|   "command": "/usr/bin/g++   -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/./src -I/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/../lib -I/usr/xenomai/include -I/usr/xenomai/include/mercury   -I/usr/xenomai/include/mercury -I/usr/xenomai/include -D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -g3 -gdwarf-2   -std=gnu++11 -o CMakeFiles/superviseur.dir/src/functions.cpp.o -c /home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.cpp", | ||||
|   "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.cpp" | ||||
| } | ||||
| ] | ||||
|  | @ -1,36 +0,0 @@ | |||
| 
 | ||||
| CC=g++ | ||||
| CFLAGS=-D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -c -g -D_WITH_TRACE_ -I/usr/xenomai/include/ -I/usr/xenomai/include/mercury -MMD -MP | ||||
| LDFLAGS=-D_GNU_SOURCE -D_REENTRANT -fasynchronous-unwind-tables -D__MERCURY__ -I/usr/xenomai/include/alchemy -L/usr/xenomai/lib -lalchemy -lcopperplate -lmercury -L/opt/vc/lib -I/usr/local/include -lopencv_highgui -lopencv_core -lopencv_imgproc -Wl,--no-as-needed -lalchemy -lcopperplate /usr/xenomai/lib/xenomai/bootstrap.o -Wl,--wrap=main -Wl,--dynamic-list=/usr/xenomai/lib/dynlist.ld -L/usr/xenomai/lib -lmercury -lpthread -lrt -Wl,-rpath /usr/xenomai/lib -lopencv_highgui -lopencv_core -lopencv_imgcodecs -lraspicam_cv -lopencv_imgproc -lpthread | ||||
| EXEC=superviseur | ||||
| SRC= $(wildcard *.cpp ./src/*.cpp ./../src/*.cpp) | ||||
| OBJ= $(SRC:.cpp=.o) | ||||
| 
 | ||||
| 
 | ||||
| all: $(EXEC) | ||||
| 
 | ||||
| 
 | ||||
| $(EXEC): $(OBJ) | ||||
| 	@$(CC) -o $@ $^ $(LDFLAGS) | ||||
| 
 | ||||
| 
 | ||||
| main.o: main.cpp | ||||
| 
 | ||||
| 
 | ||||
| %.o: %.cpp | ||||
| 	@$(CC) -o $@ -c $< $(CFLAGS) | ||||
| 
 | ||||
| 
 | ||||
| .PHONY: clean mrproper | ||||
| 
 | ||||
| 
 | ||||
| clean: | ||||
| 	@rm -rf *.o | ||||
| 	@rm -rf *.d | ||||
| 	@rm -rf ./src/*.o | ||||
| 	@rm -rf ./src/*.d | ||||
| 	@rm -rf ./../src/*o | ||||
| 	@rm -rf ./../src/*.d | ||||
| 
 | ||||
| mrproper: clean | ||||
| 	@rm -rf $(EXEC) | ||||
|  | @ -4,8 +4,8 @@ set(serialTest_FILES ./src/serialTest.cpp) | |||
| set(serverTest_FILES ./src/serverTest.cpp) | ||||
| include_directories(./src ../lib) | ||||
| 
 | ||||
| add_executable(serialTest ${serialTest_FILES}) | ||||
| target_link_libraries(serialTest destjil) | ||||
| add_executable(serialtest ${serialTest_FILES}) | ||||
| target_link_libraries(serialtest destijl) | ||||
| 
 | ||||
| add_executable(serverTest ${serverTest_FILES}) | ||||
| target_link_libraries(serverTest destjil) | ||||
| add_executable(servertest ${serverTest_FILES}) | ||||
| target_link_libraries(servertest destijl) | ||||
|  |  | |||
|  | @ -1 +1,6 @@ | |||
| CMakeFiles/ | ||||
| 
 | ||||
| libdestjil.a | ||||
| Makefile | ||||
| *.cmake | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| set(LIB_FILES ./src/Serial.cpp ./src/Robot.cpp ./src/TcpServer.cpp) | ||||
| set(LIB_FILES ./src/robot.cpp ./src/monitor.cpp ./src/message.cpp ./src/image.cpp) | ||||
| include_directories("./") | ||||
| 
 | ||||
| add_library(destjil STATIC ${LIB_FILES}) | ||||
| add_library(destijl STATIC ${LIB_FILES}) | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,84 +0,0 @@ | |||
| /*******************************************************************************
 | ||||
|  * 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__
 | ||||
|  | @ -1,49 +0,0 @@ | |||
| /*
 | ||||
|  * 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_ */ | ||||
|  | @ -1,35 +0,0 @@ | |||
| //
 | ||||
| // 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,6 +14,30 @@ | |||
| #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' | ||||
|  |  | |||
|  | @ -14,6 +14,8 @@ | |||
| #ifndef IMAGERIE_H | ||||
| #define IMAGERIE_H | ||||
| 
 | ||||
| #define __STUB__ | ||||
| 
 | ||||
| #ifndef __STUB__ | ||||
| #include <raspicam/raspicam_cv.h> | ||||
| #else | ||||
|  |  | |||
|  | @ -62,7 +62,7 @@ typedef struct { | |||
|  * \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); | ||||
| int run_nodejs(const char *path = (const char*)DEFAULT_NODEJS_PATH, char *file = (const char*)DEFAULT_INTERFACE_FILE); | ||||
| 
 | ||||
| /**
 | ||||
|  * \brief    Tue le process exécutant nodejs. | ||||
|  |  | |||
							
								
								
									
										64
									
								
								software/raspberry/superviseur-robot/lib/robot.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								software/raspberry/superviseur-robot/lib/robot.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | |||
| /**
 | ||||
|  * \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 DUMBERC_SERIAL_H_H | ||||
| #define DUMBERC_SERIAL_H_H | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
| #include <termios.h> | ||||
| #include <string.h> | ||||
| #include <stdlib.h> | ||||
| #include "definitions.h" | ||||
| 
 | ||||
| 
 | ||||
| #define serialPort "/dev/ttyS0" | ||||
| 
 | ||||
| typedef struct | ||||
|    { | ||||
|     char header[4]; | ||||
|     char data[20]; | ||||
|    } MessageToRobot; | ||||
| 
 | ||||
|  /**
 | ||||
|  * \brief     Ouvre la communication avec le robot. | ||||
|  * \details   Ouvre le serial port passé en paramétre. Par defaut cette fonction ouvre le port ttySO connecté au module xbee. | ||||
|  *              | ||||
|  * \param    *path    chaine de caractère indiquant le path du port serie à ouvrir. | ||||
|  * \return    Return -1 si l'ouverture c'est mal passé et 0 si le port est ouvert. | ||||
|  */ | ||||
| int open_communication_robot(const char * path=serialPort); | ||||
| 
 | ||||
|  /**
 | ||||
|  * \brief      Ferme la communication avec le robot. | ||||
|  * \details    Ferme le descripteur de fichier du port serie contrôlant le robot. | ||||
|  *              | ||||
|  * \param     void	aucun  | ||||
|  * \return    Retourne -1 en cas d'erreur ou 0 en cas de fermeture effectué | ||||
|  */ | ||||
| int close_communication_robot(void); | ||||
| 
 | ||||
|  /**
 | ||||
|  * \brief      Envoi une commande au robot et attends sa réponse. | ||||
|  * \details    Envoi une commande au robot en ajoutant le checksum et lis la réponse du robot en verifiant le checksum. | ||||
| 			   Le premier paramétre \a cmd correspond au type de commande ex : PING, SETMOVE ... | ||||
| 			   Le second paramétre  \a *arg correspond aux arguments à la commande ex : SETMOVE, "100" | ||||
| 			   La fonction retourne un code confirmation transmise par le robot (ROBOT_CHEKSUM, ROBOT_ERROR, ROBOT_TIMED_OUT, ROBOT_OK, ROBOT_UKNOW_CMD) | ||||
|  *              | ||||
|  * \param    cmd    Entête de la commande | ||||
|  * \param    *arg   Argument de la commande  | ||||
|  * \return   retourne un code confirmation. | ||||
|  */ | ||||
| int send_command_to_robot(char cmd, const char * arg=NULL); | ||||
| 
 | ||||
| 
 | ||||
| #endif //DUMBERC_SERIAL_H_H
 | ||||
|  | @ -1,349 +0,0 @@ | |||
| /*******************************************************************************
 | ||||
|  * 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; | ||||
| } | ||||
|  | @ -1,164 +0,0 @@ | |||
| /*******************************************************************************
 | ||||
|  * 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"); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,93 +0,0 @@ | |||
| /*******************************************************************************
 | ||||
|  * 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); | ||||
| } | ||||
|  | @ -25,5 +25,5 @@ void free_msgToMon_data(MessageToMon *msg) { | |||
| 
 | ||||
| void print_msgToMon(MessageToMon *msg) { | ||||
|     printf("header: %s\n", msg->header); | ||||
|     printf("data: %s\n", msg->data); | ||||
|     printf("data: %s\n", (char*)msg->data); | ||||
| } | ||||
|  |  | |||
|  | @ -102,7 +102,7 @@ int send_message_to_monitor(const char* typeMessage, const void * data) { | |||
|         serverSend("TRAME", 5); | ||||
|         return 0; | ||||
|     } else if ((string) typeMessage == HEADER_STM_POS) { | ||||
|         char buffer[20]; | ||||
|         char buffer[400]; | ||||
|         Position * maPosition = (Position*) data; | ||||
|         sprintf(buffer, "POScenter: %3d;%3d | %.1fTRAME", maPosition->center.x, maPosition->center.y, maPosition->angle); | ||||
|         serverSend(buffer, strlen(buffer)); | ||||
|  |  | |||
							
								
								
									
										236
									
								
								software/raspberry/superviseur-robot/lib/src/robot.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								software/raspberry/superviseur-robot/lib/src/robot.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,236 @@ | |||
| /**
 | ||||
|  * \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; | ||||
| 
 | ||||
| int getChar(char * c); | ||||
| int readSerial(char * msg); | ||||
| char checkSumGO(char * msg); | ||||
| int receiveMsg(void); | ||||
| int sendCmd(char cmd, const char * arg); | ||||
| 
 | ||||
| int open_communication_robot(const char * path) | ||||
| { | ||||
| #ifndef __STUB__ | ||||
|     struct termios options; | ||||
|     fd = open(path, O_RDWR | O_NOCTTY | O_NDELAY); | ||||
|     if(fd !=-1) | ||||
|     { | ||||
|         fcntl(fd, F_SETFL, 0); | ||||
|         tcgetattr(fd, &options); | ||||
|         options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); | ||||
|         cfsetospeed (&options, B9600); | ||||
|         cfsetispeed (&options, B9600); | ||||
|         options.c_cc[VMIN]=0; | ||||
|         options.c_cc[VTIME]=0; | ||||
|         tcsetattr(fd, TCSANOW, &options); | ||||
|         return 0; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         perror("can't openSerial"); | ||||
|         return -1; | ||||
|     } | ||||
| #else | ||||
|     return 0; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int close_communication_robot(void) | ||||
| { | ||||
| #ifndef __STUB__ | ||||
|     return close(fd); | ||||
| #else | ||||
|     return 0; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int send_command_to_robot(char cmd, const char * arg) | ||||
| { | ||||
| #ifndef __STUB__ | ||||
|     sendCmd(cmd,arg); | ||||
|     // TODO : check return from sendCmd
 | ||||
|     return receiveMsg(); | ||||
| #else | ||||
|     int reponse; | ||||
|     switch(cmd) | ||||
|     { | ||||
|         case DMB_PING: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_IDLE: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_START_WITH_WD: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_RELOAD_WD: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_GET_VBAT: | ||||
|             reponse = 2; | ||||
|             break; | ||||
|         case DMB_IS_BUSY: | ||||
|             reponse = 1; | ||||
|             break; | ||||
|         case DMB_START_WITHOUT_WD: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_MOVE: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_TURN: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_GO_FORWARD: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_GO_BACK: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_GO_LEFT: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_GO_RIGHT: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         case DMB_STOP_MOVE: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|         default: | ||||
|             reponse = 0; | ||||
|             break; | ||||
|     } | ||||
|     return reponse; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /****************************/ | ||||
| /* PRIVATE                  */ | ||||
| /****************************/ | ||||
| 
 | ||||
| int sendCmd(char cmd, const char * arg) | ||||
| { | ||||
|     char cmdWithArg[20]={}; | ||||
|     cmdWithArg[0]=cmd; | ||||
|     switch(cmd) | ||||
|     { | ||||
|         case DMB_GO_FORWARD: strcpy(cmdWithArg,"M=+64000"); | ||||
|             break; | ||||
|         case DMB_GO_BACK:    strcpy(cmdWithArg,"M=-64000"); | ||||
|             break; | ||||
|         case DMB_GO_LEFT:  strcpy(cmdWithArg,"T=+64000"); | ||||
|             break; | ||||
|         case DMB_GO_RIGHT: strcpy(cmdWithArg,"T=-64000"); | ||||
|             break; | ||||
|         case DMB_STOP_MOVE:  strcpy(cmdWithArg,"M=0"); | ||||
|             break; | ||||
|         case DMB_MOVE:   strcat(cmdWithArg,"="); | ||||
|             strcat(cmdWithArg,arg); | ||||
|             break; | ||||
|         case DMB_TURN:   strcat(cmdWithArg,"="); | ||||
|             strcat(cmdWithArg,arg); | ||||
|             break; | ||||
|     } | ||||
|     int sizeCmd = strlen(cmdWithArg); | ||||
|     cmdWithArg[sizeCmd] = checkSumGO(cmdWithArg); | ||||
|     cmdWithArg[sizeCmd+1] = '\r'; | ||||
|     cmdWithArg[sizeCmd+2] = '\0'; | ||||
|     return write(fd,cmdWithArg,strlen(cmdWithArg)); | ||||
| } | ||||
| 
 | ||||
| int receiveMsg(void) | ||||
| { | ||||
|     char msg[20]; | ||||
|     int b; | ||||
|     if((b = readSerial(msg))!=ROBOT_TIMED_OUT) | ||||
|     { | ||||
|         int taille = strlen(msg); | ||||
|         char checksum = msg[taille-2]; | ||||
|         msg[taille-1] = 0; | ||||
|         msg[taille-2] = 0; | ||||
|         if(checksum!=checkSumGO(msg)) | ||||
|         { | ||||
|             return ROBOT_CHECKSUM; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             switch(msg[0]) | ||||
|             { | ||||
|                 case 'O' : return 0; | ||||
|                 case 'E' : return ROBOT_ERROR; | ||||
|                 case 'C' : return ROBOT_UKNOWN_CMD; | ||||
|                 default :  return atoi(&msg[0]); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return ROBOT_TIMED_OUT; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int getChar(char * c) | ||||
| { | ||||
|     int n =0; | ||||
|     int delay =0; | ||||
|     while((n=read(fd,c,1)) <=0) | ||||
|     { | ||||
|         usleep(5000); | ||||
|         delay++; | ||||
|         if(delay > 10) | ||||
|         { | ||||
|             return ROBOT_TIMED_OUT; | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
|     return n; | ||||
| } | ||||
| 
 | ||||
| int readSerial(char * msg) | ||||
| { | ||||
|     char car=0; | ||||
|     int i=0; | ||||
|     for(int j = 0 ; j < 20 ; j++) | ||||
|         msg[j]=0; | ||||
|      | ||||
|     while(car !='\r' && car!='\n') { | ||||
|         if(i>=20)  | ||||
|             return -5; | ||||
| 
 | ||||
|         if(getChar(&car)==ROBOT_TIMED_OUT) { | ||||
|             return ROBOT_TIMED_OUT; | ||||
|         } | ||||
|          | ||||
|         msg[i] = car; | ||||
|         i++; | ||||
|     } | ||||
|     return i; | ||||
| } | ||||
| 
 | ||||
| char checkSumGO(char * msg) | ||||
| { | ||||
|     char resultat = 0; | ||||
|     int i = 0; | ||||
|     int taille = strlen(msg); | ||||
|     for(i=0;i<taille;i++) | ||||
|     { | ||||
|         resultat^=msg[i]; | ||||
|     } | ||||
|     return resultat; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,116 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <configurationDescriptor version="100"> | ||||
|   <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT"> | ||||
|     <df root="." name="0"> | ||||
|       <df name="lib"> | ||||
|         <df name="src"> | ||||
|           <in>image.cpp</in> | ||||
|           <in>message.cpp</in> | ||||
|           <in>monitor.cpp</in> | ||||
|           <in>robot.cpp</in> | ||||
|         </df> | ||||
|       </df> | ||||
|       <df name="superviseur"> | ||||
|         <df name="src"> | ||||
|           <in>functions.cpp</in> | ||||
|           <in>main.cpp</in> | ||||
|         </df> | ||||
|         <in>.gitignore</in> | ||||
|       </df> | ||||
|     </df> | ||||
|     <logicalFolder name="ExternalFiles" | ||||
|                    displayName="Important Files" | ||||
|                    projectFiles="false" | ||||
|                    kind="IMPORTANT_FILES_FOLDER"> | ||||
|       <itemPath>CMakeLists.txt</itemPath> | ||||
|       <itemPath>Makefile</itemPath> | ||||
|       <itemPath>nbproject/private/launcher.properties</itemPath> | ||||
|     </logicalFolder> | ||||
|   </logicalFolder> | ||||
|   <sourceFolderFilter>^(nbproject)$</sourceFolderFilter> | ||||
|   <sourceRootList> | ||||
|     <Elem>.</Elem> | ||||
|   </sourceRootList> | ||||
|   <projectmakefile>Makefile</projectmakefile> | ||||
|   <confs> | ||||
|     <conf name="Default" type="0"> | ||||
|       <toolsSet> | ||||
|         <compilerSet>default</compilerSet> | ||||
|         <dependencyChecking>false</dependencyChecking> | ||||
|         <rebuildPropChanged>false</rebuildPropChanged> | ||||
|       </toolsSet> | ||||
|       <flagsDictionary> | ||||
|         <element flagsID="0" commonFlags="-std=gnu++11"/> | ||||
|       </flagsDictionary> | ||||
|       <codeAssistance> | ||||
|       </codeAssistance> | ||||
|       <makefileType> | ||||
|         <makeTool> | ||||
|           <buildCommandWorkingDir>.</buildCommandWorkingDir> | ||||
|           <buildCommand>${MAKE} -f Makefile</buildCommand> | ||||
|           <cleanCommand>${MAKE} -f Makefile clean</cleanCommand> | ||||
|           <executablePath></executablePath> | ||||
|           <ccTool> | ||||
|             <preprocessorList> | ||||
|               <Elem>_GNU_SOURCE</Elem> | ||||
|               <Elem>_REENTRANT</Elem> | ||||
|               <Elem>__MERCURY__</Elem> | ||||
|             </preprocessorList> | ||||
|           </ccTool> | ||||
|         </makeTool> | ||||
|         <preBuild> | ||||
|           <preBuildCommandWorkingDir>.</preBuildCommandWorkingDir> | ||||
|           <preBuildCommand>${CMAKE} -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=${IDE_CC} -DCMAKE_CXX_COMPILER=${IDE_CXX} -DCMAKE_C_FLAGS_DEBUG="-g3 -gdwarf-2" -DCMAKE_CXX_FLAGS_DEBUG="-g3 -gdwarf-2" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .</preBuildCommand> | ||||
|         </preBuild> | ||||
|       </makefileType> | ||||
|       <folder path="0/lib"> | ||||
|         <ccTool> | ||||
|           <incDir> | ||||
|             <pElem>lib</pElem> | ||||
|             <pElem>/usr/xenomai/include/mercury</pElem> | ||||
|             <pElem>/usr/xenomai/include</pElem> | ||||
|             <pElem>/usr/xenomai/include/alchemy</pElem> | ||||
|           </incDir> | ||||
|         </ccTool> | ||||
|       </folder> | ||||
|       <folder path="0/superviseur"> | ||||
|         <ccTool> | ||||
|           <incDir> | ||||
|             <pElem>superviseur/src</pElem> | ||||
|             <pElem>lib</pElem> | ||||
|             <pElem>/usr/xenomai/include</pElem> | ||||
|             <pElem>/usr/xenomai/include/mercury</pElem> | ||||
|             <pElem>/usr/xenomai/include/alchemy</pElem> | ||||
|             <pElem>superviseur</pElem> | ||||
|           </incDir> | ||||
|         </ccTool> | ||||
|       </folder> | ||||
|       <item path="lib/src/image.cpp" ex="false" tool="1" flavor2="8"> | ||||
|         <ccTool flags="0"> | ||||
|         </ccTool> | ||||
|       </item> | ||||
|       <item path="lib/src/message.cpp" ex="false" tool="1" flavor2="8"> | ||||
|         <ccTool flags="0"> | ||||
|         </ccTool> | ||||
|       </item> | ||||
|       <item path="lib/src/monitor.cpp" ex="false" tool="1" flavor2="8"> | ||||
|         <ccTool flags="0"> | ||||
|         </ccTool> | ||||
|       </item> | ||||
|       <item path="lib/src/robot.cpp" ex="false" tool="1" flavor2="8"> | ||||
|         <ccTool flags="0"> | ||||
|         </ccTool> | ||||
|       </item> | ||||
|       <item path="superviseur/.gitignore" ex="false" tool="3" flavor2="0"> | ||||
|       </item> | ||||
|       <item path="superviseur/src/functions.cpp" ex="false" tool="1" flavor2="8"> | ||||
|         <ccTool flags="0"> | ||||
|         </ccTool> | ||||
|       </item> | ||||
|       <item path="superviseur/src/main.cpp" ex="false" tool="1" flavor2="8"> | ||||
|         <ccTool flags="0"> | ||||
|         </ccTool> | ||||
|       </item> | ||||
|     </conf> | ||||
|   </confs> | ||||
| </configurationDescriptor> | ||||
							
								
								
									
										26
									
								
								software/raspberry/superviseur-robot/nbproject/project.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								software/raspberry/superviseur-robot/nbproject/project.xml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://www.netbeans.org/ns/project/1"> | ||||
|     <type>org.netbeans.modules.cnd.makeproject</type> | ||||
|     <configuration> | ||||
|         <data xmlns="http://www.netbeans.org/ns/make-project/1"> | ||||
|             <name>superviseur-robot</name> | ||||
|             <c-extensions/> | ||||
|             <cpp-extensions>cpp,cxx</cpp-extensions> | ||||
|             <header-extensions>h</header-extensions> | ||||
|             <sourceEncoding>UTF-8</sourceEncoding> | ||||
|             <make-dep-projects/> | ||||
|             <sourceRootList> | ||||
|                 <sourceRootElem>.</sourceRootElem> | ||||
|             </sourceRootList> | ||||
|             <confList> | ||||
|                 <confElem> | ||||
|                     <name>Default</name> | ||||
|                     <type>0</type> | ||||
|                 </confElem> | ||||
|             </confList> | ||||
|             <formatting> | ||||
|                 <project-formatting-style>false</project-formatting-style> | ||||
|             </formatting> | ||||
|         </data> | ||||
|     </configuration> | ||||
| </project> | ||||
|  | @ -0,0 +1,9 @@ | |||
| set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../superviseur-pthread/bin) | ||||
| 
 | ||||
| set(superviseur_pthread_FILES ./src/Program.cpp src/Tasks.cpp) | ||||
| 
 | ||||
| include_directories(./src ../lib) | ||||
| 
 | ||||
| add_executable(superviseur-pthread ${superviseur_pthread_FILES}) | ||||
| target_link_libraries(superviseur-pthread destijl pthread rt) | ||||
| 
 | ||||
							
								
								
									
										
											BIN
										
									
								
								software/raspberry/superviseur-robot/superviseur-pthread/bin/monitor
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								software/raspberry/superviseur-robot/superviseur-pthread/bin/monitor
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								software/raspberry/superviseur-robot/superviseur-pthread/bin/superviseur-pthread
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								software/raspberry/superviseur-robot/superviseur-pthread/bin/superviseur-pthread
									
									
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -0,0 +1,273 @@ | |||
| /* 
 | ||||
|  * File:   Program.c | ||||
|  * Author: dimercur | ||||
|  * | ||||
|  * Created on 23 octobre 2018, 19:45 | ||||
|  */ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| 
 | ||||
| #include <sys/mman.h> | ||||
| 
 | ||||
| #include <pthread.h> | ||||
| #include <semaphore.h> | ||||
| #include <mqueue.h> | ||||
| #include <sched.h> | ||||
| 
 | ||||
| #include "Tasks.h" | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| class Program { | ||||
| public: | ||||
| // Déclaration des handleurs de tache
 | ||||
|     pthread_t th_server; | ||||
|     pthread_t th_sendToMon; | ||||
|     pthread_t th_receiveFromMon; | ||||
|     pthread_t th_openComRobot; | ||||
|     pthread_t th_startRobot; | ||||
|     pthread_t th_move; | ||||
| 
 | ||||
| // Déclaration des priorités des taches
 | ||||
|     int PRIORITY_TSERVER = 30; | ||||
|     int PRIORITY_TOPENCOMROBOT = 20; | ||||
|     int PRIORITY_TMOVE = 10; | ||||
|     int PRIORITY_TSENDTOMON = 25; | ||||
|     int PRIORITY_TRECEIVEFROMMON = 22; | ||||
|     int PRIORITY_TSTARTROBOT = 20; | ||||
| 
 | ||||
| // Declaration de mutex
 | ||||
|     pthread_mutex_t mutex_robotStarted; | ||||
|     pthread_mutex_t mutex_move; | ||||
| 
 | ||||
| //declaration de semaphores
 | ||||
|     sem_t sem_barrier; | ||||
|     sem_t sem_openComRobot; | ||||
|     sem_t sem_serverOk; | ||||
|     sem_t sem_startRobot; | ||||
| 
 | ||||
| // Déclaration des files de message
 | ||||
|     mqd_t q_messageToMon; | ||||
|     struct mq_attr q_messageToMonAttr; | ||||
| 
 | ||||
|     int MSG_QUEUE_SIZE = 10; | ||||
| 
 | ||||
| // Déclaration des ressources partagées
 | ||||
|     int etatCommMoniteur = 1; | ||||
|     int robotStarted = 0; | ||||
| 
 | ||||
|     Program(); | ||||
|     virtual ~Program(); | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn void initStruct(void) | ||||
|  * \brief Initialisation des structures de l'application (tâches, mutex,  | ||||
|  * semaphore, etc.) | ||||
|  */ | ||||
|     void initStruct(void); | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn void startTasks(void) | ||||
|  * \brief Démarrage des tâches | ||||
|  */ | ||||
|     void startTasks(void); | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn void deleteTasks(void) | ||||
|  * \brief Arrêt des tâches | ||||
|  */ | ||||
|     void deleteTasks(void); | ||||
| 
 | ||||
|     /**
 | ||||
|      * \fn int run(void) | ||||
|      * \brief execute program | ||||
|      */ | ||||
|     int run(void); | ||||
| }; | ||||
| 
 | ||||
| int main(int argc, char **argv) { | ||||
|     int err; | ||||
|     Program myProg; | ||||
|     TcpServer server; | ||||
| 
 | ||||
|     Tasks::messages.SetServer(&server); | ||||
| 
 | ||||
|     //Lock the memory to avoid memory swapping for this program
 | ||||
|     mlockall(MCL_CURRENT | MCL_FUTURE); | ||||
| 
 | ||||
|     printf("#################################\n"); | ||||
|     printf("#      DE STIJL PROJECT         #\n"); | ||||
|     printf("#################################\n"); | ||||
| 
 | ||||
|     return myProg.run(); | ||||
| } | ||||
| 
 | ||||
| Program::Program() {} | ||||
| Program::~Program() {} | ||||
| 
 | ||||
| int Program::run(void) { | ||||
| 
 | ||||
|     this->initStruct(); | ||||
|     this->startTasks(); | ||||
|     //sem_post(&sem_barrier);
 | ||||
|     pause(); | ||||
|     this->deleteTasks(); | ||||
| } | ||||
| 
 | ||||
| void Program::initStruct(void) { | ||||
| 
 | ||||
|     int err; | ||||
| 
 | ||||
|     /* Creation des mutex */ | ||||
|     mutex_robotStarted=PTHREAD_MUTEX_INITIALIZER; | ||||
|     mutex_move=PTHREAD_MUTEX_INITIALIZER; | ||||
| 
 | ||||
|     /* Creation du semaphore */ | ||||
|     if (sem_init(&sem_barrier, 0, 0) == -1) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     if (sem_init(&sem_openComRobot, 0, 0) == -1) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     if (sem_init(&sem_serverOk, 0, 0) == -1) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     if (sem_init(&sem_startRobot, 0, 0) == -1) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     /* Sous pthread, les taches sont executées dés leur creation
 | ||||
|      * la creation des taches se fait donc dans startTask */ | ||||
| 
 | ||||
|     /* Creation des files de messages */ | ||||
|     q_messageToMonAttr.mq_flags = 0; | ||||
|     q_messageToMonAttr.mq_maxmsg = 10; | ||||
|     q_messageToMonAttr.mq_msgsize = 200; | ||||
|     q_messageToMonAttr.mq_curmsgs = 0; | ||||
| 
 | ||||
|     q_messageToMon = mq_open("MessageToMon", O_CREAT | O_RDWR, 0644, &q_messageToMonAttr); | ||||
|     if((mqd_t)-1 != q_messageToMon){ | ||||
|         printf("Error msg queue create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
| //    if (err = rt_queue_create(&q_messageToMon, "toto", MSG_QUEUE_SIZE * sizeof (MessageToRobot), MSG_QUEUE_SIZE, Q_FIFO)) {
 | ||||
| //        printf("Error msg queue create: %s\n", strerror(-err));
 | ||||
| //        exit(EXIT_FAILURE);
 | ||||
| //    }
 | ||||
| } | ||||
| 
 | ||||
| void Program::startTasks() { | ||||
| 
 | ||||
|     int err; | ||||
|     pthread_attr_t tattr; | ||||
|     pthread_t tid; | ||||
|     int ret; | ||||
|     sched_param param; | ||||
| 
 | ||||
|     /* initialized with default attributes */ | ||||
|     ret = pthread_attr_init (&tattr); | ||||
| 
 | ||||
|     /* safe to get existing scheduling param */ | ||||
|     ret = pthread_attr_getschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* set the priority; others are unchanged */ | ||||
|     param.sched_priority = PRIORITY_TSTARTROBOT; | ||||
| 
 | ||||
|     /* setting the new scheduling param */ | ||||
|     ret = pthread_attr_setschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* Creation des taches */ | ||||
| 
 | ||||
|     if ((err = pthread_create(&th_startRobot, &tattr, (void* (*)(void*))Tasks::f_startRobot, NULL))) { | ||||
|         printf("Error task create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     /* safe to get existing scheduling param */ | ||||
|     ret = pthread_attr_getschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* set the priority; others are unchanged */ | ||||
|     param.sched_priority = PRIORITY_TRECEIVEFROMMON; | ||||
| 
 | ||||
|     /* setting the new scheduling param */ | ||||
|     ret = pthread_attr_setschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     if ((err = pthread_create(&th_receiveFromMon, &tattr, (void* (*)(void*))Tasks::f_receiveFromMon, NULL))) { | ||||
|         printf("Error task create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     /* safe to get existing scheduling param */ | ||||
|     ret = pthread_attr_getschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* set the priority; others are unchanged */ | ||||
|     param.sched_priority = PRIORITY_TSENDTOMON; | ||||
| 
 | ||||
|     /* setting the new scheduling param */ | ||||
|     ret = pthread_attr_setschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     if ((err = pthread_create(&th_sendToMon, &tattr, (void* (*)(void*))Tasks::f_sendToMon, NULL))) { | ||||
|         printf("Error task create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     /* safe to get existing scheduling param */ | ||||
|     ret = pthread_attr_getschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* set the priority; others are unchanged */ | ||||
|     param.sched_priority = PRIORITY_TOPENCOMROBOT; | ||||
| 
 | ||||
|     /* setting the new scheduling param */ | ||||
|     ret = pthread_attr_setschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     if ((err = pthread_create(&th_openComRobot, &tattr, (void* (*)(void*))Tasks::f_openComRobot, NULL))) { | ||||
|         printf("Error task create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     /* safe to get existing scheduling param */ | ||||
|     ret = pthread_attr_getschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* set the priority; others are unchanged */ | ||||
|     param.sched_priority = PRIORITY_TMOVE; | ||||
| 
 | ||||
|     /* setting the new scheduling param */ | ||||
|     ret = pthread_attr_setschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     if ((err = pthread_create(&th_move, &tattr, (void* (*)(void*))Tasks::f_move, NULL)))  { | ||||
|         printf("Error task create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
|     /* safe to get existing scheduling param */ | ||||
|     ret = pthread_attr_getschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     /* set the priority; others are unchanged */ | ||||
|     param.sched_priority = PRIORITY_TSERVER; | ||||
| 
 | ||||
|     /* setting the new scheduling param */ | ||||
|     ret = pthread_attr_setschedparam (&tattr, ¶m); | ||||
| 
 | ||||
|     if ((err = pthread_create(&th_server, &tattr, (void* (*)(void*))Tasks::f_server, NULL))) { | ||||
|         printf("Error task create: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Program::deleteTasks() { | ||||
|     pthread_cancel(th_server); | ||||
|     pthread_cancel(th_openComRobot); | ||||
|     pthread_cancel(th_move); | ||||
| } | ||||
|  | @ -0,0 +1,246 @@ | |||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| 
 | ||||
| #include <pthread.h> | ||||
| #include <semaphore.h> | ||||
| #include <mqueue.h> | ||||
| #include <sched.h> | ||||
| 
 | ||||
| #include <Robot.h> | ||||
| #include <Camera.h> | ||||
| #include <Image.h> | ||||
| #include <TcpServer.h> | ||||
| #include <MsgManager.h> | ||||
| 
 | ||||
| //#include "../../lib/Robot.h"
 | ||||
| //#include "../../lib/Camera.h"
 | ||||
| //#include "../../lib/Image.h"
 | ||||
| //#include "../../lib/TcpServer.h"
 | ||||
| 
 | ||||
| #include "Tasks.h" | ||||
| 
 | ||||
| void Tasks::f_server(void *arg) { | ||||
| //    int err;
 | ||||
| //    /* INIT */
 | ||||
| //    RT_TASK_INFO info;
 | ||||
| //    rt_task_inquire(NULL, &info);
 | ||||
| //    printf("Init %s\n", info.name);
 | ||||
| //    rt_sem_p(&sem_barrier, TM_INFINITE);
 | ||||
| //
 | ||||
| //    err = run_nodejs("/usr/local/bin/node", "/home/pi/Interface_Robot/server.js");
 | ||||
| //
 | ||||
| //    if (err < 0) {
 | ||||
| //        printf("Failed to start nodejs: %s\n", strerror(-err));
 | ||||
| //        exit(EXIT_FAILURE);
 | ||||
| //    } else {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s: nodejs started\n", info.name);
 | ||||
| //#endif
 | ||||
| //        open_server();
 | ||||
| //        rt_sem_broadcast(&sem_serverOk);
 | ||||
| //    }
 | ||||
| } | ||||
| 
 | ||||
| void Tasks::f_sendToMon(void * arg) { | ||||
| //    int err;
 | ||||
| //    MessageToMon msg;
 | ||||
| //
 | ||||
| //    /* INIT */
 | ||||
| //    RT_TASK_INFO info;
 | ||||
| //    rt_task_inquire(NULL, &info);
 | ||||
| //    printf("Init %s\n", info.name);
 | ||||
| //    rt_sem_p(&sem_barrier, TM_INFINITE);
 | ||||
| //
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //    printf("%s : waiting for sem_serverOk\n", info.name);
 | ||||
| //#endif
 | ||||
| //    rt_sem_p(&sem_serverOk, TM_INFINITE);
 | ||||
| //    while (1) {
 | ||||
| //
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s : waiting for a message in queue\n", info.name);
 | ||||
| //#endif
 | ||||
| //        if (rt_queue_read(&q_messageToMon, &msg, sizeof (MessageToRobot), TM_INFINITE) >= 0) {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //            printf("%s : message {%s,%s} in queue\n", info.name, msg.header, msg.data);
 | ||||
| //#endif
 | ||||
| //
 | ||||
| //            send_message_to_monitor(msg.header, msg.data);
 | ||||
| //            free_msgToMon_data(&msg);
 | ||||
| //            rt_queue_free(&q_messageToMon, &msg);
 | ||||
| //        } else {
 | ||||
| //            printf("Error msg queue write: %s\n", strerror(-err));
 | ||||
| //        }
 | ||||
| //    }
 | ||||
| } | ||||
| 
 | ||||
| void Tasks::f_receiveFromMon(void *arg) { | ||||
| //    MessageFromMon msg;
 | ||||
| //    int err;
 | ||||
| //
 | ||||
| //    /* INIT */
 | ||||
| //    RT_TASK_INFO info;
 | ||||
| //    rt_task_inquire(NULL, &info);
 | ||||
| //    printf("Init %s\n", info.name);
 | ||||
| //    rt_sem_p(&sem_barrier, TM_INFINITE);
 | ||||
| //
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //    printf("%s : waiting for sem_serverOk\n", info.name);
 | ||||
| //#endif
 | ||||
| //    rt_sem_p(&sem_serverOk, TM_INFINITE);
 | ||||
| //    do {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s : waiting for a message from monitor\n", info.name);
 | ||||
| //#endif
 | ||||
| //        err = receive_message_from_monitor(msg.header, msg.data);
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s: msg {header:%s,data=%s} received from UI\n", info.name, msg.header, msg.data);
 | ||||
| //#endif
 | ||||
| //        if (strcmp(msg.header, HEADER_MTS_COM_DMB) == 0) {
 | ||||
| //            if (msg.data[0] == OPEN_COM_DMB) { // Open communication supervisor-robot
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //                printf("%s: message open Xbee communication\n", info.name);
 | ||||
| //#endif
 | ||||
| //                rt_sem_v(&sem_openComRobot);
 | ||||
| //            }
 | ||||
| //        } else if (strcmp(msg.header, HEADER_MTS_DMB_ORDER) == 0) {
 | ||||
| //            if (msg.data[0] == DMB_START_WITHOUT_WD) { // Start robot
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //                printf("%s: message start robot\n", info.name);
 | ||||
| //#endif
 | ||||
| //                rt_sem_v(&sem_startRobot);
 | ||||
| //
 | ||||
| //            } else if ((msg.data[0] == DMB_GO_BACK)
 | ||||
| //                    || (msg.data[0] == DMB_GO_FORWARD)
 | ||||
| //                    || (msg.data[0] == DMB_GO_LEFT)
 | ||||
| //                    || (msg.data[0] == DMB_GO_RIGHT)
 | ||||
| //                    || (msg.data[0] == DMB_STOP_MOVE)) {
 | ||||
| //
 | ||||
| //                rt_mutex_acquire(&mutex_move, TM_INFINITE);
 | ||||
| //                move = msg.data[0];
 | ||||
| //                rt_mutex_release(&mutex_move);
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //                printf("%s: message update movement with %c\n", info.name, move);
 | ||||
| //#endif
 | ||||
| //
 | ||||
| //            }
 | ||||
| //        }
 | ||||
| //    } while (err > 0);
 | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void Tasks::f_openComRobot(void * arg) { | ||||
| //    int err;
 | ||||
| //
 | ||||
| //    /* INIT */
 | ||||
| //    RT_TASK_INFO info;
 | ||||
| //    rt_task_inquire(NULL, &info);
 | ||||
| //    printf("Init %s\n", info.name);
 | ||||
| //    rt_sem_p(&sem_barrier, TM_INFINITE);
 | ||||
| //
 | ||||
| //    while (1) {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s : Wait sem_openComRobot\n", info.name);
 | ||||
| //#endif
 | ||||
| //        rt_sem_p(&sem_openComRobot, TM_INFINITE);
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s : sem_openComRobot arrived => open communication robot\n", info.name);
 | ||||
| //#endif
 | ||||
| //        err = open_communication_robot();
 | ||||
| //        if (err == 0) {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //            printf("%s : the communication is opened\n", info.name);
 | ||||
| //#endif
 | ||||
| //            MessageToMon msg;
 | ||||
| //            set_msgToMon_header(&msg, HEADER_STM_ACK);
 | ||||
| //            write_in_queue(&q_messageToMon, msg);
 | ||||
| //        } else {
 | ||||
| //            MessageToMon msg;
 | ||||
| //            set_msgToMon_header(&msg, HEADER_STM_NO_ACK);
 | ||||
| //            write_in_queue(&q_messageToMon, msg);
 | ||||
| //        }
 | ||||
| //    }
 | ||||
| } | ||||
| 
 | ||||
| void Tasks::f_startRobot(void * arg) { | ||||
| //    int err;
 | ||||
| //
 | ||||
| //    /* INIT */
 | ||||
| //    RT_TASK_INFO info;
 | ||||
| //    rt_task_inquire(NULL, &info);
 | ||||
| //    printf("Init %s\n", info.name);
 | ||||
| //    rt_sem_p(&sem_barrier, TM_INFINITE);
 | ||||
| //
 | ||||
| //    while (1) {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s : Wait sem_startRobot\n", info.name);
 | ||||
| //#endif
 | ||||
| //        rt_sem_p(&sem_startRobot, TM_INFINITE);
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s : sem_startRobot arrived => Start robot\n", info.name);
 | ||||
| //#endif
 | ||||
| //        err = send_command_to_robot(DMB_START_WITHOUT_WD);
 | ||||
| //        if (err == 0) {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //            printf("%s : the robot is started\n", info.name);
 | ||||
| //#endif
 | ||||
| //            rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
 | ||||
| //            robotStarted = 1;
 | ||||
| //            rt_mutex_release(&mutex_robotStarted);
 | ||||
| //            MessageToMon msg;
 | ||||
| //            set_msgToMon_header(&msg, HEADER_STM_ACK);
 | ||||
| //            write_in_queue(&q_messageToMon, msg);
 | ||||
| //        } else {
 | ||||
| //            MessageToMon msg;
 | ||||
| //            set_msgToMon_header(&msg, HEADER_STM_NO_ACK);
 | ||||
| //            write_in_queue(&q_messageToMon, msg);
 | ||||
| //        }
 | ||||
| //    }
 | ||||
| } | ||||
| 
 | ||||
| void Tasks::f_move(void *arg) { | ||||
| //    /* INIT */
 | ||||
| //    RT_TASK_INFO info;
 | ||||
| //    rt_task_inquire(NULL, &info);
 | ||||
| //    printf("Init %s\n", info.name);
 | ||||
| //    rt_sem_p(&sem_barrier, TM_INFINITE);
 | ||||
| //
 | ||||
| //    /* PERIODIC START */
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //    printf("%s: start period\n", info.name);
 | ||||
| //#endif
 | ||||
| //    rt_task_set_periodic(NULL, TM_NOW, 100000000);
 | ||||
| //    while (1) {
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s: Wait period \n", info.name);
 | ||||
| //#endif
 | ||||
| //        rt_task_wait_period(NULL);
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //        printf("%s: Periodic activation\n", info.name);
 | ||||
| //        printf("%s: move equals %c\n", info.name, move);
 | ||||
| //#endif
 | ||||
| //        rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
 | ||||
| //        if (robotStarted) {
 | ||||
| //            rt_mutex_acquire(&mutex_move, TM_INFINITE);
 | ||||
| //            send_command_to_robot(move);
 | ||||
| //            rt_mutex_release(&mutex_move);
 | ||||
| //#ifdef _WITH_TRACE_
 | ||||
| //            printf("%s: the movement %c was sent\n", info.name, move);
 | ||||
| //#endif
 | ||||
| //        }
 | ||||
| //        rt_mutex_release(&mutex_robotStarted);
 | ||||
| //    }
 | ||||
| } | ||||
| 
 | ||||
| void Tasks::write_in_queue(mqd_t *queue, MsgManager msg) { | ||||
| //    void *buff;
 | ||||
| //    buff = rt_queue_alloc(&q_messageToMon, sizeof (MessageToMon));
 | ||||
| //    memcpy(buff, &msg, sizeof (MessageToMon));
 | ||||
| //    rt_queue_send(&q_messageToMon, buff, sizeof (MessageToMon), Q_NORMAL);
 | ||||
| } | ||||
| 
 | ||||
| MsgManager Tasks::messages; | ||||
|  | @ -0,0 +1,44 @@ | |||
| /*
 | ||||
|  * 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:   functions.h | ||||
|  * Author: pehladik | ||||
|  * | ||||
|  * Created on 15 janvier 2018, 12:50 | ||||
|  */ | ||||
| 
 | ||||
| #ifndef TASKS_H | ||||
| #define TASKS_H | ||||
| 
 | ||||
| #include <mqueue.h> | ||||
| #include <MsgManager.h> | ||||
| 
 | ||||
| class Tasks { | ||||
| public: | ||||
|     static MsgManager messages; | ||||
| 
 | ||||
|     static void f_server(void *arg); | ||||
| 
 | ||||
|     static void f_sendToMon(void *arg); | ||||
| 
 | ||||
|     static void f_receiveFromMon(void *arg); | ||||
| 
 | ||||
|     static void f_openComRobot(void *arg); | ||||
| 
 | ||||
|     static void f_move(void *arg); | ||||
| 
 | ||||
|     static void f_startRobot(void *arg); | ||||
| 
 | ||||
| private: | ||||
|     char mode_start; | ||||
| 
 | ||||
|     static void write_in_queue(mqd_t *queue, MsgManager msg); | ||||
|     Tasks() {} | ||||
| }; | ||||
| 
 | ||||
| #endif /* TASKS_H */ | ||||
| 
 | ||||
							
								
								
									
										9
									
								
								software/raspberry/superviseur-robot/superviseur/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								software/raspberry/superviseur-robot/superviseur/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| bin/ | ||||
| build/ | ||||
| CMakeFiles/ | ||||
| 
 | ||||
| .dep.inc | ||||
| Makefile | ||||
| *.cmake | ||||
| *.o | ||||
| 
 | ||||
|  | @ -0,0 +1,15 @@ | |||
| set(superviseur_FILES ./src/main.cpp src/functions.cpp) | ||||
| 
 | ||||
| include_directories(./src ../lib /usr/xenomai/include /usr/xenomai/include/mercury) | ||||
| link_directories(/usr/xenomai/lib) | ||||
| 
 | ||||
| add_executable(superviseur ${superviseur_FILES}) | ||||
| target_link_libraries(superviseur destijl) | ||||
| 
 | ||||
| #add_custom_command(TARGET superviseur POST_BUILD | ||||
| #        COMMAND sudo chown root ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur | ||||
| #        COMMAND sudo chgrp root ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur | ||||
| #        COMMAND sudo chmod +s ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur | ||||
| #        WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} | ||||
| #        COMMENT "Add sticky bit" | ||||
| #) | ||||
|  | @ -1,4 +1,4 @@ | |||
| #include "../header/functions.h" | ||||
| #include "functions.h" | ||||
| 
 | ||||
| char mode_start; | ||||
| 
 | ||||
|  | @ -102,7 +102,7 @@ void f_receiveFromMon(void *arg) { | |||
|                     || (msg.data[0] == DMB_STOP_MOVE)) { | ||||
| 
 | ||||
|                 rt_mutex_acquire(&mutex_move, TM_INFINITE); | ||||
|                 move = msg.data[0]; | ||||
|                 robotMove = msg.data[0]; | ||||
|                 rt_mutex_release(&mutex_move); | ||||
| #ifdef _WITH_TRACE_ | ||||
|                 printf("%s: message update movement with %c\n", info.name, move); | ||||
|  | @ -207,7 +207,7 @@ void f_move(void *arg) { | |||
|         rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE); | ||||
|         if (robotStarted) { | ||||
|             rt_mutex_acquire(&mutex_move, TM_INFINITE); | ||||
|             send_command_to_robot(move); | ||||
|             send_command_to_robot(robotMove); | ||||
|             rt_mutex_release(&mutex_move); | ||||
| #ifdef _WITH_TRACE_ | ||||
|             printf("%s: the movement %c was sent\n", info.name, move); | ||||
|  | @ -25,10 +25,10 @@ | |||
| #include <alchemy/sem.h> | ||||
| #include <alchemy/queue.h> | ||||
| 
 | ||||
| #include "../../src/monitor.h"     | ||||
| #include "../../src/robot.h" | ||||
| #include "../../src/image.h" | ||||
| #include "../../src/message.h" | ||||
| #include "monitor.h" | ||||
| #include "robot.h" | ||||
| #include "image.h" | ||||
| #include "message.h" | ||||
| 
 | ||||
| extern RT_TASK th_server; | ||||
| extern RT_TASK th_sendToMon; | ||||
|  | @ -49,7 +49,7 @@ extern RT_QUEUE q_messageToMon; | |||
| 
 | ||||
| extern int etatCommMoniteur; | ||||
| extern int robotStarted; | ||||
| extern char move; | ||||
| extern char robotMove; | ||||
| 
 | ||||
| extern int MSG_QUEUE_SIZE; | ||||
| 
 | ||||
|  | @ -16,7 +16,7 @@ | |||
| #include <alchemy/sem.h> | ||||
| #include <alchemy/queue.h> | ||||
| 
 | ||||
| #include "./header/functions.h" | ||||
| #include "functions.h" | ||||
| 
 | ||||
| // Déclaration des taches
 | ||||
| RT_TASK th_server; | ||||
|  | @ -51,7 +51,7 @@ int MSG_QUEUE_SIZE = 10; | |||
| // Déclaration des ressources partagées
 | ||||
| int etatCommMoniteur = 1; | ||||
| int robotStarted = 0; | ||||
| char move = DMB_STOP_MOVE; | ||||
| char robotMove = DMB_STOP_MOVE; | ||||
| 
 | ||||
| /**
 | ||||
|  * \fn void initStruct(void) | ||||
|  | @ -91,10 +91,11 @@ int main(int argc, char **argv) { | |||
| } | ||||
| 
 | ||||
| void initStruct(void) { | ||||
| 
 | ||||
|     int err; | ||||
|     /* Creation des mutex */ | ||||
|     if (err = rt_mutex_create(&mutex_robotStarted, NULL)) { | ||||
|         printf("Error mutex create: %s\n", strerror(-err)); | ||||
|         printf("Error mutex create: %d %s\n", err, strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
|     if (err = rt_mutex_create(&mutex_move, NULL)) { | ||||
|  | @ -103,20 +104,20 @@ void initStruct(void) { | |||
|     } | ||||
| 
 | ||||
|     /* Creation du semaphore */ | ||||
|     if (err = rt_sem_create(&sem_barrier, NULL, 0, S_FIFO)) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|     if (err = rt_sem_create(&sem_barrier, "truc", 0, S_FIFO)) { | ||||
|         printf("Error semaphore create 1: %d %s\n", err, strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
|     if (err = rt_sem_create(&sem_openComRobot, NULL, 0, S_FIFO)) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         printf("Error semaphore create 2: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
|     if (err = rt_sem_create(&sem_serverOk, NULL, 0, S_FIFO)) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         printf("Error semaphore create 3: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
|     if (err = rt_sem_create(&sem_startRobot, NULL, 0, S_FIFO)) { | ||||
|         printf("Error semaphore create: %s\n", strerror(-err)); | ||||
|         printf("Error semaphore create 4: %s\n", strerror(-err)); | ||||
|         exit(EXIT_FAILURE); | ||||
|     } | ||||
| 
 | ||||
		Loading…
	
		Reference in a new issue