116 lines
2.6 KiB
C++
116 lines
2.6 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 "TV"
|
|
#define LOG_CLASS_TAG "CTvResman"
|
|
|
|
#include <cstddef>
|
|
#include "CTvLog.h"
|
|
#include "CTvResman.h"
|
|
|
|
CTvResman *CTvResman::mInstance;
|
|
|
|
CTvResman::CTvResman()
|
|
{
|
|
mOnPreemptRegistered = false;
|
|
mResmanFd = -1;
|
|
}
|
|
|
|
CTvResman::~CTvResman()
|
|
{
|
|
Resman_Release();
|
|
}
|
|
|
|
CTvResman *CTvResman::getInstance()
|
|
{
|
|
if (nullptr == mInstance) {
|
|
mInstance = new CTvResman();
|
|
}
|
|
|
|
return mInstance;
|
|
}
|
|
|
|
void CTvResman::onResPreemptCallback(void* param)
|
|
{
|
|
LOGE("%s :resmanage onpreemt.\n", __FUNCTION__);
|
|
CTvResman *mTvResman = (CTvResman*) param;
|
|
if (mTvResman->getResmanHandle() != -1) {
|
|
LOGD("%s :wait implement it\n", __FUNCTION__);
|
|
}
|
|
}
|
|
|
|
int CTvResman::getResmanHandle()
|
|
{
|
|
return mResmanFd;
|
|
}
|
|
|
|
bool CTvResman::Resman_Request(int app_type, int res_type, int timeout,const char *arg)
|
|
{
|
|
LOGD("%s:start request resource %d\n", __FUNCTION__, res_type);
|
|
if (mResmanFd == -1)
|
|
mResmanFd = resman_init("tvserver", app_type);
|
|
|
|
if (!mOnPreemptRegistered) {
|
|
resman_register(mResmanFd, onResPreemptCallback, this);
|
|
mOnPreemptRegistered = true;
|
|
}
|
|
|
|
if (!resman_acquire_para(mResmanFd, res_type, timeout, 0, arg)) {
|
|
LOGE("%s:res_acquire(handle=%d,res=%d) failed!!!\n",
|
|
__FUNCTION__,mResmanFd,res_type);
|
|
return false;
|
|
}
|
|
LOGD("%s:tvserver request resource (%d) done\n", __FUNCTION__, res_type);
|
|
|
|
return true;
|
|
}
|
|
|
|
int CTvResman::Resman_Query(void * res_status)
|
|
{
|
|
int ret;
|
|
|
|
if (mResmanFd == -1)
|
|
mResmanFd = resman_init("tvserver", RESMAN_APP_GST);
|
|
if (mResmanFd == -1)
|
|
return -1;
|
|
if (!mOnPreemptRegistered) {
|
|
resman_register(mResmanFd, onResPreemptCallback, this);
|
|
mOnPreemptRegistered = true;
|
|
}
|
|
ret = resman_query(mResmanFd, (struct resman_para *) res_status);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void CTvResman::Resman_FreeRes(int res_type)
|
|
{
|
|
if (mResmanFd == -1)
|
|
return;
|
|
|
|
if (resman_release(mResmanFd, res_type)) {
|
|
LOGE("%s:Resman_FreeRes(handle=%d,res=%d) failed!!!\n",
|
|
__FUNCTION__,mResmanFd,res_type);
|
|
return;
|
|
}
|
|
}
|
|
|
|
void CTvResman::Resman_Release()
|
|
{
|
|
if (mResmanFd != -1) {
|
|
|
|
if (mOnPreemptRegistered) {
|
|
resman_unregister(mResmanFd);
|
|
mOnPreemptRegistered = false;
|
|
}
|
|
|
|
resman_close(mResmanFd);
|
|
mResmanFd = -1;
|
|
}
|
|
}
|
|
|