2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FSys_PowerManagerImpl.cpp
20 * @brief This is the implementation file for _PowerManagerImpl class.
23 #include <unique_ptr.h>
28 #include <runtime_info.h>
31 #include <FAppIActiveAppEventListener.h>
32 #include <FBaseSysLog.h>
33 #include <FBaseColArrayListT.h>
34 #include <FBaseColIMapEnumerator.h>
35 #include <FSysIBatteryEventListener.h>
36 #include <FSysIChargingEventListener.h>
37 #include <FSysIScreenEventListener.h>
38 #include <FSysIBootEventListener.h>
39 #include <FSys_IPowerManagerEventListener.h>
41 #include <FApp_AppImpl.h>
42 #include <FApp_AppInfo.h>
43 #include <FApp_AppManagerImpl.h>
44 #include <FBase_NativeError.h>
45 #include <FIo_AppServiceIpcMessages.h>
46 #include <FIo_IpcClient.h>
47 #include <FSys_Types.h>
48 #include <FSys_BatteryImpl.h>
49 #include <FSys_DeviceManagerImpl.h>
50 #include <FSys_PowerManagerImpl.h>
54 using namespace Tizen::App;
55 using namespace Tizen::Base;
56 using namespace Tizen::Base::Collection;
57 using namespace Tizen::Io;
59 namespace Tizen { namespace System
62 static const int _DEVICE_CPU = 1;
63 static const int _DEVICE_POWER_LEVEL_ON = 1;
64 static const int _DEVICE_POWER_LEVEL_OFF = 0;
65 static const int _APPID_LENGTH = 10;
66 static const int _DEACTIVATED_BRIGHTNESS_CONTROL = -1;
67 static const float _BRIGHTNESS_RESOLUTION = 10.0;
69 #ifndef VCONFKEY_SERVICE_READY
70 #define VCONFKEY_SERVICE_READY "memory/appservice/serviceready"
73 bool _activeApp = false;
74 bool _deviceCpuPowerOn = false;
75 bool _keepCpuAwake = false;
76 bool _keepScreenOnState = false;
78 IBatteryEventListener* pIBatteryEventListener = null;
80 ArrayListT<IScreenEventListener*>* __pSceenEventList = null;
81 ArrayListT<IChargingEventListener*>* __pChargingEventList = null;
82 ArrayListT<_IPowerManagerEventListener*> __powerEventList;
83 ArrayListT<IBootEventListener*>* __pBootEventList = null;
85 bool _PowerManagerImpl::_InitPowerManager = false;
88 class _ActiveEventListener
89 : public IActiveAppEventListener
92 virtual void OnActiveAppChanged(const Tizen::App::AppId& appId);
96 _ActiveEventListener::OnActiveAppChanged(const Tizen::App::AppId& appId)
99 if(appId == _AppInfo::GetApplicationId())
107 if (_keepScreenOnState == true) //In case of Screen power control, it has to be released automatically, when application goes deactive state.
109 ret = pm_unlock_state(LCD_NORMAL, GOTO_STATE_NOW);
110 SysTryReturnVoidResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to unlock the power state");
111 _keepScreenOnState = false;
114 if (_keepCpuAwake == true || _deviceCpuPowerOn == true) //In case of CPU power control, it has to be keep despite of deactive state.
116 ret = power_lock_state(POWER_STATE_SCREEN_OFF, 0);
117 SysTryReturnVoidResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to lock the power state");
122 _ActiveEventListener* pActiveEventListener = null;
125 DeviceBatteryWarnCallback(device_battery_warn_e status, void* userData)
127 SysLog(NID_SYS, "Battery Warn Level is called %d", status);
128 BatteryLevel batteryLevel;
132 case DEVICE_BATTERY_WARN_EMPTY:
134 batteryLevel = BATTERY_EMPTY;
137 case DEVICE_BATTERY_WARN_CRITICAL:
139 batteryLevel = BATTERY_CRITICAL;
142 case DEVICE_BATTERY_WARN_LOW:
144 batteryLevel = BATTERY_LOW;
147 case DEVICE_BATTERY_WARN_NORMAL:
149 batteryLevel = BATTERY_HIGH;
152 case DEVICE_BATTERY_WARN_FULL:
154 batteryLevel = BATTERY_FULL;
160 _AppImpl* pAppImpl = _AppImpl::GetInstance();
163 SysLog(NID_SYS, "Battery Level event is forwarded");
164 pAppImpl->OnBatteryLevelChanged(batteryLevel);
170 DeviceBatteryCallback(int percent, void* userData)
172 SysLog(NID_SYS, "Battery Level is called %d", percent);
174 if (pIBatteryEventListener != null)
176 pIBatteryEventListener->OnBatteryLevelChangedInPercentage(percent);
181 RuntimeInfoChangedCallback(runtime_info_key_e key, void* userData)
185 if(_AppInfo::GetAppState() == RUNNING)
187 if (__pChargingEventList != null)
189 bool charging = false;
190 ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, &charging);
193 for(int i = 0; i < __pChargingEventList->GetCount(); i++)
195 result r = E_SUCCESS;
196 IChargingEventListener* pIChargingEventListener = null;
198 r = __pChargingEventList->GetAt(i, pIChargingEventListener);
200 if (IsFailed(r) == false)
202 pIChargingEventListener->OnChargingStateChanged(charging);
212 PowerChangedCallback(power_state_e state, void* userData)
214 std::unique_ptr< IEnumeratorT<_IPowerManagerEventListener*> > pEnumerator(__powerEventList.GetEnumeratorN());
215 _IPowerManagerEventListener* pIPowerManagerEventListener = null;
217 if (__pSceenEventList != null)
219 if (state == POWER_STATE_SCREEN_OFF)
221 for (int i = 0; i < __pSceenEventList->GetCount(); i++)
223 IScreenEventListener* pIScreenEventListener = null;
224 result r = E_SUCCESS;
225 r = __pSceenEventList->GetAt(i, pIScreenEventListener);
226 if (IsFailed(r) == false)
228 pIScreenEventListener->OnScreenOff();
232 if(pEnumerator != null)
234 while(pEnumerator->MoveNext() == E_SUCCESS)
237 pEnumerator->GetCurrent(pIPowerManagerEventListener);
238 if(pIPowerManagerEventListener != null)
240 pIPowerManagerEventListener->OnScreenStateChanged(false);
247 for (int i = 0; i < __pSceenEventList->GetCount(); i++)
249 IScreenEventListener* pIScreenEventListener = null;
250 result r = E_SUCCESS;
251 r = __pSceenEventList->GetAt(i, pIScreenEventListener);
252 if (IsFailed(r) == false)
254 pIScreenEventListener->OnScreenOn();
258 if(pEnumerator != null)
260 while(pEnumerator->MoveNext() == E_SUCCESS)
262 pEnumerator->GetCurrent(pIPowerManagerEventListener);
263 if(pIPowerManagerEventListener != null)
265 pIPowerManagerEventListener->OnScreenStateChanged(true);
274 ScreenEventVConfCallback(keynode_t* node, void* userData)
277 int sysBrightness = 0;
279 if (__pSceenEventList == null)
281 SysLogException(NID_SYS, E_SYSTEM, "SceenEventList is not initialized.");
284 errorCode = vconf_get_int(VCONFKEY_PM_CURRENT_BRIGHTNESS, &sysBrightness);
288 SysLogException(NID_SYS, E_SYSTEM, "It failed to get Screen brightness");
292 for (int i = 0; i < __pSceenEventList->GetCount(); i++)
294 IScreenEventListener* pIScreenEventListener = null;
295 __pSceenEventList->GetAt(i, pIScreenEventListener);
296 if (pIScreenEventListener != null)
299 int maxBrightness = -1;
300 int ret = device_get_max_brightness(0, &maxBrightness);
303 SysLogException(NID_SYS, E_SYSTEM, "It failed to get the device max brightness");
306 brightness = (int)ceil(((_BRIGHTNESS_RESOLUTION / (float) maxBrightness)) * sysBrightness);
307 pIScreenEventListener->OnScreenBrightnessChanged(brightness);
312 _PowerManagerImpl::_PowerManagerImpl(void)
316 _PowerManagerImpl::~_PowerManagerImpl(void)
321 _PowerManagerImpl::Init()
323 if(_InitPowerManager == false)
325 __powerEventList.Construct();
326 _InitPowerManager = true;
331 _PowerManagerImpl::Term()
333 if(_InitPowerManager == true)
335 _InitPowerManager = false;
340 _PowerManagerImpl::IsActive(void)
343 result r = E_SUCCESS;
344 _AppManagerImpl* pAppManagerImpl = _AppManagerImpl::GetInstance();
346 if(pAppManagerImpl == null)
352 r = pAppManagerImpl->GetActiveApp(appId);
356 if(appId == _AppInfo::GetApplicationId())
374 _PowerManagerImpl::KeepScreenOnState(bool keepOn, bool dimming)
377 unsigned int state = LCD_DIM;
379 if (keepOn == true && IsActive() == true)
389 ret = pm_lock_state(state, GOTO_STATE_NOW, 0);
390 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to lock the screen state");
391 _keepScreenOnState = true;
395 ret = pm_unlock_state(LCD_NORMAL, GOTO_STATE_NOW);
396 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to unlock the screen state");
397 _keepScreenOnState = false;
400 SysLog(NID_SYS, "change screen power policy: keepOn(%d) and dimming(%d)", keepOn, dimming);
406 _PowerManagerImpl::KeepCpuAwake(bool enable)
411 ret = power_lock_state(POWER_STATE_SCREEN_OFF, 0);
412 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to lock the power state");
413 _keepCpuAwake = true;
417 if(_deviceCpuPowerOn == false)
419 ret = power_unlock_state(POWER_STATE_SCREEN_OFF);
420 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to unlock the power state");
422 _keepCpuAwake = false;
425 SysLog(NID_SYS, "change cpu power policy: keepAwake(%s)", enable ? "true" : "false");
430 _PowerManagerImpl::InitBatteryEvent(void)
433 ret = device_battery_warning_set_cb(DeviceBatteryWarnCallback, null);
435 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "It failed to set the battery event");
441 _PowerManagerImpl::OnForeground(void)
447 _PowerManagerImpl::OnBackground(void)
453 _PowerManagerImpl::RestoreScreenBrightness(void)
455 result r = E_SUCCESS;
457 ArrayList requestMessage;
458 ArrayList responseMessage;
460 SysTryReturn(NID_SYS, IsActive() == true, E_SUCCESS, r, "It is not active app.");
462 unique_ptr<_IpcClient> pIpcClient (new (std::nothrow) _IpcClient());
463 SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
465 r = pIpcClient->Construct(_COMMUNICATION_DISPATCHER_IPC_ID);
466 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to create IpcClient", GetErrorMessage(r));
468 requestMessage.Construct();
469 responseMessage.Construct();
471 String serviceId = _SYSTEM_SERVICE_ID;
472 String commandId = _SYSTEM_COMMAND_RESTORE_BRIGHTNESS;
474 requestMessage.Add(serviceId);
475 requestMessage.Add(commandId);
477 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
478 SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
480 r = pIpcClient->SendRequest(pMsg.get());
481 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to ipc message", GetErrorMessage(r));
483 unique_ptr<String> pResult((String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA));
485 SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response.");
486 SysTryReturnResult(NID_SYS, *pResult == _SYSTEM_RESULT_OK, E_SYSTEM, "It is failed to set brightness.");
492 _PowerManagerImpl::SetScreenBrightness(int brightness)
495 int maxBrightness = 0;
496 int actualBrightness = 0;
497 result r = E_SUCCESS;
499 SysTryReturn(NID_SYS, IsActive() == true, E_SUCCESS, r, "It is not active app.");
500 SysTryReturnResult(NID_SYS, (brightness > 0 && brightness < 11), E_OUT_OF_RANGE,
501 "[E_OUT_OF_RANGE] The specified brightness is out of range.");
503 SysLog(NID_SYS, "Set brightness (%d)", brightness);
505 ret = device_get_max_brightness(0, &maxBrightness);
506 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "It failed to get the device max brightness");
508 actualBrightness = maxBrightness * brightness / _BRIGHTNESS_RESOLUTION;
510 ArrayList requestMessage;
511 ArrayList responseMessage;
513 unique_ptr<_IpcClient> pIpcClient (new (std::nothrow) _IpcClient());
514 SysTryReturn(NID_SYS, pIpcClient != null, E_OUT_OF_MEMORY, r, "It is failed to create IPC instance.");
516 r = pIpcClient->Construct(_COMMUNICATION_DISPATCHER_IPC_ID);
517 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to create IpcClient", GetErrorMessage(r));
519 requestMessage.Construct();
520 responseMessage.Construct();
522 String serviceId = _SYSTEM_SERVICE_ID;
523 String commandId = _SYSTEM_COMMAND_CHANGE_BRIGHTNESS;
524 String brightnessValue;
525 brightnessValue.Append(actualBrightness);
527 requestMessage.Add(serviceId);
528 requestMessage.Add(commandId);
529 requestMessage.Add(brightnessValue);
531 unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessage, &responseMessage));
532 SysTryReturnResult(NID_SYS, pMsg != null, E_OUT_OF_MEMORY, "It is failed to create Ipc message");
534 r = pIpcClient->SendRequest(pMsg.get());
535 SysTryReturn(NID_SYS, r == E_SUCCESS, E_SYSTEM, r, "[%s] It failed to ipc message", GetErrorMessage(r));
537 unique_ptr<String> pResult((String*)responseMessage.GetAt(_SYSTEM_RESPONSE_DATA));
539 SysTryReturnResult(NID_SYS, pResult != null, E_SYSTEM, "It is failed to receive Ipc response.");
540 SysTryReturnResult(NID_SYS, *pResult == _SYSTEM_RESULT_OK, E_SYSTEM, "It is failed to set brightness.");
546 _PowerManagerImpl::GetScreenBrightness(void)
550 int maxBrightness = -1;
554 ret = device_get_brightness(0, &brightness);
557 SysLogException(NID_SYS, E_SYSTEM, "It failed to get the device brightness");
558 SetLastResult(E_SYSTEM);
559 return _DEACTIVATED_BRIGHTNESS_CONTROL;
567 SysLog(NID_SYS, "System Brightness is %d", brightness);
568 ret = device_get_max_brightness(0, &maxBrightness);
571 SysLogException(NID_SYS, E_SYSTEM, "It failed to get the device max brightness");
572 SetLastResult(E_SYSTEM);
573 return _DEACTIVATED_BRIGHTNESS_CONTROL;
575 return ceil(((_BRIGHTNESS_RESOLUTION / (float) maxBrightness)) * brightness);
579 _PowerManagerImpl::IsScreenOn(void)
581 power_state_e powerState = power_get_state();
583 if (powerState == POWER_STATE_SCREEN_OFF)
594 _PowerManagerImpl::TurnScreenOn(void)
596 result r = E_SUCCESS;
597 int ret = power_wakeup(true);
599 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "It failed to unlock the normal screen state");
605 _PowerManagerImpl::TurnScreenOff(void)
607 result r = E_SUCCESS;
608 int ret = pm_change_state(LCD_OFF);
610 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "It failed to unlock the screen off screen state");
616 _PowerManagerImpl::SetScreenEventListener(IScreenEventListener& listener)
618 result r = E_SUCCESS;
620 r = AddScreenEventListener(listener, true);
624 SysLog(NID_SYS, "It failed to register ScreenEventListener");
627 SysLog(NID_SYS,"It successed to register ScreenEventListener");
632 _PowerManagerImpl::AddScreenEventListener(IScreenEventListener& listener, bool isSet)
634 result r = E_SUCCESS;
636 if (__pSceenEventList == null)
638 std::unique_ptr< ArrayListT<IScreenEventListener*> > pSceenEventList(new ArrayListT<IScreenEventListener*>);
639 SysTryReturnResult(NID_SYS, pSceenEventList, E_SYSTEM, "Memory allocation failed");
640 pSceenEventList->Construct();
642 errorCode = vconf_notify_key_changed(VCONFKEY_PM_CURRENT_BRIGHTNESS, ScreenEventVConfCallback, null);
643 SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It failed to add ScreenEvent listener.");
645 errorCode = power_set_changed_cb(PowerChangedCallback, null);
646 SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It failed to add ScreenEvent listener.");
647 __pSceenEventList = pSceenEventList.release();
648 SysLog(NID_SYS,"It successed to register power_set_changed_cb");
651 if (isSet == true && __pSceenEventList->GetCount() != 0)
653 r = __pSceenEventList->SetAt(&listener, 0);
657 r = __pSceenEventList->Add(&listener);
664 _PowerManagerImpl::RemoveScreenEventListener(IScreenEventListener& listener)
666 result r = E_SUCCESS;
668 SysTryReturnResult(NID_SYS,__pSceenEventList != null, E_OBJ_NOT_FOUND, "IScreenEventListener list is empty");
670 r = __pSceenEventList->Remove(&listener);
672 if (__pSceenEventList->GetCount() == 0)
674 delete __pSceenEventList;
675 __pSceenEventList = null;
682 _PowerManagerImpl::SetChargingEventListener(IChargingEventListener& listener)
684 result r = E_SUCCESS;
686 r = AddChargingEventListener(listener, true);
690 SysLog(NID_SYS, "It failed to register battery charging event");
697 _PowerManagerImpl::AddChargingEventListener(IChargingEventListener& listener, bool isSet)
699 result r = E_SUCCESS;
701 if (__pChargingEventList == null)
703 __pChargingEventList = new ArrayListT<IChargingEventListener*>;
704 SysTryReturnResult(NID_SYS, __pChargingEventList, E_SYSTEM, "Memory allocation failed");
705 __pChargingEventList->Construct();
707 errorCode = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, RuntimeInfoChangedCallback, null);
710 SysLog(NID_SYS, "It failed to register battery charging event");
711 delete __pChargingEventList;
712 __pChargingEventList = null;
717 if (isSet == false || __pChargingEventList->GetCount() == 0)
719 r = __pChargingEventList->Add(&listener);
723 r = __pChargingEventList->SetAt(&listener, 0);
730 _PowerManagerImpl::RemoveChargingEventListener(IChargingEventListener& listener)
732 result r = E_SUCCESS;
734 SysTryReturnResult(NID_SYS,__pChargingEventList != null, E_OBJ_NOT_FOUND, "__pChargingEventList list is empty");
736 r = __pChargingEventList->Remove(&listener);
738 if (__pChargingEventList->GetCount() == 0)
740 delete __pChargingEventList;
741 __pChargingEventList = null;
747 _PowerManagerImpl::SetBatteryEventListener(IBatteryEventListener* pListener)
751 if (pListener != null)
754 if(pIBatteryEventListener == null)
756 ret = device_battery_set_cb(DeviceBatteryCallback, null);
759 SysLog(NID_SYS, "It failed to register battery event");
762 pIBatteryEventListener = pListener;
766 pIBatteryEventListener = null;
767 ret = device_battery_unset_cb();
770 SysLog(NID_SYS, "It failed to unregister battery event");
778 _PowerManagerImpl::PowerControl(int deviceId, int level)
781 if(deviceId == _DEVICE_CPU)
783 if(level == _DEVICE_POWER_LEVEL_ON)
785 ret = power_lock_state(POWER_STATE_SCREEN_OFF, 0);
786 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to lock the power state");
787 _deviceCpuPowerOn = true;
791 else if(level == _DEVICE_POWER_LEVEL_OFF)
793 if(_keepScreenOnState == false)
795 ret = power_unlock_state(POWER_STATE_SCREEN_OFF);
796 SysTryReturnResult(NID_SYS, ret == 0, E_SYSTEM, "[E_SYSTEM] It failed to unlock the power state");
798 _deviceCpuPowerOn = false;
806 _PowerManagerImpl::GetCurrentBatteryLevelInPercentage(void)
809 int batteryLevel = 0;
811 ret = device_battery_get_percent(&batteryLevel);
814 SetLastResult(E_SYSTEM);
821 _PowerManagerImpl::GetCurrentBatteryLevel(void)
824 //int batteryLevel = 0;
825 BatteryLevel level = BATTERY_FULL;
826 device_battery_warn_e batteryStatus = DEVICE_BATTERY_WARN_EMPTY;
828 ret = device_battery_get_warning_status(&batteryStatus);
831 SetLastResult(E_SYSTEM);
835 switch (batteryStatus)
837 case DEVICE_BATTERY_WARN_FULL:
838 level = BATTERY_LEVEL_FULL;
840 case DEVICE_BATTERY_WARN_NORMAL:
841 level = BATTERY_LEVEL_HIGH;
843 case DEVICE_BATTERY_WARN_LOW:
844 level = BATTERY_LEVEL_LOW;
846 case DEVICE_BATTERY_WARN_CRITICAL:
847 level = BATTERY_LEVEL_CRITICAL;
849 case DEVICE_BATTERY_WARN_EMPTY:
850 level = BATTERY_LEVEL_EMPTY;
853 SysLogException(NID_SYS, E_SYSTEM, "There is a system error occured.");
854 SetLastResult(E_SYSTEM);
857 SetLastResult(E_SUCCESS);
862 _PowerManagerImpl::IsCharging(void)
864 bool chargeState = false;
866 ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_BATTERY_IS_CHARGING, &chargeState);
869 SetLastResult(E_SYSTEM);
877 _PowerManagerImpl::Add_IPowerManagerEventListener(_IPowerManagerEventListener* listener)
879 _PowerManagerImpl::Init();
880 __powerEventList.Add(listener);
885 _PowerManagerImpl::Remove_IPowerManagerEventListener(_IPowerManagerEventListener* listener)
887 _PowerManagerImpl::Init();
888 __powerEventList.Remove(listener);
893 BootEventVconfCallback(keynode_t* node, void* userData)
895 if (__pBootEventList == null)
897 SysLogException(NID_SYS, E_SYSTEM, "BootEventList is not initialized.");
902 const int errorCode = vconf_get_int(VCONFKEY_SERVICE_READY, &bootReady);
906 SysLogException(NID_SYS, E_SYSTEM, "It failed to get Boot event status");
910 std::unique_ptr< IEnumeratorT<IBootEventListener*> > pEnum(__pBootEventList->GetEnumeratorN());
914 while (pEnum->MoveNext() == E_SUCCESS)
916 IBootEventListener* pListener = null;
917 pEnum->GetCurrent(pListener);
919 pListener->OnBootCompleted();
923 SysLog(NID_SYS, "Finished invoking boot complete event listener.");
927 _PowerManagerImpl::AddBootEventListener(IBootEventListener& listener)
929 if (__pBootEventList == null)
931 std::unique_ptr< ArrayListT<IBootEventListener*> > pBootEventList(new ArrayListT<IBootEventListener*>);
932 SysTryReturnResult(NID_SYS, pBootEventList, E_SYSTEM, "Memory allocation failed");
933 pBootEventList->Construct();
936 errorCode = vconf_notify_key_changed(VCONFKEY_SERVICE_READY, BootEventVconfCallback, null);
937 SysTryReturnResult(NID_SYS, errorCode == 0, E_SYSTEM, "It failed to add BootEvent listener.");
939 __pBootEventList = pBootEventList.release();
940 SysLog(NID_SYS, "It successed to register boot event listener.");
943 return __pBootEventList->Add(&listener);
947 _PowerManagerImpl::RemoveBootEventListener(IBootEventListener& listener)
949 result r = E_SUCCESS;
951 SysTryReturnResult(NID_SYS,__pBootEventList != null, E_OBJ_NOT_FOUND, "IBootEventListener list is empty");
953 r = __pBootEventList->Remove(&listener);
955 if (__pBootEventList->GetCount() == 0)
957 delete __pBootEventList;
958 __pBootEventList = null;
965 _PowerManagerImpl::GetInstance(PowerManager& powerManager)
967 return powerManager.__pPowerManagerImpl;
970 const _PowerManagerImpl*
971 _PowerManagerImpl::GetInstance(const PowerManager& powerManager)
973 return powerManager.__pPowerManagerImpl;