updates codes to check model config feature
[platform/core/uifw/voice-control.git] / client / vc.c
index a1a2f73..1cad371 100644 (file)
@@ -14,6 +14,8 @@
 * limitations under the License.
 */
 
+#include <aul.h>
+#include <system_info.h>
 
 #include "vc_client.h"
 #include "vc_command.h"
 #include "voice_control_command_expand.h"
 
 
-static bool g_is_daemon_started = false;
 
 static Ecore_Timer* g_connect_timer = NULL;
 
 static vc_h g_vc = NULL;
 
+static int g_feature_enabled = -1;
+
 #if 0
 static Ecore_Event_Handler* g_focus_in_hander = NULL;
 static Ecore_Event_Handler* g_focus_out_hander = NULL;
@@ -41,10 +44,33 @@ static Ecore_Event_Handler* g_focus_out_hander = NULL;
 Eina_Bool __vc_notify_state_changed(void *data);
 Eina_Bool __vc_notify_error(void *data);
 
+static int __vc_get_feature_enabled()
+{
+       if (0 == g_feature_enabled) {
+               SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Voice control feature NOT supported");
+               return VC_ERROR_NOT_SUPPORTED;
+       } else if (-1 == g_feature_enabled) {
+               bool vc_supported = false;
+               bool mic_supported = false;
+               if (0 == system_info_get_platform_bool(VC_FEATURE_PATH, &vc_supported)) {
+                       if (0 == system_info_get_platform_bool(VC_MIC_FEATURE_PATH, &mic_supported)) {
+                               if (false == vc_supported || false == mic_supported) {
+                                       SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Voice control feature NOT supported");
+                                       g_feature_enabled = 0;
+                                       return VC_ERROR_NOT_SUPPORTED;
+                               }
+
+                               g_feature_enabled = 1;
+                       }
+               }
+       }
+
+       return 0;
+}
 
 static const char* __vc_get_error_code(vc_error_e err)
 {
-       switch(err) {
+       switch (err) {
                case VC_ERROR_NONE:                     return "VC_ERROR_NONE";                 break;
                case VC_ERROR_OUT_OF_MEMORY:            return "VC_ERROR_OUT_OF_MEMORY";        break;
                case VC_ERROR_IO_ERROR:                 return "VC_ERROR_IO_ERROR";             break;
@@ -76,8 +102,8 @@ static int __vc_convert_config_error_code(vc_config_error_e code)
 
 static void __vc_lang_changed_cb(const char* before_lang, const char* current_lang)
 {
-       SECURE_SLOG(LOG_DEBUG, TAG_VCC, "Lang changed : Before lang(%s) Current lang(%s)", 
-               before_lang, current_lang);
+       SLOG(LOG_DEBUG, TAG_VCC, "Lang changed : Before lang(%s) Current lang(%s)",
+                before_lang, current_lang);
 
        vc_current_language_changed_cb callback;
        void* lang_user_data;
@@ -95,32 +121,37 @@ static void __vc_lang_changed_cb(const char* before_lang, const char* current_la
        return;
 }
 
-static void __vc_service_state_changed_cb(int before_state, int current_state)
+static Eina_Bool __notify_auth_changed_cb(void *data)
 {
-       SLOG(LOG_DEBUG, TAG_VCC, "Service State changed : Before(%d) Current(%d)", 
-               before_state, current_state);
+       vc_auth_state_changed_cb callback = NULL;
+       void* user_data;
 
-       /* Save service state */
-       vc_client_set_service_state(g_vc, (vc_service_state_e)current_state);
+       vc_client_get_auth_state_changed_cb(g_vc, &callback, &user_data);
 
-       vc_service_state_changed_cb service_callback = NULL;
-       void* service_user_data;
-       vc_client_get_service_state_changed_cb(g_vc, &service_callback, &service_user_data);
+       vc_auth_state_e before = -1;
+       vc_auth_state_e current = -1;
+
+       vc_client_get_before_auth_state(g_vc, &before, &current);
 
-       if (NULL != service_callback) {
+       if (NULL != callback) {
                vc_client_use_callback(g_vc);
-               service_callback((vc_service_state_e)before_state, (vc_service_state_e)current_state, service_user_data);
+               callback(before, current, user_data);
                vc_client_not_use_callback(g_vc);
-               SLOG(LOG_DEBUG, TAG_VCC, "Service state changed callback is called");
+               SLOG(LOG_DEBUG, TAG_VCC, "Auth state changed callback is called");
        } else {
-               SLOG(LOG_WARN, TAG_VCC, "[WARNING] State changed callback is NULL");
+               SLOG(LOG_WARN, TAG_VCC, "[WARNING] Auth state changed callback is null");
        }
 
-       return;
+       return EINA_FALSE;
 }
 
-int vc_initialize()
+
+int vc_initialize(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Initialize");
 
        /* check handle */
@@ -146,8 +177,8 @@ int vc_initialize()
 
        int ret = vc_config_mgr_initialize(g_vc->handle);
        if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to init config manager : %s", 
-                       __vc_get_error_code(__vc_convert_config_error_code(ret)));
+               SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to init config manager : %s",
+                        __vc_get_error_code(__vc_convert_config_error_code(ret)));
                vc_client_destroy(g_vc);
                return __vc_convert_config_error_code(ret);
        }
@@ -160,25 +191,6 @@ int vc_initialize()
                return __vc_convert_config_error_code(ret);
        }
 
-       ret = vc_config_mgr_set_service_state_cb(g_vc->handle, __vc_service_state_changed_cb);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to set service change callback : %d", ret);
-               vc_config_mgr_unset_lang_cb(g_vc->handle);
-               vc_config_mgr_finalize(g_vc->handle);
-               vc_client_destroy(g_vc);
-               return __vc_convert_config_error_code(ret);
-       }
-
-       int service_state = -1;
-       if (0 != vc_config_mgr_get_service_state(&service_state)) {
-               SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to get service state");
-               vc_config_mgr_finalize(g_vc->handle);
-               vc_client_destroy(g_vc);
-               return __vc_convert_config_error_code(ret);
-       }
-
-       vc_client_set_service_state(g_vc, service_state);
-
        SLOG(LOG_DEBUG, TAG_VCC, "[Success] pid(%d)", g_vc->handle);
 
        SLOG(LOG_DEBUG, TAG_VCC, "=====");
@@ -187,7 +199,7 @@ int vc_initialize()
        return VC_ERROR_NONE;
 }
 
