Browse Source

Last commit to branch master.

after that next commits will be in branch dev or stable
Sébastien DI MERCURIO 5 years ago
parent
commit
2451177ccd
41 changed files with 2211 additions and 841 deletions
  1. 9
    0
      software/raspberry/superviseur-robot/.gitignore
  2. 1
    0
      software/raspberry/superviseur-robot/.idea/.name
  3. 29
    0
      software/raspberry/superviseur-robot/.idea/codeStyles/Project.xml
  4. 7
    0
      software/raspberry/superviseur-robot/.idea/misc.xml
  5. 8
    0
      software/raspberry/superviseur-robot/.idea/modules.xml
  6. 2
    0
      software/raspberry/superviseur-robot/.idea/superviseur-robot.iml
  7. 6
    0
      software/raspberry/superviseur-robot/.idea/vcs.xml
  8. 864
    0
      software/raspberry/superviseur-robot/.idea/workspace.xml
  9. 16
    6
      software/raspberry/superviseur-robot/CMakeLists.txt
  10. 142
    0
      software/raspberry/superviseur-robot/ProjDestijl.cbp
  11. 32
    0
      software/raspberry/superviseur-robot/compile_commands.json
  12. 0
    36
      software/raspberry/superviseur-robot/destijl_init/Makefile
  13. 4
    4
      software/raspberry/superviseur-robot/examples/CMakeLists.txt
  14. 5
    0
      software/raspberry/superviseur-robot/lib/.gitignore
  15. 2
    2
      software/raspberry/superviseur-robot/lib/CMakeLists.txt
  16. 0
    84
      software/raspberry/superviseur-robot/lib/Robot.h
  17. 0
    49
      software/raspberry/superviseur-robot/lib/Serial.h
  18. 0
    35
      software/raspberry/superviseur-robot/lib/TcpServer.h
  19. 24
    0
      software/raspberry/superviseur-robot/lib/definitions.h
  20. 2
    0
      software/raspberry/superviseur-robot/lib/image.h
  21. 1
    1
      software/raspberry/superviseur-robot/lib/monitor.h
  22. 64
    0
      software/raspberry/superviseur-robot/lib/robot.h
  23. 0
    349
      software/raspberry/superviseur-robot/lib/src/Robot.cpp
  24. 0
    164
      software/raspberry/superviseur-robot/lib/src/Serial.cpp
  25. 0
    93
      software/raspberry/superviseur-robot/lib/src/TcpServer.cpp
  26. 1
    1
      software/raspberry/superviseur-robot/lib/src/message.cpp
  27. 1
    1
      software/raspberry/superviseur-robot/lib/src/monitor.cpp
  28. 236
    0
      software/raspberry/superviseur-robot/lib/src/robot.cpp
  29. 116
    0
      software/raspberry/superviseur-robot/nbproject/configurations.xml
  30. 26
    0
      software/raspberry/superviseur-robot/nbproject/project.xml
  31. 9
    0
      software/raspberry/superviseur-robot/superviseur-pthread/CMakeLists.txt
  32. BIN
      software/raspberry/superviseur-robot/superviseur-pthread/bin/monitor
  33. BIN
      software/raspberry/superviseur-robot/superviseur-pthread/bin/superviseur-pthread
  34. 273
    0
      software/raspberry/superviseur-robot/superviseur-pthread/src/Program.cpp
  35. 246
    0
      software/raspberry/superviseur-robot/superviseur-pthread/src/Tasks.cpp
  36. 44
    0
      software/raspberry/superviseur-robot/superviseur-pthread/src/Tasks.h
  37. 9
    0
      software/raspberry/superviseur-robot/superviseur/.gitignore
  38. 15
    0
      software/raspberry/superviseur-robot/superviseur/CMakeLists.txt
  39. 3
    3
      software/raspberry/superviseur-robot/superviseur/src/functions.cpp
  40. 5
    5
      software/raspberry/superviseur-robot/superviseur/src/functions.h
  41. 9
    8
      software/raspberry/superviseur-robot/superviseur/src/main.cpp

+ 9
- 0
software/raspberry/superviseur-robot/.gitignore View File

@@ -1,2 +1,11 @@
1 1
 build/
2 2
 src.sav/
3
+cmake-build-debug/
4
+futur/
5
+build/
6
+CMakeFiles/
7
+
8
+Makefile
9
+*.cmake
10
+CMakeCache.txt
11
+

+ 1
- 0
software/raspberry/superviseur-robot/.idea/.name View File

@@ -0,0 +1 @@
1
+ProjDestijl

+ 29
- 0
software/raspberry/superviseur-robot/.idea/codeStyles/Project.xml View File

@@ -0,0 +1,29 @@
1
+<component name="ProjectCodeStyleConfiguration">
2
+  <code_scheme name="Project" version="173">
3
+    <Objective-C-extensions>
4
+      <file>
5
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
6
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
7
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
8
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
9
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
10
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
11
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
12
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
13
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
14
+      </file>
15
+      <class>
16
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
17
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
18
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
19
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
20
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
21
+        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
22
+      </class>
23
+      <extensions>
24
+        <pair source="cpp" header="h" fileNamingConvention="NONE" />
25
+        <pair source="c" header="h" fileNamingConvention="NONE" />
26
+      </extensions>
27
+    </Objective-C-extensions>
28
+  </code_scheme>
29
+</component>

+ 7
- 0
software/raspberry/superviseur-robot/.idea/misc.xml View File

@@ -0,0 +1,7 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
4
+  <component name="JavaScriptSettings">
5
+    <option name="languageLevel" value="ES6" />
6
+  </component>
7
+</project>

+ 8
- 0
software/raspberry/superviseur-robot/.idea/modules.xml View File

@@ -0,0 +1,8 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="ProjectModuleManager">
4
+    <modules>
5
+      <module fileurl="file://$PROJECT_DIR$/.idea/superviseur-robot.iml" filepath="$PROJECT_DIR$/.idea/superviseur-robot.iml" />
6
+    </modules>
7
+  </component>
8
+</project>

+ 2
- 0
software/raspberry/superviseur-robot/.idea/superviseur-robot.iml View File

@@ -0,0 +1,2 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<module classpath="CMake" type="CPP_MODULE" version="4" />

+ 6
- 0
software/raspberry/superviseur-robot/.idea/vcs.xml View File

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="VcsDirectoryMappings">
4
+    <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
5
+  </component>
6
+</project>

+ 864
- 0
software/raspberry/superviseur-robot/.idea/workspace.xml View File

