VisitFace/RtspNativeCodec/app/src/main/cpp/CMakeLists.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
VisitFace/RtspNativeCodec/app/src/main/cpp/TeleWrapper.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
VisitFace/RtspNativeCodec/app/src/main/cpp/TeleWrapper.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
VisitFace/RtspNativeCodec/app/src/main/cpp/CMakeLists.txt
@@ -14,6 +14,7 @@ DebugNetwork.cpp CaptureCamera.cpp serial.c TeleWrapper.cpp "D:/workspace/proxy/RtspFace/PipeLine.cpp" "D:/workspace/proxy/RtspFace/Logger/src/logger.cc" VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp
@@ -17,12 +17,8 @@ #include <stdlib.h> #include "DebugNetwork.h" #include "TeleWrapper.h" extern "C" { #include "serial.h" } //#include <mediastreamer2/include/mediastreamer2/msjava.h> @@ -34,6 +30,8 @@ static std::string g_stface_license_str; CameraWrapper g_CameraWrappers[CAMERA_COUNT]; TeleWrapper g_TeleWrapper; CaptureCamera g_CaptureCamera; @@ -57,6 +55,7 @@ g_CameraWrappers[i].pipeLineRender = new PipeLine; //PipeLine& pipeLine(*(g_CameraWrappers[i].pipeLineDecoderDetector)); } g_TeleWrapper.start(); } void @@ -736,55 +735,14 @@ } int fd =-1; #define PORT "/dev/ttyS4" #define BAUD 2400 static void callNum( char phone) { switch (phone) { case '1': serialWriteString(fd, "DA");//1 break; case '2': serialWriteString(fd, "DB");//2 break; case '3': serialWriteString(fd, "DC");//3 break; case '4': serialWriteString(fd, "DD");//4 break; case '5': serialWriteString(fd, "DE");//5 break; case '6': serialWriteString(fd, "DF");//6 break; case '7': serialWriteString(fd, "DG");//7 break; case '8': serialWriteString(fd, "DH");//8 break; case '9': serialWriteString(fd, "DI");//9 break; case '0': serialWriteString(fd, "DJ");//0 break; } } bool Java_cn_com_basic_face_util_RtspFaceNative_telCall(JNIEnv *env, jclass clazz, jstring phone) { int fd = serialOpen(PORT, BAUD); serialWriteString(fd, "AA"); sleep(1); std::string _phone; std::string _phone; { const char *utfFunc = env->GetStringUTFChars(phone, NULL); _phone = utfFunc; @@ -792,23 +750,24 @@ } const char *phoneNum = _phone.c_str(); while (*phoneNum) { sleep(1); callNum(*(phoneNum++)); } return false; TeleTask task; task.command= TeleTask::CALL; task.param = phoneNum; g_TeleWrapper.push(task); } void Java_cn_com_basic_face_util_RtspFaceNative_Hang(JNIEnv *env, jclass clazz) { serialWriteString(fd, "BA"); serialClose(fd); TeleTask task; task.command =TeleTask::HANGUP; g_TeleWrapper.push(task); } void Java_cn_com_basic_face_util_RtspFaceNative_TelShutdown(JNIEnv *env, jclass clazz) { LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_telShutdown" << LOG_ENDL; g_TeleWrapper.stop(); } void Java_cn_com_basic_face_util_RtspFaceNative_setFaceLabel(JNIEnv *env, jclass clazz, jint cameraIdx, jint stTrackId, jstring phoneNumber) { LOG_DEBUG << "@@@ Java_cn_com_basic_face_util_RtspFaceNative_setFaceLabel" << LOG_ENDL; VisitFace/RtspNativeCodec/app/src/main/cpp/TeleWrapper.cpp
New file @@ -0,0 +1,161 @@ #include "TeleWrapper.h" bool TeleWrapper::start() { LOG_INFO << "TeleWrapper::start" << LOG_ENDL; running = true; pthread_mutex_init(&mutex, NULL); // // 初始化互斥对象 int ret = pthread_create(&tel_thid, NULL, TeleWrapper::tel_thd, this); if(ret != 0) { LOGP(ERROR, "pthread_create: %s/n", strerror(ret)); running = false; return false; } return true; } void TeleWrapper::stop() { LOG_INFO << "TeleWrapper::stop" << LOG_ENDL; if (!running) return; running = false; pthread_join(tel_thid, NULL); pthread_mutex_destroy(&mutex); } void TeleWrapper::pushTask(TeleTask task) { if(telQueue.empty()|| telQueue.back().command!=task.command) //队列为空 或者 放入任务和前一个任务不一致 时 { telQueue.push(task); //放进队列 thread_resume(); //唤醒线程 } } void TeleWrapper::popTask() { TeleTask curTask = telQueue.front(); telQueue.pop(); switch(curTask.command) { case TeleTask::CALL: //打电话 callNum(curTask.param); break: case TeleTask::HANGUP: // 挂机 hang(); break; } } void TeleWrapper:: *tel_thd(void *arg) //线程函数 { LOG_INFO << "TeleWrapper::tel_thd start" << LOG_ENDL; TeleWrapper& teleWrapper = *(TeleWrapper*)arg; while(teleWrapper.running) { if(telQueue.empty()) { thread_pause(); return ; } if(!pthread_pause) { popTask(); } } LOG_INFO << "TeleWrapper::tel_thd stop" << LOG_ENDL; } void TeleWrapper::thread_pause() { if(!pthread_pause) { pthread_mutex_lock(&mutex); pthread_pause = true; LOG_INFO << "thread pause " << LOG_ENDL; pthread_mutex_unlock(&mutex) } } void TeleWrapper::thread_resume() { if(pthread_pause) { pthread_mutex_lock(&mutex); pthread_pause = false; pthread_cond_broadcast(&cond_pause); LOG_INFO << "thread wake " << LOG_ENDL; pthread_mutex_unlock(&mutex) } } void TeleWrapper::callNum( char phone) { switch (phone) { case '1': serialWriteString(fd, "DA");//1 break; case '2': serialWriteString(fd, "DB");//2 break; case '3': serialWriteString(fd, "DC");//3 break; case '4': serialWriteString(fd, "DD");//4 break; case '5': serialWriteString(fd, "DE");//5 break; case '6': serialWriteString(fd, "DF");//6 break; case '7': serialWriteString(fd, "DG");//7 break; case '8': serialWriteString(fd, "DH");//8 break; case '9': serialWriteString(fd, "DI");//9 break; case '0': serialWriteString(fd, "DJ");//0 break; } } void TeleWrapper::callNum( std::string phone) { fd = serialOpen(PORT, BAUD); serialWriteString(fd, "AA");//摘机 sleep(1); while (*phone) { sleep(1); callNum(*(phone++)); } } void TeleWrapper::hang() { serialWriteString(fd, "BA"); serialClose(fd); } VisitFace/RtspNativeCodec/app/src/main/cpp/TeleWrapper.h
New file @@ -0,0 +1,66 @@ #ifndef __TeleWrapper_H__ #define __TeleWrapper_H__ #include <queue> #include <pthread.h> #include <unistd.h> #include <stdlib.h> #include "serial.h" #define PORT "/dev/ttyS4" #define BAUD 2400 typedef struct TeleTask { enum Tel { CALL, HANGUP }; Tel command; std::string param; }TeleTask; class TeleWrapper { public: TeleWrapper() {} ~TeleWrapper() {} bool start(); void stop(); void pushTask(TeleTask task); void popTask(); void call(std::string phone); void hang(); pthread_t tel_thid; bool running; private: int fd =-1; std::queue<TeleTask> telQueue; void *tel_thd(void *arg) ; bool pthread_pause = false; pthread_cond_t cond_pause = PTHREAD_COND_INITIALIZER; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void thread_pause(); void thread_resume(); void callNum( char phone); }; #endif