-static void __vc_internal_unprepare()
+static void __vc_internal_unprepare(void)
 {
        /* return authority */
        vc_auth_state_e state = VC_AUTH_STATE_NONE;
@@ -206,7 +218,6 @@ static void __vc_internal_unprepare()
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to request finalize : %s", __vc_get_error_code(ret));
        }
 
-       g_is_daemon_started = false;
 
 #if 0
        ecore_event_handler_del(g_focus_in_hander);
@@ -219,8 +230,12 @@ static void __vc_internal_unprepare()
        return;
 }
 
-int vc_deinitialize()
+int vc_deinitialize(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Deinitialize");
 
        if (false == vc_client_is_valid(g_vc)) {
@@ -244,7 +259,6 @@ int vc_deinitialize()
                        ecore_timer_del(g_connect_timer);
                }
 
-               vc_config_mgr_unset_service_state_cb(g_vc->handle);
                vc_config_mgr_unset_lang_cb(g_vc->handle);
                vc_config_mgr_finalize(g_vc->handle);
 
@@ -270,35 +284,9 @@ int vc_deinitialize()
        return VC_ERROR_NONE;
 }
 
-static Eina_Bool __notify_auth_changed_cb(void *data)
-{
-       vc_auth_state_changed_cb callback = NULL;
-       void* user_data;
-
-       vc_client_get_auth_state_changed_cb(g_vc, &callback, &user_data);
-
-       vc_auth_state_e before = -1;
-       vc_auth_state_e current = -1;
-       
-       vc_client_get_before_auth_state(g_vc, &before, &current);
-
-       if (NULL != callback) {
-               vc_client_use_callback(g_vc);
-               callback(before, current, user_data);
-               vc_client_not_use_callback(g_vc);
-               SLOG(LOG_DEBUG, TAG_VCC, "Auth state changed callback is called");
-       } else {
-               SLOG(LOG_WARN, TAG_VCC, "[WARNING] Auth state changed callback is null");
-       }
-
-       return EINA_FALSE;
-
-
-}
-
 #if 0