@@ -0,0 +1,864 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project version="4">
3
+  <component name="CMakeRunConfigurationManager" shouldGenerate="true" shouldDeleteObsolete="true" buildAllGenerated="true">
4
+    <generated>
5
+      <config projectName="ProjDestijl" targetName="superviseur" />
6
+      <config projectName="ProjDestijl" targetName="destijl" />
7
+    </generated>
8
+  </component>
9
+  <component name="CMakeSettings" AUTO_RELOAD="true">
10
+    <configurations>
11
+      <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
12
+    </configurations>
13
+  </component>
14
+  <component name="ChangeListManager">
15
+    <list default="true" id="4c044020-a391-4234-8366-64abd3f0f464" name="Default Changelist" comment="">
16
+      <change afterPath="$PROJECT_DIR$/.idea/codeStyles/Project.xml" afterDir="false" />
17
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
18
+      <change afterPath="$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt" afterDir="false" />
19
+      <change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Program.cpp" afterDir="false" />
20
+      <change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp" afterDir="false" />
21
+      <change afterPath="$PROJECT_DIR$/superviseur-pthread/src/Tasks.h" afterDir="false" />
22
+      <change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
23
+      <change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" />
24
+      <change beforePath="$PROJECT_DIR$/destijl_init/Makefile" beforeDir="false" />
25
+      <change beforePath="$PROJECT_DIR$/examples/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/examples/CMakeLists.txt" afterDir="false" />
26
+      <change beforePath="$PROJECT_DIR$/lib/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/lib/CMakeLists.txt" afterDir="false" />
27
+      <change beforePath="$PROJECT_DIR$/lib/Robot.h" beforeDir="false" />
28
+      <change beforePath="$PROJECT_DIR$/lib/Serial.h" beforeDir="false" />
29
+      <change beforePath="$PROJECT_DIR$/lib/TcpServer.h" beforeDir="false" />
30
+      <change beforePath="$PROJECT_DIR$/lib/definitions.h" beforeDir="false" />
31
+      <change beforePath="$PROJECT_DIR$/lib/image.h" beforeDir="false" />
32
+      <change beforePath="$PROJECT_DIR$/lib/message.h" beforeDir="false" />
33
+      <change beforePath="$PROJECT_DIR$/lib/monitor.h" beforeDir="false" />
34
+      <change beforePath="$PROJECT_DIR$/lib/src/Robot.cpp" beforeDir="false" />
35
+      <change beforePath="$PROJECT_DIR$/lib/src/Serial.cpp" beforeDir="false" />
36
+      <change beforePath="$PROJECT_DIR$/lib/src/TcpServer.cpp" beforeDir="false" />
37
+      <change beforePath="$PROJECT_DIR$/lib/src/image.cpp" beforeDir="false" />
38
+      <change beforePath="$PROJECT_DIR$/lib/src/message.cpp" beforeDir="false" />
39
+      <change beforePath="$PROJECT_DIR$/lib/src/monitor.cpp" beforeDir="false" />
40
+      <change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp" beforeDir="false" />
41
+      <change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp" beforeDir="false" />
42
+      <change beforePath="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h" beforeDir="false" />
43
+    </list>
44
+    <ignored path="$PROJECT_DIR$/cmake-build-debug/" />
45
+    <ignored path="$PROJECT_DIR$/CMakeFiles/" />
46
+    <ignored path="$PROJECT_DIR$/superviseur/CMakeFiles/" />
47
+    <ignored path="$PROJECT_DIR$/lib/CMakeFiles/" />
48
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
49
+    <option name="SHOW_DIALOG" value="false" />
50
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
51
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
52
+    <option name="LAST_RESOLUTION" value="IGNORE" />
53
+  </component>
54
+  <component name="ExecutionTargetManager" SELECTED_TARGET="CMakeBuildProfile:Debug" />
55
+  <component name="FUSProjectUsageTrigger">
56
+    <session id="-329952360">
57
+      <usages-collector id="statistics.lifecycle.project">
58
+        <counts>
59
+          <entry key="project.closed" value="2" />
60
+          <entry key="project.open.time.3" value="1" />
61
+          <entry key="project.open.time.9" value="1" />
62
+          <entry key="project.opened" value="2" />
63
+        </counts>
64
+      </usages-collector>
65
+      <usages-collector id="statistics.file.extensions.open">
66
+        <counts>
67
+          <entry key="cmake" value="1" />
68
+          <entry key="cpp" value="36" />
69
+          <entry key="gitignore" value="1" />
70
+          <entry key="h" value="18" />
71
+          <entry key="txt" value="20" />
72
+        </counts>
73
+      </usages-collector>
74
+      <usages-collector id="statistics.file.types.open">
75
+        <counts>
76
+          <entry key="CMakeLists.txt" value="21" />
77
+          <entry key="ObjectiveC" value="54" />
78
+          <entry key="PLAIN_TEXT" value="1" />
79
+        </counts>
80
+      </usages-collector>
81
+      <usages-collector id="statistics.file.extensions.edit">
82
+        <counts>
83
+          <entry key="cpp" value="3165" />
84
+          <entry key="gitignore" value="19" />
85
+          <entry key="h" value="1381" />
86
+          <entry key="txt" value="1035" />
87
+        </counts>
88
+      </usages-collector>
89
+      <usages-collector id="statistics.file.types.edit">
90
+        <counts>
91
+          <entry key="CMakeLists.txt" value="1035" />
92
+          <entry key="Doxygen file" value="2" />
93
+          <entry key="ObjectiveC" value="4544" />
94
+          <entry key="PLAIN_TEXT" value="19" />
95
+        </counts>
96
+      </usages-collector>
97
+    </session>
98
+  </component>
99
+  <component name="FileEditorManager">
100
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
101
+      <file pinned="false" current-in-tab="false">
102
+        <entry file="file://$PROJECT_DIR$/lib/CMakeLists.txt">
103
+          <provider selected="true" editor-type-id="text-editor">
104
+            <state>
105
+              <caret column="81" selection-start-column="81" selection-end-column="81" />
106
+            </state>
107
+          </provider>
108
+        </entry>
109
+      </file>
110
+      <file pinned="false" current-in-tab="false">
111
+        <entry file="file://$PROJECT_DIR$/lib/image.h">
112
+          <provider selected="true" editor-type-id="text-editor">
113
+            <state relative-caret-position="209">
114
+              <caret line="17" selection-start-line="17" selection-end-line="17" />
115
+              <folding>
116
+                <element signature="e#566#599#0" expanded="true" />
117
+                <element signature="e#635#673#0" expanded="true" />
118
+                <element signature="e#865#890#0" expanded="true" />
119
+                <element signature="e#935#962#0" expanded="true" />
120
+              </folding>
121
+            </state>
122
+          </provider>
123
+        </entry>
124
+      </file>
125
+      <file pinned="false" current-in-tab="false">
126
+        <entry file="file://$PROJECT_DIR$/lib/src/message.cpp">
127
+          <provider selected="true" editor-type-id="text-editor">
128
+            <state relative-caret-position="405">
129
+              <caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" />
130
+            </state>
131
+          </provider>
132
+        </entry>
133
+      </file>
134
+      <file pinned="false" current-in-tab="false">
135
+        <entry file="file://$PROJECT_DIR$/lib/monitor.h">
136
+          <provider selected="true" editor-type-id="text-editor">
137
+            <state relative-caret-position="389">
138
+              <caret line="64" column="94" selection-start-line="64" selection-start-column="94" selection-end-line="64" selection-end-column="94" />
139
+            </state>
140
+          </provider>
141
+        </entry>
142
+      </file>
143
+      <file pinned="false" current-in-tab="false">
144
+        <entry file="file://$PROJECT_DIR$/lib/src/monitor.cpp">
145
+          <provider selected="true" editor-type-id="text-editor">
146
+            <state relative-caret-position="338">
147
+              <caret line="104" column="23" selection-start-line="104" selection-start-column="23" selection-end-line="104" selection-end-column="23" />
148
+            </state>
149
+          </provider>
150
+        </entry>
151
+      </file>
152
+      <file pinned="false" current-in-tab="false">
153
+        <entry file="file://$PROJECT_DIR$/CMakeLists.txt">
154
+          <provider selected="true" editor-type-id="text-editor">
155
+            <state relative-caret-position="330">
156
+              <caret line="22" selection-start-line="22" selection-end-line="22" />
157
+            </state>
158
+          </provider>
159
+        </entry>
160
+      </file>
161
+      <file pinned="false" current-in-tab="false">
162
+        <entry file="file://$PROJECT_DIR$/superviseur/CMakeLists.txt">
163
+          <provider selected="true" editor-type-id="text-editor">
164
+            <state relative-caret-position="135">
165
+              <caret line="9" selection-start-line="9" selection-end-line="9" />
166
+            </state>
167
+          </provider>
168
+        </entry>
169
+      </file>
170
+      <file pinned="false" current-in-tab="false">
171
+        <entry file="file://$PROJECT_DIR$/superviseur/src/main.cpp">
172
+          <provider selected="true" editor-type-id="text-editor">
173
+            <state relative-caret-position="75">
174
+              <caret line="89" column="13" selection-start-line="89" selection-start-column="13" selection-end-line="89" selection-end-column="13" />
175
+              <folding>
176
+                <element signature="e#88#106#0" expanded="true" />
177
+              </folding>
178
+            </state>
179
+          </provider>
180
+        </entry>
181
+      </file>
182
+      <file pinned="false" current-in-tab="false">
183
+        <entry file="file://$PROJECT_DIR$/superviseur/src/functions.h">
184
+          <provider selected="true" editor-type-id="text-editor">
185
+            <state relative-caret-position="180">
186
+              <caret line="51" column="21" selection-start-line="51" selection-start-column="12" selection-end-line="51" selection-end-column="21" />
187
+              <folding>
188
+                <element signature="e#319#337#0" expanded="true" />
189
+              </folding>
190
+            </state>
191
+          </provider>
192
+        </entry>
193
+      </file>
194
+      <file pinned="false" current-in-tab="true">
195
+        <entry file="file://$PROJECT_DIR$/superviseur/src/functions.cpp">
196
+          <provider selected="true" editor-type-id="text-editor">
197
+            <state relative-caret-position="300">
198
+              <caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
199
+            </state>
200
+          </provider>
201
+        </entry>
202
+      </file>
203
+    </leaf>
204
+  </component>
205
+  <component name="Git.Settings">
206
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." />
207
+  </component>
208
+  <component name="IdeDocumentHistory">
209
+    <option name="CHANGED_PATHS">
210
+      <list>
211
+        <option value="$PROJECT_DIR$/.gitignore" />
212
+        <option value="$PROJECT_DIR$/lib/Definition.h" />
213
+        <option value="$PROJECT_DIR$/lib/src/Robot.cpp" />
214
+        <option value="$PROJECT_DIR$/lib/Image.h" />
215
+        <option value="$PROJECT_DIR$/lib/Camera.h" />
216
+        <option value="$PROJECT_DIR$/lib/src/Camera.cpp" />
217
+        <option value="$PROJECT_DIR$/lib/src/Image.cpp" />
218
+        <option value="$PROJECT_DIR$/destijl_init/CMakeLists.txt" />
219
+        <option value="$PROJECT_DIR$/monitor/CMakeLists.txt" />
220
+        <option value="$PROJECT_DIR$/monitor/src/functions.h" />
221
+        <option value="$PROJECT_DIR$/monitor/src/main.cpp" />
222
+        <option value="$PROJECT_DIR$/monitor-pc/CMakeLists.txt" />
223
+        <option value="$PROJECT_DIR$/monitor-pc/src/functions.cpp" />
224
+        <option value="$PROJECT_DIR$/monitor-pc/src/functions.h" />
225
+        <option value="$PROJECT_DIR$/monitor-pc/src/main.cpp" />
226
+        <option value="$PROJECT_DIR$/monitor-pthread/CMakeLists.txt" />
227
+        <option value="$PROJECT_DIR$/superviseur-pthread/src/Functions.h" />
228
+        <option value="$PROJECT_DIR$/superviseur-pthread/src/Functions.cpp" />
229
+        <option value="$PROJECT_DIR$/lib/src/TcpServer.cpp" />
230
+        <option value="$PROJECT_DIR$/lib/TcpServer.h" />
231
+        <option value="$PROJECT_DIR$/lib/src/Messages.cpp" />
232
+        <option value="$PROJECT_DIR$/lib/Messages.h" />
233
+        <option value="$PROJECT_DIR$/superviseur-pthread/src/Tasks.h" />
234
+        <option value="$PROJECT_DIR$/superviseur-pthread/src/Program.cpp" />
235
+        <option value="$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp" />
236
+        <option value="$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt" />
237
+        <option value="$PROJECT_DIR$/examples/CMakeLists.txt" />
238
+        <option value="$PROJECT_DIR$/superviseur-xenomai/CMakeLists.txt" />
239
+        <option value="$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp" />
240
+        <option value="$PROJECT_DIR$/lib/MsgManager.h" />
241
+        <option value="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp" />
242
+        <option value="$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h" />
243
+        <option value="$PROJECT_DIR$/lib/CMakeLists.txt" />
244
+        <option value="$PROJECT_DIR$/lib/image.h" />
245
+        <option value="$PROJECT_DIR$/lib/src/message.cpp" />
246
+        <option value="$PROJECT_DIR$/lib/monitor.h" />
247
+        <option value="$PROJECT_DIR$/lib/src/monitor.cpp" />
248
+        <option value="$PROJECT_DIR$/superviseur/src/functions.h" />
249
+        <option value="$PROJECT_DIR$/superviseur/src/functions.cpp" />
250
+        <option value="$PROJECT_DIR$/CMakeLists.txt" />
251
+        <option value="$PROJECT_DIR$/superviseur/src/main.cpp" />
252
+        <option value="$PROJECT_DIR$/superviseur/CMakeLists.txt" />
253
+      </list>
254
+    </option>
255
+  </component>
256
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
257
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
258
+  <component name="JsGulpfileManager">
259
+    <detection-done>true</detection-done>
260
+    <sorting>DEFINITION_ORDER</sorting>
261
+  </component>
262
+  <component name="OCFindUsagesOptions" text="true" ivars="false" properties="true" derivedClasses="false" />
263
+  <component name="ProjectFrameBounds">
264
+    <option name="x" value="260" />
265
+    <option name="y" value="101" />
266
+    <option name="width" value="1660" />
267
+    <option name="height" value="1088" />
268
+  </component>
269
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
270
+  <component name="ProjectView">
271
+    <navigator proportions="" version="1">
272
+      <foldersAlwaysOnTop value="true" />
273
+    </navigator>
274
+    <panes>
275
+      <pane id="Scope" />
276
+      <pane id="ProjectPane">
277
+        <subPane>
278
+          <expand>
279
+            <path>
280
+              <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
281
+              <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
282
+            </path>
283
+            <path>
284
+              <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
285
+              <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
286
+              <item name="lib" type="462c0819:PsiDirectoryNode" />
287
+            </path>
288
+            <path>
289
+              <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
290
+              <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
291
+              <item name="superviseur" type="462c0819:PsiDirectoryNode" />
292
+            </path>
293
+            <path>
294
+              <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
295
+              <item name="superviseur-robot" type="462c0819:PsiDirectoryNode" />
296
+              <item name="superviseur" type="462c0819:PsiDirectoryNode" />
297
+              <item name="src" type="462c0819:PsiDirectoryNode" />
298
+            </path>
299
+            <path>
300
+              <item name="ProjDestijl" type="b2602c69:ProjectViewProjectNode" />
301
+              <item name="External Libraries" type="cb654da1:ExternalLibrariesNode" />
302
+            </path>
303
+          </expand>
304
+          <select />
305
+        </subPane>
306
+      </pane>
307
+    </panes>
308
+  </component>
309
+  <component name="PropertiesComponent">
310
+    <property name="WebServerToolWindowFactoryState" value="false" />
311
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/superviseur/bin/superviseur" />
312
+    <property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.General" />
313
+  </component>
314
+  <component name="RecentsManager">
315
+    <key name="CopyFile.RECENT_KEYS">
316
+      <recent name="$PROJECT_DIR$/destijl_init" />
317
+    </key>
318
+    <key name="MoveFile.RECENT_KEYS">
319
+      <recent name="$PROJECT_DIR$/lib" />
320
+      <recent name="$PROJECT_DIR$/destijl_init/src" />
321
+    </key>
322
+  </component>
323
+  <component name="RunDashboard">
324
+    <option name="ruleStates">
325
+      <list>
326
+        <RuleState>
327
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
328
+        </RuleState>
329
+        <RuleState>
330
+          <option name="name" value="StatusDashboardGroupingRule" />
331
+        </RuleState>
332
+      </list>
333
+    </option>
334
+  </component>
335
+  <component name="RunManager" selected="Application.superviseur">
336
+    <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" EXPLICIT_BUILD_TARGET_NAME="all">
337
+      <method v="2">
338
+        <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
339
+      </method>
340
+    </configuration>
341
+    <configuration name="destijl" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" PROJECT_NAME="ProjDestijl" TARGET_NAME="destijl" CONFIG_NAME="Debug">
342
+      <method v="2">
343
+        <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
344
+      </method>
345
+    </configuration>
346
+    <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">
347
+      <method v="2">
348
+        <option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
349
+      </method>
350
+    </configuration>
351
+    <list>
352
+      <item itemvalue="Application.Build All" />
353
+      <item itemvalue="Application.destijl" />
354
+      <item itemvalue="Application.superviseur" />
355
+    </list>
356
+  </component>
357
+  <component name="SvnConfiguration">
358
+    <configuration />
359
+  </component>
360
+  <component name="TaskManager">
361
+    <task active="true" id="Default" summary="Default task">
362
+      <changelist id="4c044020-a391-4234-8366-64abd3f0f464" name="Default Changelist" comment="" />
363
+      <created>1539692092358</created>
364
+      <option name="number" value="Default" />
365
+      <option name="presentableId" value="Default" />
366
+      <updated>1539692092358</updated>
367
+      <workItem from="1539692095452" duration="3090000" />
368
+      <workItem from="1539698076207" duration="43886000" />
369
+    </task>
370
+    <servers />
371
+  </component>
372
+  <component name="TimeTrackingManager">
373
+    <option name="totallyTimeSpent" value="46976000" />
374
+  </component>
375
+  <component name="ToolWindowManager">
376
+    <frame x="260" y="101" width="1660" height="1088" extended-state="0" />
377
+    <layout>
378
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.21277915" />
379
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
380
+      <window_info id="Favorites" order="2" side_tool="true" />
381
+      <window_info anchor="bottom" id="Message" order="0" />
382
+      <window_info anchor="bottom" id="Find" order="1" weight="0.2114165" />
383
+      <window_info anchor="bottom" id="Run" order="2" />
384
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.39957717" />
385
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
386
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
387
+      <window_info anchor="bottom" id="TODO" order="6" />
388
+      <window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" />
389
+      <window_info anchor="bottom" id="Messages" order="8" weight="0.3118393" />
390
+      <window_info anchor="bottom" id="Terminal" order="9" weight="0.32980973" />
391
+      <window_info anchor="bottom" id="Event Log" order="10" side_tool="true" />
392
+      <window_info anchor="bottom" id="Version Control" order="11" show_stripe_button="false" />
393
+      <window_info anchor="bottom" id="CMake" order="12" weight="0.32980973" />
394
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
395
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
396
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
397
+      <window_info anchor="right" id="Database" order="3" />
398
+    </layout>
399
+  </component>
400
+  <component name="TypeScriptGeneratedFilesManager">
401
+    <option name="version" value="1" />
402
+  </component>
403
+  <component name="VcsContentAnnotationSettings">
404
+    <option name="myLimit" value="2678400000" />
405
+  </component>
406
+  <component name="XDebuggerManager">
407
+    <breakpoint-manager>
408
+      <breakpoints>
409
+        <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType">
410
+          <url>file://$PROJECT_DIR$/examples/src/serverTest.cpp</url>
411
+          <line>28</line>
412
+          <option name="timeStamp" value="1" />
413
+        </line-breakpoint>
414
+        <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType">
415
+          <url>file://$PROJECT_DIR$/superviseur/src/functions.cpp</url>
416
+          <line>16</line>
417
+          <option name="timeStamp" value="6" />
418
+        </line-breakpoint>
419
+      </breakpoints>
420
+    </breakpoint-manager>
421
+  </component>
422
+  <component name="editorHistoryManager">
423
+    <entry file="file://$PROJECT_DIR$/destijl_init/src/functions.h">
424
+      <provider selected="true" editor-type-id="text-editor" />
425
+    </entry>
426
+    <entry file="file://$PROJECT_DIR$/destijl_init/src/main.cpp">
427
+      <provider selected="true" editor-type-id="text-editor" />
428
+    </entry>
429
+    <entry file="file://$PROJECT_DIR$/lib/src/Camera.cpp">
430
+      <provider selected="true" editor-type-id="text-editor">
431
+        <state relative-caret-position="795">
432
+          <caret line="53" column="19" selection-start-line="53" selection-start-column="19" selection-end-line="53" selection-end-column="19" />
433
+          <folding>
434
+            <element signature="e#43#62#0" expanded="true" />
435
+          </folding>
436
+        </state>
437
+      </provider>
438
+    </entry>
439
+    <entry file="file://$PROJECT_DIR$/lib/Image.h">
440
+      <provider selected="true" editor-type-id="text-editor">
441
+        <state relative-caret-position="525">
442
+          <caret line="35" column="52" selection-start-line="35" selection-start-column="52" selection-end-line="35" selection-end-column="52" />
443
+          <folding>
444
+            <element signature="e#80#99#0" expanded="true" />
445
+          </folding>
446
+        </state>
447
+      </provider>
448
+    </entry>
449
+    <entry file="file://$PROJECT_DIR$/lib/Definition.h">
450
+      <provider selected="true" editor-type-id="text-editor">
451
+        <state relative-caret-position="330">
452
+          <caret line="22" column="10" selection-start-line="22" selection-start-column="10" selection-end-line="22" selection-end-column="10" />
453
+          <folding>
454
+            <element signature="e#90#128#0" expanded="true" />
455
+          </folding>
456
+        </state>
457
+      </provider>
458
+    </entry>
459
+    <entry file="file://$PROJECT_DIR$/lib/Camera.h">
460
+      <provider selected="true" editor-type-id="text-editor">
461
+        <state relative-caret-position="435">
462
+          <caret line="29" selection-start-line="29" selection-end-line="29" />
463
+          <folding>
464
+            <element signature="e#82#120#0" expanded="true" />
465
+          </folding>
466
+        </state>
467
+      </provider>
468
+    </entry>
469
+    <entry file="file://$PROJECT_DIR$/destijl_init/CMakeLists.txt">
470
+      <provider selected="true" editor-type-id="text-editor">
471
+        <state relative-caret-position="90">
472
+          <caret line="6" column="21" selection-start-line="6" selection-start-column="21" selection-end-line="6" selection-end-column="21" />
473
+        </state>
474
+      </provider>
475
+    </entry>
476
+    <entry file="file://$PROJECT_DIR$/monitor/CMakeLists.txt">
477
+      <provider selected="true" editor-type-id="text-editor">
478
+        <state relative-caret-position="135">
479
+          <caret line="9" selection-start-line="9" selection-end-line="9" />
480
+        </state>
481
+      </provider>
482
+    </entry>
483
+    <entry file="file://$PROJECT_DIR$/monitor/src/functions.cpp">
484
+      <provider selected="true" editor-type-id="text-editor">
485
+        <state relative-caret-position="615">
486
+          <caret line="41" column="41" selection-start-line="41" selection-start-column="41" selection-end-line="41" selection-end-column="41" />
487
+          <folding>
488
+            <element signature="e#1028#1087#0" expanded="true" />
489
+          </folding>
490
+        </state>
491
+      </provider>
492
+    </entry>
493
+    <entry file="file://$PROJECT_DIR$/monitor/src/functions.h">
494
+      <provider selected="true" editor-type-id="text-editor">
495
+        <state relative-caret-position="203">
496
+          <caret line="33" selection-start-line="24" selection-end-line="33" />
497
+          <folding>
498
+            <element signature="e#319#337#0" expanded="true" />
499
+            <element signature="e#446#577#0" expanded="true" />
500
+            <element signature="e#588#616#0" expanded="true" />
501
+          </folding>
502
+        </state>
503
+      </provider>
504
+    </entry>
505
+    <entry file="file://$PROJECT_DIR$/build/CMakeFiles/Makefile.cmake">
506
+      <provider selected="true" editor-type-id="text-editor">
507
+        <state relative-caret-position="90">
508
+          <caret line="6" column="16" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" />
509
+        </state>
510
+      </provider>
511
+    </entry>
512
+    <entry file="file://$PROJECT_DIR$/monitor-pc/CMakeLists.txt">
513
+      <provider selected="true" editor-type-id="text-editor">
514
+        <state>
515
+          <caret column="68" selection-start-column="68" selection-end-column="68" />
516
+        </state>
517
+      </provider>
518
+    </entry>
519
+    <entry file="file://$PROJECT_DIR$/monitor/src/main.cpp">
520
+      <provider selected="true" editor-type-id="text-editor">
521
+        <state relative-caret-position="-1185">
522
+          <caret line="20" selection-start-line="20" selection-end-line="20" />
523
+          <folding>
524
+            <element signature="e#88#106#0" expanded="true" />
525
+            <element signature="e#308#328#0" expanded="true" />
526
+          </folding>
527
+        </state>
528
+      </provider>
529
+    </entry>
530
+    <entry file="file://$PROJECT_DIR$/monitor-pc/src/functions.h">
531
+      <provider selected="true" editor-type-id="text-editor">
532
+        <state relative-caret-position="434">
533
+          <caret line="68" lean-forward="true" selection-start-line="30" selection-end-line="68" />
534
+          <folding>
535
+            <element signature="e#319#337#0" expanded="true" />
536
+          </folding>
537
+        </state>
538
+      </provider>
539
+    </entry>
540
+    <entry file="file://$PROJECT_DIR$/monitor-pc/src/main.cpp">
541
+      <provider selected="true" editor-type-id="text-editor">
542
+        <state relative-caret-position="-510">
543
+          <caret line="11" lean-forward="true" selection-start-line="11" selection-end-line="11" />
544
+        </state>
545
+      </provider>
546
+    </entry>
547
+    <entry file="file://$PROJECT_DIR$/monitor-pc/src/functions.cpp">
548
+      <provider selected="true" editor-type-id="text-editor">
549
+        <state relative-caret-position="824">
550
+          <caret line="214" column="11" lean-forward="true" selection-start-line="214" selection-start-column="11" selection-end-line="214" selection-end-column="11" />
551
+        </state>
552
+      </provider>
553
+    </entry>
554
+    <entry file="file://$PROJECT_DIR$/src.sav/image.cpp">
555
+      <provider selected="true" editor-type-id="text-editor">
556
+        <state relative-caret-position="-1260">
557
+          <caret line="12" selection-start-line="12" selection-end-line="12" />
558
+          <folding>
559
+            <element signature="e#494#512#0" expanded="true" />
560
+          </folding>
561
+        </state>
562
+      </provider>
563
+    </entry>
564
+    <entry file="file://$PROJECT_DIR$/src.sav/image.h">
565
+      <provider selected="true" editor-type-id="text-editor">
566
+        <state relative-caret-position="-810" />
567
+      </provider>
568
+    </entry>
569
+    <entry file="file://$PROJECT_DIR$/monitor-pthread/CMakeLists.txt">
570
+      <provider selected="true" editor-type-id="text-editor">
571
+        <state relative-caret-position="30">
572
+          <caret line="2" column="43" lean-forward="true" selection-start-line="2" selection-start-column="43" selection-end-line="2" selection-end-column="43" />
573
+        </state>
574
+      </provider>
575
+    </entry>
576
+    <entry file="file://$PROJECT_DIR$/monitor-pthread/src/functions.cpp">
577
+      <provider selected="true" editor-type-id="text-editor">
578
+        <state relative-caret-position="-2655" />
579
+      </provider>
580
+    </entry>
581
+    <entry file="file://$PROJECT_DIR$/src.sav/monitor.h">
582
+      <provider selected="true" editor-type-id="text-editor">
583
+        <state relative-caret-position="1680">
584
+          <caret line="112" lean-forward="true" selection-start-line="19" selection-end-line="112" />
585
+          <folding>
586
+            <element signature="e#82#104#0" expanded="true" />
587
+          </folding>
588
+        </state>
589
+      </provider>
590
+    </entry>
591
+    <entry file="file://$PROJECT_DIR$/src.sav/message.h">
592
+      <provider selected="true" editor-type-id="text-editor">
593
+        <state relative-caret-position="135">
594
+          <caret line="9" column="2" lean-forward="true" selection-start-line="9" selection-start-column="2" selection-end-line="9" selection-end-column="2" />
595
+          <folding>
596
+            <element signature="e#312#330#0" expanded="true" />
597
+          </folding>
598
+        </state>
599
+      </provider>
600
+    </entry>
601
+    <entry file="file://$PROJECT_DIR$/lib/src/Serial.cpp">
602
+      <provider selected="true" editor-type-id="text-editor">
603
+        <state relative-caret-position="-1080" />
604
+      </provider>
605
+    </entry>
606
+    <entry file="file://$PROJECT_DIR$/src.sav/message.cpp">
607
+      <provider selected="true" editor-type-id="text-editor">
608
+        <state relative-caret-position="405">
609
+          <caret line="27" column="36" lean-forward="true" selection-start-line="26" selection-start-column="4" selection-end-line="27" selection-end-column="36" />
610
+        </state>
611
+      </provider>
612
+    </entry>
613
+    <entry file="file://$PROJECT_DIR$/src.sav/monitor.cpp">
614
+      <provider selected="true" editor-type-id="text-editor">
615
+        <state relative-caret-position="433">
616
+          <caret line="151" column="1" selection-start-line="146" selection-end-line="151" selection-end-column="1" />
617
+          <folding>
618
+            <element signature="e#1030#1072#0" expanded="true" />
619
+            <element signature="e#1814#1860#0" expanded="true" />
620
+            <element signature="e#1973#2002#0" expanded="true" />
621
+          </folding>
622
+        </state>
623
+      </provider>
624
+    </entry>
625
+    <entry file="file://$PROJECT_DIR$/lib/src/TcpServer.cpp">
626
+      <provider selected="true" editor-type-id="text-editor">
627
+        <state relative-caret-position="299">
628
+          <caret line="76" selection-start-line="76" selection-end-line="76" />
629
+          <folding>
630
+            <element signature="e#648#670#0" expanded="true" />
631
+          </folding>
632
+        </state>
633
+      </provider>
634
+    </entry>
635
+    <entry file="file://$PROJECT_DIR$/lib/Robot.h">
636
+      <provider selected="true" editor-type-id="text-editor">
637
+        <state relative-caret-position="-495" />
638
+      </provider>
639
+    </entry>
640
+    <entry file="file://$PROJECT_DIR$/lib/TcpServer.h">
641
+      <provider selected="true" editor-type-id="text-editor">
642
+        <state relative-caret-position="195">
643
+          <caret line="14" column="17" selection-start-line="14" selection-start-column="17" selection-end-line="14" selection-end-column="17" />
644
+        </state>
645
+      </provider>
646
+    </entry>
647
+    <entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Program.cpp">
648
+      <provider selected="true" editor-type-id="text-editor">
649
+        <state relative-caret-position="419">
650
+          <caret line="107" selection-start-line="107" selection-end-line="107" />
651
+          <folding>
652
+            <element signature="e#90#108#0" expanded="true" />
653
+          </folding>
654
+        </state>
655
+      </provider>
656
+    </entry>
657
+    <entry file="file://$PROJECT_DIR$/examples/CMakeLists.txt">
658
+      <provider selected="true" editor-type-id="text-editor">
659
+        <state relative-caret-position="135">
660
+          <caret line="9" column="22" selection-start-line="9" selection-start-column="22" selection-end-line="9" selection-end-column="22" />
661
+        </state>
662
+      </provider>
663
+    </entry>
664
+    <entry file="file://$PROJECT_DIR$/superviseur-pthread/CMakeLists.txt">
665
+      <provider selected="true" editor-type-id="text-editor">
666
+        <state relative-caret-position="105">
667
+          <caret line="7" column="60" selection-start-line="7" selection-start-column="60" selection-end-line="7" selection-end-column="60" />
668
+        </state>
669
+      </provider>
670
+    </entry>
671
+    <entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Tasks.h">
672
+      <provider selected="true" editor-type-id="text-editor">
673
+        <state relative-caret-position="405">
674
+          <caret line="33" column="40" selection-start-line="33" selection-start-column="40" selection-end-line="33" selection-end-column="40" />
675
+          <folding>
676
+            <element signature="e#319#338#0" expanded="true" />
677
+          </folding>
678
+        </state>
679
+      </provider>
680
+    </entry>
681
+    <entry file="file://$PROJECT_DIR$/superviseur-pthread/src/Tasks.cpp">
682
+      <provider selected="true" editor-type-id="text-editor">
683
+        <state relative-caret-position="509">
684
+          <caret line="245" column="27" selection-start-line="245" selection-start-column="27" selection-end-line="245" selection-end-column="27" />
685
+          <folding>
686
+            <element signature="e#0#18#0" expanded="true" />
687
+          </folding>
688
+        </state>
689
+      </provider>
690
+    </entry>
691
+    <entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Program.cpp">
692
+      <provider selected="true" editor-type-id="text-editor">
693
+        <state relative-caret-position="373">
694
+          <caret line="148" column="7" selection-start-line="145" selection-start-column="6" selection-end-line="148" selection-end-column="7" />
695
+          <folding>
696
+            <element signature="e#88#106#0" expanded="true" />
697
+          </folding>
698
+        </state>
699
+      </provider>
700
+    </entry>
701
+    <entry file="file://$PROJECT_DIR$/lib/src/Robot.cpp">
702
+      <provider selected="true" editor-type-id="text-editor">
703
+        <state relative-caret-position="165">
704
+          <caret line="29" column="19" selection-start-line="29" selection-start-column="19" selection-end-line="29" selection-end-column="19" />
705
+          <folding>
706
+            <element signature="e#891#909#0" expanded="true" />
707
+          </folding>
708
+        </state>
709
+      </provider>
710
+    </entry>
711
+    <entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Tasks.h">
712
+      <provider selected="true" editor-type-id="text-editor">
713
+        <state relative-caret-position="748">
714
+          <caret line="84" column="60" selection-start-line="84" selection-start-column="60" selection-end-line="84" selection-end-column="60" />
715
+          <folding>
716
+            <element signature="e#316#341#0" expanded="true" />
717
+          </folding>
718
+        </state>
719
+      </provider>
720
+    </entry>
721
+    <entry file="file://$PROJECT_DIR$/lib/MsgManager.h">
722
+      <provider selected="true" editor-type-id="text-editor">
723
+        <state relative-caret-position="-151">
724
+          <caret line="20" column="8" selection-start-line="20" selection-start-column="8" selection-end-line="20" selection-end-column="8" />
725
+          <folding>
726
+            <element signature="e#86#105#0" expanded="true" />
727
+          </folding>
728
+        </state>
729
+      </provider>
730
+    </entry>
731
+    <entry file="file://$PROJECT_DIR$/superviseur-xenomai/src/Tasks.cpp">
732
+      <provider selected="true" editor-type-id="text-editor">
733
+        <state relative-caret-position="410">
734
+          <caret line="92" column="35" lean-forward="true" selection-start-line="92" selection-start-column="35" selection-end-line="92" selection-end-column="35" />
735
+          <folding>
736
+            <element signature="e#0#19#0" expanded="true" />
737
+            <element signature="e#876#929#0" expanded="true" />
738
+            <element signature="e#1024#1083#0" expanded="true" />
739
+            <element signature="e#1218#1293#0" expanded="true" />
740
+            <element signature="e#1799#1852#0" expanded="true" />
741
+            <element signature="e#1939#2002#0" expanded="true" />
742
+            <element signature="e#2104#2194#0" expanded="true" />
743
+            <element signature="e#2383#2442#0" expanded="true" />
744
+            <element signature="e#2683#2730#0" expanded="true" />
745
+            <element signature="e#3232#3297#0" expanded="true" />
746
+            <element signature="e#3735#3816#0" expanded="true" />
747
+            <element signature="e#3922#3978#0" expanded="true" />
748
+            <element signature="e#6217#6275#0" expanded="true" />
749
+          </folding>
750
+        </state>
751
+      </provider>
752
+    </entry>
753
+    <entry file="file://$PROJECT_DIR$/lib/src/Image.cpp">
754
+      <provider selected="true" editor-type-id="text-editor">
755
+        <state relative-caret-position="419">
756
+          <caret line="51" column="6" selection-start-line="51" selection-start-column="6" selection-end-line="51" selection-end-column="26" />
757
+        </state>
758
+      </provider>
759
+    </entry>
760
+    <entry file="file://$PROJECT_DIR$/lib/src/MsgManager.cpp">
761
+      <provider selected="true" editor-type-id="text-editor">
762
+        <state relative-caret-position="339">
763
+          <caret line="136" column="23" selection-start-line="136" selection-start-column="23" selection-end-line="136" selection-end-column="23" />
764
+          <folding>
765
+            <element signature="e#44#64#0" expanded="true" />
766
+            <element signature="e#751#793#0" expanded="true" />
767
+            <element signature="e#832#878#0" expanded="true" />
768
+            <element signature="e#938#967#0" expanded="true" />
769
+            <element signature="e#1253#1282#0" expanded="true" />
770
+          </folding>
771
+        </state>
772
+      </provider>
773
+    </entry>
774
+    <entry file="file://$PROJECT_DIR$/superviseur-xenomai/CMakeLists.txt">
775
+      <provider selected="true" editor-type-id="text-editor">
776
+        <state relative-caret-position="60">
777
+          <caret line="4" column="82" selection-start-line="4" selection-start-column="82" selection-end-line="4" selection-end-column="82" />
778
+        </state>
779
+      </provider>
780
+    </entry>
781
+    <entry file="file://$PROJECT_DIR$/lib/image.h">
782
+      <provider selected="true" editor-type-id="text-editor">
783
+        <state relative-caret-position="209">
784
+          <caret line="17" selection-start-line="17" selection-end-line="17" />
785
+          <folding>
786
+            <element signature="e#566#599#0" expanded="true" />
787
+            <element signature="e#635#673#0" expanded="true" />
788
+            <element signature="e#865#890#0" expanded="true" />
789
+            <element signature="e#935#962#0" expanded="true" />
790
+          </folding>
791
+        </state>
792
+      </provider>
793
+    </entry>
794
+    <entry file="file://$PROJECT_DIR$/lib/src/message.cpp">
795
+      <provider selected="true" editor-type-id="text-editor">
796
+        <state relative-caret-position="405">
797
+          <caret line="27" column="32" selection-start-line="27" selection-start-column="32" selection-end-line="27" selection-end-column="32" />
798
+        </state>
799
+      </provider>
800
+    </entry>
801
+    <entry file="file://$PROJECT_DIR$/lib/monitor.h">
802
+      <provider selected="true" editor-type-id="text-editor">
803
+        <state relative-caret-position="389">
804
+          <caret line="64" column="94" selection-start-line="64" selection-start-column="94" selection-end-line="64" selection-end-column="94" />
805
+        </state>
806
+      </provider>
807
+    </entry>
808
+    <entry file="file://$PROJECT_DIR$/lib/src/monitor.cpp">
809
+      <provider selected="true" editor-type-id="text-editor">
810
+        <state relative-caret-position="338">
811
+          <caret line="104" column="23" selection-start-line="104" selection-start-column="23" selection-end-line="104" selection-end-column="23" />
812
+        </state>
813
+      </provider>
814
+    </entry>
815
+    <entry file="file://$PROJECT_DIR$/superviseur/src/functions.h">
816
+      <provider selected="true" editor-type-id="text-editor">
817
+        <state relative-caret-position="180">
818
+          <caret line="51" column="21" selection-start-line="51" selection-start-column="12" selection-end-line="51" selection-end-column="21" />
819
+          <folding>
820
+            <element signature="e#319#337#0" expanded="true" />
821
+          </folding>
822
+        </state>
823
+      </provider>
824
+    </entry>
825
+    <entry file="file://$PROJECT_DIR$/CMakeLists.txt">
826
+      <provider selected="true" editor-type-id="text-editor">
827
+        <state relative-caret-position="330">
828
+          <caret line="22" selection-start-line="22" selection-end-line="22" />
829
+        </state>
830
+      </provider>
831
+    </entry>
832
+    <entry file="file://$PROJECT_DIR$/lib/CMakeLists.txt">
833
+      <provider selected="true" editor-type-id="text-editor">
834
+        <state>
835
+          <caret column="81" selection-start-column="81" selection-end-column="81" />
836
+        </state>
837
+      </provider>
838
+    </entry>
839
+    <entry file="file://$PROJECT_DIR$/superviseur/CMakeLists.txt">
840
+      <provider selected="true" editor-type-id="text-editor">
841
+        <state relative-caret-position="135">
842
+          <caret line="9" selection-start-line="9" selection-end-line="9" />
843
+        </state>
844
+      </provider>
845
+    </entry>
846
+    <entry file="file://$PROJECT_DIR$/superviseur/src/main.cpp">
847
+      <provider selected="true" editor-type-id="text-editor">
848
+        <state relative-caret-position="75">
849
+          <caret line="89" column="13" selection-start-line="89" selection-start-column="13" selection-end-line="89" selection-end-column="13" />
850
+          <folding>
851
+            <element signature="e#88#106#0" expanded="true" />
852
+          </folding>
853
+        </state>
854
+      </provider>
855
+    </entry>
856
+    <entry file="file://$PROJECT_DIR$/superviseur/src/functions.cpp">
857
+      <provider selected="true" editor-type-id="text-editor">
858
+        <state relative-caret-position="300">
859
+          <caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
860
+        </state>
861
+      </provider>
862
+    </entry>
863
+  </component>
864
+</project>

