|
|
|
@ -103,22 +103,12 @@ void Tasks::Init() {
|
|
|
|
|
if (err = rt_mutex_create(&mutex_killSendMon, NULL)) {
|
|
|
|
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err = rt_mutex_create(&mutex_killStartRobWD, NULL)) {
|
|
|
|
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err = rt_mutex_create(&mutex_killDetectLostSupRob, NULL)) {
|
|
|
|
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err = rt_mutex_create(&mutex_killStartRob, NULL)) {
|
|
|
|
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
|
|
|
|
exit(EXIT_FAILURE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err = rt_mutex_create(&mutex_acquireImage, NULL)) {
|
|
|
|
|
cerr << "Error mutex create: " << strerror(-err) << endl << flush;
|
|
|
|
@ -328,7 +318,7 @@ void Tasks::SendToMonTask(void* arg) {
|
|
|
|
|
*/
|
|
|
|
|
void Tasks::ReceiveFromMonTask(void *arg) {
|
|
|
|
|
Message *msgRcv;
|
|
|
|
|
bool Ok=1;
|
|
|
|
|
bool killReceiveFromMonOk=0;
|
|
|
|
|
|
|
|
|
|
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
|
|
|
|
|
// Synchronization barrier (waiting that all tasks are starting)
|
|
|
|
@ -347,8 +337,7 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
|
|
|
|
/**************************************************************************************/
|
|
|
|
|
rt_sem_p(&sem_serverOk, TM_INFINITE);
|
|
|
|
|
cout << "Received message from monitor activated" << endl << flush;
|
|
|
|
|
|
|
|
|
|
while (Ok) {
|
|
|
|
|
while (!killReceiveFromMonOk) {
|
|
|
|
|
msgRcv = monitor.Read();
|
|
|
|
|
cout << "Rcv <= " << msgRcv->ToString() << endl << flush;
|
|
|
|
|
|
|
|
|
@ -367,15 +356,11 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
|
|
|
|
|
|
|
|
|
rt_mutex_acquire(&mutex_killSendMon, TM_INFINITE);
|
|
|
|
|
killSendMon=1;
|
|
|
|
|
rt_mutex_release(&mutex_killSendMon);
|
|
|
|
|
|
|
|
|
|
rt_mutex_acquire(&mutex_killStartRobWD, TM_INFINITE);
|
|
|
|
|
killStartRobWD=1;
|
|
|
|
|
rt_mutex_release(&mutex_killStartRobWD);
|
|
|
|
|
rt_mutex_release(&mutex_killSendMon);
|
|
|
|
|
|
|
|
|
|
rt_mutex_acquire(&mutex_killStartRob, TM_INFINITE);
|
|
|
|
|
killStartRob=1;
|
|
|
|
|
rt_mutex_release(&mutex_killStartRob);
|
|
|
|
|
rt_mutex_acquire(&mutex_killBattery, TM_INFINITE);
|
|
|
|
|
killBattery=1;
|
|
|
|
|
rt_mutex_release(&mutex_killBattery);
|
|
|
|
|
|
|
|
|
|
rt_mutex_acquire(&mutex_killDetectLostSupRob, TM_INFINITE);
|
|
|
|
|
killDetectlostSupRob=1;
|
|
|
|
@ -389,33 +374,41 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_OPEN)) {
|
|
|
|
|
cout << "Command Open Camera Received" << endl << flush;
|
|
|
|
|
//start task Vision
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_ROBOT_COM_OPEN)) {
|
|
|
|
|
cout << "Command Open Communication with Robot Received" << endl << flush;
|
|
|
|
|
rt_sem_v(&sem_openComRobot);
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITHOUT_WD)) {
|
|
|
|
|
cout << "Command Start Robot without Watchdog Received" << endl << flush;
|
|
|
|
|
rt_sem_v(&sem_startRobotWithoutWatchdog);
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_ROBOT_START_WITH_WD)) {
|
|
|
|
|
cout << "Command Start Robot with Watchdog Received" << endl << flush;
|
|
|
|
|
//start task robot with watchdog
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_ASK_ARENA)) {
|
|
|
|
|
cout << "Command Search Arena Received" << endl << flush;
|
|
|
|
|
rt_mutex_acquire(&mutex_searchArena, TM_INFINITE);
|
|
|
|
|
searchArena=1;
|
|
|
|
|
rt_mutex_release(&mutex_searchArena);
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_START)) {
|
|
|
|
|
cout << "Command Get Root Position Received" << endl << flush;
|
|
|
|
|
rt_mutex_acquire(&mutex_getPosition, TM_INFINITE);
|
|
|
|
|
getPosition=1;
|
|
|
|
|
rt_mutex_release(&mutex_getPosition);
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_POSITION_COMPUTE_STOP)) {
|
|
|
|
|
cout << "Command Stop Getting Robot Position Received" << endl << flush;
|
|
|
|
|
rt_mutex_acquire(&mutex_getPosition, TM_INFINITE);
|
|
|
|
|
getPosition=0;
|
|
|
|
|
rt_mutex_release(&mutex_getPosition);
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_CONFIRM)) {
|
|
|
|
|
cout << "Command Confirm Arena Received" << endl << flush;
|
|
|
|
|
rt_mutex_acquire(&mutex_drawArena, TM_INFINITE);
|
|
|
|
|
drawArena=1;
|
|
|
|
|
rt_mutex_release(&mutex_drawArena);
|
|
|
|
@ -428,7 +421,8 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
|
|
|
|
acquireImage=1;
|
|
|
|
|
rt_mutex_release(&mutex_acquireImage);
|
|
|
|
|
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_INFIRM)) {
|
|
|
|
|
} else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_INFIRM)) {
|
|
|
|
|
cout << "Command Infirm Arena Received" << endl << flush;
|
|
|
|
|
rt_mutex_acquire(&mutex_searchArena, TM_INFINITE);
|
|
|
|
|
searchArena=0;
|
|
|
|
|
rt_mutex_release(&mutex_searchArena);
|
|
|
|
@ -449,8 +443,9 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
|
|
|
|
}
|
|
|
|
|
delete(msgRcv); // must be deleted manually, no consumer
|
|
|
|
|
|
|
|
|
|
//Update loop condition
|
|
|
|
|
rt_mutex_acquire(&mutex_killReceiveFromMon, TM_INFINITE);
|
|
|
|
|
Ok=!killReceiveFromMon;
|
|
|
|
|
killReceiveFromMonOk=killReceiveFromMon;
|
|
|
|
|
rt_mutex_release(&mutex_killReceiveFromMon);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|