-static Eina_Bool __vc_x_event_window_focus_in(void *data, int type, void *event) 
-{ 
+static Eina_Bool __vc_x_event_window_focus_in(void *data, int type, void *event)
+{
        Ecore_X_Event_Window_Focus_In *e;
 
        e = event;
@@ -323,17 +311,17 @@ static Eina_Bool __vc_x_event_window_focus_in(void *data, int type, void *event)
                }
                if (VC_AUTH_STATE_INVALID == state) {
                        vc_client_set_auth_state(g_vc, VC_AUTH_STATE_VALID);
-                       
+
                        /* notify auth changed cb */
                        ecore_timer_add(0, __notify_auth_changed_cb, NULL);
                }
        }
 
        return ECORE_CALLBACK_PASS_ON;
-} 
+}
 
-static Eina_Bool __vc_x_event_window_focus_out(void *data, int type, void *event) 
-{ 
+static Eina_Bool __vc_x_event_window_focus_out(void *data, int type, void *event)
+{
        Ecore_X_Event_Window_Focus_In *e;
 
        e = event;
@@ -368,36 +356,10 @@ static Eina_Bool __vc_x_event_window_focus_out(void *data, int type, void *event
 }
 #endif
 
-static void __vc_fork_vc_daemon()
-{
-       int pid, i;
-       pid = fork();
-
-       switch(pid) {
-       case -1:
-               SLOG(LOG_ERROR, TAG_VCC, "Fail to create daemon");
-               break;
-       case 0:
-               setsid();
-               for (i = 0;i < _NSIG;i++)
-                       signal(i, SIG_DFL);
-
-               execl(VC_DAEMON_PATH, VC_DAEMON_PATH, NULL);
-               break;
-       default:
-               break;
-       }
-       return;
-}
-       
 static Eina_Bool __vc_connect_daemon(void *data)
 {
        /* Send hello */
        if (0 != vc_dbus_request_hello()) {
-               if (false == g_is_daemon_started) {
-                       g_is_daemon_started = true;
-                       __vc_fork_vc_daemon();
-               }
                return EINA_TRUE;
        }
 
@@ -406,7 +368,8 @@ static Eina_Bool __vc_connect_daemon(void *data)
        /* request initialization */
        int ret = -1;
        int mgr_pid = -1;
-       ret = vc_dbus_request_initialize(g_vc->handle, &mgr_pid);
+       int service_state = 0;
+       ret = vc_dbus_request_initialize(g_vc->handle, &mgr_pid, &service_state);
        if (VC_ERROR_ENGINE_NOT_FOUND == ret) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to initialize : %s", __vc_get_error_code(ret));
 
@@ -430,8 +393,10 @@ static Eina_Bool __vc_connect_daemon(void *data)
                /* Success to connect */
        }
 
-       g_connect_timer = NULL;
+       /* Set service state */
+       vc_client_set_service_state(g_vc, (vc_service_state_e)service_state);
 
+       g_connect_timer = NULL;
 #if 0
        g_focus_in_hander = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, __vc_x_event_window_focus_in, NULL);
        g_focus_out_hander = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, __vc_x_event_window_focus_out, NULL);
@@ -448,8 +413,12 @@ static Eina_Bool __vc_connect_daemon(void *data)
        return EINA_FALSE;
 }
 
-int vc_prepare()
+int vc_prepare(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Prepare");
 
        vc_state_e state;
@@ -468,8 +437,6 @@ int vc_prepare()
                return VC_ERROR_INVALID_STATE;
        }
 
-       g_is_daemon_started = false;
-
        g_connect_timer = ecore_timer_add(0, __vc_connect_daemon, NULL);
 
        SLOG(LOG_DEBUG, TAG_VCC, "=====");
@@ -478,8 +445,12 @@ int vc_prepare()
        return VC_ERROR_NONE;
 }
 
