Merge "Change the way to conver Mbs to Wcs and vice versa" into tizen_2.1
[platform/framework/native/appfw.git] / src / system / FSys_DeviceManagerImpl.cpp
index a602917..731e5a2 100644 (file)
@@ -19,6 +19,7 @@
  * @file               FSys_DeviceManagerImpl.cpp
  * @brief              This is the implementation file for _DeviceManagerImpl class.
  */
+
 #include <pthread.h>
 #include <unique_ptr.h>
 #include <system_info.h>
@@ -39,6 +40,8 @@
 #include <FIo_IpcClient.h>
 #include <FSys_SystemInfoImpl.h>
 #include <FSys_PowerManagerImpl.h>
+
+#include "FSys_CommunicationDispatcherClient.h"
 #include "FSys_DeviceManagerImpl.h"
 
 #define VCONFKEY_APPSERVICE_MMC_STATUS "memory/appservice/mmc"
@@ -52,7 +55,6 @@ using namespace Tizen::Io;
 namespace Tizen { namespace System
 {
 
-static const wchar_t* _COMMUNICATION_DISPATCHER_IPC_ID = L"osp.app.ipcserver.communicationdispatcher";
 static const wchar_t* _DEVICE_MANAGER_SERVICE_ID = L"osp.devicemanager.service";
 static const wchar_t* _DEVICE_MANAGER_COMMAND_OPEN = L"osp.devicemanager.command.open";
 static const wchar_t* _DEVICE_MANAGER_COMMAND_CLOSE = L"osp.devicemanager.command.close";
@@ -81,12 +83,13 @@ static const wchar_t* _DEVICE_MANAGER_STATE_UNMOUNTED = L"Unmounted";
 static const wchar_t* _DEVICE_MANAGER_STATE_OPENED = L"Opened";
 static const wchar_t* _DEVICE_MANAGER_STATE_CLOSED = L"Closed";
 
+static const wchar_t* _SYSTEM_INFO_NETWORK_BLUETOOTH = L"http://tizen.org/feature/network.bluetooth";
 static const wchar_t* _SYSTEM_INFO_INPUT_KEYBOARD = L"http://tizen.org/feature/input.keyboard";
 static const wchar_t* _SYSTEM_INFO_TVOUT_SUPPORTED = L"http://tizen.org/feature/screen.output.rca";
+static const wchar_t* _SYSTEM_INFO_HDMI = L"http://tizen.org/feature/screen.output.hdmi";
 
 _DeviceManagerImpl* _DeviceManagerImpl::__pDeviceManagerImpl = null;
 
-
 class _DeviceManagerEventArg : public IEventArg
 {
 public:
@@ -105,11 +108,7 @@ protected:
                IDeviceEventListener* pListener = dynamic_cast<IDeviceEventListener*> (&listener);
                const _DeviceManagerEventArg* pArg = dynamic_cast<const _DeviceManagerEventArg*>(&arg);
 
-               if(pListener == null || pArg == null)
-               {
-                       SysLogException(NID_SYS, E_SYSTEM, "listener or arg is null.");
-                       return;
-               }
+               SysTryReturnVoidResult(NID_SYS, pListener != null && pArg != null, E_SYSTEM, "Parameters are not available.");
 
                pListener->OnDeviceStateChanged(pArg->deviceType, pArg->state);
        }
@@ -150,30 +149,33 @@ _DeviceManagerImpl::_DeviceManagerImpl()
        result r = E_SUCCESS;
        int headsetState = 0;
        int ret = 0;
+       static String DEVICE_MANAGER_SERVICE_ID(_DEVICE_MANAGER_SERVICE_ID);
 
-       __pIpcClient = new (std::nothrow) _IpcClient();
-       SysTryCatch(NID_SYS, __pIpcClient != null, , r, "Fail to create IPC client");
+       _CommunicationDispatcherClient* pCommunicationDispatcherClient = _CommunicationDispatcherClient::GetInstance();
+       SysTryCatch(NID_SYS, pCommunicationDispatcherClient != null, r = E_SYSTEM, r, "It is failed to get CommunicationDispatcherClient.");
 
-       r = __pIpcClient->Construct(_COMMUNICATION_DISPATCHER_IPC_ID, this);
-       SysTryCatch(NID_SYS, r == E_SUCCESS, , r, "Propagated. [%s]", GetErrorMessage(r));
+       r = pCommunicationDispatcherClient->RegisterCommunicationListener(DEVICE_MANAGER_SERVICE_ID, *this);
+       SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to register on CommunicationDispatcherClient.");
+
+       __pIpcClient = pCommunicationDispatcherClient->GetIpcClient();
 
        ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_USB_CONNECTED, OnDeviceStateChanged, null);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to register USB event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to register USB event");
 
        ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_CHARGER_CONNECTED, OnDeviceStateChanged, null);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to register DEVICE_TYPE_CHARGER event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to register DEVICE_TYPE_CHARGER event");
 
        ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_TV_OUT_CONNECTED, OnDeviceStateChanged, null);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to register TV out event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to register TV out event");
 
        ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, OnDeviceStateChanged, null);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to register audio jack event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to register audio jack event");
 
        ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_SLIDING_KEYBOARD_OPENED, OnDeviceStateChanged, null);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to register sliding keyboard event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to register sliding keyboard event");
 
        ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &headsetState);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to get audio jack status");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to get audio jack status");
 
        if (headsetState == RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE)
        {
@@ -192,10 +194,10 @@ _DeviceManagerImpl::_DeviceManagerImpl()
        {
                ret = vconf_notify_key_changed(VCONFKEY_APPSERVICE_MMC_STATUS, MmcEventVconfCallback, null);
        }
-       SysTryCatch(NID_SYS, ret == 0, r = E_SYSTEM, r, "Failed to register MMC event callback.");
+       SysTryCatch(NID_SYS, ret == 0, r = E_SYSTEM, r, "It is failed to register MMC event callback.");
 
        ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_HDMI, DeviceEventVConfCallBack, null);
