début camera

這個提交存在於:
alejeune 2023-03-29 12:19:16 +02:00
父節點 7e57b8fa87
當前提交 2981e6b0a4
共有 3 個檔案被更改,包括 87 行新增4 行删除

查看文件

@ -1,11 +1,11 @@
#Wed Mar 29 10:02:58 CEST 2023
#Wed Mar 29 12:17:27 CEST 2023
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/messages.cpp=c1679401432892
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/Package-Debug__RPI_.bash=c1679401432930
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/commonitor.cpp=c1679401432864
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/gdbsudo.sh=c1679401432813
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/base64/LICENSE=c1679401432832
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/comrobot.cpp=c1679401457314
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.cpp=c1680076975888
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.cpp=c1680085038250
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/.dep.inc=c1679401432701
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/Makefile-variables.mk=c1679401432922
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/img.cpp=c1679401457320
@ -15,7 +15,7 @@
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/Makefile=c1679401432709
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/.gitignore=c1679401432820
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/wrapper.c=c1679401457381
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.h=c1679406345632
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/tasks.h=c1680084054153
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/main.cpp=c1679404095224
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/nbproject/project.properties=c1679401432983
/home/alejeune/Documents/4ir/S2/dumber/software/raspberry/superviseur-robot/lib/camera.cpp=c1679401457304

查看文件

@ -283,6 +283,8 @@ void Tasks::ReceiveFromMonTask(void *arg) {
rt_mutex_acquire(&mutex_move, TM_INFINITE);
move = msgRcv->GetID();
rt_mutex_release(&mutex_move);
} else if (msgRcv->CompareID(MESSAGE_CAM_OPEN)){
rt_sem_v(&sem_startCamera);
}
delete(msgRcv); // must be deleted manually, no consumer
}
@ -354,6 +356,42 @@ void Tasks::StartRobotTask(void *arg) {
}
}
/**
* @brief Thread starting the communication with the robot.
*/
void Tasks::StartCameraTask(void *arg) {
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
// Synchronization barrier (waiting that all tasks are starting)
rt_sem_p(&sem_barrier, TM_INFINITE);
/**************************************************************************************/
/* The task startRobot starts here */
/**************************************************************************************/
while (1) {
Message * msgSend;
rt_sem_p(&sem_startCamera, TM_INFINITE);
cout << "Start Camera ";
rt_mutex_acquire(&mutex_camera, TM_INFINITE);
if(!camera.Open()){
msgSend = new Message(MESSAGE_ANSWER_NACK)
WriteInQueue(&q_messageToMon, msgSend); // msgSend will be deleted by sendToMon
cout << msgSend->GetID << endl << flush;
rt_mutex_release(&mutex_camera);
continue;
}
msg = new Message(MESSAGE_ANSWER_ACK);
cout << msgSend->GetID << endl << flush;
rt_mutex_release(&mutex_camera);
if (msgSend->GetID() == MESSAGE_ANSWER_ACK) {
rt_mutex_acquire(&mutex_cameraStarted, TM_INFINITE);
cameraStarted = 1;
rt_mutex_release(&mutex_cameraStarted);
}
}
}
/**
* @brief Thread handling control of the robot.
*/
@ -424,6 +462,34 @@ void Tasks::BatteryTask(void *arg) {
}
}
/**
* @brief task in charge of managing the camera.
*/
void CameraTask(void *arg){
int cam;
cout << "Start " << __PRETTY_FUNCTION__ << endl << flush;
// Synchronization barrier (waiting that all tasks are starting)
rt_sem_p(&sem_barrier, TM_INFINITE);
rt_task_set_periodic(NULL, TM_NOW, 100*1000*1000);
while(1){
rt_task_wait_period(NULL);
rt_mutex_acquire(&mutex_camera, TM_INFINITE);
cam = cameraStarted;
if(cam){
// Lancer le traitement périodique
rt_mutex_release(&mutex_camera);
}else{
rt_mutex_release(&mutex_camera);
rt_mutex_acquire(&mutex, TM_INFINITE);
rt_mutex_release(&mutex_camera);
}
}
}
/**
* Write a message in a given queue
* @param queue Queue identifier

查看文件

@ -64,7 +64,9 @@ private:
/**********************************************************************/
ComMonitor monitor;
ComRobot robot;
Camera camera;
int robotStarted = 0;
int cameraStarted = 0;
int move = MESSAGE_ROBOT_STOP;
/**********************************************************************/
@ -75,16 +77,19 @@ private:
RT_TASK th_receiveFromMon;
RT_TASK th_openComRobot;
RT_TASK th_startRobot;
RT_TASK th_startCamera;
RT_TASK th_move;
RT_TASK th_battery;
RT_TASK th_camera;
/**********************************************************************/
/* Mutex */
/**********************************************************************/
RT_MUTEX mutex_monitor;
RT_MUTEX mutex_robot;
RT_MUTEX mutex_robotStarted;
RT_MUTEX mutex_cameraStarted;
RT_MUTEX mutex_move;
RT_MUTEX mutex_camera;
/**********************************************************************/
/* Semaphores */
@ -93,6 +98,7 @@ private:
RT_SEM sem_openComRobot;
RT_SEM sem_serverOk;
RT_SEM sem_startRobot;
RT_SEM sem_startCamera;
/**********************************************************************/
/* Message queues */
@ -128,6 +134,11 @@ private:
*/
void StartRobotTask(void *arg);
/**
* @brief Thread starting the communication with the robot.
*/
void StartCameraTask(void *arg);
/**
* @brief Thread handling control of the robot.
*/
@ -139,6 +150,12 @@ private:
*/
void BatteryTask(void *arg);
/**
* @brief task in charge of managing the camera.
*/
void CameraTask(void *arg);
/**********************************************************************/
/* Queue services */
/**********************************************************************/