Remove unnecessary logs
[platform/core/uifw/voice-control.git] / client / vc_setting.c
index 28de295..aabd0b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
+* Copyright (c) 2011-2019 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the License);
 * you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
 
 #include "vc_config_mgr.h"
 #include "vc_main.h"
+#include "vc_setting_tidl.h"
 #include "voice_control_common.h"
 #include "voice_control_setting.h"
 
@@ -28,29 +29,28 @@ typedef enum {
        VC_SETTING_STATE_READY
 } vc_setting_state_e;
 
-#define VC_SETTING_CONFIG_HANDLE       300000
+#define VC_SETTING_CONFIG_HANDLE       30000000
 
 static vc_setting_state_e g_state = VC_SETTING_STATE_NONE;
 
-static vc_setting_enabled_changed_cb g_callback = NULL;
+static vc_setting_supported_engine_cb g_engine_cb = NULL;
+static void* g_engine_user_data = NULL;
 
-static void* g_user_data = NULL;
+static vc_setting_engine_changed_cb g_engine_changed_cb = NULL;
+static void* g_engine_changed_user_data = NULL;
 
-static vc_setting_current_language_changed_cb g_lang_callback = NULL;
+static vc_setting_enabled_changed_cb g_enabled_changed_cb = NULL;
+static void* g_enabled_changed_user_data = NULL;
 
-static void* g_lang_user_data = NULL;
-
-const char* vc_tag()
-{
-       return TAG_VCS;
-}
+static vc_setting_current_language_changed_cb g_current_language_changed_cb = NULL;
+static void* g_current_language_changed_user_data = NULL;
 
 void __config_lang_changed_cb(const char* before_lang, const char* current_lang)
 {
        SLOG(LOG_DEBUG, TAG_VCS, "Lang changed : before(%s) current(%s)", before_lang, current_lang);
 
-       if (NULL != g_lang_callback) {
-               g_lang_callback(before_lang, current_lang, g_lang_user_data);
+       if (NULL != g_current_language_changed_cb) {
+               g_current_language_changed_cb(before_lang, current_lang, g_current_language_changed_user_data);
        }
 }
 
@@ -65,83 +65,146 @@ void __vc_setting_enabled_changed_cb(bool enabled)
 {
        SLOG(LOG_DEBUG, TAG_VCS, "Service enabled changed : %s", enabled ? "on" : "off");
 
-       if (NULL != g_callback) {
-               g_callback(enabled, g_user_data);
+       if (NULL != g_enabled_changed_cb) {
+               g_enabled_changed_cb(enabled, g_enabled_changed_user_data);
        }
 
        return;
 }
 
-int vc_setting_initialize(void)
+void __vc_setting_engine_changed_cb(const char* engine_appid)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Initialize VC Setting");
+       SLOG(LOG_DEBUG, TAG_VCS, "Service enabled changed : engine appid(%s)", engine_appid);
 
-       if (VC_SETTING_STATE_READY == g_state) {
-               SLOG(LOG_WARN, TAG_VCS, "[WARNING] VC Setting has already been initialized.");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_NONE;
+       if (NULL != g_engine_changed_cb) {
+               g_engine_changed_cb(engine_appid, g_engine_changed_user_data);
        }
 
+       return;
+}
+
+int vc_setting_initialize(void)
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Initialize VC Setting");
+
+       RETVM_IF(VC_SETTING_STATE_READY == g_state, VC_ERROR_NONE, TAG_VCS, "[WARNING] VC Setting has already been initialized.");
+
        int ret = vc_config_mgr_initialize(getpid() + VC_SETTING_CONFIG_HANDLE);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to initialize config manager");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
                return VC_ERROR_OPERATION_FAILED;
        }
 
        ret = vc_config_mgr_set_lang_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __config_lang_changed_cb);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to initialize config manager");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
+               vc_config_mgr_finalize(getpid() + VC_SETTING_CONFIG_HANDLE);
                return VC_ERROR_OPERATION_FAILED;
        }
 
        ret = vc_config_mgr_set_enabled_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __vc_setting_enabled_changed_cb);
