début camera
這個提交存在於:
父節點
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 */
|
||||
/**********************************************************************/
|
||||
|
|
載入中…
新增問題並參考