Browse Source

Terminé le projet de base (sans cam)

Tali Elies 3 years ago
parent
commit
d86f0fca25

+ 1
- 1
software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk View File

21
 AS=as
21
 AS=as
22
 
22
 
23
 # Macros
23
 # Macros
24
-CND_PLATFORM=GNU-None
24
+CND_PLATFORM=GNU-Linux
25
 CND_DLIB_EXT=so
25
 CND_DLIB_EXT=so
26
 CND_CONF=Debug__RPI_
26
 CND_CONF=Debug__RPI_
27
 CND_DISTDIR=dist
27
 CND_DISTDIR=dist

+ 5
- 5
software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk View File

15
 CND_PACKAGE_NAME_Debug__PC_=superviseur-robot.tar
15
 CND_PACKAGE_NAME_Debug__PC_=superviseur-robot.tar
16
 CND_PACKAGE_PATH_Debug__PC_=dist/Debug__PC_/GNU-Linux/package/superviseur-robot.tar
16
 CND_PACKAGE_PATH_Debug__PC_=dist/Debug__PC_/GNU-Linux/package/superviseur-robot.tar
17
 # Debug__RPI_ configuration
17
 # Debug__RPI_ configuration
18
-CND_PLATFORM_Debug__RPI_=GNU-None
19
-CND_ARTIFACT_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-None
18
+CND_PLATFORM_Debug__RPI_=GNU-Linux
19
+CND_ARTIFACT_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-Linux
20
 CND_ARTIFACT_NAME_Debug__RPI_=superviseur-robot
20
 CND_ARTIFACT_NAME_Debug__RPI_=superviseur-robot
21
-CND_ARTIFACT_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-None/superviseur-robot
22
-CND_PACKAGE_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-None/package
21
+CND_ARTIFACT_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/superviseur-robot
22
+CND_PACKAGE_DIR_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package
23
 CND_PACKAGE_NAME_Debug__RPI_=superviseur-robot.tar
23
 CND_PACKAGE_NAME_Debug__RPI_=superviseur-robot.tar
24
-CND_PACKAGE_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-None/package/superviseur-robot.tar
24
+CND_PACKAGE_PATH_Debug__RPI_=dist/Debug__RPI_/GNU-Linux/package/superviseur-robot.tar
25
 #
25
 #
26
 # include compiler specific variables
26
 # include compiler specific variables
27
 #
27
 #

+ 1
- 1
software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash View File

6
 
6
 
7
 # Macros
7
 # Macros
8
 TOP=`pwd`
8
 TOP=`pwd`
9
-CND_PLATFORM=GNU-None
9
+CND_PLATFORM=GNU-Linux
10
 CND_CONF=Debug__RPI_
10
 CND_CONF=Debug__RPI_
11
 CND_DISTDIR=dist
11
 CND_DISTDIR=dist
12
 CND_BUILDDIR=build
12
 CND_BUILDDIR=build

+ 2
- 2
software/raspberry/superviseur-robot/nbproject/private/configurations.xml View File

41
     </conf>
41
     </conf>
42
     <conf name="Debug__RPI_" type="1">
42
     <conf name="Debug__RPI_" type="1">
43
       <toolsSet>
43
       <toolsSet>
44
-        <developmentServer>pi@10.105.1.01:22</developmentServer>
45
-        <platform>6</platform>
44
+        <developmentServer>pi@10.105.1.11:22</developmentServer>
45
+        <platform>2</platform>
46
       </toolsSet>
46
       </toolsSet>
47
       <dbx_gdbdebugger version="1">
47
       <dbx_gdbdebugger version="1">
48
         <gdb_pathmaps>
48
         <gdb_pathmaps>

+ 0
- 0
software/raspberry/superviseur-robot/nbproject/private/downloads-10.105.1.11-pi-22 View File


+ 2
- 1
software/raspberry/superviseur-robot/nbproject/private/private.xml View File

11
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/main.cpp</file>
11
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/main.cpp</file>
12
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/tasks.cpp</file>
12
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/tasks.cpp</file>
13
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/tasks.h</file>
13
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/tasks.h</file>
14
+            <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/img.cpp</file>
14
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/comrobot.h</file>
15
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/comrobot.h</file>
15
-            <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/messages.cpp</file>
16
+            <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/img.h</file>
16
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp</file>
17
             <file>file:/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp</file>
