diff --git a/software/raspberry/superviseur-robot/tasks.cpp b/software/raspberry/superviseur-robot/tasks.cpp index d2c617b..1524e7a 100644 --- a/software/raspberry/superviseur-robot/tasks.cpp +++ b/software/raspberry/superviseur-robot/tasks.cpp @@ -24,8 +24,8 @@ #define PRIORITY_TMOVE 20 #define PRIORITY_TSENDTOMON 22 #define PRIORITY_TRECEIVEFROMMON 25 -#define PRIORITY_TSTARTROBOTWITHOUTWATCHDOG 22 -#define PRIORITY_TSTARTROBOTWITHWATCHDOG 22 +#define PRIORITY_TSTARTROBOTWITHOUTWATCHDOG 24 +#define PRIORITY_TSTARTROBOTWITHWATCHDOG 23 #define PRIORITY_TCAMERA 21 @@ -75,10 +75,10 @@ void Tasks::Init() { cerr << "Error mutex create: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); } - /*if (err = rt_mutex_create(&mutex_robot_on, NULL)) { + if (err = rt_mutex_create(&mutex_kill_battery, NULL)) { cerr << "Error mutex create: " << strerror(-err) << endl << flush; exit(EXIT_FAILURE); - }*/ + } cout << "Mutexes created successfully" << endl << flush; @@ -349,13 +349,13 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { cout << "Start " << __PRETTY_FUNCTION__ << endl << flush; // Synchronization barrier (waiting that all tasks are starting) rt_sem_p(&sem_barrier, TM_INFINITE); + int killBattery=0; + Message* p_mess_answer_battery; + Message * msgSend; /**************************************************************************************/ /* The task startRobot starts here */ /**************************************************************************************/ - Message* p_mess_answer_battery; - Message * msgSend; - rt_sem_p(&sem_startRobotWithoutWatchdog, TM_INFINITE); cout << "Start robot without watchdog ("; //Boolean to get the battery @@ -380,10 +380,8 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { rt_mutex_acquire(&mutex_robot, TM_INFINITE); p_mess_answer_battery = robot.Write(robot.GetBattery()); rt_mutex_release(&mutex_robot); - rt_mutex_acquire(&mutex_monitor, TM_INFINITE); - monitor.Write(p_mess_answer_battery); - rt_mutex_release(&mutex_monitor); - //cout << endl << flush; + WriteInQueue(&q_messageToMon, p_mess_answer_battery); + cout << endl << flush; rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); killBattery=killBatteryBool; rt_mutex_release(&mutex_kill_battery); @@ -408,9 +406,8 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { /**************************************************************************************/ Message* p_mess_answer_battery; Message * msgSend; - int cpt=1; - int err; - rt_sem_p(&sem_startRobotWithWatchdog, TM_INFINITE); + int cpt=0; + int killBattery=0; cout << "Start robot with watchdog ("; rt_mutex_acquire(&mutex_robot, TM_INFINITE); msgSend = robot.Write(robot.StartWithWD()); @@ -433,21 +430,23 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { robotStarted = 1; rt_mutex_release(&mutex_robotStarted); rt_task_set_periodic(NULL, TM_NOW, 500000000); - while (1) { + while (killBattery==0) { cpt++; - if(cpt%2==0){ + if(cpt==2){ rt_mutex_acquire(&mutex_robot, TM_INFINITE); robot.Write(robot.ReloadWD()); rt_mutex_release(&mutex_robot); + cpt=0; } rt_task_wait_period(NULL); rt_mutex_acquire(&mutex_robot, TM_INFINITE); p_mess_answer_battery = robot.Write(robot.GetBattery()); rt_mutex_release(&mutex_robot); - rt_mutex_acquire(&mutex_monitor, TM_INFINITE); - monitor.Write(p_mess_answer_battery); - rt_mutex_release(&mutex_monitor); + WriteInQueue(&q_messageToMon, p_mess_answer_battery); cout << endl << flush; + rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); + killBattery=killBatteryBool; + rt_mutex_release(&mutex_kill_battery); } } } @@ -482,7 +481,7 @@ void Tasks::MoveTask(void *arg) { cpMove = move; rt_mutex_release(&mutex_move); - cout << " move: " << cpMove; + //cout << " move: " << cpMove; rt_mutex_acquire(&mutex_robot, TM_INFINITE); robot.Write(new Message((MessageID)cpMove));