+       ret = vc_config_mgr_set_engine_cb(getpid() + VC_SETTING_CONFIG_HANDLE, __vc_setting_engine_changed_cb);
 
        g_state = VC_SETTING_STATE_READY;
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Initialize VC Setting DONE");
 
        return VC_ERROR_NONE;
 }
 
 int vc_setting_deinitialize()
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Deinitialize VC Setting");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Deinitialize VC Setting");
+
+       RETVM_IF(VC_SETTING_STATE_READY != g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[WARNING] VC Setting is not initialized");
 
        vc_config_mgr_unset_lang_cb(getpid() + VC_SETTING_CONFIG_HANDLE);
+       vc_config_mgr_unset_engine_cb(getpid() + VC_SETTING_CONFIG_HANDLE);
        vc_config_mgr_finalize(getpid() + VC_SETTING_CONFIG_HANDLE);
 
        g_state = VC_SETTING_STATE_NONE;
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Deinitialize VC Setting DONE");
 
        return VC_ERROR_NONE;
 }
 
-int vc_setting_foreach_supported_languages(vc_setting_supported_language_cb callback, void* user_data)
+static bool __config_mgr_get_engine_list(const char *engine_name, const char *engine_id, const char *setting_path, const char *default_lang, bool non_fixed_support, void *user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported languages");
+       return g_engine_cb(engine_name, engine_id, setting_path, default_lang, non_fixed_support, g_engine_user_data);
+}
+
+int vc_setting_foreach_supported_engines(vc_setting_supported_engine_cb callback, void* user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported engines");
+
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
+
+       RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
+
+       SLOG(LOG_DEBUG, TAG_VCS, "===== Foreach supported engines 11");
+       g_engine_cb = callback;
+       g_engine_user_data = user_data;
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
+       int ret = vc_config_mgr_get_engine_list(__config_mgr_get_engine_list, NULL);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Foreach supported engines");
        }
 
-       if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
+
+       return ret;
+}
+
+int vc_setting_get_engine(char** engine_id)
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "===== Get current engine");
+
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
+
+       RETVM_IF(NULL == engine_id, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Engine id is NULL");
+
+       int ret = vc_config_mgr_get_engine(engine_id);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get current engine");
        }
 
+
+       return ret;
+}
+
+int vc_setting_set_engine(const char* engine_appid)
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "===== Set current engine");
+
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
+
+       RETVM_IF(NULL == engine_appid, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Engine appid is NULL");
+
+       SECURE_SLOG(LOG_DEBUG, TAG_VCS, "New engine appid : %s", engine_appid);
+
+       int ret = vc_config_mgr_set_engine(engine_appid);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set current engine");
+       }
+
+
+       return ret;
+}
+
+int vc_setting_foreach_supported_languages(vc_setting_supported_language_cb callback, void* user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Foreach supported languages");
+
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
+
+       RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
+
        int ret = vc_config_mgr_get_language_list((vc_supported_language_cb)callback, user_data);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
@@ -149,29 +212,18 @@ int vc_setting_foreach_supported_languages(vc_setting_supported_language_cb call
                SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Foreach supported languages");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Foreach supported languages DONE");
 
        return ret;
 }
 
 int vc_setting_get_language(char** language)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Get default language");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get default language");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       if (NULL == language) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Input parameter is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
-       }
+       RETVM_IF(NULL == language, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
        int ret = vc_config_mgr_get_default_language(language);
        if (0 != ret) {
@@ -180,58 +232,55 @@ int vc_setting_get_language(char** language)
                SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get default language");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get default language DONE");
 
        return ret;
 }
 
 int vc_setting_set_language(const char* language)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Set default language");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set default language");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       if (NULL == language) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Input parameter is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
-       }
+       RETVM_IF(NULL == language, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
        int ret = vc_config_mgr_set_default_language(language);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set default language");
+               // TODO: Need to reorder.
+               if (0 != vc_setting_tidl_open_connection()) {
+                       SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to open connection");
+                       return VC_ERROR_OPERATION_FAILED;
+               }
+
+               if (0 != vc_setting_tidl_request_hello()) {
+                       SLOG(LOG_DEBUG, TAG_VCS, "[DEBUG] Daemon is not available");
+               } else {
+                       ret = vc_setting_tidl_request_set_language(getpid(), language);
+                       SLOG(LOG_DEBUG, TAG_VCS, "[DEBUG] Set default language (%d)", ret);
+               }
+
+               if (0 != vc_setting_tidl_close_connection()) {
+                       SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Fail to close connection");
+                       return VC_ERROR_OPERATION_FAILED;
+               }
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set default language DONE");
 
        return ret;
 }
 
 int vc_setting_set_auto_language(bool value)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Set auto voice");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set auto voice");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
        if (value != true && value != false) {
                SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Invalid value");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
                return VC_ERROR_INVALID_PARAMETER;
        }
 
@@ -242,29 +291,18 @@ int vc_setting_set_auto_language(bool value)
                SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set auto language (%s)", value ? "on" : "off");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set auto voice DONE");
 
        return ret;
 }
 
 int vc_setting_get_auto_language(bool* value)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Get auto language");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get auto language");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       if (NULL == value) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
