Added semaphore for Arena

This commit is contained in:
Yohan Boujon 2024-05-14 13:55:27 +02:00
parent 8b39e4e099
commit 9df1899580
6 changed files with 14 additions and 11 deletions

View file

@ -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">

View file

@ -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>

View file

@ -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

View file

@ -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);
} }
} }

View file

@ -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 */