-int vc_unprepare()
+int vc_unprepare(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Unprepare");
 
        vc_state_e state;
@@ -511,6 +482,10 @@ int vc_unprepare()
 
 int vc_foreach_supported_languages(vc_supported_language_cb callback, void* user_data)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Foreach Supported Language");
 
        if (NULL == callback) {
@@ -544,6 +519,10 @@ int vc_foreach_supported_languages(vc_supported_language_cb callback, void* user
 
 int vc_get_current_language(char** language)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Get Current Language");
 
        if (NULL == language) {
@@ -576,6 +555,10 @@ int vc_get_current_language(char** language)
 
 int vc_get_state(vc_state_e* state)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Get State");
 
        if (NULL == state) {
@@ -593,7 +576,7 @@ int vc_get_state(vc_state_e* state)
 
        *state = temp;
 
-       switch(*state) {
+       switch (*state) {
                case VC_STATE_NONE:             SLOG(LOG_DEBUG, TAG_VCC, "Current state is 'None'");            break;
                case VC_STATE_INITIALIZED:      SLOG(LOG_DEBUG, TAG_VCC, "Current state is 'Created'");         break;
                case VC_STATE_READY:            SLOG(LOG_DEBUG, TAG_VCC, "Current state is 'Ready'");           break;
@@ -608,6 +591,10 @@ int vc_get_state(vc_state_e* state)
 
 int vc_get_service_state(vc_service_state_e* state)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Get Service State");
 
        if (NULL == state) {
@@ -632,12 +619,12 @@ int vc_get_service_state(vc_service_state_e* state)
 
        *state = service_state;
 
-       switch(*state) {
-       case VC_SERVICE_STATE_NONE:             SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'None'");            break;
-       case VC_SERVICE_STATE_READY:            SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'Ready'");           break;
-       case VC_SERVICE_STATE_RECORDING:        SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'Recording'");       break;
-       case VC_SERVICE_STATE_PROCESSING:       SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'Processing'");      break;
-       default:                                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Invalid state");                      break;
+       switch (*state) {
+               case VC_SERVICE_STATE_NONE:             SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'None'");            break;
+               case VC_SERVICE_STATE_READY:            SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'Ready'");           break;
+               case VC_SERVICE_STATE_RECORDING:        SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'Recording'");       break;
+               case VC_SERVICE_STATE_PROCESSING:       SLOG(LOG_DEBUG, TAG_VCC, "Current service state is 'Processing'");      break;
+               default:                                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Invalid state");                      break;
        }
 
        SLOG(LOG_DEBUG, TAG_VCC, "=====");
@@ -646,7 +633,7 @@ int vc_get_service_state(vc_service_state_e* state)
        return VC_ERROR_NONE;
 }
 
-#if 0 
+#if 0
 int vc_set_window_id(int wid)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Set Window id");
@@ -754,7 +741,7 @@ int vc_get_window_id(int* wid)
 *
 * @pre The state should be #VC_STATE_READY.
 */
-#if 0 
+#if 0
 int vc_is_command_format_supported(vc_cmd_format_e format, bool* support)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Is command format supported");
@@ -790,7 +777,11 @@ int vc_is_command_format_supported(vc_cmd_format_e format, bool* support)
 #endif
 
 int vc_set_command_list(vc_cmd_list_h vc_cmd_list, int type)
-{ 
+{
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Set Command list");
 
        if (NULL == vc_cmd_list) {
@@ -819,7 +810,7 @@ int vc_set_command_list(vc_cmd_list_h vc_cmd_list, int type)
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Invalid command type: input type is %d", type);
                SLOG(LOG_DEBUG, TAG_VCC, "=====");
                SLOG(LOG_DEBUG, TAG_VCC, " ");
-               return VC_ERROR_INVALID_STATE;
+               return VC_ERROR_INVALID_PARAMETER;
        }
 
        vc_cmd_list_s* list = NULL;
@@ -847,7 +838,7 @@ int vc_set_command_list(vc_cmd_list_h vc_cmd_list, int type)
                                        }
                                }
                        }
-               } while(0 != ret);
+               } while (0 != ret);
        }
 
        SLOG(LOG_DEBUG, TAG_VCC, "=====");
@@ -858,6 +849,10 @@ int vc_set_command_list(vc_cmd_list_h vc_cmd_list, int type)
 
 int vc_unset_command_list(int type)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Unset Command list");
 
        vc_state_e state;
@@ -945,6 +940,10 @@ int vc_get_exclusive_command_option(bool* value)
 
 int vc_set_exclusive_command_option(bool value)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Set exclusive command");
 
        vc_state_e state;
@@ -1061,7 +1060,7 @@ int vc_request_start(bool stop_by_silence)
        return ret;
 }
 
-int vc_request_stop()
+int vc_request_stop(void)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Request stop");
 
@@ -1120,7 +1119,7 @@ int vc_request_stop()
        return ret;
 }
 
-int vc_request_cancel()
+int vc_request_cancel(void)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Request cancel Interrupt");
 
@@ -1197,7 +1196,7 @@ Eina_Bool __vc_notify_error(void *data)
                SLOG(LOG_DEBUG, TAG_VCC, "Error callback is called");
        } else {
                SLOG(LOG_WARN, TAG_VCC, "[WARNING] Error callback is null");
-       }  
+       }
 
        return EINA_FALSE;
 }