+ 16
- 6
software/raspberry/superviseur-robot/CMakeLists.txt View File

@@ -1,13 +1,23 @@
1
-cmake_minimum_required(VERSION 3.9)
2
-project(ProjDestjil CXX)
1
+cmake_minimum_required(VERSION 3.6)
2
+project(ProjDestijl CXX)
3 3
 
4 4
 set (ProjDestjil_VERSION_MAJOR 1)
5 5
 set (ProjDestjil_VERSION_MINOR 0)
6 6
 set (CMAKE_CXX_STANDARD 11)
7 7
 
8
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
9
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
8
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
9
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
10
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/superviseur/bin)
11
+
12
+option(BUILD_FOR_XENOMAI "Build for Raspberry" OFF)
13
+
14
+set(CMAKE_BUILD_TYPE DEBUG)
15
+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")
16
+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")
17
+
18
+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")
10 19
 
11 20
 add_subdirectory("lib")
12
-add_subdirectory("examples")
13
-#add_subdirectory("destjil_init")
21
+#add_subdirectory("examples")
22
+add_subdirectory("superviseur")
23
+

+ 142
- 0
software/raspberry/superviseur-robot/ProjDestijl.cbp View File

@@ -0,0 +1,142 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<CodeBlocks_project_file>
3
+	<FileVersion major="1" minor="6"/>
4
+	<Project>
5
+		<Option title="ProjDestijl"/>
6
+		<Option makefile_is_custom="1"/>
7
+		<Option compiler="gcc"/>
8
+		<Option virtualFolders="CMake Files\;CMake Files\lib\;CMake Files\superviseur\;"/>
9
+		<Build>
10
+			<Target title="all">
11
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot"/>
12
+				<Option type="4"/>
13
+				<MakeCommands>
14
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 all"/>
15
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
16
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 clean"/>
17
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 clean"/>
18
+				</MakeCommands>
19
+			</Target>
20
+			<Target title="rebuild_cache">
21
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot"/>
22
+				<Option type="4"/>
23
+				<MakeCommands>
24
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 rebuild_cache"/>
25
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
26
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 clean"/>
27
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 clean"/>
28
+				</MakeCommands>
29
+			</Target>
30
+			<Target title="edit_cache">
31
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot"/>
32
+				<Option type="4"/>
33
+				<MakeCommands>
34
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 edit_cache"/>
35
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
36
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 clean"/>
37
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/Makefile&quot;  VERBOSE=1 clean"/>
38
+				</MakeCommands>
39
+			</Target>
40
+			<Target title="destijl">
41
+				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/lib/libdestijl.a" prefix_auto="0" extension_auto="0"/>
42
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib"/>
43
+				<Option object_output="./"/>
44
+				<Option type="2"/>
45
+				<Option compiler="gcc"/>
46
+				<Compiler>
47
+					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/."/>
48
+				</Compiler>
49
+				<MakeCommands>
50
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 destijl"/>
51
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
52
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 clean"/>
53
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 clean"/>
54
+				</MakeCommands>
55
+			</Target>
56
+			<Target title="destijl/fast">
57
+				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/lib/libdestijl.a" prefix_auto="0" extension_auto="0"/>
58
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib"/>
59
+				<Option object_output="./"/>
60
+				<Option type="2"/>
61
+				<Option compiler="gcc"/>
62
+				<Compiler>
63
+					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/."/>
64
+				</Compiler>
65
+				<MakeCommands>
66
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 destijl/fast"/>
67
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
68
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 clean"/>
69
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/Makefile&quot;  VERBOSE=1 clean"/>
70
+				</MakeCommands>
71
+			</Target>
72
+			<Target title="superviseur">
73
+				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur/bin/superviseur" prefix_auto="0" extension_auto="0"/>
74
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/../superviseur/bin"/>
75
+				<Option object_output="./"/>
76
+				<Option type="1"/>
77
+				<Option compiler="gcc"/>
78
+				<Compiler>
79
+					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/./src"/>
80
+					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/../lib"/>
81
+					<Add directory="/usr/xenomai/include"/>
82
+					<Add directory="/usr/xenomai/include/mercury"/>
83
+				</Compiler>
84
+				<MakeCommands>
85
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 superviseur"/>
86
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
87
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 clean"/>
88
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 clean"/>
89
+				</MakeCommands>
90
+			</Target>
91
+			<Target title="superviseur/fast">
92
+				<Option output="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur/bin/superviseur" prefix_auto="0" extension_auto="0"/>
93
+				<Option working_dir="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/../superviseur/bin"/>
94
+				<Option object_output="./"/>
95
+				<Option type="1"/>
96
+				<Option compiler="gcc"/>
97
+				<Compiler>
98
+					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/./src"/>
99
+					<Add directory="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/../lib"/>
100
+					<Add directory="/usr/xenomai/include"/>
101
+					<Add directory="/usr/xenomai/include/mercury"/>
102
+				</Compiler>
103
+				<MakeCommands>
104
+					<Build command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 superviseur/fast"/>
105
+					<CompileFile command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 &quot;$file&quot;"/>
106
+					<Clean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 clean"/>
107
+					<DistClean command="/usr/bin/make -f &quot;/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/Makefile&quot;  VERBOSE=1 clean"/>
108
+				</MakeCommands>
109
+			</Target>
110
+		</Build>
111
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp">
112
+			<Option target="destijl"/>
113
+		</Unit>
114
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp">
115
+			<Option target="destijl"/>
116
+		</Unit>
117
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp">
118
+			<Option target="destijl"/>
119
+		</Unit>
120
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp">
121
+			<Option target="destijl"/>
122
+		</Unit>
123
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.cpp">
124
+			<Option target="superviseur"/>
125
+		</Unit>
126
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.h">
127
+			<Option target="superviseur"/>
128
+		</Unit>
129
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/main.cpp">
130
+			<Option target="superviseur"/>
131
+		</Unit>
132
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/CMakeLists.txt">
133
+			<Option virtualFolder="CMake Files\"/>
134
+		</Unit>
135
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/CMakeLists.txt">
136
+			<Option virtualFolder="CMake Files\lib\"/>
137
+		</Unit>
138
+		<Unit filename="/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/CMakeLists.txt">
139
+			<Option virtualFolder="CMake Files\superviseur\"/>
140
+		</Unit>
141
+	</Project>
142
+</CodeBlocks_project_file>

