qvyuanxin
2017-07-13 e0a8ae3449f90a6d88ad8d597af8fd27be7cfe6c


git-svn-id: http://192.168.1.226/svn/proxy@706 454eff88-639b-444f-9e54-f578c98de674
2个文件已添加
2个文件已修改
307 ■■■■ 已修改文件
VisitFace/RtspNativeCodec/app/src/main/cpp/CMakeLists.txt 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/RtspNativeCodecJNI.cpp 79 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/TeleWrapper.cpp 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/TeleWrapper.h 66 ●●●●● 补丁 | 查看 | 原始文档 | 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