17
         </group>
18
         </group>
18
     </open-files>
19
     </open-files>

+ 39
- 0
software/raspberry/superviseur-robot/nbproject/private/timestamps-10.105.1.11-pi-22 View File

1
+#Mon Mar 15 11:43:08 CET 2021
2
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/scriptRasp.sh=c1614326506000
3
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/camera.cpp=c1614324985000
4
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/img.cpp=c1614324985000
5
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp=c1614324985000
6
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/test.cpp=c1614324985000
7
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/project.xml=c1614324985000
8
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp=c1614324985000
9
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/base64.h=c1614324985000
10
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/LICENSE=c1614324985000
11
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/project.properties=c1614324985000
12
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/tasks.h=c1615800561000
13
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/img.h=c1614324985000
14
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/messages.h=c1614324985000
15
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/tasks.cpp=c1615804981000
16
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-impl.mk=c1614324985000
17
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/.gitignore=c1614324985000
18
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/Package-Debug__PC_.bash=c1614324985000
19
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/gdbsudo.sh=c1614324985000
20
+VERSION=1.3
21
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/commonitor.h=c1614324985000
22
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/README.md=c1614324985000
23
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/README.md=c1614324985000
24
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/.dep.inc=c1614324985000
25
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/comrobot.h=c1614324985000
26
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/.gitignore=c1614324985000
27
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/private/Makefile-variables.mk=c1614324985000
28
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash=c1615797916000
29
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/Makefile=c1614324985000
30
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__RPI_.mk=c1615797916000
31
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk=c1615797916000
32
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/.gitignore=c1614324985000
33
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/messages.cpp=c1614324985000
34
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-Debug__PC_.mk=c1614324985000
35
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/compile-and-run-test=c1614324985000
36
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/superviseur.doxygen=c1614324985000
37
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/base64/base64.cpp=c1614324985000
38
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/lib/camera.h=c1614324985000
39
+/home/tali/Temps_Reel/dumber/software/raspberry/superviseur-robot/main.cpp=c1614324985000

+ 152
- 43
software/raspberry/superviseur-robot/tasks.cpp View File

26
 #define PRIORITY_TRECEIVEFROMMON 25
26
 #define PRIORITY_TRECEIVEFROMMON 25
27
 #define PRIORITY_TSTARTROBOT 20
27
 #define PRIORITY_TSTARTROBOT 20
28
 #define PRIORITY_TCAMERA 21
28
 #define PRIORITY_TCAMERA 21
29
+#define PRIORITY_TWATCHDOG 35
30
+#define PRIORITY_TBATTERY 20
29
 
31
 
30
 /*
32
 /*
31
  * Some remarks:
33
  * Some remarks:
135
         cerr << "Error task create: " << strerror(-err) << endl << flush;
137
         cerr << "Error task create: " << strerror(-err) << endl << flush;
136
         exit(EXIT_FAILURE);
138
         exit(EXIT_FAILURE);
137
     }
139
     }
138
-    if (err = rt_task_create(&th_battery, "th_battery", 0, PRIORITY_TMOVE, 0)) {
140
+    if (err = rt_task_create(&th_battery, "th_battery", 0, PRIORITY_TBATTERY, 0)) {
139
         cerr << "Error task create: " << strerror(-err) << endl << flush;
141
         cerr << "Error task create: " << strerror(-err) << endl << flush;
140
         exit(EXIT_FAILURE);
142
         exit(EXIT_FAILURE);
141
     }
143
     }
143
         cerr << "Error task create: " << strerror(-err) << endl << flush;
145
         cerr << "Error task create: " << strerror(-err) << endl << flush;
144
         exit(EXIT_FAILURE);
146
         exit(EXIT_FAILURE);
145
     }
147
     }
146
-    if (err = rt_task_create(&th_watchdog, "th_watchdog", 0, PRIORITY_TMOVE, 0)) {
148
+    if (err = rt_task_create(&th_watchdog, "th_watchdog", 0, PRIORITY_TWATCHDOG, 0)) {
147
         cerr << "Error task create: " << strerror(-err) << endl << flush;
149
         cerr << "Error task create: " << strerror(-err) << endl << flush;
148
         exit(EXIT_FAILURE);
150
         exit(EXIT_FAILURE);
149
     }
151
     }
150
-    if (err = rt_task_create(&th_camera, "th_camera", 0, PRIORITY_TMOVE, 0)) {
152
+    if (err = rt_task_create(&th_camera, "th_camera", 0, PRIORITY_TCAMERA, 0)) {
151
         cerr << "Error task create: " << strerror(-err) << endl << flush;
153
         cerr << "Error task create: " << strerror(-err) << endl << flush;
152
         exit(EXIT_FAILURE);
154
         exit(EXIT_FAILURE);
153
     }
155
     }
154
-    if (err = rt_task_create(&th_startCamera, "th_startCamera", 0, PRIORITY_TMOVE, 0)) {
156
+    if (err = rt_task_create(&th_startCamera, "th_startCamera", 0, PRIORITY_TCAMERA, 0)) {
155
         cerr << "Error task create: " << strerror(-err) << endl << flush;
157
         cerr << "Error task create: " << strerror(-err) << endl << flush;
156
         exit(EXIT_FAILURE);
158
         exit(EXIT_FAILURE);
157
     }
159
     }
284
  */
