mirror of
https://github.com/yoboujon/dumber.git
synced 2025-06-08 13:50:49 +02:00
Added semaphore for Arena
This commit is contained in:
parent
8b39e4e099
commit
9df1899580
6 changed files with 14 additions and 11 deletions
|
@ -41,7 +41,7 @@
|
||||||
</conf>
|
</conf>
|
||||||
<conf name="Debug__RPI_" type="1">
|
<conf name="Debug__RPI_" type="1">
|
||||||
<toolsSet>
|
<toolsSet>
|
||||||
<developmentServer>xenomai@10.105.0.145:22</developmentServer>
|
<developmentServer>xenomai@10.105.0.146:22</developmentServer>
|
||||||
<platform>2</platform>
|
<platform>2</platform>
|
||||||
</toolsSet>
|
</toolsSet>
|
||||||
<dbx_gdbdebugger version="1">
|
<dbx_gdbdebugger version="1">
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
</data>
|
</data>
|
||||||
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
|
||||||
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
|
||||||
<group/>
|
<group>
|
||||||
|
<file>file:/home/boujon/Documents/dumber/software/raspberry/superviseur-robot/tasks.cpp</file>
|
||||||
|
<file>file:/home/boujon/Documents/dumber/software/raspberry/superviseur-robot/tasks.h</file>
|
||||||
|
</group>
|
||||||
</open-files>
|
</open-files>
|
||||||
</project-private>
|
</project-private>
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
#Tue Nov 13 11:04:27 CET 2018
|
#Tue May 14 13:44:12 CEST 2024
|
||||||
project.license=gpl30
|
project.license=gpl30
|
||||||
|
|
|
@ -358,6 +358,7 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
||||||
if(arenaStatus == ArenaStatusEnum::NONE)
|
if(arenaStatus == ArenaStatusEnum::NONE)
|
||||||
arenaStatus = ArenaStatusEnum::SEARCHING;
|
arenaStatus = ArenaStatusEnum::SEARCHING;
|
||||||
rt_mutex_release(&mutex_arenaStatus);
|
rt_mutex_release(&mutex_arenaStatus);
|
||||||
|
rt_sem_v(&sem_arenaChoice, TM_INFINITE);
|
||||||
}
|
}
|
||||||
else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_CONFIRM)) {
|
else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_CONFIRM)) {
|
||||||
std::cout << "\n\n\nArena Confirm asked !!!\n\n\n" << std::endl;
|
std::cout << "\n\n\nArena Confirm asked !!!\n\n\n" << std::endl;
|
||||||
|
@ -365,6 +366,7 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
||||||
if(arenaStatus == ArenaStatusEnum::SEARCHED)
|
if(arenaStatus == ArenaStatusEnum::SEARCHED)
|
||||||
arenaStatus = ArenaStatusEnum::CONFIRM;
|
arenaStatus = ArenaStatusEnum::CONFIRM;
|
||||||
rt_mutex_release(&mutex_arenaStatus);
|
rt_mutex_release(&mutex_arenaStatus);
|
||||||
|
rt_sem_v(&sem_arenaChoice, TM_INFINITE);
|
||||||
}
|
}
|
||||||
else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_INFIRM)) {
|
else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_INFIRM)) {
|
||||||
std::cout << "\n\n\nArena Infirm asked !!!\n\n\n" << std::endl;
|
std::cout << "\n\n\nArena Infirm asked !!!\n\n\n" << std::endl;
|
||||||
|
@ -372,6 +374,7 @@ void Tasks::ReceiveFromMonTask(void *arg) {
|
||||||
if(arenaStatus == ArenaStatusEnum::SEARCHED)
|
if(arenaStatus == ArenaStatusEnum::SEARCHED)
|
||||||
arenaStatus = ArenaStatusEnum::INFIRM;
|
arenaStatus = ArenaStatusEnum::INFIRM;
|
||||||
rt_mutex_release(&mutex_arenaStatus);
|
rt_mutex_release(&mutex_arenaStatus);
|
||||||
|
rt_sem_v(&sem_arenaChoice, TM_INFINITE);
|
||||||
}
|
}
|
||||||
else if (msgRcv->CompareID(MESSAGE_CAM_IMAGE)) {
|
else if (msgRcv->CompareID(MESSAGE_CAM_IMAGE)) {
|
||||||
//?
|
//?
|
||||||
|
@ -666,15 +669,12 @@ void Tasks::ArenaChoiceTask(void * arg)
|
||||||
ArenaStatusEnum as(ArenaStatusEnum::NONE);
|
ArenaStatusEnum as(ArenaStatusEnum::NONE);
|
||||||
|
|
||||||
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
|
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
|
||||||
// Synchronization barrier (waiting that all tasks are starting)
|
|
||||||
rt_sem_p(&sem_barrier, TM_INFINITE);
|
rt_sem_p(&sem_barrier, TM_INFINITE);
|
||||||
|
|
||||||
/* The task starts here */
|
|
||||||
rt_task_set_periodic(NULL, TM_NOW, 490000000);
|
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
rt_task_wait_period(NULL);
|
// Get semaphore
|
||||||
|
rt_sem_p(&sem_arenaChoice, TM_INFINITE);
|
||||||
// Check the status of the arena
|
// Check the status of the arena
|
||||||
rt_mutex_acquire(&mutex_arenaStatus, TM_INFINITE);
|
rt_mutex_acquire(&mutex_arenaStatus, TM_INFINITE);
|
||||||
as = arenaStatus;
|
as = arenaStatus;
|
||||||
|
@ -736,11 +736,10 @@ void Tasks::ArenaChoiceTask(void * arg)
|
||||||
rt_mutex_acquire(&mutex_cameraStatus, TM_INFINITE);
|
rt_mutex_acquire(&mutex_cameraStatus, TM_INFINITE);
|
||||||
cameraStatus = CameraStatusEnum::OPENING;
|
cameraStatus = CameraStatusEnum::OPENING;
|
||||||
rt_mutex_release(&mutex_cameraStatus);
|
rt_mutex_release(&mutex_cameraStatus);
|
||||||
const MessageID tempMessage = this->OpenCamera();
|
this->OpenCamera();
|
||||||
WriteInQueue(&q_messageToMon, new Message(tempMessage));
|
|
||||||
|
|
||||||
rt_mutex_acquire(&mutex_arenaStatus, TM_INFINITE);
|
rt_mutex_acquire(&mutex_arenaStatus, TM_INFINITE);
|
||||||
arenaStatus = ArenaStatusEnum::CONFIRMED;
|
arenaStatus = ArenaStatusEnum::NONE;
|
||||||
rt_mutex_release(&mutex_arenaStatus);
|
rt_mutex_release(&mutex_arenaStatus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,6 +122,7 @@ private:
|
||||||
RT_SEM sem_openComRobot;
|
RT_SEM sem_openComRobot;
|
||||||
RT_SEM sem_serverOk;
|
RT_SEM sem_serverOk;
|
||||||
RT_SEM sem_startRobot;
|
RT_SEM sem_startRobot;
|
||||||
|
RT_SEM sem_arenaChoice;
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
/* Message queues */
|
/* Message queues */
|
||||||
|
|
Loading…
Add table
Reference in a new issue