Files
2026-08-24 10:03:24 +08:00

102 lines
2.5 KiB
C++

/*
* Copyright (c) 2014 Amlogic, Inc. All rights reserved.
*
* This source code is subject to the terms and conditions defined in the
* file 'LICENSE' which is part of this source code package.
*
* Description: c++ file
*/
#define LOG_MODULE_TAG "PQ"
#define LOG_CLASS_TAG "CDevicePollCheckThread"
#include "CDevicePollCheckThread.h"
#include <pthread.h>
CDevicePollCheckThread::CDevicePollCheckThread()
{
mpObserver = NULL;
m_event.events = EPOLLIN;
if (mEpoll.create() < 0) {
LOGE("create epoll fail\n");
return;
}
//VFrameSize change
if (mVFrameSizeFile.PQ_OpenFile(VFRAME_MOUDLE_PATH) > 0) {
m_event.data.fd = mVFrameSizeFile.PQ_GetFileFd();
m_event.events = EPOLLIN | EPOLLET;
mEpoll.add(mVFrameSizeFile.PQ_GetFileFd(), &m_event);
}
//TX
if (mTXStatusFile.PQ_OpenFile(TX_MOUDLE_PATH) > 0) {
m_event.data.fd = mTXStatusFile.PQ_GetFileFd();
m_event.events = EPOLLIN | EPOLLET;
mEpoll.add(mTXStatusFile.PQ_GetFileFd(), &m_event);
}
}
CDevicePollCheckThread::~CDevicePollCheckThread()
{
}
int CDevicePollCheckThread::StartCheck()
{
int ret;
pthread_t thread_id;
ret = pthread_create(&thread_id, NULL, PqPollThread, (void *)this);
if (ret != 0) {
LOGD("create PQPollDetect thread fail\n");
ret = -1;
} else {
LOGE("PQPollDetect thread id (%lu) done\n", thread_id);
ret = 0;
}
return ret;
}
void* CDevicePollCheckThread::PqPollThread(void *param)
{
CDevicePollCheckThread *pThis = (CDevicePollCheckThread *)param;
pThis->threadLoop();
return NULL;
}
void *CDevicePollCheckThread::threadLoop(void)
{
if ( mpObserver == NULL ) {
LOGD("%s: mpObserver is null!\n", __FUNCTION__);
return NULL;
} else {
while (1) {
int num = mEpoll.wait();
for (int i = 0; i < num; ++i) {
int fd = (mEpoll)[i].data.fd;
/**
* EPOLLIN event
*/
if ((mEpoll)[i].events & EPOLLIN) {
if (fd == mVFrameSizeFile.PQ_GetFileFd()) {//vframesize change
mpObserver->onVframeSizeChange();
} else if (fd == mTXStatusFile.PQ_GetFileFd()) {//TX
mpObserver->onTXStatusChange();
}
if ((mEpoll)[i].events & EPOLLOUT) {
}
}
}
}//exit
LOGD("exit CDevicePollCheckThread!\n");
return NULL;
}
}