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 name="Debug__RPI_" type="1">
<toolsSet>
<developmentServer>xenomai@10.105.0.145:22</developmentServer>
<developmentServer>xenomai@10.105.0.146:22</developmentServer>
<platform>2</platform>
</toolsSet>
<dbx_gdbdebugger version="1">

View file

@ -6,6 +6,9 @@
</data>
<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">
<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>
</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

View file

@ -358,6 +358,7 @@ void Tasks::ReceiveFromMonTask(void *arg) {
if(arenaStatus == ArenaStatusEnum::NONE)
arenaStatus = ArenaStatusEnum::SEARCHING;
rt_mutex_release(&mutex_arenaStatus);
rt_sem_v(&sem_arenaChoice, TM_INFINITE);
}
else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_CONFIRM)) {
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)
arenaStatus = ArenaStatusEnum::CONFIRM;
rt_mutex_release(&mutex_arenaStatus);
rt_sem_v(&sem_arenaChoice, TM_INFINITE);
}
else if (msgRcv->CompareID(MESSAGE_CAM_ARENA_INFIRM)) {
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)
arenaStatus = ArenaStatusEnum::INFIRM;
rt_mutex_release(&mutex_arenaStatus);
rt_sem_v(&sem_arenaChoice, TM_INFINITE);
}
else if (msgRcv->CompareID(MESSAGE_CAM_IMAGE)) {
//?
@ -666,15 +669,12 @@ void Tasks::ArenaChoiceTask(void * arg)
ArenaStatusEnum as(ArenaStatusEnum::NONE);
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
// Synchronization barrier (waiting that all tasks are starting)
rt_sem_p(&sem_barrier, TM_INFINITE);
/* The task starts here */
rt_task_set_periodic(NULL, TM_NOW, 490000000);
while(1)
{
rt_task_wait_period(NULL);
// Get semaphore
rt_sem_p(&sem_arenaChoice, TM_INFINITE);
// Check the status of the arena
rt_mutex_acquire(&mutex_arenaStatus, TM_INFINITE);
as = arenaStatus;
@ -736,11 +736,10 @@ void Tasks::ArenaChoiceTask(void * arg)
rt_mutex_acquire(&mutex_cameraStatus, TM_INFINITE);
cameraStatus = CameraStatusEnum::OPENING;
rt_mutex_release(&mutex_cameraStatus);
const MessageID tempMessage = this->OpenCamera();
WriteInQueue(&q_messageToMon, new Message(tempMessage));
this->OpenCamera();
rt_mutex_acquire(&mutex_arenaStatus, TM_INFINITE);
arenaStatus = ArenaStatusEnum::CONFIRMED;
arenaStatus = ArenaStatusEnum::NONE;
rt_mutex_release(&mutex_arenaStatus);
}
}

View file

@ -122,6 +122,7 @@ private:
RT_SEM sem_openComRobot;
RT_SEM sem_serverOk;
RT_SEM sem_startRobot;
RT_SEM sem_arenaChoice;
/**********************************************************************/
/* Message queues */