68 lines
1.8 KiB
C++
68 lines
1.8 KiB
C++
#undef LOG_TAG
|
|
#define LOG_TAG "PowerHalWrapper"
|
|
|
|
#include <dlfcn.h>
|
|
#include <utils/Log.h>
|
|
#include "DisplayHardware/PowerHalWrapper.h"
|
|
|
|
namespace android {
|
|
|
|
#if ((defined MTK_SF_HINT_DISPLAY_INFO) || (defined MTK_SF_HINT_LOW_POWER))
|
|
PowerHalWrapper& PowerHalWrapper::getInstance() {
|
|
static PowerHalWrapper gInstance;
|
|
return gInstance;
|
|
}
|
|
|
|
#define FN_DLSYM(funcVar, funcType, funcName) ({ \
|
|
funcVar = reinterpret_cast<funcType>(dlsym(mSoHandle, funcName)); \
|
|
if (funcVar == nullptr) { \
|
|
ALOGW("failed to find " funcName); \
|
|
} \
|
|
}) \
|
|
|
|
PowerHalWrapper::PowerHalWrapper()
|
|
{
|
|
mSoHandle = NULL;
|
|
mEnableMultiDisplayMode = NULL;
|
|
|
|
mSoHandle = dlopen(LIB_FULL_NAME, RTLD_NOW);
|
|
if (mSoHandle != NULL) {
|
|
void *func = dlsym(mSoHandle, "PowerHal_Wrap_EnableMultiDisplayMode");
|
|
mEnableMultiDisplayMode = reinterpret_cast<enableMultiDisplayMode>(func);
|
|
if (mEnableMultiDisplayMode == NULL) {
|
|
ALOGE("PowerAdvisor::setupPowerHalAPI init fail!");
|
|
}
|
|
FN_DLSYM(mFuncEnableSFLowPowerMode, FuncEnableSFLowPowerMode, "PowerHal_Wrap_EnableSFLowPowerMode");
|
|
} else {
|
|
ALOGE("PowerAdvisor::setupPowerHalAPI dlerror:%s", dlerror());
|
|
}
|
|
}
|
|
|
|
PowerHalWrapper::~PowerHalWrapper()
|
|
{
|
|
if (mSoHandle) {
|
|
dlclose(mSoHandle);
|
|
}
|
|
}
|
|
|
|
void PowerHalWrapper::hintMultiDisplay(const int& enable, const int& fps)
|
|
{
|
|
if (mEnableMultiDisplayMode) {
|
|
ALOGI("mEnableMultiDisplayMode enable=%d fps=%d", enable, fps);
|
|
mEnableMultiDisplayMode(enable, fps);
|
|
}
|
|
}
|
|
|
|
void PowerHalWrapper::hintSFLowPower(int enable)
|
|
{
|
|
if (mFuncEnableSFLowPowerMode) {
|
|
ALOGI("mFuncEnableSFLowPowerMode enable=%d", enable);
|
|
mFuncEnableSFLowPowerMode(enable);
|
|
} else {
|
|
ALOGE("mFuncEnableSFLowPowerMode is empty");
|
|
}
|
|
}
|
|
#endif
|
|
|
|
} // namespace android
|