286
  */
285
 void Tasks::ReceiveFromMonTask(void *arg) {
287
 void Tasks::ReceiveFromMonTask(void *arg) {
286
     Message *msgRcv;
288
     Message *msgRcv;
289
+    int err;
287
     
290
     
288
     cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
291
     cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
289
     // Synchronization barrier (waiting that all tasks are starting)
292
     // Synchronization barrier (waiting that all tasks are starting)
292
     /**************************************************************************************/
295
     /**************************************************************************************/
293
     /* The task receiveFromMon starts here                                                */
296
     /* The task receiveFromMon starts here                                                */
294
     /**************************************************************************************/
297
     /**************************************************************************************/
295
-    rt_sem_p(&sem_serverOk, TM_INFINITE);
296
-    cout << "Received message from monitor activated" << endl << flush;
298
+    while(1){
299
+        rt_sem_p(&sem_serverOk, TM_INFINITE);
300
+        cout << "Received message from monitor activated" << endl << flush;
301
+        while (1) {
302
+            msgRcv = monitor.Read();
303
+            cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
297
 
304
 
298
-    while (1) {
299
-        msgRcv = monitor.Read();
300
-        cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
301
-
302
-        if (msgRcv->CompareID(MESSAGE_MONITOR_LOST)) {
303
-            delete(msgRcv);
304
-            exit(-1);
305
-        } else if (msgRcv->CompareID(MESSAGE_ROBOT_COM_OPEN)) {
306
-            rt_sem_v(&sem_openComRobot);
307
-        } else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITHOUT_WD)) {
308
-            rt_sem_v(&sem_startRobot);
309
-        } else if (msgRcv->CompareID(MESSAGE_ROBOT_GO_FORWARD) ||
310
-                msgRcv->CompareID(MESSAGE_ROBOT_GO_BACKWARD) ||
311
-                msgRcv->CompareID(MESSAGE_ROBOT_GO_LEFT) ||
312
-                msgRcv->CompareID(MESSAGE_ROBOT_GO_RIGHT) ||
313
-                msgRcv->CompareID(MESSAGE_ROBOT_STOP)) {
314
-
315
-            rt_mutex_acquire(&mutex_move, TM_INFINITE);
316
-            move = msgRcv->GetID();
317
-            rt_mutex_release(&mutex_move);
305
+            if (msgRcv->CompareID(MESSAGE_MONITOR_LOST)) {
306
+                cout << "On est dans le message monitor lost" << endl << flush;
307
+
308
+                rt_mutex_acquire(&mutex_robot, TM_INFINITE);
309
+                int cpMove = MESSAGE_ROBOT_STOP;
310
+                robot.Write(new Message((MessageID)cpMove));
311
+                rt_mutex_release(&mutex_robot);
312
+                robot.Close();
313
+                monitor.Close();
314
+                rt_mutex_acquire(&mutex_move, TM_INFINITE);
315
+                move = MESSAGE_ROBOT_STOP;
316
+                rt_mutex_release(&mutex_move);
317
+                rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
318
+                robotStarted = 0;
319
+                rt_mutex_release(&mutex_robotStarted);
320
+                rt_mutex_acquire(&mutex_watchdog, TM_INFINITE);
321
+                watchdog = 0;
322
+                rt_mutex_release(&mutex_watchdog);
323
+                //Close Camrera + etatCamera
324
+                /* if (err = rt_task_delete(&th_server)) {
325
+                    cerr << "Error task delete: " << strerror(-err) << endl << flush;
326
+                    //exit(EXIT_FAILURE);
327
+                } */
328
+                if (err = rt_task_create(&th_server, "th_server", 0, PRIORITY_TSERVER, 0)) {
329
+                    cerr << "Error task create: " << strerror(-err) << endl << flush;
330
+                    exit(EXIT_FAILURE);
331
+                } 
332
+                if (err = rt_task_start(&th_server, (void(*)(void*)) & Tasks::ServerTask, this)) {
333
+                    cerr << "Error task start: " << strerror(-err) << endl << flush;
334
+                    exit(EXIT_FAILURE);
335
+                }
336
+                rt_sem_v(&sem_barrier);
337
+                Kill_StartWD();
338
+                break;
339
+            } else if (msgRcv->CompareID(MESSAGE_ROBOT_COM_OPEN)) {
340
+                rt_sem_v(&sem_openComRobot);
341
+            } else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITHOUT_WD)) {
342
+                rt_sem_v(&sem_startRobot);
343
+            } else if (msgRcv->CompareID(MESSAGE_ROBOT_GO_FORWARD) ||
344
+                    msgRcv->CompareID(MESSAGE_ROBOT_GO_BACKWARD) ||
345
+                    msgRcv->CompareID(MESSAGE_ROBOT_GO_LEFT) ||
346
+                    msgRcv->CompareID(MESSAGE_ROBOT_GO_RIGHT) ||
347
+                    msgRcv->CompareID(MESSAGE_ROBOT_STOP)) {
348
+                rt_mutex_acquire(&mutex_move, TM_INFINITE);
349
+                move = msgRcv->GetID();
350
+                rt_mutex_release(&mutex_move);
351
+                cout << "On est dans le message mouvement" << endl << flush;
352
+            }
353
+            else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITH_WD)){
354
+                rt_mutex_acquire(&mutex_watchdog, TM_INFINITE);
355
+                watchdog = 1;
356
+                rt_mutex_release(&mutex_watchdog);
357
+                rt_sem_v(&sem_startRobot);
358
+                cout << "On a start le robot avec Watchdog" << endl << flush;
359
+            }
360
+            delete(msgRcv); // mus be deleted manually, no consumer
318
         }