@@ -1205,7 +1204,7 @@ Eina_Bool __vc_notify_error(void *data)
 int __vc_cb_error(int pid, int reason)
 {
        if (0 != vc_client_get_handle(pid, &g_vc)) {
-               SLOG(LOG_ERROR, TAG_VCC, "Handle is not valid");
+               SLOG(LOG_ERROR, TAG_VCC, "Handle is not valid : pid(%d)", pid);
                return -1;
        }
 
@@ -1272,7 +1271,7 @@ static Eina_Bool __vc_notify_result(void *data)
        callback(event, vc_cmd_list, temp_text, user_data);
        vc_client_not_use_callback(g_vc);
 
-       SLOG(LOG_DEBUG, TAG_VCC, "Client result callback called");      
+       SLOG(LOG_DEBUG, TAG_VCC, "Client result callback called");
 
        vc_cmd_list_destroy(vc_cmd_list, true);
 
@@ -1282,8 +1281,13 @@ static Eina_Bool __vc_notify_result(void *data)
        return EINA_FALSE;
 }
 
-void __vc_cb_result()
+void __vc_cb_result(int pid)
 {
+       if (0 != vc_client_get_handle(pid, &g_vc)) {
+               SLOG(LOG_ERROR, TAG_VCC, "Handle is not valid : pid(%d)", pid);
+               return;
+       }
+
        ecore_timer_add(0, __vc_notify_result, NULL);
 
        return;
@@ -1291,6 +1295,10 @@ void __vc_cb_result()
 
 int vc_set_result_cb(vc_result_cb callback, void* user_data)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (NULL == callback)
                return VC_ERROR_INVALID_PARAMETER;
 
@@ -1307,12 +1315,16 @@ int vc_set_result_cb(vc_result_cb callback, void* user_data)
        }
 
        vc_client_set_result_cb(g_vc, callback, user_data);
-       
+
        return 0;
 }
 
-int vc_unset_result_cb()
+int vc_unset_result_cb(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        vc_state_e state;
        if (0 != vc_client_get_client_state(g_vc, &state)) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Unset result callback : A handle is not available");
@@ -1330,8 +1342,44 @@ int vc_unset_result_cb()
        return 0;
 }
 
+int __vc_cb_service_state(int state)
+{
+       vc_service_state_e current_state = (vc_service_state_e)state;
+       vc_service_state_e before_state;
+       vc_client_get_service_state(g_vc, &before_state);
+
+       if (current_state == before_state) {
+               return 0;
+       }
+
+       SLOG(LOG_DEBUG, TAG_VCC, "Service State changed : Before(%d) Current(%d)",
+               before_state, current_state);
+
+       /* Save service state */
+       vc_client_set_service_state(g_vc, current_state);
+
+       vc_service_state_changed_cb callback = NULL;
+       void* service_user_data;
+       vc_client_get_service_state_changed_cb(g_vc, &callback, &service_user_data);
+
+       if (NULL != callback) {
+               vc_client_use_callback(g_vc);
+               callback((vc_service_state_e)before_state, (vc_service_state_e)current_state, service_user_data);
+               vc_client_not_use_callback(g_vc);
+               SLOG(LOG_DEBUG, TAG_VCC, "Service state changed callback is called");
+       } else {
+               SLOG(LOG_WARN, TAG_VCC, "[WARNING] Service state changed callback is null");
+       }
+
+       return 0;
+}
+
 int vc_set_service_state_changed_cb(vc_service_state_changed_cb callback, void* user_data)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (NULL == callback)
                return VC_ERROR_INVALID_PARAMETER;
 
@@ -1348,12 +1396,16 @@ int vc_set_service_state_changed_cb(vc_service_state_changed_cb callback, void*
        }
 
        vc_client_set_service_state_changed_cb(g_vc, callback, user_data);
-       
+
        return 0;
 }
 