-       }
+       RETVM_IF(NULL == value, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
        int ret = vc_config_mgr_get_auto_language(value);
        if (0 != ret) {
@@ -273,27 +311,19 @@ int vc_setting_get_auto_language(bool* value)
                SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get auto language (%s)", *value ? "true" : "false");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get auto language DONE");
 
-       return 0;
+       return VC_ERROR_NONE;
 }
 
 int vc_setting_set_enabled(bool value)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Set service enabled");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
        if (value != true && value != false) {
                SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Invalid value");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
                return VC_ERROR_INVALID_PARAMETER;
        }
 
@@ -304,29 +334,18 @@ int vc_setting_set_enabled(bool value)
                SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Set service enabled (%s)", value ? "on" : "off");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled DONE");
 
        return ret;
 }
 
 int vc_setting_get_enabled(bool* value)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Get service enabled");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get service enabled");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       if (NULL == value) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
-       }
+       RETVM_IF(NULL == value, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
        int ret = vc_config_mgr_get_enabled(value);
        if (0 != ret) {
@@ -336,103 +355,93 @@ int vc_setting_get_enabled(bool* value)
                SLOG(LOG_DEBUG, TAG_VCS, "[SUCCESS] Get service enabled (%s)", *value ? "on" : "off");
        }
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Get service enabled DONE");
 
        return ret;
 }
 
 int vc_setting_set_enabled_changed_cb(vc_setting_enabled_changed_cb callback, void* user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Set service enabled callback");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled callback");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
-       }
+       RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
-       g_callback = callback;
-       g_user_data = user_data;
+       g_enabled_changed_cb = callback;
+       g_enabled_changed_user_data = user_data;
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set service enabled callback DONE");
 
-       return 0;
+       return VC_ERROR_NONE;
 }
 
 int vc_setting_unset_enabled_changed_cb()
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Unset service enabled callback");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset service enabled callback");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       g_callback = NULL;
-       g_user_data = NULL;
+       g_enabled_changed_cb = NULL;
+       g_enabled_changed_user_data = NULL;
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset service enabled callback DONE");
 
-       return 0;
+       return VC_ERROR_NONE;
 }
 
 int vc_setting_set_current_language_changed_cb(vc_setting_current_language_changed_cb callback, void* user_data)
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Set current language changed callback");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set current language changed callback");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
 
-       if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_PARAMETER;
-       }
+       RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
-       g_lang_callback = callback;
-       g_lang_user_data = user_data;
+       g_current_language_changed_cb = callback;
+       g_current_language_changed_user_data = user_data;
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set current language changed callback DONE");
 
-       return 0;
+       return VC_ERROR_NONE;
 }
 
 int vc_setting_unset_current_language_changed_cb()
 {
-       SLOG(LOG_DEBUG, TAG_VCS, "===== Unset current language changed callback");
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset current language changed callback");
 
-       if (VC_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_ERROR, TAG_VCS, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_VCS, "=====");
-               SLOG(LOG_DEBUG, TAG_VCS, " ");
-               return VC_ERROR_INVALID_STATE;
-       }
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
+
+       g_current_language_changed_cb = NULL;
+       g_current_language_changed_user_data = NULL;
+
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset current language changed callback");
 
-       g_lang_callback = NULL;
-       g_lang_user_data = NULL;
+       return VC_ERROR_NONE;
+}
+
+int vc_setting_set_engine_changed_cb(vc_setting_engine_changed_cb callback, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set engine changed callback");
+
+       RETVM_IF(NULL == callback, VC_ERROR_INVALID_PARAMETER, TAG_VCS, "[ERROR] Invalid parameter");
 
-       SLOG(LOG_DEBUG, TAG_VCS, "=====");
-       SLOG(LOG_DEBUG, TAG_VCS, " ");
+       g_engine_changed_cb = callback;
+       g_engine_changed_user_data = user_data;
 
-       return 0;
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Set engine changed callback DONE");
+       return VC_ERROR_NONE;
 }
 
+int vc_setting_unset_engine_changed_cb()
+{
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset engine changed callback");
+
+       RETVM_IF(VC_SETTING_STATE_NONE == g_state, VC_ERROR_INVALID_STATE, TAG_VCS, "[ERROR] Not initialized");
+
+       g_engine_changed_cb = NULL;
+       g_engine_changed_user_data = NULL;
+
+       SLOG(LOG_DEBUG, TAG_VCS, "@@@ Unset engine changed callback DONE");
+       return VC_ERROR_NONE;
+}