361
         }
319
-        delete(msgRcv); // mus be deleted manually, no consumer
320
     }
362
     }
321
 }
363
 }
322
 
364
 
357
  * @brief Thread starting the communication with the robot.
399
  * @brief Thread starting the communication with the robot.
358
  */
400
  */
359
 void Tasks::StartRobotTask(void *arg) {
401
 void Tasks::StartRobotTask(void *arg) {
402
+    int etatWD;
360
     cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
403
     cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
361
     // Synchronization barrier (waiting that all tasks are starting)
404
     // Synchronization barrier (waiting that all tasks are starting)
362
     rt_sem_p(&sem_barrier, TM_INFINITE);
405
     rt_sem_p(&sem_barrier, TM_INFINITE);
365
     /* The task startRobot starts here                                                    */
408
     /* The task startRobot starts here                                                    */
366
     /**************************************************************************************/
409
     /**************************************************************************************/
367
     while (1) {
410
     while (1) {
368
-
411
+        
369
         Message * msgSend;
412
         Message * msgSend;
370
         rt_sem_p(&sem_startRobot, TM_INFINITE);
413
         rt_sem_p(&sem_startRobot, TM_INFINITE);
371
-        cout << "Start robot without watchdog (";
414
+        cout << "Start robot (";
372
         rt_mutex_acquire(&mutex_robot, TM_INFINITE);
415
         rt_mutex_acquire(&mutex_robot, TM_INFINITE);
373
-        msgSend = robot.Write(robot.StartWithoutWD());
374
-        rt_mutex_release(&mutex_robot);
375
-        cout << msgSend->GetID();
376
-        cout << ")" << endl;
416
+        rt_mutex_acquire(&mutex_watchdog, TM_INFINITE);
417
+        etatWD = watchdog;
418
+        rt_mutex_release(&mutex_watchdog);
419
+        cout << "Watchdog = " << etatWD << endl << flush;
420
+        if (etatWD == 0){
421
+            cout << "Dans le if without WD" << etatWD << endl << flush;
422
+            msgSend = robot.Write(robot.StartWithoutWD());
423
+            rt_mutex_release(&mutex_robot);
424
+            cout << msgSend->GetID();
425
+            cout << ")" << endl;
377
 
426
 
378
-        cout << "Movement answer: " << msgSend->ToString() << endl << flush;
379
-        WriteInQueue(&q_messageToMon, msgSend);  // msgSend will be deleted by sendToMon
427
+            cout << "Movement answer: " << msgSend->ToString() << endl << flush;
428
+            WriteInQueue(&q_messageToMon, msgSend);  // msgSend will be deleted by sendToMon
380
 
429
 
381
-        if (msgSend->GetID() == MESSAGE_ANSWER_ACK) {
382
-            rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
383
-            robotStarted = 1;
384
-            rt_mutex_release(&mutex_robotStarted);
430
+            if (msgSend->GetID() == MESSAGE_ANSWER_ACK) {
431
+                rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
432
+                robotStarted = 1;
433
+                rt_mutex_release(&mutex_robotStarted);
434
+            }
435
+        }
436
+        else{
437
+            cout << "Dans le if with WD" << etatWD << endl << flush;
438
+            msgSend = robot.Write(robot.StartWithWD());
439
+            rt_mutex_release(&mutex_robot);
440
+            cout << msgSend->GetID();
441
+            cout << ")" << endl;
442
+
443
+            cout << "Movement answer: " << msgSend->ToString() << endl << flush;
444
+            WriteInQueue(&q_messageToMon, msgSend);  // msgSend will be deleted by sendToMon
445
+
446
+            if (msgSend->GetID() == MESSAGE_ANSWER_ACK) {
447
+                rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
448
+                robotStarted = 1;
449
+                rt_mutex_release(&mutex_robotStarted);
450
+                rt_sem_v(&sem_startWD);
451
+            }
385
         }
452
         }
386
     }
453
     }
387
 }
454
 }