-int vc_unset_service_state_changed_cb()
+int vc_unset_service_state_changed_cb(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        vc_state_e state;
        if (0 != vc_client_get_client_state(g_vc, &state)) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Unset result callback : A handle is not available");
@@ -1373,6 +1425,10 @@ int vc_unset_service_state_changed_cb()
 
 int vc_set_state_changed_cb(vc_state_changed_cb callback, void* user_data)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (callback == NULL)
                return VC_ERROR_INVALID_PARAMETER;
 
@@ -1393,8 +1449,12 @@ int vc_set_state_changed_cb(vc_state_changed_cb callback, void* user_data)
        return 0;
 }
 
-int vc_unset_state_changed_cb()
+int vc_unset_state_changed_cb(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        vc_state_e state;
        if (0 != vc_client_get_client_state(g_vc, &state)) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Unset state changed callback : A handle is not available");
@@ -1414,6 +1474,10 @@ int vc_unset_state_changed_cb()
 
 int vc_set_current_language_changed_cb(vc_current_language_changed_cb callback, void* user_data)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (NULL == callback)
                return VC_ERROR_INVALID_PARAMETER;
 
@@ -1434,8 +1498,12 @@ int vc_set_current_language_changed_cb(vc_current_language_changed_cb callback,
        return 0;
 }
 
-int vc_unset_current_language_changed_cb()
+int vc_unset_current_language_changed_cb(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        vc_state_e state;
        if (0 != vc_client_get_client_state(g_vc, &state)) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Unset current language changed : A handle is not available");
@@ -1455,6 +1523,10 @@ int vc_unset_current_language_changed_cb()
 
 int vc_set_error_cb(vc_error_cb callback, void* user_data)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        if (NULL == callback)
                return VC_ERROR_INVALID_PARAMETER;
 
@@ -1475,8 +1547,12 @@ int vc_set_error_cb(vc_error_cb callback, void* user_data)
        return 0;
 }
 
-int vc_unset_error_cb()
+int vc_unset_error_cb(void)
 {
+       if (0 != __vc_get_feature_enabled()) {
+               return VC_ERROR_NOT_SUPPORTED;
+       }
+
        vc_state_e state;
        if (0 != vc_client_get_client_state(g_vc, &state)) {
                SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Unset error callback : A handle is not available");
@@ -1495,7 +1571,7 @@ int vc_unset_error_cb()
 }
 
 /* Authority */
-int vc_auth_enable()
+int vc_auth_enable(void)
 {
        /* check state */
        vc_state_e state;
@@ -1554,11 +1630,11 @@ int vc_auth_enable()
        ecore_timer_add(0, __notify_auth_changed_cb, NULL);
 
        SLOG(LOG_DEBUG, TAG_VCC, "[SUCCESS] Auth enable");
-       
+
        return VC_ERROR_NONE;
 }
 
-int vc_auth_disable()
+int vc_auth_disable(void)
 {
        /* check state */
        vc_state_e state;
@@ -1637,7 +1713,7 @@ int vc_auth_get_state(vc_auth_state_e* state)
        *state = temp;
 
        SLOG(LOG_DEBUG, TAG_VCC, "[SUCCESS] Current auth state is %d", *state);
-       
+
        return VC_ERROR_NONE;
 }
 
@@ -1672,7 +1748,7 @@ int vc_auth_set_state_changed_cb(vc_auth_state_changed_cb callback, void* user_d
        return VC_ERROR_NONE;
 }
 
-int vc_auth_unset_state_changed_cb()
+int vc_auth_unset_state_changed_cb(void)
 {
        /* check auth */
        vc_auth_state_e auth_state;
@@ -1697,7 +1773,7 @@ int vc_auth_unset_state_changed_cb()
        return VC_ERROR_NONE;
 }
 
-int vc_auth_start()
+int vc_auth_start(void)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Request start");
 
@@ -1777,7 +1853,7 @@ int vc_auth_start()
        return ret;
 }
 
-int vc_auth_stop()
+int vc_auth_stop(void)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Request stop");
 
@@ -1855,7 +1931,7 @@ int vc_auth_stop()
        return ret;
 }
 
-int vc_auth_cancel()
+int vc_auth_cancel(void)
 {
        SLOG(LOG_DEBUG, TAG_VCC, "===== [Client] Request cancel");