/* * 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 #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; } }