393
     int rs;
460
     int rs;
394
     int cpMove;
461
     int cpMove;
395
     int previousMove = -1;
462
     int previousMove = -1;
463
+    int cpt = 0;
464
+    
396
     
465
     
466
+    Message * response;
397
     cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
467
     cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
398
     // Synchronization barrier (waiting that all tasks are starting)
468
     // Synchronization barrier (waiting that all tasks are starting)
399
     rt_sem_p(&sem_barrier, TM_INFINITE);
469
     rt_sem_p(&sem_barrier, TM_INFINITE);
418
                 cout << " move: " << cpMove;
488
                 cout << " move: " << cpMove;
419
 
489
 
420
                 rt_mutex_acquire(&mutex_robot, TM_INFINITE);
490
                 rt_mutex_acquire(&mutex_robot, TM_INFINITE);
421
-                robot.Write(new Message((MessageID)cpMove));
491
+                response = robot.Write(new Message((MessageID)cpMove));
422
                 rt_mutex_release(&mutex_robot);
492
                 rt_mutex_release(&mutex_robot);
493
+                
494
+                if (response->CompareID(MESSAGE_ANSWER_ACK)){
495
+                    cpt = 0;
496
+                }
497
+                else{
498
+                    cpt++;
499
+                    if (cpt == 3){
500
+                        Message * respToMon = new Message(MESSAGE_ANSWER_COM_ERROR);
501
+                        WriteInQueue(&q_messageToMon,respToMon);
502
+                        rt_mutex_acquire(&mutex_robotStarted, TM_INFINITE);
503
+                        robotStarted = 0;
504
+                        rt_mutex_release(&mutex_robotStarted);
505
+                        rt_mutex_acquire(&mutex_watchdog, TM_INFINITE);
506
+                        watchdog = 0;
507
+                        rt_mutex_release(&mutex_watchdog);
508
+                        Kill_StartWD();
509
+                        cpt = 0;
510
+                    }
511
+                }
423
                 previousMove = cpMove;