+ 32
- 0
software/raspberry/superviseur-robot/compile_commands.json View File

@@ -0,0 +1,32 @@
1
+[
2
+{
3
+  "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib",
4
+  "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",
5
+  "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/robot.cpp"
6
+},
7
+{
8
+  "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib",
9
+  "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",
10
+  "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/monitor.cpp"
11
+},
12
+{
13
+  "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib",
14
+  "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",
15
+  "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/message.cpp"
16
+},
17
+{
18
+  "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib",
19
+  "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",
20
+  "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/lib/src/image.cpp"
21
+},
22
+{
23
+  "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur",
24
+  "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",
25
+  "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/main.cpp"
26
+},
27
+{
28
+  "directory": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur",
29
+  "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",
30
+  "file": "/home/dimercur/Documents/Travail/git/dumber/software/raspberry/superviseur-robot/superviseur/src/functions.cpp"
31
+}
32
+]

+ 0
- 36
software/raspberry/superviseur-robot/destijl_init/Makefile View File

@@ -1,36 +0,0 @@
1
-
2
-CC=g++
3
-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
4
-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
5
-EXEC=superviseur
6
-SRC= $(wildcard *.cpp ./src/*.cpp ./../src/*.cpp)
7
-OBJ= $(SRC:.cpp=.o)
8
-
9
-
10
-all: $(EXEC)
11
-
12
-
13
-$(EXEC): $(OBJ)
14
-	@$(CC) -o $@ $^ $(LDFLAGS)
15
-
16
-
17
-main.o: main.cpp
18
-
19
-
20
-%.o: %.cpp
21
-	@$(CC) -o $@ -c $< $(CFLAGS)
22
-
23
-
24
-.PHONY: clean mrproper
25
-
26
-
27
-clean:
28
-	@rm -rf *.o
29
-	@rm -rf *.d
30
-	@rm -rf ./src/*.o
31
-	@rm -rf ./src/*.d
32
-	@rm -rf ./../src/*o
33
-	@rm -rf ./../src/*.d
34
-
35
-mrproper: clean
36
-	@rm -rf $(EXEC)

+ 4
- 4
software/raspberry/superviseur-robot/examples/CMakeLists.txt View File

@@ -4,8 +4,8 @@ set(serialTest_FILES ./src/serialTest.cpp)
4 4
 set(serverTest_FILES ./src/serverTest.cpp)
5 5
 include_directories(./src ../lib)
6 6
 
7
-add_executable(serialTest ${serialTest_FILES})
8
-target_link_libraries(serialTest destjil)
7
+add_executable(serialtest ${serialTest_FILES})
8
+target_link_libraries(serialtest destijl)
9 9
 
10
-add_executable(serverTest ${serverTest_FILES})
11
-target_link_libraries(serverTest destjil)
10
+add_executable(servertest ${serverTest_FILES})
11
+target_link_libraries(servertest destijl)

+ 5
- 0
software/raspberry/superviseur-robot/lib/.gitignore View File

@@ -1 +1,6 @@
1
+CMakeFiles/
2
+
1 3
 libdestjil.a
4
+Makefile
5
+*.cmake
6
+

+ 2
- 2
software/raspberry/superviseur-robot/lib/CMakeLists.txt View File

@@ -1,5 +1,5 @@
1
-set(LIB_FILES ./src/Serial.cpp ./src/Robot.cpp ./src/TcpServer.cpp)
1
+set(LIB_FILES ./src/robot.cpp ./src/monitor.cpp ./src/message.cpp ./src/image.cpp)
2 2
 include_directories("./")
3 3
 
4
-add_library(destjil STATIC ${LIB_FILES})
4
+add_library(destijl STATIC ${LIB_FILES})
5 5
 

+ 0
- 84
software/raspberry/superviseur-robot/lib/Robot.h View File

@@ -1,84 +0,0 @@
1
-/*******************************************************************************
2
- * Copyright (c) 2018 INSA - GEI, Toulouse, France.
3
- * All rights reserved. This program and the accompanying materials
4
- * are made available "AS IS", without any warranty of any kind.
5
- *
6
- * INSA assumes no responsibility for errors or omissions in the 
7
- * software or documentation available. 
8
- *
9
- * Contributors:
10
- *     Lucien Senaneuch - Initial API and implementation
11
- *     Sebastien DI MERCURIO - Maintainer since Octobre 2018
12
- *******************************************************************************/
13
-/**
14
- * \file      robot.h
15
- * \author    L.Senaneuch
16
- * \version   1.0
17
- * \date      06/06/2017
18
- * \brief     Fonction permettant la communication avec le robot.
19
- *
20
- * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART
21
- */
22
-
23
-#ifndef __ROBOT_H__
24
-#define __ROBOT_H__
25
-
26
-#include <iostream>
27
-#include <string>
28
-#include <Serial.h>
29
-
30
-using namespace std;
31
-
32
-#define REJECTED_COMMAND                    -3
33
-#define INVALID_COMMAND                     -4
34
-#define TIMEOUT_COMMAND                     -5
35
-#define INVALID_ANSWER                      -6
36
-
37
-#define BATTERY_FULL                        2
38
-#define BATTERY_LOW                         1
39
-#define BATTERY_EMPTY                       0
40
-
41
-class Robot : public Serial {
42
-    public:
43
-        Robot();
44
-        virtual ~Robot();
45
-
46
-        char Open();
47
-        char Open(const char *path);
48
-        char Close();
49
-
50
-        int GetLastCommandStatus();
51
-
52
-        void Ping();
53
-        void Reset();
54
-
55
-        void StartWithoutWatchdog();
56
-        void StartWithWatchdog();
57
-        void ResetWatchdog();
58
-
59
-        void Move(int distance);
60
-        void Turn(int angle);
61
-
62
-        void PowerOff();
63
-
64
-        char GetBatteryLevel();
65
-        string GetVersion();
66
-        bool IsBusy();
67
-
68
-        // Ces deux methodes virtuelles sont a redefinir (surcharger) dans une classe qui etends la classe Robot
69
-        // Servez vous en pour faire une action avant (prologue) ou apres (epilogue) une commande au robot
70
-        virtual void CommunicationProlog();
71
-        virtual void CommunicationEpilog();
72
-
73
-        static const string InvalidAnswerException;
74
-    private:
75
-
76
-        int lastCommandStatus;
77
-
78
-        char SendCommand(string cmd, string *ans);
79
-        string AddChecksum(string cmd);
80
-        bool ValidateChecksum(string *answerWithoutChecksum, string answer);
81
-        void CheckAnswer(string ans);
82
-};
83
-
84
-#endif //__ROBOT_H__

+ 0
- 49
software/raspberry/superviseur-robot/lib/Serial.h View File

@@ -1,49 +0,0 @@
1
-/*
2
- * Serial.h
3
- *
4
- *  Created on: 12 oct. 2018
5
- *      Author: dimercur
6
- */
7
-
8
-#ifndef SERIAL_H_
9
-#define SERIAL_H_
10
-
11
-#include <iostream>
12
-#include <string>
13
-#include <vector>
14
-
15
-using namespace std;
16
-
17
-#define SUCCESS                             0
18
-#define INVALID_COMMUNICATION_PORT          -1
19
-#define COMMUNICATION_PORT_ALREADY_OPENED   -2
20
-
21
-#define DEFAULT_SERIAL_PORT             "/dev/ttyS0"
22
-#define DEFAULT_BAUDRATE                9600
23
-
24
-class Serial {
25
-    public:
26
-        static const string TimeoutException;
27
-        static const string IOErrorException;
28
-        static const string BufferOverflowException;
29
-
30
-        Serial();
31
-        virtual ~Serial();
32
-
33
-        char Open(void);
34
-        char Open(int baudrate);
35
-        char Open(const char *path, int baudrate);
36
-        char Close(void);
37
-
38
-        bool IsOpen();
39
-        ssize_t Send(string mes);
40
-        string Receive(int size);
41
-        string Receive(vector<char> endingChars, int maxLength);
42
-
43
-    private:
44
-        int serialPortDescriptor;
45
-        int SetBaudrate(int baudrate);
46
-        char GetChar(); // read 1 char
47
-};
48
-
49
-#endif /* SERIAL_H_ */

+ 0
- 35
software/raspberry/superviseur-robot/lib/TcpServer.h View File

@@ -1,35 +0,0 @@
1
-//
2
-// Created by senaneuc on 12/06/18.
3
-//
4
-
5
-#ifndef TCP_SERVER_H_
6
-#define TCP_SERVER_H_
7
-
8
-#define NB_CONNECTION_MAX 5
9
-
10
-#include <iostream>
11
-#include <vector>
12
-
13
-using namespace std;
14
-
15
-class TcpServer {
16
-public:
17
-    TcpServer();
18
-    virtual ~TcpServer();
19
-
20
-    int Listen (int port);
21
-    int AcceptClient();
22
-    int Send(int clien_fd, string mes);
23
-    int Broadcast(string mes);
24
-    string Receive(int client_fd, int size);
25
-
26
-    const vector<int> &getSocketClients() const;
27
-
28
-    void SetSocketClients(const vector<int> &socketClients);
29
-
30
-private:
31
-    vector<int> socketClients;
32
-    int socketFD;
33
-};
34
-
35
-#endif /* TCP_SERVER_H_ */

+ 24
- 0
software/raspberry/superviseur-robot/lib/definitions.h View File

@@ -14,6 +14,30 @@
14 14
 #ifndef DEFINITIONS_H
15 15
 #define DEFINITIONS_H
16 16
 
17
+#define OPEN_COM_DMB  'o'
18
+#define CLOSE_COM_DMB 'C'
19
+
20
+#define DMB_PING                'p'
21
+#define DMB_IDLE                'r'
22
+#define DMB_START_WITHOUT_WD    'u'
23
+#define DMB_START_WITH_WD       'W'
24
+#define DMB_RELOAD_WD           'w'
25
+#define DMB_GET_VBAT            'v'
26
+#define DMB_IS_BUSY             'b'
27
+#define DMB_MOVE                'M'
28
+#define DMB_TURN                'T'
29
+#define DMB_GO_FORWARD          'F'
30
+#define DMB_GO_BACK             'B'
31
+#define DMB_GO_LEFT             'L'
32
+#define DMB_GO_RIGHT            'R'
33
+#define DMB_STOP_MOVE           'S'
34
+
35
+#define ROBOT_TIMED_OUT -3
36
+#define ROBOT_UKNOWN_CMD -2
37
+#define ROBOT_ERROR  -1
38
+#define ROBOT_CHECKSUM  -4
39
+#define ROBOT_OK    0
40
+
17 41
 #define CAM_OPEN                    'A'
18 42
 #define CAM_CLOSE                   'I'
19 43
 #define CAM_ASK_ARENA               'y'

+ 2
- 0
software/raspberry/superviseur-robot/lib/image.h View File

@@ -14,6 +14,8 @@
14 14
 #ifndef IMAGERIE_H
15 15
 #define IMAGERIE_H
16 16
 
17
+#define __STUB__
18
+
17 19
 #ifndef __STUB__
18 20
 #include <raspicam/raspicam_cv.h>
19 21
 #else

+ 1
- 1
software/raspberry/superviseur-robot/lib/monitor.h View File

@@ -62,7 +62,7 @@ typedef struct {
62 62
  * \param    file  chemin du fichier de l'interface (défaut ./interface.js)
63 63
  * \return   retourne 0 si le process a été lancé et -1 sinon.
64 64
  */
65
-int run_nodejs(const char * path = DEFAULT_NODEJS_PATH, char * file = DEFAULT_INTERFACE_FILE);
65
+int run_nodejs(const char *path = (const char*)DEFAULT_NODEJS_PATH, char *file = (const char*)DEFAULT_INTERFACE_FILE);
66 66
 
67 67
 /**
68 68
  * \brief    Tue le process exécutant nodejs.

+ 64
- 0
software/raspberry/superviseur-robot/lib/robot.h View File

@@ -0,0 +1,64 @@
1
+/**
2
+ * \file      robot.h
3
+ * \author    L.Senaneuch
4
+ * \version   1.0
5
+ * \date      06/06/2017
6
+ * \brief     Fonction permettant la communication avec le robot.
7
+ *
8
+ * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART
9
+ */
10
+
11
+
12
+#ifndef DUMBERC_SERIAL_H_H
13
+#define DUMBERC_SERIAL_H_H
14
+
15
+#include <stdio.h>
16
+#include <unistd.h>
17
+#include <fcntl.h>
18
+#include <termios.h>
19
+#include <string.h>
20
+#include <stdlib.h>
21
+#include "definitions.h"
22
+
23
+
24
+#define serialPort "/dev/ttyS0"
25
+
26
+typedef struct
27
+   {
28
+    char header[4];
29
+    char data[20];
30
+   } MessageToRobot;
31
+
32
+ /**
33
+ * \brief     Ouvre la communication avec le robot.
34
+ * \details   Ouvre le serial port passé en paramétre. Par defaut cette fonction ouvre le port ttySO connecté au module xbee.
35
+ *             
36
+ * \param    *path    chaine de caractère indiquant le path du port serie à ouvrir.
37
+ * \return    Return -1 si l'ouverture c'est mal passé et 0 si le port est ouvert.
38
+ */
39
+int open_communication_robot(const char * path=serialPort);
40
+
41
+ /**
42
+ * \brief      Ferme la communication avec le robot.
43
+ * \details    Ferme le descripteur de fichier du port serie contrôlant le robot.
44
+ *             
45
+ * \param     void	aucun 
46
+ * \return    Retourne -1 en cas d'erreur ou 0 en cas de fermeture effectué
47
+ */
48
+int close_communication_robot(void);
49
+
50
+ /**
51
+ * \brief      Envoi une commande au robot et attends sa réponse.
52
+ * \details    Envoi une commande au robot en ajoutant le checksum et lis la réponse du robot en verifiant le checksum.
53
+			   Le premier paramétre \a cmd correspond au type de commande ex : PING, SETMOVE ...
54
+			   Le second paramétre  \a *arg correspond aux arguments à la commande ex : SETMOVE, "100"
55
+			   La fonction retourne un code confirmation transmise par le robot (ROBOT_CHEKSUM, ROBOT_ERROR, ROBOT_TIMED_OUT, ROBOT_OK, ROBOT_UKNOW_CMD)
56
+ *             
57
+ * \param    cmd    Entête de la commande
58
+ * \param    *arg   Argument de la commande 
59
+ * \return   retourne un code confirmation.
60
+ */
61
+int send_command_to_robot(char cmd, const char * arg=NULL);
62
+
63
+
64
+#endif //DUMBERC_SERIAL_H_H

+ 0
- 349
software/raspberry/superviseur-robot/lib/src/Robot.cpp View File

@@ -1,349 +0,0 @@
1
-/*******************************************************************************
2
- * Copyright (c) 2018 INSA - GEI, Toulouse, France.
3
- * All rights reserved. This program and the accompanying materials
4
- * are made available "AS IS", without any warranty of any kind.
5
- *
6
- * INSA assumes no responsibility for errors or omissions in the 
7
- * software or documentation available. 
8
- *
9
- * Contributors:
10
- *     Lucien Senaneuch - Initial API and implementation
11
- *     Sebastien DI MERCURIO - Maintainer since Octobre 2018
12
- *******************************************************************************/
13
-
14
-/**
15
- * \file      robot.cpp
16
- * \author    L.Senaneuch
17
- * \version   1.0
18
- * \date      06/06/2017
19
- * \brief     Fonction permettant la communication avec le robot.
20
- *
21
- * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART
22
- */
23
-
24
-#include "Robot.h"
25
-
26
-#include <unistd.h>
27
-#include <fcntl.h>
28
-#include <termios.h>
29
-
30
-#include <stdlib.h>
31
-#include "definitions.h"
32
-
33
-using namespace std;
34
-
35
-#define ROBOT_CMD_ENDING_CHAR           '\r'
36
-
37
-#define ROBOT_CMD_PING                  'p'
38
-#define ROBOT_CMD_RESET                 'r'
39
-#define ROBOT_CMD_START_WITHOUT_WD      'u'
40
-#define ROBOT_CMD_START_WITH_WD         'W'
41
-#define ROBOT_CMD_RELOAD_WD             'w'
42
-#define ROBOT_CMD_GET_VBAT              'v'
43
-#define ROBOT_CMD_IS_BUSY               'b'
44
-#define ROBOT_CMD_MOVE                  'M'
45
-#define ROBOT_CMD_TURN                  'T'
46
-#define ROBOT_CMD_GET_VERSION           'V'
47
-#define ROBOT_CMD_POWER_OFF             'z'
48
-
49
-#define ROBOT_CMD_OK_ANS                "O"
50
-#define ROBOT_CMD_ERR_ANS               "E"
51
-#define ROBOT_CMD_UNKNOW_ANS            "C"
52
-
53
-const string Robot::InvalidAnswerException = "Invalid answer exception";
54
-
55
-Robot::Robot() {
56
-
57
-}
58
-
59
-Robot::~Robot() {
60
-    this->Close();
61
-}
62
-
63
-char Robot::Open() {
64
-    return Serial::Open(DEFAULT_SERIAL_PORT,9600);
65
-}
66
-
67
-char Robot::Open(const char *path) {
68
-    return Serial::Open(path,9600);
69
-}
70
-
71
-char Robot::Close() {
72
-    return Serial::Close();
73
-}
74
-
75
-int Robot::GetLastCommandStatus() {
76
-    return this->lastCommandStatus;
77
-}
78
-
79
-void Robot::Ping() {
80
-#ifndef __STUB__
81
-    string ans;
82
-    SendCommand(string(1,ROBOT_CMD_PING), &ans);
83
-
84
-    CheckAnswer(ans);
85
-#else
86
-    return SUCCESS;
87
-#endif /* __STUB__ */
88
-}
89
-
90
-void Robot::Reset() {
91
-#ifndef __STUB__
92
-    string ans;
93
-    SendCommand(string(1,ROBOT_CMD_RESET), &ans);
94
-
95
-    CheckAnswer(ans);
96
-#else
97
-    return SUCCESS;
98
-#endif /* __STUB__ */
99
-}
100
-
101
-void Robot::StartWithoutWatchdog() {
102
-#ifndef __STUB__
103
-    string ans;
104
-    SendCommand(string(1,ROBOT_CMD_START_WITHOUT_WD), &ans);
105
-
106
-    CheckAnswer(ans);
107
-#else
108
-    return SUCCESS;
109
-#endif /* __STUB__ */
110
-}
111
-
112
-void Robot::StartWithWatchdog() {
113
-#ifndef __STUB__
114
-    string ans;
115
-    SendCommand(string(1,ROBOT_CMD_START_WITH_WD), &ans);
116
-
117
-    CheckAnswer(ans);
118
-#else
119
-    return SUCCESS;
120
-#endif /* __STUB__ */
121
-}
122
-
123
-void Robot::ResetWatchdog() {
124
-#ifndef __STUB__
125
-    string ans;
126
-    SendCommand(string(1,ROBOT_CMD_RELOAD_WD), &ans);
127
-
128
-    CheckAnswer(ans);
129
-#else
130
-    return SUCCESS;
131
-#endif /* __STUB__ */
132
-}
133
-
134
-void Robot::Move(int distance) {
135
-#ifndef __STUB__
136
-    string ans;
137
-    SendCommand(string(1,ROBOT_CMD_MOVE) + "="+to_string(distance), &ans);
138
-
139
-    CheckAnswer(ans);
140
-#else
141
-    return SUCCESS;
142
-#endif /* __STUB__ */
143
-}
144
-
145
-void Robot::Turn(int angle) {
146
-#ifndef __STUB__
147
-    string ans;
148
-    SendCommand(string(1,ROBOT_CMD_TURN) + "="+to_string(angle), &ans);
149
-
150
-    CheckAnswer(ans);
151
-#else
152
-    return SUCCESS;
153
-#endif /* __STUB__ */
154
-}
155
-
156
-void Robot::PowerOff() {
157
-#ifndef __STUB__
158
-    string ans;
159
-    SendCommand(string(1,ROBOT_CMD_POWER_OFF), &ans);
160
-
161
-    CheckAnswer(ans);
162
-#else
163
-    return SUCCESS;
164
-#endif /* __STUB__ */
165
-}
166
-
167
-char Robot::GetBatteryLevel() {
168
-#ifndef __STUB__
169
-    string ans;
170
-
171
-    SendCommand(string(1,ROBOT_CMD_GET_VBAT), &ans);
172
-    lastCommandStatus=SUCCESS;
173
-
174
-    if (ans.length()==1) {
175
-        if ((ans[0] != '2') && (ans[0] != '1') && (ans[0] != '0')) {
176
-            lastCommandStatus=INVALID_ANSWER;
177
-            throw (InvalidAnswerException + " raised in Robot::GetBatteryLevel. Invalid battery value (" + ans[0] +")\n");
178
-        }
179
-    } else {
180
-        lastCommandStatus=INVALID_ANSWER;
181
-        throw (InvalidAnswerException + " raised in Robot::GetBatteryLevel. Invalid answer length (" + to_string(ans.length())+")\n");
182
-    }
183
-
184
-    return ans[0];
185
-#else
186
-    return BATTERY_FULL;
187
-#endif /* __STUB__ */
188
-}
189
-
190
-string Robot::GetVersion() {
191
-#ifndef __STUB__
192
-    string ans;
193
-
194
-    SendCommand(string(1,ROBOT_CMD_GET_VERSION), &ans);
195
-    lastCommandStatus=SUCCESS;
196
-
197
-    if (ans.find("version")== string::npos) {
198
-        lastCommandStatus=INVALID_ANSWER;
199
-        throw (InvalidAnswerException + " raised in Robot::GetVersion. Invalid version (" + ans +")\n");
200
-    }
201
-
202
-    return ans;
203
-#else
204
-    return "1.3";
205
-#endif /* __STUB__ */
206
-}
207
-
208
-bool Robot::IsBusy() {
209
-#ifndef __STUB__
210
-    string ans;
211
-
212
-    SendCommand(string(1,ROBOT_CMD_IS_BUSY), &ans);
213
-    lastCommandStatus=SUCCESS;
214
-
215
-    if (ans.length()!=1) {
216
-        lastCommandStatus=INVALID_ANSWER;
217
-        throw (InvalidAnswerException + " raised in Robot::GetBatteryLevel. Invalid answer length (" + to_string(ans.length())+")\n");
218
-    }
219
-
220
-    if (ans[0]=='1')
221
-        return true;
222
-    else if (ans[0]=='0')
223
-        return false;
224
-    else {
225
-        lastCommandStatus=INVALID_ANSWER;
226
-        throw (InvalidAnswerException + " raised in Robot::IsBusy. Invalid value (" + ans[0] +")\n");
227
-    }
228
-#else
229
-    return false;
230
-#endif /* __STUB__ */
231
-}
232
-
233
-void Robot::CommunicationProlog() {}
234
-void Robot::CommunicationEpilog() {}
235
-
236
-/****************************/
237
-/* PRIVATE                  */
238
-/****************************/
239
-
240
-char Robot::SendCommand(string cmd, string *ans) {
241
-    string commandString;
242
-    commandString = this->AddChecksum(cmd);
243
-
244
-    this->CommunicationProlog(); // action avant le debut de la commande
245
-
246
-    ssize_t status = Send(commandString);
247
-
248
-    if (status == (ssize_t)commandString.length()) {
249
-        // Recuperation de la reponse
250
-        string commandResponse;
251
-        vector<char> endingChars;
252
-
253
-        endingChars.push_back('\r');
254
-        try {
255
-            commandResponse = Serial::Receive(endingChars,30);
256
-        } catch (string e) {
257
-            if (e.find("Timeout")!= string::npos)
258
-                lastCommandStatus= TIMEOUT_COMMAND;
259
-            else
260
-                lastCommandStatus=INVALID_ANSWER;
261
-
262
-            if (lastCommandStatus == TIMEOUT_COMMAND)
263
-                throw (Serial::TimeoutException + " raised in Robot::SendCommand. Timeout while receiving answer from robot.\n");
264
-            else
265
-                throw (e + " raised in Robot::SendCommand.\n");
266
-        }
267
-
268
-        this->CommunicationEpilog(); // Action a faire apres la commande
269
-
270
-        if (ValidateChecksum(&commandResponse, commandResponse)) {
271
-            ans->assign(commandResponse);
272
-        } else {
273
-            lastCommandStatus = INVALID_ANSWER;
274
-            throw InvalidAnswerException;
275
-        }
276
-
277
-        lastCommandStatus=SUCCESS;
278
-    } else {
279
-        lastCommandStatus=INVALID_COMMUNICATION_PORT;
280
-
281
-        throw IOErrorException;
282
-    }
283
-
284
-    return lastCommandStatus;
285
-}
286
-
287
-void Robot::CheckAnswer(string ans) {
288
-
289
-    if (ans.length()==1)
290
-    {
291
-        switch (ans.at(0)) {
292
-            case 'o':
293
-            case 'O':
294
-                lastCommandStatus=SUCCESS;
295
-                break;
296
-            case 'e':
297
-            case 'E':
298
-                lastCommandStatus=REJECTED_COMMAND;
299
-                break;
300
-            case 'c':
301
-            case 'C':
302
-                lastCommandStatus=INVALID_COMMAND;
303
-                break;
304
-            default:
305
-                lastCommandStatus = INVALID_ANSWER;
306
-                throw InvalidAnswerException;
307
-        }
308
-    } else {
309
-        lastCommandStatus = INVALID_ANSWER;
310
-        throw InvalidAnswerException;
311
-    }
312
-}
313
-
314
-string Robot::AddChecksum(string cmd) {
315
-    string commandWithChecksum(cmd);
316
-    char checksum=0;
317
-
318
-    commandWithChecksum.resize(cmd.length()+2, ' ');
319
-
320
-    for (size_t i=0; i<commandWithChecksum.length()-2; i++) {
321
-        checksum = checksum^commandWithChecksum.at(i);
322
-    }
323
-
324
-    commandWithChecksum.at(commandWithChecksum.length()-2) = checksum;
325
-    commandWithChecksum.at(commandWithChecksum.length()-1) = '\r';
326
-
327
-    return commandWithChecksum;
328
-}
329
-
330
-bool Robot::ValidateChecksum(string *answerWithoutChecksum, string answer) {
331
-    string localAnswer(answer, 0, answer.length()-1); // recopie de la chaine initiale, sans le dernier caractere (checksum)
332
-    char checksum=0;
333
-    bool status=false;
334
-
335
-    if (answer.length()<2) // trop court pour contenir un checksum
336
-        throw InvalidAnswerException;
337
-    else {
338
-        for (size_t i=0; i< answer.length()-1; i++) {
339
-            checksum = checksum^answer.at(i);
340
-        }
341
-
342
-        if (answer.at(answer.length()-1) == checksum) {
343
-            status=true;
344
-        }
345
-    }
346
-
347
-    answerWithoutChecksum->assign(localAnswer);
348
-    return status;
349
-}

+ 0
- 164
software/raspberry/superviseur-robot/lib/src/Serial.cpp View File

@@ -1,164 +0,0 @@
1
-/*******************************************************************************
2
- * Copyright (c) 2018 INSA - GEI, Toulouse, France.
3
- * All rights reserved. This program and the accompanying materials
4
- * are made available "AS IS", without any warranty of any kind.
5
- *
6
- * INSA assumes no responsibility for errors or omissions in the 
7
- * software or documentation available. 
8
- *
9
- * Part of code Copyright ST Microelectronics.
10
- *
11
- * Contributors:
12
- *     Lucien Senaneuch - Initial API and implementation
13
- *     Sebastien DI MERCURIO - Maintainer since Octobre 2018
14
- *******************************************************************************/
15
-
16
-#include <Serial.h>
17
-#include <unistd.h>
18
-#include <fcntl.h>
19
-#include <termios.h>
20
-
21
-#include <stdlib.h>
22
-
23
-#include <algorithm>
24
-
25
-const string Serial::TimeoutException = "Timeout exception";
26
-const string Serial::IOErrorException = "IO error exception";
27
-const string Serial::BufferOverflowException = "Buffer overflow exception";
28
-
29
-Serial::Serial() {
30
-    this->serialPortDescriptor=-1;
31
-}
32
-
33
-Serial::~Serial() {
34
-    this->Close();
35
-}
36
-
37
-char Serial::Open(void) {
38
-    return this->Open(DEFAULT_SERIAL_PORT, DEFAULT_BAUDRATE);
39
-}
40
-
41
-char Serial::Open(int baudrate) {
42
-    return this->Open(DEFAULT_SERIAL_PORT, baudrate);
43
-}
44
-
45
-char Serial::Open(const char *path, int baudrate) {
46
-#ifndef __STUB__
47
-    struct termios options;
48
-
49
-    if (this->IsOpen() == true) return COMMUNICATION_PORT_ALREADY_OPENED;
50
-
51
-    this->serialPortDescriptor = open(path, O_RDWR | O_NOCTTY | O_NDELAY);
52
-
53
-    if(this->serialPortDescriptor >= 0) {
54
-        fcntl(this->serialPortDescriptor, F_SETFL, 0);
55
-        tcgetattr(this->serialPortDescriptor, &options);
56
-        options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
57
-        cfsetospeed (&options, this->SetBaudrate(baudrate));
58
-        cfsetispeed (&options, this->SetBaudrate(baudrate));
59
-        options.c_cc[VMIN]=0;
60
-        options.c_cc[VTIME]=10;
61
-        tcsetattr(this->serialPortDescriptor, TCSANOW, &options);
62
-
63
-        return SUCCESS;
64
-    }
65
-    else {
66
-        std::cerr << "[Robot::Open] Can't open port " << path;
67
-        return INVALID_COMMUNICATION_PORT;
68
-    }
69
-#else
70
-    return SUCCESS;
71
-#endif
72
-}
73
-
74
-char Serial::Close(void) {
75
-#ifndef __STUB__
76
-    if (this->serialPortDescriptor<0) {
77
-        if (close(this->serialPortDescriptor) == 0)
78
-            return SUCCESS;
79
-        else return INVALID_COMMUNICATION_PORT;
80
-    } else return SUCCESS;
81
-#else
82
-    return SUCCESS;
83
-#endif
84
-}
85
-
86
-bool Serial::IsOpen() {
87
-    if(this->serialPortDescriptor >= 0)
88
-        return true;
89
-    else
90
-        return false;
91
-}
92
-
93
-ssize_t Serial::Send(string mes) {
94
-    ssize_t n;
95
-
96
-    n=write(this->serialPortDescriptor, (void*)mes.c_str(), mes.length());
97
-
98
-    if (n< (ssize_t)mes.length())
99
-        throw (IOErrorException + " raised in Serial::Send. Requested to send " + to_string(mes.length()) + " characters, sent only " + to_string(n) +"\n");
100
-    else
101
-        return n;
102
-}
103
-
104
-string Serial::Receive(int size) {
105
-    string mes;
106
-
107
-    while(mes.length() < (unsigned int)size){
108
-        mes += this->GetChar();
109
-    }
110
-
111
-    return mes;
112
-}
113
-
114
-string Serial::Receive(vector<char> endingChars,int maxLength) {
115
-    string mes;
116
-    char c;
117
-
118
-    bool characterFound = false;
119
-
120
-    do {
121
-        c= GetChar();
122
-
123
-        if (std::find(endingChars.begin(), endingChars.end(), c)!=endingChars.end()) //recherche du caractere dans la liste des caractere de fin
124
-            characterFound=true;
125
-        else {
126
-            mes += c;
127
-        }
128
-    } while ((mes.length()<(unsigned int)maxLength) && (characterFound==false));
129
-
130
-    if (mes.length()>=(unsigned int)maxLength) {
131
-        throw (BufferOverflowException + " raised in Serial::Receive. Received data exceed " + to_string(maxLength) + "chars\n");
132
-    }
133
-
134
-    return mes;
135
-}
136
-
137
-int Serial::SetBaudrate(int baudrate) {
138
-    switch(baudrate){
139
-        case 4800:
140
-            return baudrate = B4800;
141
-        case 9600:
142
-            return baudrate = B9600;
143
-        case 38400:
144
-            return baudrate = B38400;
145
-        case 57600:
146
-            return baudrate = B57600;
147
-        case 115200:
148
-            return baudrate = B115200;
149
-        default:
150
-            std::cerr << "Baudrate not supported" << std::endl;
151
-            return -1;
152
-    }
153
-}
154
-
155
-char Serial::GetChar() {
156
-    char c;
157
-
158
-    if (read(this->serialPortDescriptor, &c, 1) > 0)
159
-        return c;
160
-    else
161
-        throw (TimeoutException + " raised in Serial::GetChar\n");
162
-}
163
-
164
-

+ 0
- 93
software/raspberry/superviseur-robot/lib/src/TcpServer.cpp View File

@@ -1,93 +0,0 @@
1
-/*******************************************************************************
2
- * Copyright (c) 2018 INSA - GEI, Toulouse, France.
3
- * All rights reserved. This program and the accompanying materials
4
- * are made available "AS IS", without any warranty of any kind.
5
- *
6
- * INSA assumes no responsibility for errors or omissions in the 
7
- * software or documentation available. 
8
- *
9
- * Part of code Copyright ST Microelectronics.
10
- *
11
- * Contributors:
12
- *     Lucien Senaneuch - Initial API and implementation
13
- *     Sebastien DI MERCURIO - Maintainer since Octobre 2018
14
- *******************************************************************************/
15
-
16
-
17
-#include "TcpServer.h"
18
-#include <netinet/in.h>
19
-#include <zconf.h>
20
-#include <vector>
21
-
22
-TcpServer::TcpServer() {
23
-    this->socketFD = -1;
24
-    this->socketClients.clear();
25
-}
26
-
27
-int TcpServer::Listen (int port) {
28
-    struct sockaddr_in server;
29
-
30
-    this->socketFD = socket(AF_INET, SOCK_STREAM, 0);
31
-    if(this->socketFD < 0){
32
-        throw invalid_argument("Can not create socket");
33
-    }
34
-
35
-    server.sin_addr.s_addr = INADDR_ANY;
36
-    server.sin_family = AF_INET;
37
-    server.sin_port = htons(port);
38
-
39
-    if(bind(this->socketFD, (struct sockaddr *) &server, sizeof(server)) < 0) {
40
-        throw invalid_argument("Can not bind socket");
41
-    }
42
-
43
-    listen(this->socketFD , NB_CONNECTION_MAX);
44
-
45
-    return this->socketFD;
46
-}
47
-
48
-int TcpServer::AcceptClient() {
49
-    struct sockaddr_in client;
50
-    int c = sizeof(struct sockaddr_in);
51
-
52
-    int fd = accept(this->socketFD,(struct sockaddr *) &client, (socklen_t*)&c);
53
-
54
-    if (fd >=0 )
55
-        this->socketClients.push_back(fd);
56
-    else throw invalid_argument("Accept failed in TcpServer::AcceptClient");
57
-
58
-    return fd;
59
-}
60
-
61
-int TcpServer::Send(int client, string mes) {
62
-    return write(client, mes.c_str(), mes.size());
63
-}
64
-
65
-string TcpServer::Receive(int client_fd, int size){
66
-    char tab[size];
67
-
68
-    if(recv(client_fd,tab,size,0) >0) {
69
-        tab[size] = 0;
70
-        return string(tab);
71
-    } else
72
-        return string();
73
-}
74
-
75
-int TcpServer::Broadcast(string mes) {
76
-    for (int socket : this->socketClients) {
77
-        int err = write(socket, mes.c_str(), mes.size());
78
-    }
79
-
80
-    return 0;
81
-}
82
-
83
-const vector<int> &TcpServer::getSocketClients() const {
84
-    return socketClients;
85
-}
86
-
87
-void TcpServer::SetSocketClients(const std::vector<int> &socketClients) {
88
-    this->socketClients = socketClients;
89
-}
90
-
91
-TcpServer::~TcpServer() {
92
-    close(this->socketFD);
93
-}

+ 1
- 1
software/raspberry/superviseur-robot/lib/src/message.cpp View File

@@ -25,5 +25,5 @@ void free_msgToMon_data(MessageToMon *msg) {
25 25
 
26 26
 void print_msgToMon(MessageToMon *msg) {
27 27
     printf("header: %s\n", msg->header);
28
-    printf("data: %s\n", msg->data);
28
+    printf("data: %s\n", (char*)msg->data);
29 29
 }

+ 1
- 1
software/raspberry/superviseur-robot/lib/src/monitor.cpp View File

@@ -102,7 +102,7 @@ int send_message_to_monitor(const char* typeMessage, const void * data) {
102 102
         serverSend("TRAME", 5);
103 103
         return 0;
104 104
     } else if ((string) typeMessage == HEADER_STM_POS) {
105
-        char buffer[20];
105
+        char buffer[400];
106 106
         Position * maPosition = (Position*) data;
107 107
         sprintf(buffer, "POScenter: %3d;%3d | %.1fTRAME", maPosition->center.x, maPosition->center.y, maPosition->angle);
108 108
         serverSend(buffer, strlen(buffer));

+ 236
- 0
software/raspberry/superviseur-robot/lib/src/robot.cpp View File

@@ -0,0 +1,236 @@
1
+/**
2
+ * \file      robot.cpp
3
+ * \author    L.Senaneuch
4
+ * \version   1.0
5
+ * \date      06/06/2017
6
+ * \brief     Fonction permettant la communication avec le robot.
7
+ *
8
+ * \details   Ce fichier regroupe des fonctions facilitant la communication avec le robot en utilisant le port serie USART
9
+ */
10
+
11
+#include "robot.h"
12
+
13
+int fd;
14
+
15
+int getChar(char * c);
16
+int readSerial(char * msg);
17
+char checkSumGO(char * msg);
18
+int receiveMsg(void);
19
+int sendCmd(char cmd, const char * arg);
20
+
21
+int open_communication_robot(const char * path)
22
+{
23
+#ifndef __STUB__
24
+    struct termios options;
25
+    fd = open(path, O_RDWR | O_NOCTTY | O_NDELAY);
26
+    if(fd !=-1)
27
+    {
28
+        fcntl(fd, F_SETFL, 0);
29
+        tcgetattr(fd, &options);
30
+        options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
31
+        cfsetospeed (&options, B9600);
32
+        cfsetispeed (&options, B9600);
33
+        options.c_cc[VMIN]=0;
34
+        options.c_cc[VTIME]=0;
35
+        tcsetattr(fd, TCSANOW, &options);
36
+        return 0;
37
+    }
38
+    else
39
+    {
40
+        perror("can't openSerial");
41
+        return -1;
42
+    }
43
+#else
44
+    return 0;
45
+#endif
46
+}
47
+
48
+
49
+int close_communication_robot(void)
50
+{
51
+#ifndef __STUB__
52
+    return close(fd);
53
+#else
54
+    return 0;
55
+#endif
56
+}
57
+
58
+
59
+int send_command_to_robot(char cmd, const char * arg)
60
+{
61
+#ifndef __STUB__
62
+    sendCmd(cmd,arg);
63
+    // TODO : check return from sendCmd
64
+    return receiveMsg();
65
+#else
66
+    int reponse;
67
+    switch(cmd)
68
+    {
69
+        case DMB_PING:
70
+            reponse = 0;
71
+            break;
72
+        case DMB_IDLE:
73
+            reponse = 0;
74
+            break;
75
+        case DMB_START_WITH_WD:
76
+            reponse = 0;
77
+            break;
78
+        case DMB_RELOAD_WD:
79
+            reponse = 0;
80
+            break;
81
+        case DMB_GET_VBAT:
82
+            reponse = 2;
83
+            break;
84
+        case DMB_IS_BUSY:
85
+            reponse = 1;
86
+            break;
87
+        case DMB_START_WITHOUT_WD:
88
+            reponse = 0;
89
+            break;
90
+        case DMB_MOVE:
91
+            reponse = 0;
92
+            break;
93
+        case DMB_TURN:
94
+            reponse = 0;
95
+            break;
96
+        case DMB_GO_FORWARD:
97
+            reponse = 0;
98
+            break;
99
+        case DMB_GO_BACK:
100
+            reponse = 0;
101
+            break;
102
+        case DMB_GO_LEFT:
103
+            reponse = 0;
104
+            break;
105
+        case DMB_GO_RIGHT:
106
+            reponse = 0;
107
+            break;
108
+        case DMB_STOP_MOVE:
109
+            reponse = 0;
110
+            break;
111
+        default:
112
+            reponse = 0;
113
+            break;
114
+    }
115
+    return reponse;
116
+#endif
117
+}
118
+
119
+/****************************/
120
+/* PRIVATE                  */
121
+/****************************/
122
+
123
+int sendCmd(char cmd, const char * arg)
124
+{
125
+    char cmdWithArg[20]={};
126
+    cmdWithArg[0]=cmd;
127
+    switch(cmd)
128
+    {
129
+        case DMB_GO_FORWARD: strcpy(cmdWithArg,"M=+64000");
130
+            break;
131
+        case DMB_GO_BACK:    strcpy(cmdWithArg,"M=-64000");
132
+            break;
133
+        case DMB_GO_LEFT:  strcpy(cmdWithArg,"T=+64000");
134
+            break;
135
+        case DMB_GO_RIGHT: strcpy(cmdWithArg,"T=-64000");
136
+            break;
137
+        case DMB_STOP_MOVE:  strcpy(cmdWithArg,"M=0");
138
+            break;
139
+        case DMB_MOVE:   strcat(cmdWithArg,"=");
140
+            strcat(cmdWithArg,arg);
141
+            break;
142
+        case DMB_TURN:   strcat(cmdWithArg,"=");
143
+            strcat(cmdWithArg,arg);
144
+            break;
145
+    }
146
+    int sizeCmd = strlen(cmdWithArg);
147
+    cmdWithArg[sizeCmd] = checkSumGO(cmdWithArg);
148
+    cmdWithArg[sizeCmd+1] = '\r';
149
+    cmdWithArg[sizeCmd+2] = '\0';
150
+    return write(fd,cmdWithArg,strlen(cmdWithArg));
151
+}
152
+
153
+int receiveMsg(void)
154
+{
155
+    char msg[20];
156
+    int b;
157
+    if((b = readSerial(msg))!=ROBOT_TIMED_OUT)
158
+    {
159
+        int taille = strlen(msg);
160
+        char checksum = msg[taille-2];
161
+        msg[taille-1] = 0;
162
+        msg[taille-2] = 0;
163
+        if(checksum!=checkSumGO(msg))
164
+        {
165
+            return ROBOT_CHECKSUM;
166
+        }
167
+        else
168
+        {
169
+            switch(msg[0])
170
+            {
171
+                case 'O' : return 0;
172
+                case 'E' : return ROBOT_ERROR;
173
+                case 'C' : return ROBOT_UKNOWN_CMD;
174
+                default :  return atoi(&msg[0]);
175
+            }
176
+        }
177
+    }
178
+    else
179
+    {
180
+        return ROBOT_TIMED_OUT;
181
+    }
182
+}
183
+
184
+int getChar(char * c)
185
+{
186
+    int n =0;
187
+    int delay =0;
188
+    while((n=read(fd,c,1)) <=0)
189
+    {
190
+        usleep(5000);
191
+        delay++;
192
+        if(delay > 10)
193
+        {
194
+            return ROBOT_TIMED_OUT;
195
+        }
196
+
197
+    }
198
+    return n;
199
+}
200
+
201
+int readSerial(char * msg)
202
+{
203
+    char car=0;
204
+    int i=0;
205
+    for(int j = 0 ; j < 20 ; j++)
206
+        msg[j]=0;
207
+    
208
+    while(car !='\r' && car!='\n') {
209
+        if(i>=20) 
210
+            return -5;
211
+
212
+        if(getChar(&car)==ROBOT_TIMED_OUT) {
213
+            return ROBOT_TIMED_OUT;
214
+        }
215
+        
216
+        msg[i] = car;
217
+        i++;
218
+    }
219
+    return i;
220
+}
221
+
222
+char checkSumGO(char * msg)
223
+{
224
+    char resultat = 0;
225
+    int i = 0;
226
+    int taille = strlen(msg);
227
+    for(i=0;i<taille;i++)
228
+    {
229
+        resultat^=msg[i];
230
+    }
231
+    return resultat;
232
+
233
+}
234
+
235
+
236
+

+ 116
- 0
software/raspberry/superviseur-robot/nbproject/configurations.xml View File

@@ -0,0 +1,116 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<configurationDescriptor version="100">
3
+  <logicalFolder name="root" displayName="root" projectFiles="true" kind="ROOT">
4
+    <df root="." name="0">
5
+      <df name="lib">
6
+        <df name="src">
7
+          <in>image.cpp</in>
8
+          <in>message.cpp</in>
9
+          <in>monitor.cpp</in>
10
+          <in>robot.cpp</in>
11
+        </df>
12
+      </df>
13
+      <df name="superviseur">
14
+        <df name="src">
15
+          <in>functions.cpp</in>
16
+          <in>main.cpp</in>
17
+        </df>
18
+        <in>.gitignore</in>
19
+      </df>
20
+    </df>
21
+    <logicalFolder name="ExternalFiles"
22
+                   displayName="Important Files"
23
+                   projectFiles="false"
24
+                   kind="IMPORTANT_FILES_FOLDER">
25
+      <itemPath>CMakeLists.txt</itemPath>
26
+      <itemPath>Makefile</itemPath>
27
+      <itemPath>nbproject/private/launcher.properties</itemPath>
28
+    </logicalFolder>
29
+  </logicalFolder>
30
+  <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>
31
+  <sourceRootList>
32
+    <Elem>.</Elem>
33
+  </sourceRootList>
34
+  <projectmakefile>Makefile</projectmakefile>
35
+  <confs>
36
+    <conf name="Default" type="0">
37
+      <toolsSet>
38
+        <compilerSet>default</compilerSet>
39
+        <dependencyChecking>false</dependencyChecking>
40
+        <rebuildPropChanged>false</rebuildPropChanged>
41
+      </toolsSet>
42
+      <flagsDictionary>
43
+        <element flagsID="0" commonFlags="-std=gnu++11"/>
44
+      </flagsDictionary>
45
+      <codeAssistance>
46
+      </codeAssistance>
47
+      <makefileType>
48
+        <makeTool>
49
+          <buildCommandWorkingDir>.</buildCommandWorkingDir>
50
+          <buildCommand>${MAKE} -f Makefile</buildCommand>
51
+          <cleanCommand>${MAKE} -f Makefile clean</cleanCommand>
52
+          <executablePath></executablePath>
53
+          <ccTool>
54
+            <preprocessorList>
55
+              <Elem>_GNU_SOURCE</Elem>
56
+              <Elem>_REENTRANT</Elem>
57
+              <Elem>__MERCURY__</Elem>
58
+            </preprocessorList>
59
+          </ccTool>
60
+        </makeTool>
61
+        <preBuild>
62
+          <preBuildCommandWorkingDir>.</preBuildCommandWorkingDir>
63
+          <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>
64
+        </preBuild>
65
+      </makefileType>
66
+      <folder path="0/lib">
67
+        <ccTool>
68
+          <incDir>
69
+            <pElem>lib</pElem>
70
+            <pElem>/usr/xenomai/include/mercury</pElem>
71
+            <pElem>/usr/xenomai/include</pElem>
72
+            <pElem>/usr/xenomai/include/alchemy</pElem>
73
+          </incDir>
74
+        </ccTool>
75
+      </folder>
76
+      <folder path="0/superviseur">
77
+        <ccTool>
78
+          <incDir>
79
+            <pElem>superviseur/src</pElem>
80
+            <pElem>lib</pElem>
81
+            <pElem>/usr/xenomai/include</pElem>
82
+            <pElem>/usr/xenomai/include/mercury</pElem>
83
+            <pElem>/usr/xenomai/include/alchemy</pElem>
84
+            <pElem>superviseur</pElem>
85
+          </incDir>
86
+        </ccTool>
87
+      </folder>
88
+      <item path="lib/src/image.cpp" ex="false" tool="1" flavor2="8">
89
+        <ccTool flags="0">
90
+        </ccTool>
91
+      </item>
92
+      <item path="lib/src/message.cpp" ex="false" tool="1" flavor2="8">
93
+        <ccTool flags="0">
94
+        </ccTool>
95
+      </item>
96
+      <item path="lib/src/monitor.cpp" ex="false" tool="1" flavor2="8">
97
+        <ccTool flags="0">
98
+        </ccTool>
99
+      </item>
100
+      <item path="lib/src/robot.cpp" ex="false" tool="1" flavor2="8">
101
+        <ccTool flags="0">
102
+        </ccTool>
103
+      </item>
104
+      <item path="superviseur/.gitignore" ex="false" tool="3" flavor2="0">
105
+      </item>
106
+      <item path="superviseur/src/functions.cpp" ex="false" tool="1" flavor2="8">
107
+        <ccTool flags="0">
108
+        </ccTool>
109
+      </item>
110
+      <item path="superviseur/src/main.cpp" ex="false" tool="1" flavor2="8">
111
+        <ccTool flags="0">
112
+        </ccTool>
113
+      </item>
114
+    </conf>
115
+  </confs>
116
+</configurationDescriptor>

+ 26
- 0
software/raspberry/superviseur-robot/nbproject/project.xml View File

@@ -0,0 +1,26 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://www.netbeans.org/ns/project/1">
3
+    <type>org.netbeans.modules.cnd.makeproject</type>
4
+    <configuration>
5
+        <data xmlns="http://www.netbeans.org/ns/make-project/1">
6
+            <name>superviseur-robot</name>
7
+            <c-extensions/>
8
+            <cpp-extensions>cpp,cxx</cpp-extensions>
9
+            <header-extensions>h</header-extensions>
10
+            <sourceEncoding>UTF-8</sourceEncoding>
11
+            <make-dep-projects/>
12
+            <sourceRootList>
13
+                <sourceRootElem>.</sourceRootElem>
14
+            </sourceRootList>
15
+            <confList>
16
+                <confElem>
17
+                    <name>Default</name>
18
+                    <type>0</type>
19
+                </confElem>
20
+            </confList>
21
+            <formatting>
22
+                <project-formatting-style>false</project-formatting-style>
23
+            </formatting>
24
+        </data>
25
+    </configuration>
26
+</project>

+ 9
- 0
software/raspberry/superviseur-robot/superviseur-pthread/CMakeLists.txt View File

@@ -0,0 +1,9 @@
1
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../superviseur-pthread/bin)
2
+
3
+set(superviseur_pthread_FILES ./src/Program.cpp src/Tasks.cpp)
4
+
5
+include_directories(./src ../lib)
6
+
7
+add_executable(superviseur-pthread ${superviseur_pthread_FILES})
8
+target_link_libraries(superviseur-pthread destijl pthread rt)
9
+

BIN
software/raspberry/superviseur-robot/superviseur-pthread/bin/monitor View File


BIN
software/raspberry/superviseur-robot/superviseur-pthread/bin/superviseur-pthread View File


+ 273
- 0
software/raspberry/superviseur-robot/superviseur-pthread/src/Program.cpp View File

@@ -0,0 +1,273 @@
1
+/* 
2
+ * File:   Program.c
3
+ * Author: dimercur
4
+ *
5
+ * Created on 23 octobre 2018, 19:45
6
+ */
7
+
8
+#include <stdio.h>
9
+#include <stdlib.h>
10
+#include <unistd.h>
11
+#include <iostream>
12
+#include <string>
13
+
14
+#include <sys/mman.h>
15
+
16
+#include <pthread.h>
17
+#include <semaphore.h>
18
+#include <mqueue.h>
19
+#include <sched.h>
20
+
21
+#include "Tasks.h"
22
+
23
+using namespace std;
24
+
25
+class Program {
26
+public:
27
+// Déclaration des handleurs de tache
28
+    pthread_t th_server;
29
+    pthread_t th_sendToMon;
30
+    pthread_t th_receiveFromMon;
31
+    pthread_t th_openComRobot;
32
+    pthread_t th_startRobot;
33
+    pthread_t th_move;
34
+
35
+// Déclaration des priorités des taches
36
+    int PRIORITY_TSERVER = 30;
37
+    int PRIORITY_TOPENCOMROBOT = 20;
38
+    int PRIORITY_TMOVE = 10;
39
+    int PRIORITY_TSENDTOMON = 25;
40
+    int PRIORITY_TRECEIVEFROMMON = 22;
41
+    int PRIORITY_TSTARTROBOT = 20;
42
+
43
+// Declaration de mutex
44
+    pthread_mutex_t mutex_robotStarted;
45
+    pthread_mutex_t mutex_move;
46
+
47
+//declaration de semaphores
48
+    sem_t sem_barrier;
49
+    sem_t sem_openComRobot;
50
+    sem_t sem_serverOk;
51
+    sem_t sem_startRobot;
52
+
53
+// Déclaration des files de message
54
+    mqd_t q_messageToMon;
55
+    struct mq_attr q_messageToMonAttr;
56
+
57
+    int MSG_QUEUE_SIZE = 10;
58
+
59
+// Déclaration des ressources partagées
60
+    int etatCommMoniteur = 1;
61
+    int robotStarted = 0;
62
+
63
+    Program();
64
+    virtual ~Program();
65
+
66
+/**
67
+ * \fn void initStruct(void)
68
+ * \brief Initialisation des structures de l'application (tâches, mutex, 
69
+ * semaphore, etc.)
70
+ */
71
+    void initStruct(void);
72
+
73
+/**
74
+ * \fn void startTasks(void)
75
+ * \brief Démarrage des tâches
76
+ */
77
+    void startTasks(void);
78
+
79
+/**
80
+ * \fn void deleteTasks(void)
81
+ * \brief Arrêt des tâches
82
+ */
83
+    void deleteTasks(void);
84
+
85
+    /**
86
+     * \fn int run(void)
87
+     * \brief execute program
88
+     */
89
+    int run(void);
90
+};
91
+
92
+int main(int argc, char **argv) {
93
+    int err;
94
+    Program myProg;
95
+    TcpServer server;
96
+
97
+    Tasks::messages.SetServer(&server);
98
+
99
+    //Lock the memory to avoid memory swapping for this program
100
+    mlockall(MCL_CURRENT | MCL_FUTURE);
101
+
102
+    printf("#################################\n");
103
+    printf("#      DE STIJL PROJECT         #\n");
104
+    printf("#################################\n");
105
+
106
+    return myProg.run();
107
+}
108
+
109
+Program::Program() {}
110
+Program::~Program() {}
111
+
112
+int Program::run(void) {
113
+
114
+    this->initStruct();
115
+    this->startTasks();
116
+    //sem_post(&sem_barrier);
117
+    pause();
118
+    this->deleteTasks();
119
+}
120
+
121
+void Program::initStruct(void) {
122
+
123
+    int err;
124
+
125
+    /* Creation des mutex */
126
+    mutex_robotStarted=PTHREAD_MUTEX_INITIALIZER;
127
+    mutex_move=PTHREAD_MUTEX_INITIALIZER;
128
+
129
+    /* Creation du semaphore */
130
+    if (sem_init(&sem_barrier, 0, 0) == -1) {
131
+        printf("Error semaphore create: %s\n", strerror(-err));
132
+        exit(EXIT_FAILURE);
133
+    }
134
+
135
+    if (sem_init(&sem_openComRobot, 0, 0) == -1) {
136
+        printf("Error semaphore create: %s\n", strerror(-err));
137
+        exit(EXIT_FAILURE);
138
+    }
139
+
140
+    if (sem_init(&sem_serverOk, 0, 0) == -1) {
141
+        printf("Error semaphore create: %s\n", strerror(-err));
142
+        exit(EXIT_FAILURE);
143
+    }
144
+
145
+    if (sem_init(&sem_startRobot, 0, 0) == -1) {
146
+        printf("Error semaphore create: %s\n", strerror(-err));
147
+        exit(EXIT_FAILURE);
148
+    }
149
+
150
+    /* Sous pthread, les taches sont executées dés leur creation
151
+     * la creation des taches se fait donc dans startTask */
152
+
153
+    /* Creation des files de messages */
154
+    q_messageToMonAttr.mq_flags = 0;
155
+    q_messageToMonAttr.mq_maxmsg = 10;
156
+    q_messageToMonAttr.mq_msgsize = 200;
157
+    q_messageToMonAttr.mq_curmsgs = 0;
158
+
159
+    q_messageToMon = mq_open("MessageToMon", O_CREAT | O_RDWR, 0644, &q_messageToMonAttr);
160
+    if((mqd_t)-1 != q_messageToMon){
161
+        printf("Error msg queue create: %s\n", strerror(-err));
162
+        exit(EXIT_FAILURE);
163
+    }
164
+
165
+//    if (err = rt_queue_create(&q_messageToMon, "toto", MSG_QUEUE_SIZE * sizeof (MessageToRobot), MSG_QUEUE_SIZE, Q_FIFO)) {
166
+//        printf("Error msg queue create: %s\n", strerror(-err));
167
+//        exit(EXIT_FAILURE);
168
+//    }
169
+}
170
+
171
+void Program::startTasks() {
172
+
173
+    int err;
174
+    pthread_attr_t tattr;
175
+    pthread_t tid;
176
+    int ret;
177
+    sched_param param;
178
+
179
+    /* initialized with default attributes */
180
+    ret = pthread_attr_init (&tattr);
181
+
182
+    /* safe to get existing scheduling param */
183
+    ret = pthread_attr_getschedparam (&tattr, &param);
184
+
185
+    /* set the priority; others are unchanged */
186
+    param.sched_priority = PRIORITY_TSTARTROBOT;
187
+
188
+    /* setting the new scheduling param */
189
+    ret = pthread_attr_setschedparam (&tattr, &param);
190
+
191
+    /* Creation des taches */
192
+
193
+    if ((err = pthread_create(&th_startRobot, &tattr, (void* (*)(void*))Tasks::f_startRobot, NULL))) {
194
+        printf("Error task create: %s\n", strerror(-err));
195
+        exit(EXIT_FAILURE);
196
+    }
197
+
198
+    /* safe to get existing scheduling param */
199
+    ret = pthread_attr_getschedparam (&tattr, &param);
200
+
201
+    /* set the priority; others are unchanged */
202
+    param.sched_priority = PRIORITY_TRECEIVEFROMMON;
203
+
204
+    /* setting the new scheduling param */
205
+    ret = pthread_attr_setschedparam (&tattr, &param);
206
+
207
+    if ((err = pthread_create(&th_receiveFromMon, &tattr, (void* (*)(void*))Tasks::f_receiveFromMon, NULL))) {
208
+        printf("Error task create: %s\n", strerror(-err));
209
+        exit(EXIT_FAILURE);
210
+    }
211
+
212
+    /* safe to get existing scheduling param */
213
+    ret = pthread_attr_getschedparam (&tattr, &param);
214
+
215
+    /* set the priority; others are unchanged */
216
+    param.sched_priority = PRIORITY_TSENDTOMON;
217
+
218
+    /* setting the new scheduling param */
219
+    ret = pthread_attr_setschedparam (&tattr, &param);
220
+
221
+    if ((err = pthread_create(&th_sendToMon, &tattr, (void* (*)(void*))Tasks::f_sendToMon, NULL))) {
222
+        printf("Error task create: %s\n", strerror(-err));
223
+        exit(EXIT_FAILURE);
224
+    }
225
+
226
+    /* safe to get existing scheduling param */
227
+    ret = pthread_attr_getschedparam (&tattr, &param);
228
+
229
+    /* set the priority; others are unchanged */
230
+    param.sched_priority = PRIORITY_TOPENCOMROBOT;
231
+
232
+    /* setting the new scheduling param */
233
+    ret = pthread_attr_setschedparam (&tattr, &param);
234
+
235
+    if ((err = pthread_create(&th_openComRobot, &tattr, (void* (*)(void*))Tasks::f_openComRobot, NULL))) {
236
+        printf("Error task create: %s\n", strerror(-err));
237
+        exit(EXIT_FAILURE);
238
+    }
239
+
240
+    /* safe to get existing scheduling param */
241
+    ret = pthread_attr_getschedparam (&tattr, &param);
242
+
243
+    /* set the priority; others are unchanged */
244
+    param.sched_priority = PRIORITY_TMOVE;
245
+
246
+    /* setting the new scheduling param */
247
+    ret = pthread_attr_setschedparam (&tattr, &param);
248
+
249
+    if ((err = pthread_create(&th_move, &tattr, (void* (*)(void*))Tasks::f_move, NULL)))  {
250
+        printf("Error task create: %s\n", strerror(-err));
251
+        exit(EXIT_FAILURE);
252
+    }
253
+
254
+    /* safe to get existing scheduling param */
255
+    ret = pthread_attr_getschedparam (&tattr, &param);
256
+
257
+    /* set the priority; others are unchanged */
258
+    param.sched_priority = PRIORITY_TSERVER;
259
+
260
+    /* setting the new scheduling param */
261
+    ret = pthread_attr_setschedparam (&tattr, &param);
262
+
263
+    if ((err = pthread_create(&th_server, &tattr, (void* (*)(void*))Tasks::f_server, NULL))) {
264
+        printf("Error task create: %s\n", strerror(-err));
265
+        exit(EXIT_FAILURE);
266
+    }
267
+}
268
+
269
+void Program::deleteTasks() {
270
+    pthread_cancel(th_server);
271
+    pthread_cancel(th_openComRobot);
272
+    pthread_cancel(th_move);
273
+}

+ 246
- 0
software/raspberry/superviseur-robot/superviseur-pthread/src/Tasks.cpp View File

@@ -0,0 +1,246 @@
1
+#include <stdio.h>
2
+#include <stdlib.h>
3
+#include <unistd.h>
4
+
5
+#include <iostream>
6
+#include <string>
7
+
8
+#include <pthread.h>
9
+#include <semaphore.h>
10
+#include <mqueue.h>
11
+#include <sched.h>
12
+
13
+#include <Robot.h>
14
+#include <Camera.h>
15
+#include <Image.h>
16
+#include <TcpServer.h>
17
+#include <MsgManager.h>
18
+
19
+//#include "../../lib/Robot.h"
20
+//#include "../../lib/Camera.h"
21
+//#include "../../lib/Image.h"
22
+//#include "../../lib/TcpServer.h"
23
+
24
+#include "Tasks.h"
25
+
26
+void Tasks::f_server(void *arg) {
27
+//    int err;
28
+//    /* INIT */
29
+//    RT_TASK_INFO info;
30
+//    rt_task_inquire(NULL, &info);
31
+//    printf("Init %s\n", info.name);
32
+//    rt_sem_p(&sem_barrier, TM_INFINITE);
33
+//
34
+//    err = run_nodejs("/usr/local/bin/node", "/home/pi/Interface_Robot/server.js");
35
+//
36
+//    if (err < 0) {
37
+//        printf("Failed to start nodejs: %s\n", strerror(-err));
38
+//        exit(EXIT_FAILURE);
39
+//    } else {
40
+//#ifdef _WITH_TRACE_
41
+//        printf("%s: nodejs started\n", info.name);
42
+//#endif
43
+//        open_server();
44
+//        rt_sem_broadcast(&sem_serverOk);
45
+//    }
46
+}
47
+
48
+void Tasks::f_sendToMon(void * arg) {
49
+//    int err;
50
+//    MessageToMon msg;
51
+//
52
+//    /* INIT */
53
+//    RT_TASK_INFO info;
54
+//    rt_task_inquire(NULL, &info);
55
+//    printf("Init %s\n", info.name);
56
+//    rt_sem_p(&sem_barrier, TM_INFINITE);
57
+//
58
+//#ifdef _WITH_TRACE_
59
+//    printf("%s : waiting for sem_serverOk\n", info.name);
60
+//#endif
61
+//    rt_sem_p(&sem_serverOk, TM_INFINITE);
62
+//    while (1) {
63
+//
64
+//#ifdef _WITH_TRACE_
65
+//        printf("%s : waiting for a message in queue\n", info.name);
66
+//#endif
67
+//        if (rt_queue_read(&q_messageToMon, &msg, sizeof (MessageToRobot), TM_INFINITE) >= 0) {
68
+//#ifdef _WITH_TRACE_
69
+//            printf("%s : message {%s,%s} in queue\n", info.name, msg.header, msg.data);
70
+//#endif
71
+//
72
+//            send_message_to_monitor(msg.header, msg.data);
73
+//            free_msgToMon_data(&msg);
74
+//            rt_queue_free(&q_messageToMon, &msg);
75
+//        } else {
76
+//            printf("Error msg queue write: %s\n", strerror(-err));
77
+//        }
78
+//    }
79
+}
80
+
81
+void Tasks::f_receiveFromMon(void *arg) {
82
+//    MessageFromMon msg;
83
+//    int err;
84
+//
85
+//    /* INIT */
86
+//    RT_TASK_INFO info;
87
+//    rt_task_inquire(NULL, &info);
88
+//    printf("Init %s\n", info.name);
89
+//    rt_sem_p(&sem_barrier, TM_INFINITE);
90
+//
91
+//#ifdef _WITH_TRACE_
92
+//    printf("%s : waiting for sem_serverOk\n", info.name);
93
+//#endif
94
+//    rt_sem_p(&sem_serverOk, TM_INFINITE);
95
+//    do {
96
+//#ifdef _WITH_TRACE_
97
+//        printf("%s : waiting for a message from monitor\n", info.name);
98
+//#endif
99
+//        err = receive_message_from_monitor(msg.header, msg.data);
100
+//#ifdef _WITH_TRACE_
101
+//        printf("%s: msg {header:%s,data=%s} received from UI\n", info.name, msg.header, msg.data);
102
+//#endif
103
+//        if (strcmp(msg.header, HEADER_MTS_COM_DMB) == 0) {
104
+//            if (msg.data[0] == OPEN_COM_DMB) { // Open communication supervisor-robot
105
+//#ifdef _WITH_TRACE_
106
+//                printf("%s: message open Xbee communication\n", info.name);
107
+//#endif
108
+//                rt_sem_v(&sem_openComRobot);
109
+//            }
110
+//        } else if (strcmp(msg.header, HEADER_MTS_DMB_ORDER) == 0) {
111
+//            if (msg.data[0] == DMB_START_WITHOUT_WD) { // Start robot
112
+//#ifdef _WITH_TRACE_
113
+//                printf("%s: message start robot\n", info.name);
114
+//#endif
115
+//                rt_sem_v(&sem_startRobot);
116
+//
117
+//            } else if ((msg.data[0] == DMB_GO_BACK)
118
+//                    || (msg.data[0] == DMB_GO_FORWARD)
119
+//                    || (msg.data[0] == DMB_GO_LEFT)
120
+//                    || (msg.data[0] == DMB_GO_RIGHT)
121
+//                    || (msg.data[0] == DMB_STOP_MOVE)) {
122
+//
123
+//                rt_mutex_acquire(&mutex_move, TM_INFINITE);
124
+//                move = msg.data[0];
125
+//                rt_mutex_release(&mutex_move);
126
+//#ifdef _WITH_TRACE_
127
+//                printf("%s: message update movement with %c\n", info.name, move);
128
+//#endif
129
+//
130
+//            }
131
+//        }
132
+//    } while (err > 0);
133
+
134
+}
135
+
136
+void Tasks::f_openComRobot(void * arg) {
137
+//    int err;
138
+//
139
+//    /* INIT */
140
+//    RT_TASK_INFO info;
141
+//    rt_task_inquire(NULL, &info);
142
+//    printf("Init %s\n", info.name);
143
+//    rt_sem_p(&sem_barrier, TM_INFINITE);
144
+//
145
+//    while (1) {
146
+//#ifdef _WITH_TRACE_
147
+//        printf("%s : Wait sem_openComRobot\n", info.name);
148
+//#endif
149
+//        rt_sem_p(&sem_openComRobot, TM_INFINITE);
150
+//#ifdef _WITH_TRACE_
151
+//        printf("%s : sem_openComRobot arrived => open communication robot\n", info.name);
152
+//#endif
153
+//        err = open_communication_robot();
154
+//        if (err == 0) {
155
+//#ifdef _WITH_TRACE_
156
+//            printf("%s : the communication is opened\n", info.name);
157
+//#endif
158
+//            MessageToMon msg;
159
+//            set_msgToMon_header(&msg, HEADER_STM_ACK);
160
+//            write_in_queue(&q_messageToMon, msg);
161
+//        } else {
162
+//            MessageToMon msg;
163
+//            set_msgToMon_header(&msg, HEADER_STM_NO_ACK);
164
+//            write_in_queue(&q_messageToMon, msg);
165
+//        }
166
+//    }
167
+}
168
+
169
+void Tasks::f_startRobot(void * arg) {
170
+//    int err;
171
+//
172
+//    /* INIT */
173
+//    RT_TASK_INFO info;
174
+//    rt_task_inquire(NULL, &info);
175
+//    printf("Init %s\n", info.name);
176
+//    rt_sem_p(&sem_barrier, TM_INFINITE);
177
+//
178
+//    while (1) {
179
+//#ifdef _WITH_TRACE_
180
+//        printf("%s : Wait sem_startRobot\n", info.name);
181
+//#endif
182
+//        rt_sem_p(&sem_startRobot, TM_INFINITE);
183
+//#ifdef _WITH_TRACE_
184
+//        printf("%s : sem_startRobot arrived => Start robot\n", info.name);
185
+//#endif
186
+//        err = send_command_to_robot(DMB_START_WITHOUT_WD);
187
+//        if (err == 0) {
188
+//#ifdef _WITH_TRACE_
189
+//            printf("%s : the robot is started\n", info.name);
190
+//#endif
191
+//            rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
192
+//            robotStarted = 1;
193
+//            rt_mutex_release(&mutex_robotStarted);
194
+//            MessageToMon msg;
195
+//            set_msgToMon_header(&msg, HEADER_STM_ACK);
196
+//            write_in_queue(&q_messageToMon, msg);
197
+//        } else {
198
+//            MessageToMon msg;
199
+//            set_msgToMon_header(&msg, HEADER_STM_NO_ACK);
200
+//            write_in_queue(&q_messageToMon, msg);
201
+//        }
202
+//    }
203
+}
204
+
205
+void Tasks::f_move(void *arg) {
206
+//    /* INIT */
207
+//    RT_TASK_INFO info;
208
+//    rt_task_inquire(NULL, &info);
209
+//    printf("Init %s\n", info.name);
210
+//    rt_sem_p(&sem_barrier, TM_INFINITE);
211
+//
212
+//    /* PERIODIC START */
213
+//#ifdef _WITH_TRACE_
214
+//    printf("%s: start period\n", info.name);
215
+//#endif
216
+//    rt_task_set_periodic(NULL, TM_NOW, 100000000);
217
+//    while (1) {
218
+//#ifdef _WITH_TRACE_
219
+//        printf("%s: Wait period \n", info.name);
220
+//#endif
221
+//        rt_task_wait_period(NULL);
222
+//#ifdef _WITH_TRACE_
223
+//        printf("%s: Periodic activation\n", info.name);
224
+//        printf("%s: move equals %c\n", info.name, move);
225
+//#endif
226
+//        rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
227
+//        if (robotStarted) {
228
+//            rt_mutex_acquire(&mutex_move, TM_INFINITE);
229
+//            send_command_to_robot(move);
230
+//            rt_mutex_release(&mutex_move);
231
+//#ifdef _WITH_TRACE_
232
+//            printf("%s: the movement %c was sent\n", info.name, move);
233
+//#endif
234
+//        }
235
+//        rt_mutex_release(&mutex_robotStarted);
236
+//    }
237
+}
238
+
239
+void Tasks::write_in_queue(mqd_t *queue, MsgManager msg) {
240
+//    void *buff;
241
+//    buff = rt_queue_alloc(&q_messageToMon, sizeof (MessageToMon));
242
+//    memcpy(buff, &msg, sizeof (MessageToMon));
243
+//    rt_queue_send(&q_messageToMon, buff, sizeof (MessageToMon), Q_NORMAL);
244
+}
245
+
246
+MsgManager Tasks::messages;

+ 44
- 0
software/raspberry/superviseur-robot/superviseur-pthread/src/Tasks.h View File

@@ -0,0 +1,44 @@
1
+/*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+
7
+/* 
8
+ * File:   functions.h
9
+ * Author: pehladik
10
+ *
11
+ * Created on 15 janvier 2018, 12:50
12
+ */
13
+
14
+#ifndef TASKS_H
15
+#define TASKS_H
16
+
17
+#include <mqueue.h>
18
+#include <MsgManager.h>
19
+
20
+class Tasks {
21
+public:
22
+    static MsgManager messages;
23
+
24
+    static void f_server(void *arg);
25
+
26
+    static void f_sendToMon(void *arg);
27
+
28
+    static void f_receiveFromMon(void *arg);
29
+
30
+    static void f_openComRobot(void *arg);
31
+
32
+    static void f_move(void *arg);
33
+
34
+    static void f_startRobot(void *arg);
35
+
36
+private:
37
+    char mode_start;
38
+
39
+    static void write_in_queue(mqd_t *queue, MsgManager msg);
40
+    Tasks() {}
41
+};
42
+
43
+#endif /* TASKS_H */
44
+

+ 9
- 0
software/raspberry/superviseur-robot/superviseur/.gitignore View File

@@ -0,0 +1,9 @@
1
+bin/
2
+build/
3
+CMakeFiles/
4
+
5
+.dep.inc
6
+Makefile
7
+*.cmake
8
+*.o
9
+

+ 15
- 0
software/raspberry/superviseur-robot/superviseur/CMakeLists.txt View File

@@ -0,0 +1,15 @@
1
+set(superviseur_FILES ./src/main.cpp src/functions.cpp)
2
+
3
+include_directories(./src ../lib /usr/xenomai/include /usr/xenomai/include/mercury)
4
+link_directories(/usr/xenomai/lib)
5
+
6
+add_executable(superviseur ${superviseur_FILES})
7
+target_link_libraries(superviseur destijl)
8
+
9
+#add_custom_command(TARGET superviseur POST_BUILD
10
+#        COMMAND sudo chown root ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur
11
+#        COMMAND sudo chgrp root ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur
12
+#        COMMAND sudo chmod +s ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/superviseur
13
+#        WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
14
+#        COMMENT "Add sticky bit"
15
+#)

software/raspberry/superviseur-robot/destijl_init/src/functions.cpp → software/raspberry/superviseur-robot/superviseur/src/functions.cpp View File

@@ -1,4 +1,4 @@
1
-#include "../header/functions.h"
1
+#include "functions.h"
2 2
 
3 3
 char mode_start;
4 4
 
@@ -102,7 +102,7 @@ void f_receiveFromMon(void *arg) {
102 102
                     || (msg.data[0] == DMB_STOP_MOVE)) {
103 103
 
104 104
                 rt_mutex_acquire(&mutex_move, TM_INFINITE);
105
-                move = msg.data[0];
105
+                robotMove = msg.data[0];
106 106
                 rt_mutex_release(&mutex_move);
107 107
 #ifdef _WITH_TRACE_
108 108
                 printf("%s: message update movement with %c\n", info.name, move);
@@ -207,7 +207,7 @@ void f_move(void *arg) {
207 207
         rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
208 208
         if (robotStarted) {
209 209
             rt_mutex_acquire(&mutex_move, TM_INFINITE);
210
-            send_command_to_robot(move);
210
+            send_command_to_robot(robotMove);
211 211
             rt_mutex_release(&mutex_move);
212 212
 #ifdef _WITH_TRACE_
213 213
             printf("%s: the movement %c was sent\n", info.name, move);

software/raspberry/superviseur-robot/destijl_init/header/functions.h → software/raspberry/superviseur-robot/superviseur/src/functions.h View File

@@ -25,10 +25,10 @@
25 25
 #include <alchemy/sem.h>
26 26
 #include <alchemy/queue.h>
27 27
 
28
-#include "../../src/monitor.h"    
29
-#include "../../src/robot.h"
30
-#include "../../src/image.h"
31
-#include "../../src/message.h"
28
+#include "monitor.h"
29
+#include "robot.h"
30
+#include "image.h"
31
+#include "message.h"
32 32
 
33 33
 extern RT_TASK th_server;
34 34
 extern RT_TASK th_sendToMon;
@@ -49,7 +49,7 @@ extern RT_QUEUE q_messageToMon;
49 49
 
50 50
 extern int etatCommMoniteur;
51 51
 extern int robotStarted;
52
-extern char move;
52
+extern char robotMove;
53 53
 
54 54
 extern int MSG_QUEUE_SIZE;
55 55
 

software/raspberry/superviseur-robot/destijl_init/main.cpp → software/raspberry/superviseur-robot/superviseur/src/main.cpp View File

@@ -16,7 +16,7 @@
16 16
 #include <alchemy/sem.h>
17 17
 #include <alchemy/queue.h>
18 18
 
19
-#include "./header/functions.h"
19
+#include "functions.h"
20 20
 
21 21
 // Déclaration des taches
22 22
 RT_TASK th_server;
@@ -51,7 +51,7 @@ int MSG_QUEUE_SIZE = 10;
51 51
 // Déclaration des ressources partagées
52 52
 int etatCommMoniteur = 1;
53 53
 int robotStarted = 0;
54
-char move = DMB_STOP_MOVE;
54
+char robotMove = DMB_STOP_MOVE;
55 55
 
56 56
 /**
57 57
  * \fn void initStruct(void)
@@ -91,10 +91,11 @@ int main(int argc, char **argv) {
91 91
 }
92 92
 
93 93
 void initStruct(void) {
94
+
94 95
     int err;
95 96
     /* Creation des mutex */
96 97
     if (err = rt_mutex_create(&mutex_robotStarted, NULL)) {
97
-        printf("Error mutex create: %s\n", strerror(-err));
98
+        printf("Error mutex create: %d %s\n", err, strerror(-err));
98 99
         exit(EXIT_FAILURE);
99 100
     }
100 101
     if (err = rt_mutex_create(&mutex_move, NULL)) {
@@ -103,20 +104,20 @@ void initStruct(void) {
103 104
     }
104 105
 
105 106
     /* Creation du semaphore */
106
-    if (err = rt_sem_create(&sem_barrier, NULL, 0, S_FIFO)) {
107
-        printf("Error semaphore create: %s\n", strerror(-err));
107
+    if (err = rt_sem_create(&sem_barrier, "truc", 0, S_FIFO)) {
108
+        printf("Error semaphore create 1: %d %s\n", err, strerror(-err));
108 109
         exit(EXIT_FAILURE);
109 110
     }
110 111
     if (err = rt_sem_create(&sem_openComRobot, NULL, 0, S_FIFO)) {
111
-        printf("Error semaphore create: %s\n", strerror(-err));
112
+        printf("Error semaphore create 2: %s\n", strerror(-err));
112 113
         exit(EXIT_FAILURE);
113 114
     }
114 115
     if (err = rt_sem_create(&sem_serverOk, NULL, 0, S_FIFO)) {
115
-        printf("Error semaphore create: %s\n", strerror(-err));
116
+        printf("Error semaphore create 3: %s\n", strerror(-err));
116 117
         exit(EXIT_FAILURE);
117 118
     }
118 119
     if (err = rt_sem_create(&sem_startRobot, NULL, 0, S_FIFO)) {
119
-        printf("Error semaphore create: %s\n", strerror(-err));
120
+        printf("Error semaphore create 4: %s\n", strerror(-err));
120 121
         exit(EXIT_FAILURE);
121 122
     }
122 123
 

Loading…
Cancel
Save