-       SysTryCatch(NID_SYS, ret == 0, r = E_SYSTEM, r, "Failed to register HDMI event");
+       SysTryCatch(NID_SYS, ret == 0, r = E_SYSTEM, r, "It is failed to register HDMI event");
 
        __deviceEventList.Construct();
 
@@ -207,18 +209,20 @@ _DeviceManagerImpl::~_DeviceManagerImpl()
 {
        result r = E_SUCCESS;
        int ret = 0;
+       _CommunicationDispatcherClient* pCommunicationDispatcherClient = null;
+       String key(_DEVICE_MANAGER_SERVICE_ID);
 
        ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_USB_CONNECTED);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to unregister USB event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to unregister USB event");
 
        ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_TV_OUT_CONNECTED);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to unregister TV out event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to unregister TV out event");
 
        ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to unregister audio jack event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to unregister audio jack event");
 
        ret = runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_SLIDING_KEYBOARD_OPENED);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to unregister sliding keyboard event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to unregister sliding keyboard event");
 
        if (!_AppInfo::IsOspCompat())
        {
@@ -228,27 +232,22 @@ _DeviceManagerImpl::~_DeviceManagerImpl()
        {
                ret = vconf_ignore_key_changed(VCONFKEY_APPSERVICE_MMC_STATUS, MmcEventVconfCallback);
        }
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to unregister MMC event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to unregister MMC event");
 
        ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_HDMI, DeviceEventVConfCallBack);
-       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "Failed to unregister HDMI event");
+       SysTryCatch(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, r = E_SYSTEM, r, "It is failed to unregister HDMI event");
 
-CATCH:
-       delete __pIpcClient;
-       SetLastResult(r);
-}
 
-_IpcClient*
-_DeviceManagerImpl::GetIpcClient(void)
-{
-       if (__pDeviceManagerImpl != null)
-       {
-               return __pDeviceManagerImpl->__pIpcClient;
-       }
+       pCommunicationDispatcherClient = _CommunicationDispatcherClient::GetInstance();
+       SysTryCatch(NID_SYS, pCommunicationDispatcherClient != null, r = E_SYSTEM, r, "It is failed to get CommunicationDispatcherClient.");
 
-       SysLogException(NID_SYS, E_SYSTEM, "IPC component is not ready");
+       r = pCommunicationDispatcherClient->UnregisterCommunicationListener(key);
+       SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to register on CommunicationDispatcherClient.");
 
-       return null;
+       __pIpcClient = null;
+
+CATCH:
+       SetLastResult(r);
 }
 
 void
