//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
#include <runtime_info.h>
#include <vconf.h>
+#include <FIo.h>
#include <FAppIActiveAppEventListener.h>
#include <FBaseSysLog.h>
#include <FBaseColArrayListT.h>
static const int _DEVICE_CPU = 1;
static const int _DEVICE_POWER_LEVEL_ON = 1;
static const int _DEVICE_POWER_LEVEL_OFF = 0;
-static const int _APPID_LENGTH = 10;
static const int _DEACTIVATED_BRIGHTNESS_CONTROL = -1;
static const float _BRIGHTNESS_RESOLUTION = 10.0;
+static const wchar_t* POWER_MANAGER_SERVICE_ID = L"osp.sys.ipcserver.powermanager";
#ifndef VCONFKEY_SERVICE_READY
-#define VCONFKEY_SERVICE_READY "memory/appservice/serviceready"
+#define VCONFKEY_SERVICE_READY "memory/deviced/boot_power_on"
#endif
bool _activeApp = false;
+unsigned int _dimmingFlag = GOTO_STATE_NOW;
+unsigned int _screenOnState = LCD_DIM;
bool _deviceCpuPowerOn = false;
bool _keepCpuAwake = false;
bool _keepScreenOnState = false;
_ActiveEventListener::OnActiveAppChanged(const Tizen::App::AppId& appId)
{
int ret = 0;
- SysLog(NID_SYS, "Active App is %ls.", appId.GetPointer());
+ SysLog(NID_SYS, "Active App is %ls. GetApp id %ls", appId.GetPointer(), _AppInfo::GetApplicationId().GetPointer());
if(appId == _AppInfo::GetApplicationId())
{
_activeApp = true;
+ if (_keepScreenOnState == true)
+ {
+ int ret = -1;
+ ret = pm_lock_state(_screenOnState, _dimmingFlag, 0);
+ SysTryReturnVoidResult(NID_SYS, ret == 0,E_SYSTEM, "[E_SYSTEM] It failed to lock the screen state. error code [%d]", ret);
+ SysLog(NID_SYS, "Screen on state is recoveryed.");
+ }
}
else
{
{
ret = pm_unlock_state(LCD_NORMAL, GOTO_STATE_NOW);
SysTryReturnVoidResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to unlock the power state");
- _keepScreenOnState = false;
}
if (_keepCpuAwake == true || _deviceCpuPowerOn == true) //In case of CPU power control, it has to be keep despite of deactive state.
batteryLevel = BATTERY_CRITICAL;
break;
case VCONFKEY_SYSMAN_BAT_LEVEL_LOW:
- batteryLevel = BATTERY_EMPTY;
+ batteryLevel = BATTERY_LOW;
break;
case VCONFKEY_SYSMAN_BAT_LEVEL_HIGH:
- batteryLevel = BATTERY_EMPTY;
+ batteryLevel = BATTERY_HIGH;
break;
case VCONFKEY_SYSMAN_BAT_LEVEL_FULL:
- batteryLevel = BATTERY_EMPTY;
+ batteryLevel = BATTERY_FULL;
break;
default:
SysLogException(NID_SYS, E_SYSTEM, "Unavailable battery level is required.");
SysLogException(NID_SYS, E_SYSTEM, "It failed to get the device max brightness");
maxBrightness = 100;
}
+ sysBrightness = (sysBrightness == 0) ? 1 : sysBrightness;
brightness = (int)ceil(((_BRIGHTNESS_RESOLUTION / (float) maxBrightness)) * sysBrightness);
pIScreenEventListener->OnScreenBrightnessChanged(brightness);
}
_PowerManagerImpl::KeepScreenOnState(bool keepOn, bool dimming)
{
int ret = -1;
- unsigned int state = LCD_DIM;
+ unsigned int state = LCD_DIM, flag = GOTO_STATE_NOW;
_PowerManagerImpl::Init();
+ SysLog(NID_SYS, "Power control option: keep %d, dimming %d", keepOn, dimming);
if (keepOn == true && IsActive() == true)
{
if (dimming)
{
state = LCD_DIM;
+ if(power_get_state() == POWER_STATE_NORMAL)
+ {
+ flag = STAY_CUR_STATE;
+ }
}
else
{
state = LCD_NORMAL;
}
- ret = pm_lock_state(state, GOTO_STATE_NOW, 0);
+ _dimmingFlag = flag;
+ _screenOnState = state;
+ ret = pm_lock_state(state, flag, 0);
SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to lock the screen state");
_keepScreenOnState = true;
}
result
_PowerManagerImpl::InitBatteryEvent(void)
{
- int ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS, BatteryLevelVConfCallback, null);
+ int ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_LEVEL_STATUS, BatteryLevelVConfCallback, null);
SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "It failed to set the battery event");
return E_SUCCESS;
{
result r = E_SUCCESS;
- ArrayList requestMessage;
- ArrayList responseMessage;
+ ArrayList requestMessage;
+ ArrayList responseMessage;
- SysTryReturn(NID_SYS, IsActive() == true, E_SUCCESS, r, "It is not active app.");
+ SysTryReturn(NID_SYS, IsActive() == true, E_SUCCESS, r, "It is not active app.");
- unique_ptr<_IpcClient> pIpcClient (new (std::nothrow) _IpcClient());
- SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
+ unique_ptr<_IpcClient> pIpcClient (new (std::nothrow) _IpcClient());
+ SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
- r = pIpcClient->Construct(_COMMUNICATION_DISPATCHER_IPC_ID);
- SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to create IpcClient", GetErrorMessage(r));
+ SysLog(NID_SYS, "PowerManager is serviced by common-service");
+ r = pIpcClient->Construct(POWER_MANAGER_SERVICE_ID);
+ SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to create IpcClient", GetErrorMessage(r));
- requestMessage.Construct();
- responseMessage.Construct();
+ requestMessage.Construct();
+ responseMessage.Construct();
- String serviceId = _SYSTEM_SERVICE_ID;
- String commandId = _SYSTEM_COMMAND_RESTORE_BRIGHTNESS;
+ String serviceId = _SYSTEM_SERVICE_ID;
+ String commandId = _SYSTEM_COMMAND_RESTORE_BRIGHTNESS;
- requestMessage.Add(serviceId);
- requestMessage.Add(commandId);
+ requestMessage.Add(serviceId);
+ requestMessage.Add(commandId);
- unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
- SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
+ unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
+ SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
- r = pIpcClient->SendRequest(pMsg.get());
- SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to ipc message", GetErrorMessage(r));
+ r = pIpcClient->SendRequest(pMsg.get());
+ SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to ipc message", GetErrorMessage(r));
- unique_ptr<String> pResult((String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA));
+ String* pResult = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA);
- SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response.");
- SysTryReturnResult(NID_SYS, *pResult == _SYSTEM_RESULT_OK, E_SYSTEM, "It is failed to set brightness.");
+ SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response.");
+ SysTryReturnResult(NID_SYS, *pResult == _SYSTEM_RESULT_OK, E_SYSTEM, "It is failed to set brightness.");
+ responseMessage.RemoveAll(true);
return E_SUCCESS;
}
int actualBrightness = 0;
result r = E_SUCCESS;
- SysTryReturn(NID_SYS, IsActive() == true, E_SUCCESS, r, "It is not active app.");
SysTryReturnResult(NID_SYS, (brightness > 0 && brightness < 11), E_OUT_OF_RANGE,
- "[E_OUT_OF_RANGE] The specified brightness is out of range.");
+ "[E_OUT_OF_RANGE] The specified brightness is out of range.");
SysLog(NID_SYS, "Set brightness (%d)", brightness);
actualBrightness = maxBrightness * brightness / _BRIGHTNESS_RESOLUTION;
- ArrayList requestMessage;
- ArrayList responseMessage;
+ ArrayList requestMessage;
+ ArrayList responseMessage;
- unique_ptr<_IpcClient> pIpcClient (new (std::nothrow) _IpcClient());
- SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
+ unique_ptr<_IpcClient> pIpcClient (new (std::nothrow) _IpcClient());
+ SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
- r = pIpcClient->Construct(_COMMUNICATION_DISPATCHER_IPC_ID);
- SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to create IpcClient", GetErrorMessage(r));
+ SysLog(NID_SYS, "PowerManager is serviced by common-service");
+ r = pIpcClient->Construct(POWER_MANAGER_SERVICE_ID);
+ SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to create IpcClient", GetErrorMessage(r));
- requestMessage.Construct();
- responseMessage.Construct();
+ requestMessage.Construct();
+ responseMessage.Construct();
- String serviceId = _SYSTEM_SERVICE_ID;
- String commandId = _SYSTEM_COMMAND_CHANGE_BRIGHTNESS;
+ String serviceId = _SYSTEM_SERVICE_ID;
+ String commandId = _SYSTEM_COMMAND_CHANGE_BRIGHTNESS;
String brightnessValue;
brightnessValue.Append(actualBrightness);
- requestMessage.Add(serviceId);
- requestMessage.Add(commandId);
- requestMessage.Add(brightnessValue);
+ requestMessage.Add(serviceId);
+ requestMessage.Add(commandId);
+ requestMessage.Add(brightnessValue);
- unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
- SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
+ unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
+ SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
- r = pIpcClient->SendRequest(pMsg.get());
- SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to ipc message", GetErrorMessage(r));
+ r = pIpcClient->SendRequest(pMsg.get());
+ SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to ipc message", GetErrorMessage(r));
- unique_ptr<String> pResult((String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA));
+ String* pResult = (String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA);
- SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response.");
- SysTryReturnResult(NID_SYS, *pResult == _SYSTEM_RESULT_OK, E_SYSTEM, "It is failed to set brightness.");
+ SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response.");
+ SysTryReturnResult(NID_SYS, *pResult == _SYSTEM_RESULT_OK, E_SYSTEM, "It is failed to set brightness.");
+ responseMessage.RemoveAll(true);
return E_SUCCESS;
}
pSceenEventList->Construct();
int errorCode = 0;
errorCode = vconf_notify_key_changed(VCONFKEY_PM_CURRENT_BRIGHTNESS, ScreenEventVConfCallback, null);
- SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It failed to add ScreenEvent listener.");
+ SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It failed to add ScreenEvent listener on VCONFKEY_PM_CURRENT_BRIGHTNESS.");
errorCode = power_set_changed_cb(PowerChangedCallback, null);
- SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It failed to add ScreenEvent listener.");
+ if(errorCode != POWER_ERROR_NONE)
+ {
+ SysLogException(NID_SYS, E_SYSTEM, "It is failed to register power callback. So unregister VCONFKEY_PM_CURRENT_BRIGHTNESS also.");
+ vconf_ignore_key_changed(VCONFKEY_PM_CURRENT_BRIGHTNESS, ScreenEventVConfCallback);
+ }
+ SysTryReturnResult(NID_SYS, errorCode == POWER_ERROR_NONE, E_SYSTEM, "It failed to add ScreenEvent listener.");
__pSceenEventList = pSceenEventList.release();
SysLog(NID_SYS,"It successed to register power_set_changed_cb");
}
SysTryReturnResult(NID_SYS,__pSceenEventList != null, E_OBJ_NOT_FOUND, "IScreenEventListener list is empty");
r = __pSceenEventList->Remove(&listener);
-
- if (__pSceenEventList->GetCount() == 0)
- {
- delete __pSceenEventList;
- __pSceenEventList = null;
- }
- return r;
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_OBJ_NOT_FOUND, "listener is not exist.");
+ return E_SUCCESS;
}
if (__pChargingEventList == null)
{
- __pChargingEventList = new ArrayListT<IChargingEventListener*>;
- SysTryReturnResult(NID_SYS, __pChargingEventList, E_SYSTEM, "Memory allocation failed");
- __pChargingEventList->Construct();
- int errorCode = 0;
- errorCode = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, RuntimeInfoChangedCallback, null);
- if (errorCode != 0)
- {
- SysLog(NID_SYS, "It failed to register battery charging event");
+ int errorCode = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, RuntimeInfoChangedCallback, null);
+ SysTryReturnResult(NID_SYS, errorCode == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to register RUNTIME_INFO_KEY_BATTERY_IS_CHARGING.");
+
+ __pChargingEventList = new ArrayListT<IChargingEventListener*>;
+ SysTryReturnResult(NID_SYS, __pChargingEventList, E_SYSTEM, "Memory allocation failed");
+ r = __pChargingEventList->Construct();
+ if(r != E_SUCCESS)
+ {
delete __pChargingEventList;
__pChargingEventList = null;
- return E_SYSTEM;
- }
+ }
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to construct charging event list.");
}
if (isSet == false || __pChargingEventList->GetCount() == 0)
result r = E_SUCCESS;
SysTryReturnResult(NID_SYS,__pChargingEventList != null, E_OBJ_NOT_FOUND, "__pChargingEventList list is empty");
-
r = __pChargingEventList->Remove(&listener);
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_OBJ_NOT_FOUND, "listener is not exist.");
- if (__pChargingEventList->GetCount() == 0)
- {
- delete __pChargingEventList;
- __pChargingEventList = null;
- }
- return r;
+ return E_SUCCESS;
}
result
SysTryReturnResult(NID_SYS,__pBootEventList != null, E_OBJ_NOT_FOUND, "IBootEventListener list is empty");
r = __pBootEventList->Remove(&listener);
-
- if (__pBootEventList->GetCount() == 0)
- {
- delete __pBootEventList;
- __pBootEventList = null;
- }
+ SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_OBJ_NOT_FOUND, "IBootEventListener list is empty");
return E_SUCCESS;
}