diff --git a/software/raspberry/superviseur-robot/main.cpp b/software/raspberry/superviseur-robot/main.cpp index 359602f..0383a98 100644 --- a/software/raspberry/superviseur-robot/main.cpp +++ b/software/raspberry/superviseur-robot/main.cpp @@ -36,6 +36,8 @@ int main(int argc, char **argv) { cout<<"# DE STIJL PROJECT #"<CompareID(MESSAGE_CAM_OPEN)) { + //start task Vision } else if (msgRcv->CompareID(MESSAGE_ROBOT_COM_OPEN)) { rt_sem_v(&sem_openComRobot); + } else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITHOUT_WD)) { rt_sem_v(&sem_startRobotWithoutWatchdog); + } else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITH_WD)) { - rt_sem_v(&sem_startRobotWithWatchdog); + //start task robot with watchdog + + } else if (msgRcv->CompareID(MESSAGE_CAM_ASK_ARENA)) { + rt_mutex_acquire(&mutex_searchArena, TM_INFINITE); + searchArena=1; + rt_mutex_release(&mutex_searchArena); + + } else if (msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_START)) { + rt_mutex_acquire(&mutex_getPosition, TM_INFINITE); + getPosition=1; + rt_mutex_release(&mutex_getPosition); + + } else if (msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_STOP)) { + rt_mutex_acquire(&mutex_getPosition, TM_INFINITE); + getPosition=0; + rt_mutex_release(&mutex_getPosition); + + } else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_CONFIRM)) { + rt_mutex_acquire(&mutex_drawArena, TM_INFINITE); + drawArena=1; + rt_mutex_release(&mutex_drawArena); + + rt_mutex_acquire(&mutex_searchArena, TM_INFINITE); + searchArena=0; + rt_mutex_release(&mutex_searchArena); + + rt_mutex_acquire(&mutex_acquireImage, TM_INFINITE); + acquireImage=1; + rt_mutex_release(&mutex_acquireImage); + + } else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_INFIRM)) { + rt_mutex_acquire(&mutex_searchArena, TM_INFINITE); + searchArena=0; + rt_mutex_release(&mutex_searchArena); + + rt_mutex_acquire(&mutex_acquireImage, TM_INFINITE); + acquireImage=1; + rt_mutex_release(&mutex_acquireImage); + } else if (msgRcv->CompareID(MESSAGE_ROBOT_GO_FORWARD) || msgRcv->CompareID(MESSAGE_ROBOT_GO_BACKWARD) || msgRcv->CompareID(MESSAGE_ROBOT_GO_LEFT) || @@ -302,8 +447,15 @@ void Tasks::ReceiveFromMonTask(void *arg) { move = msgRcv->GetID(); rt_mutex_release(&mutex_move); } - delete(msgRcv); // mus be deleted manually, no consumer + delete(msgRcv); // must be deleted manually, no consumer + + rt_mutex_acquire(&mutex_killReceiveFromMon, TM_INFINITE); + Ok=!killReceiveFromMon; + rt_mutex_release(&mutex_killReceiveFromMon); + } + + rt_sem_v(&sem_allow_StartReceive); } /** @@ -359,9 +511,9 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { cout << "Start robot without watchdog ("; //Boolean to get the battery - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBatteryBool=0; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=0; + rt_mutex_release(&mutex_killBattery); rt_mutex_acquire(&mutex_robot, TM_INFINITE); msgSend = robot.Write(robot.StartWithoutWD()); rt_mutex_release(&mutex_robot); @@ -384,9 +536,9 @@ void Tasks::StartRobotTaskWithoutWatchdog(void *arg) { monitor.Write(p_mess_answer_battery); rt_mutex_release(&mutex_monitor); //cout << endl << flush; - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBattery=killBatteryBool; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=killBattery; + rt_mutex_release(&mutex_killBattery); } } } @@ -417,9 +569,9 @@ void Tasks::StartRobotTaskWithWatchdog(void *arg) { rt_mutex_release(&mutex_robot); //boolean to ask battery - rt_mutex_acquire(&mutex_kill_battery, TM_INFINITE); - killBatteryBool=0; - rt_mutex_release(&mutex_kill_battery); + rt_mutex_acquire(&mutex_killBattery, TM_INFINITE); + killBattery=0; + rt_mutex_release(&mutex_killBattery); cout << msgSend->GetID(); cout << ")" << endl; diff --git a/software/raspberry/superviseur-robot/tasks.h b/software/raspberry/superviseur-robot/tasks.h index 609aeda..e9adead 100644 --- a/software/raspberry/superviseur-robot/tasks.h +++ b/software/raspberry/superviseur-robot/tasks.h @@ -65,9 +65,20 @@ private: ComMonitor monitor; ComRobot robot; int robotStarted = 0; - int killBatteryBool = 0; - int killRobotWithoutWd = 0; + int killBattery = 0; int move = MESSAGE_ROBOT_STOP; + bool killReceiveFromMon=0; + bool killVision=0; + bool searchArena=0; + bool killSendMon=0; + bool killStartRobWD=0; + bool killStartRob=0; + bool killDetectlostSupRob=0; + bool acquireImage=0; + bool getPosition=0; + bool drawArena=0; + + /**********************************************************************/ /* Tasks */ @@ -87,8 +98,18 @@ private: RT_MUTEX mutex_robot; RT_MUTEX mutex_robotStarted; RT_MUTEX mutex_move; - RT_MUTEX mutex_kill_battery; - + RT_MUTEX mutex_killBattery; + RT_MUTEX mutex_killReceiveFromMon; + RT_MUTEX mutex_killVision; + RT_MUTEX mutex_searchArena; + RT_MUTEX mutex_drawArena; + RT_MUTEX mutex_getPosition; + RT_MUTEX mutex_killSendMon; + RT_MUTEX mutex_killStartRobWD; + RT_MUTEX mutex_killDetectLostSupRob; + RT_MUTEX mutex_killStartRob; + RT_MUTEX mutex_acquireImage; + /**********************************************************************/ /* Semaphores */ /**********************************************************************/ @@ -97,7 +118,8 @@ private: RT_SEM sem_serverOk; RT_SEM sem_startRobotWithoutWatchdog; RT_SEM sem_startRobotWithWatchdog; - + RT_SEM sem_allow_StartReceive; + /**********************************************************************/ /* Message queues */ /**********************************************************************/