@@ -257,7 +256,7 @@ _DeviceManagerImpl::DeviceEventVConfCallBack(keynode_t* node, void* userData)
        int ret = 0;
        int value = 0;
        String event;
-       
+
        if (strcmp(VCONFKEY_SYSMAN_MMC_STATUS, vconf_keynode_get_name(node)) == 0)
        {
                SysLog(NID_SYS, "MMC callback is occured");
@@ -305,10 +304,8 @@ _DeviceManagerImpl::MmcEventVconfCallback(keynode_t* node, void* userData)
                        String event;
                        int value = 0;
                        int ret = vconf_get_int(VCONFKEY_APPSERVICE_MMC_STATUS, &value);
-                       if(ret == -1)
-                       {
-                               SysLogException(NID_SYS, E_SYSTEM, "VCONFKEY_APPSERVICE_MMC_STATUS is error");
-                       }
+                       SysTryReturnVoidResult(NID_SYS, ret == 0, E_SYSTEM, "VCONFKEY_APPSERVICE_MMC_STATUS is error");
+
                        if (value == 1)
                        {
                                event = _DEVICE_MANAGER_STATE_MOUNTED;
@@ -337,7 +334,7 @@ _DeviceManagerImpl::SendEvent(DeviceType deviceType, String& state)
                        _DeviceEventListenerContainer* pDeviceEventListenerContainer = null;
                        pEnumerator->GetCurrent(pDeviceEventListenerContainer);
                        SysTryReturnVoidResult(NID_SYS, pDeviceEventListenerContainer != null,E_SYSTEM, "Container is empty");
-                       
+
                        switch(deviceType)
                        {
                        case DEVICE_TYPE_BLUETOOTH_HEADSET:
@@ -416,11 +413,8 @@ _DeviceManagerImpl::SendEvent(DeviceType deviceType, String& state)
                                return;
                        }
                        std::unique_ptr<_DeviceManagerEventArg> pDeviceManagerEventArg(new (std::nothrow) _DeviceManagerEventArg());
-                       if(pDeviceManagerEventArg == null)
-                       {
-                               SysLogException(NID_SYS, E_OUT_OF_MEMORY, "It is failed to create instance of DeviceManagerEventArg");
-                               return;
-                       }
+                       SysTryReturnVoidResult(NID_SYS, pDeviceManagerEventArg != null, E_OUT_OF_MEMORY, "It is failed to create instance of DeviceManagerEventArg");
+
                        pDeviceManagerEventArg->deviceType = deviceType;
                        pDeviceManagerEventArg->state = state;
 
@@ -448,27 +442,27 @@ _DeviceManagerImpl::RequireBluetoothEvent(void)
                ArrayList responseMessages;
 
                r = requestMessages.Construct();
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to create request instance");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to create request instance");
                r = responseMessages.Construct();
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to create response instance");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to create response instance");
 
                String serviceId = _DEVICE_MANAGER_SERVICE_ID;
                String commandId = _DEVICE_MANAGER_COMMAND_OPEN;
                String deviceId = _DEVICE_MANAGER_BLUETOOTH;
 
                r = requestMessages.Add(serviceId);
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add service id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add service id");
                r = requestMessages.Add(commandId);
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add command id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add command id");
                r = requestMessages.Add(deviceId);
 
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add device id (bluetooth)");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add device id (bluetooth)");
 
                pRequest.reset(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to send bluetooth event subscribe by IPC");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send bluetooth event subscribe by IPC");
 
                r = __pIpcClient->SendRequest(pRequest.get());
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS,E_SYSTEM, "Failed to add bluetooth id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS,E_SYSTEM, "It is failed to add bluetooth id");
        }
        return r;
 }
@@ -489,26 +483,26 @@ _DeviceManagerImpl::ReleaseBluetoothEvent(void)
                ArrayList responseMessages;
 
                r = requestMessages.Construct();
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to create request instance");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to create request instance");
                r = responseMessages.Construct();
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to create response instance");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to create response instance");
 
                String serviceId = _DEVICE_MANAGER_SERVICE_ID;
                String commandId = _DEVICE_MANAGER_COMMAND_CLOSE;
                String deviceId = _DEVICE_MANAGER_BLUETOOTH;
 
                r = requestMessages.Add(serviceId);
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add service id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add service id");
                r = requestMessages.Add(commandId);
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add command id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add command id");
                r = requestMessages.Add(deviceId);
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add bluetooth id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add bluetooth id");
 
                pRequest.reset(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to send bluetooth event subscribe by IPC");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send bluetooth event subscribe by IPC");
 
                r = __pIpcClient->SendRequest(pRequest.get());
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Failed to add bluetooth id");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add bluetooth id");
        }
        return r;
 }