512
                 previousMove = cpMove;
424
             }
513
             }
425
         }
514
         }
428
 }
517
 }
429
 
518
 
430
 /**
519
 /**
520
+ * @brief Kills and restart the thread watchdog
521
+ */
522
+void Tasks::Kill_StartWD(){
523
+    int err;
524
+    if (err = rt_task_delete(&th_watchdog)) {
525
+        cerr << "Error task delete: " << strerror(-err) << endl << flush;
526
+        exit(EXIT_FAILURE);
527
+    }
528
+    if (err = rt_task_create(&th_watchdog, "th_watchdog", 0, PRIORITY_TWATCHDOG, 0)) {
529
+        cerr << "Error task create: " << strerror(-err) << endl << flush;
530
+        exit(EXIT_FAILURE);
531
+    }
532
+    if (err = rt_task_start(&th_watchdog, (void(*)(void*)) & Tasks::ReloadWatchdogTask, this)) {
533
+        cerr << "Error task start: " << strerror(-err) << endl << flush;
534
+        exit(EXIT_FAILURE);
535
+    }
536
+    rt_sem_broadcast(&sem_barrier);
537
+}
538
+
539
+/**
431
  * Write a message in a given queue
540
  * Write a message in a given queue
432
  * @param queue Queue identifier
541
  * @param queue Queue identifier
433
  * @param msg Message to be stored
542
  * @param msg Message to be stored
504
     
613
     
505
     //We wait for the signal startWd
614
     //We wait for the signal startWd
506
     rt_sem_p(&sem_startWD, TM_INFINITE);
615
     rt_sem_p(&sem_startWD, TM_INFINITE);
507
-    
616
+    cout << "thread WD started" << endl << flush;
508
         /**************************************************************************************/
617
         /**************************************************************************************/
509
     /* The task starts here                                                               */
618
     /* The task starts here                                                               */
510
     /**************************************************************************************/
619
     /**************************************************************************************/
511
-    rt_task_set_periodic(NULL, TM_NOW, 50000000);
620
+    rt_task_set_periodic(NULL, TM_NOW, 1000000000);
512
     
621
     
513
     while(1){
622
     while(1){
514
         rt_task_wait_period(NULL);
623
         rt_task_wait_period(NULL);
519
             cout << "Periodic watchdog reload" << endl << flush;
628
             cout << "Periodic watchdog reload" << endl << flush;
520
             
629
             
521
             rt_mutex_acquire(&mutex_robot, TM_INFINITE);
630
             rt_mutex_acquire(&mutex_robot, TM_INFINITE);
522
-            responseBattery = robot.Write(new Message(MESSAGE_ROBOT_RELOAD_WD));
631
+            robot.Write(new Message(MESSAGE_ROBOT_RELOAD_WD));
523
             rt_mutex_release(&mutex_robot);
632
             rt_mutex_release(&mutex_robot);
524
         }
633
         }
525
     }
634
     }

+ 7
- 1
software/raspberry/superviseur-robot/tasks.h View File

70
         int cameraStarted = 0;
70
         int cameraStarted = 0;
71
         int getImg = 0;
71
         int getImg = 0;
72
         int askArena = 0;
72
         int askArena = 0;
73
-        Arena arena = void;
73
+        Arena* arena = new Arena();
74
         int getPos = 0;
74
         int getPos = 0;
75
     };
75
     };
76
     struct etatCamera_t etatCamera;
76
     struct etatCamera_t etatCamera;
77
+    int watchdog = 0;
77
     
78
     
78
     /**********************************************************************/
79
     /**********************************************************************/
79
     /* Tasks                                                              */
80
     /* Tasks                                                              */
163
     */
164
     */
164
    void ReloadWatchdogTask(void *arg);
165
    void ReloadWatchdogTask(void *arg);
165
    
166
    
167
+   /**
168
+    * @brief Kills and restart the thread watchdog
169
+    */
170
+    void Kill_StartWD();
171
+   
166
     /**********************************************************************/
172
     /**********************************************************************/
167
     /* Queue services                                                     */
173
     /* Queue services                                                     */
168
     /**********************************************************************/
174
     /**********************************************************************/

Loading…
Cancel
Save