@@ -645,7 +639,7 @@ _DeviceManagerImpl::AddOnExistedListener(DeviceType deviceType, const IDeviceEve
                                {
                                        bool keyboard = false;
                                        r = _SystemInfoImpl::GetSysInfo(_SYSTEM_INFO_INPUT_KEYBOARD, keyboard);
-       
+
                                        SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Fail to get keyboard option");
 
                                        if (keyboard == false)
@@ -675,12 +669,14 @@ _DeviceManagerImpl::AddOnExistedListener(DeviceType deviceType, const IDeviceEve
                                {
                                        int value = 0;
                                        int ret = 0;
+                                       bool supported = false;
+                                       r = _SystemInfoImpl::GetSysInfo(_SYSTEM_INFO_HDMI, supported);
+                                       SysTryReturnResult(NID_SYS, supported == true, E_UNSUPPORTED_OPERATION, "Current device does not support HDMI.");
+
                                        ret = vconf_get_int(VCONFKEY_SYSMAN_HDMI, &value);
                                        SysTryReturnResult(NID_SYS, !(ret < 0), E_SYSTEM, "vconf_get_int failed Output value is %d", value);
-                                       if(value < 0)
-                                       {
-                                               return E_UNSUPPORTED_OPERATION;
-                                       }
+                                       SysTryReturnResult(NID_SYS, value >= 0, E_UNSUPPORTED_OPERATION, "Current device does not support HDMI.");
+
                                        if(pDeviceEventListenerContainer->__hdmi == true)
                                        {
                                                r = E_OBJ_ALREADY_EXIST;
@@ -694,7 +690,7 @@ _DeviceManagerImpl::AddOnExistedListener(DeviceType deviceType, const IDeviceEve
                                }
                                }
                        }
-               }               
+               }
        }
        return r;
 }
@@ -716,7 +712,7 @@ _DeviceManagerImpl::AddDeviceEventListener(DeviceType deviceType, IDeviceEventLi
                {
                        if(!_AppInfo::IsOspCompat())
                        {
-                               r = E_UNSUPPORTED_OPERATION;                                            
+                               r = E_UNSUPPORTED_OPERATION;
                        }
                        else
                        {
@@ -760,7 +756,7 @@ _DeviceManagerImpl::AddDeviceEventListener(DeviceType deviceType, IDeviceEventLi
        r = AddOnExistedListener(deviceType, pListener);
 
        if(r == E_OBJ_NOT_FOUND)
-       {               
+       {
                std::unique_ptr<_DeviceEventListenerContainer> pDeviceEventContainer(new (std::nothrow) _DeviceEventListenerContainer());
                SysTryReturnResult(NID_SYS, pDeviceEventContainer != null, E_OUT_OF_MEMORY, "It is failed to create instance of _DeviceEventListenerContainer");
 
@@ -829,7 +825,7 @@ _DeviceManagerImpl::AddDeviceEventListener(DeviceType deviceType, IDeviceEventLi
                {
                        bool keyboard = false;
                        r = _SystemInfoImpl::GetSysInfo(_SYSTEM_INFO_INPUT_KEYBOARD, keyboard);
-       
+
                        SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Fail to get keyboard option");
 
                        if (keyboard == false)
@@ -876,7 +872,7 @@ _DeviceManagerImpl::RemoveDeviceEventListener(DeviceType deviceType, IDeviceEven
        SysTryReturnResult(NID_SYS, pListener != null, E_INVALID_ARG, "There is no listener isntance.");
        SysTryReturnResult(NID_SYS, (deviceType >= DEVICE_TYPE_BLUETOOTH_HEADSET && deviceType <= DEVICE_TYPE_HDMI), E_INVALID_ARG, "There is no listener isntance.");
        SysTryReturnResult(NID_SYS, __deviceEventList.GetCount() > 0, E_INVALID_ARG, "There is no registered listener.");
-       
+
        std::unique_ptr< IEnumeratorT<_DeviceEventListenerContainer*> > pEnumerator(__deviceEventList.GetEnumeratorN());
 
        SysTryReturnResult(NID_SYS, pEnumerator != null, E_SYSTEM, "Enumerator is empty.");
@@ -891,7 +887,7 @@ _DeviceManagerImpl::RemoveDeviceEventListener(DeviceType deviceType, IDeviceEven
                {
                        if(!_AppInfo::IsOspCompat())
                        {
-                               r = E_UNSUPPORTED_OPERATION;                                            
+                               r = E_UNSUPPORTED_OPERATION;
                        }
                        else
                        {
@@ -948,7 +944,7 @@ _DeviceManagerImpl::RemoveDeviceEventListener(DeviceType deviceType, IDeviceEven
                                        return E_OBJ_NOT_FOUND;
                                }
                                pDeviceEventListenerContainer->__bluetoothHeadset = false;
-                               ReleaseBluetoothEvent();                                
+                               ReleaseBluetoothEvent();
                                break;
                        }
                        case DEVICE_TYPE_CHARGER:
@@ -1040,7 +1036,7 @@ result
 _DeviceManagerImpl::RemoveAllDeviceEventListeners(void)
 {
        result r = E_SUCCESS;
-       
+
        IEnumeratorT<_DeviceEventListenerContainer*>* pEnumerator = __deviceEventList.GetEnumeratorN();
        SysTryReturnResult(NID_SYS, pEnumerator != null, E_SYSTEM, "Enumerator is empty.");
 
@@ -1077,11 +1073,7 @@ _DeviceManagerImpl::SendEvent(runtime_info_key_e key)
 
                bool state = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &state);
-               if (ret != RUNTIME_INFO_ERROR_NONE)
-               {
-                       SysLogException(NID_SYS, E_SYSTEM, "Failed to get usb state");
-                       return;
-               }
+               SysTryReturnVoidResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get usb state.");
 
                if (state == true)
                {
@@ -1100,11 +1092,7 @@ _DeviceManagerImpl::SendEvent(runtime_info_key_e key)
 
                bool state = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &state);
-               if (ret != RUNTIME_INFO_ERROR_NONE)
-               {
-                       SysLogException(NID_SYS, E_SYSTEM, "Failed to get charger state");
-                       return;
-               }
+               SysTryReturnVoidResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get charger state.");
 
                if (state == true)
                {
@@ -1123,11 +1111,7 @@ _DeviceManagerImpl::SendEvent(runtime_info_key_e key)
 
                bool state = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_TV_OUT_CONNECTED, &state);
-               if (ret != RUNTIME_INFO_ERROR_NONE)
-               {
-                       SysLogException(NID_SYS, E_SYSTEM, "Failed to get tv connect state");
-                       return;
-               }
+               SysTryReturnVoidResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get tv connect state.");
 
                if (state == true)
                {
@@ -1143,11 +1127,7 @@ _DeviceManagerImpl::SendEvent(runtime_info_key_e key)
        {
                int state = 0;
                ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &state);
-               if (ret != RUNTIME_INFO_ERROR_NONE)
-               {
-                       SysLogException(NID_SYS, E_SYSTEM, "Failed to get audion jack state");
-                       return;
-               }
+               SysTryReturnVoidResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get audio connect state.");
 
                if (state == RUNTIME_INFO_AUDIO_JACK_STATUS_UNCONNECTED)
                {
@@ -1190,11 +1170,7 @@ _DeviceManagerImpl::SendEvent(runtime_info_key_e key)
 
                bool state = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_SLIDING_KEYBOARD_OPENED, &state);
-               if (ret != RUNTIME_INFO_ERROR_NONE)
-               {
-                       SysLogException(NID_SYS, E_SYSTEM, "Failed to get keyboard state");
-                       return;
-               }
+               SysTryReturnVoidResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get built-in keyboard state.");
 
                if (state == true)
                {
@@ -1228,6 +1204,21 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
 
        case DEVICE_TYPE_BLUETOOTH_HEADSET:
        {
+               bool bluetooth = false;
+               r = _SystemInfoImpl::GetSysInfo(_SYSTEM_INFO_NETWORK_BLUETOOTH, bluetooth);
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Fail to get keyboard option.");
+               if (bluetooth == false)
+               {
+                       if(!_AppInfo::IsOspCompat())
+                       {
+                               return E_UNSUPPORTED_OPERATION;
+                       }
+                       else
+                       {
+                               return E_DEVICE_UNAVAILABLE;
+                       }
+               }
+
                ArrayList requestMessages;
                ArrayList responseMessages;
 
@@ -1259,7 +1250,7 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
        {
                bool chargerState = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_CHARGER_CONNECTED, &chargerState);
-               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "Failed to get charger state");
+               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get charger state");
 
                if (chargerState == true)
                {
@@ -1276,7 +1267,7 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
        {
                bool cableState = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_USB_CONNECTED, &cableState);
-               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "Failed to get usb state");
+               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get usb state");
 
                if (cableState == true)
                {
@@ -1309,7 +1300,7 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
 
                bool tvState = false;
                ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_TV_OUT_CONNECTED, &tvState);
-               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "Failed to get tv state");
+               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get tv state");
                if (tvState == true)
                {
                        state = _DEVICE_MANAGER_STATE_INSERTED;
@@ -1325,7 +1316,7 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
        {
                int audioState = 0;
                ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &audioState);
-               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "Failed to get audio state");
+               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get audio state");
 
                if (audioState == RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_4WIRE)
                {
@@ -1342,7 +1333,7 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
        {
                int audioState = 0;
                ret = runtime_info_get_value_int(RUNTIME_INFO_KEY_AUDIO_JACK_STATUS, &audioState);
-               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "Failed to get audio state");
+               SysTryReturnResult(NID_SYS, ret == RUNTIME_INFO_ERROR_NONE, E_SYSTEM, "It is failed to get audio state");
 
                if (audioState == RUNTIME_INFO_AUDIO_JACK_STATUS_CONNECTED_3WIRE)
                {
@@ -1382,7 +1373,7 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
        {
                bool keyboard = false;
                r = _SystemInfoImpl::GetSysInfo(_SYSTEM_INFO_INPUT_KEYBOARD, keyboard);
-               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "Fail to get keyboard option.");
+               SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to get keyboard option.");
                if (keyboard == false)
                {
                        if(!_AppInfo::IsOspCompat())
@@ -1399,6 +1390,10 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
        case DEVICE_TYPE_HDMI:
        {
                int ret = 0;
+               bool supported = false;
+               r = _SystemInfoImpl::GetSysInfo(_SYSTEM_INFO_HDMI, supported);
+               SysTryReturnResult(NID_SYS, supported == false, E_UNSUPPORTED_OPERATION, "Current device does not support HDMI.");
+
                ret = vconf_get_int(VCONFKEY_SYSMAN_HDMI, &value);
                SysTryReturnResult(NID_SYS, !(ret < 0), E_SYSTEM, "vconf_get_int failed Output value is %d", value);
                if (value == 1)
@@ -1424,16 +1419,6 @@ _DeviceManagerImpl::GetState(DeviceType deviceType, String& state)
 }
 
 void
-_DeviceManagerImpl::OnIpcResponseReceived(_IpcClient& client, const IPC::Message& message)
-{
-       SysLog(NID_SYS, "Enter.");
-       IPC_BEGIN_MESSAGE_MAP(_DeviceManagerImpl, message)
-       IPC_MESSAGE_HANDLER_EX(IoService_Data, &client, OnDataReceived)
-       IPC_END_MESSAGE_MAP_EX()
-       SysLog(NID_SYS, "Exit.");
-}
-
-void
 _DeviceManagerImpl::OnDataReceived(const ArrayList& data)
 {
        StringComparer stringComparer;
@@ -1443,7 +1428,7 @@ _DeviceManagerImpl::OnDataReceived(const ArrayList& data)
        String* pCommandId = (String*) data.GetAt(_OSP_APP_SERVICE_IPC_MESSAGE_HEAD_COMMAND_ID);
        String* pDeviceId = (String*) data.GetAt(_OSP_APP_SERVICE_IPC_MESSAGE_HEAD_DEVICE_ID);
        String* pEventId = (String*) data.GetAt(_OSP_APP_SERVICE_IPC_MESSAGE_DATA);
-       
+
        String serviceId = _DEVICE_MANAGER_SERVICE_ID;
        String commandId = _DEVICE_MANAGER_COMMAND_EVENT;
        String deviceId = _DEVICE_MANAGER_BLUETOOTH;