Change uid/gid of service files
[platform/core/uifw/tts.git] / client / tts_setting.c
index 1eaca7a..fa1b90a 100644 (file)
@@ -1,5 +1,5 @@
 /*
-*  Copyright (c) 2012 Samsung Electronics Co., Ltd All Rights Reserved 
+*  Copyright (c) 2011-2016 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.
 *  You may obtain a copy of the License at
 *  limitations under the License.
 */
 
-
-#include <sys/wait.h>
+#include <dirent.h>
 #include <Ecore.h>
+#include <sys/wait.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <dirent.h>
 
+#include "tts_config_mgr.h"
 #include "tts_main.h"
 #include "tts_setting.h"
-#include "tts_setting_dbus.h"
 
-static bool g_is_daemon_started = false;
+/**
+* @brief Enumerations of setting state.
+*/
+typedef enum {
+       TTS_SETTING_STATE_NONE = 0,
+       TTS_SETTING_STATE_READY
+} tts_setting_state_e;
 
-static int __check_setting_tts_daemon();
 
 static tts_setting_state_e g_state = TTS_SETTING_STATE_NONE;
 
-static tts_setting_initialized_cb g_initialized_cb;
-static void* g_user_data;
+static tts_setting_supported_engine_cb g_engine_cb;
 
-static int g_reason;
+static tts_setting_engine_changed_cb g_engine_changed_cb;
+static void* g_engine_changed_user_data;
 
-/* API Implementation */
-static Eina_Bool __tts_setting_initialized(void *data)
+static tts_setting_voice_changed_cb g_voice_changed_cb;
+static void* g_voice_changed_user_data;
+
+static tts_setting_speed_changed_cb g_speed_changed_cb;
+static void* g_speed_changed_user_data;
+
+static tts_setting_pitch_changed_cb g_pitch_changed_cb;
+static void* g_pitch_changed_user_data;
+
+
+
+const char* tts_tag()
 {
-       g_initialized_cb(g_state, g_reason, g_user_data);
+       return "ttsc";
+}
 
-       return EINA_FALSE;
+static int __setting_convert_config_error_code(tts_config_error_e code)
+{
+       if (code == TTS_CONFIG_ERROR_NONE)                      return TTS_SETTING_ERROR_NONE;
+       if (code == TTS_CONFIG_ERROR_OUT_OF_MEMORY)             return TTS_SETTING_ERROR_OUT_OF_MEMORY;
+       if (code == TTS_CONFIG_ERROR_IO_ERROR)                  return TTS_SETTING_ERROR_IO_ERROR;
+       if (code == TTS_CONFIG_ERROR_INVALID_PARAMETER)         return TTS_SETTING_ERROR_INVALID_PARAMETER;
+       if (code == TTS_CONFIG_ERROR_INVALID_STATE)             return TTS_SETTING_ERROR_INVALID_STATE;
+       if (code == TTS_CONFIG_ERROR_INVALID_VOICE)             return TTS_SETTING_ERROR_INVALID_VOICE;
+       if (code == TTS_CONFIG_ERROR_ENGINE_NOT_FOUND)          return TTS_SETTING_ERROR_ENGINE_NOT_FOUND;
+       if (code == TTS_CONFIG_ERROR_OPERATION_FAILED)          return TTS_SETTING_ERROR_OPERATION_FAILED;
+       if (code == TTS_CONFIG_ERROR_NOT_SUPPORTED_FEATURE)     return TTS_SETTING_ERROR_NOT_SUPPORTED_FEATURE;
+
+       return TTS_SETTING_ERROR_NONE;
 }
 
-static Eina_Bool __tts_setting_connect_daemon(void *data)
+void __setting_config_engine_changed_cb(const char* engine_id, const char* setting, const char* language, int voice_type, bool auto_voice, bool need_credential, void* user_data)
 {
-       /* Send hello */
-       if (0 != tts_setting_dbus_request_hello()) {
-               if (false == g_is_daemon_started) {
-                       g_is_daemon_started = true;
-                       __check_setting_tts_daemon();
-               }
-               return EINA_TRUE;
-       }
+       SLOG(LOG_DEBUG, TAG_TTSC, "Engine changed : engine(%s) setting(%s) lang(%s) type(%d)",
+                engine_id, setting, language, voice_type);
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Connect daemon");
+       if (NULL != g_engine_changed_cb)
+               g_engine_changed_cb(engine_id, g_engine_changed_user_data);
 
-       /* do request initialize */
-       int ret = -1;
+       if (NULL != g_voice_changed_cb)
+               g_voice_changed_cb(language, voice_type, auto_voice, g_voice_changed_user_data);
+}
 
-       ret = tts_setting_dbus_request_initialize();
+void __setting_config_voice_changed_cb(const char* before_language, int before_type, const char* language, int voice_type, bool auto_voice, void* user_data)
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "Voice changed : lang(%s) type(%d) auto(%s)", language, voice_type, auto_voice ? "on" : "off");
 
-       if (TTS_SETTING_ERROR_ENGINE_NOT_FOUND == ret) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Engine not found");
-       } else if (TTS_SETTING_ERROR_NONE != ret) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to connection : %d", ret);
-       } else {
-               /* success to connect tts-daemon */
-               g_state = TTS_SETTING_STATE_READY;
-       }
+       if (NULL != g_voice_changed_cb)
+               g_voice_changed_cb(language, voice_type, auto_voice, g_voice_changed_user_data);
+}
 
-       g_reason = ret;
+void __setting_config_speech_rate_changed_cb(int value, void* user_data)
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "Speech rate : %d", value);
 
-       ecore_timer_add(0, __tts_setting_initialized, NULL);
+       if (NULL != g_speed_changed_cb)
+               g_speed_changed_cb(value, g_speed_changed_user_data);
+}
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+void __setting_config_pitch_changed_cb(int value, void* user_data)
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "Pitch : %d", value);
 
-       return EINA_FALSE;
+       if (NULL != g_pitch_changed_cb)
+               g_pitch_changed_cb(value, g_pitch_changed_user_data);
 }
 
 int tts_setting_initialize()
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Initialize TTS Setting");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Initialize TTS Setting");
 
        if (TTS_SETTING_STATE_READY == g_state) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] TTS Setting has already been initialized. \n");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] TTS Setting has already been initialized.");
+               SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
                return TTS_SETTING_ERROR_NONE;
        }
 
-       if( 0 != tts_setting_dbus_open_connection() ) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to open connection\n ");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
-               return TTS_SETTING_ERROR_OPERATION_FAILED;
-       }
-
-       /* Send hello */
-       if (0 != tts_setting_dbus_request_hello()) {
-               __check_setting_tts_daemon();
-       }
-
-       /* do request */
-       int i = 1;
-       int ret = 0;
-       while(1) {
-               ret = tts_setting_dbus_request_initialize();
-
-               if( TTS_SETTING_ERROR_ENGINE_NOT_FOUND == ret ) {
-                       SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Engine not found");
-                       break;
-               } else if(ret) {
-                       sleep(1);
-                       if (i == 3) {
-                               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Connection Time out");
-                               ret = TTS_SETTING_ERROR_TIMED_OUT;                          
-                               break;
-                       }    
-                       i++;
-               } else {
-                       /* success to connect tts-daemon */
-                       break;
-               }
+       int ret = tts_config_mgr_initialize(getpid());
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to initialize config manager : %d", ret);
+               return __setting_convert_config_error_code(ret);
        }
 
-       if (TTS_SETTING_ERROR_NONE == ret) {
-               g_state = TTS_SETTING_STATE_READY;
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Initialize");
+       ret = tts_config_mgr_set_callback(getpid(), __setting_config_engine_changed_cb, __setting_config_voice_changed_cb, 
+               __setting_config_speech_rate_changed_cb, __setting_config_pitch_changed_cb, NULL);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to set config changed : %d", ret);
+               return __setting_convert_config_error_code(ret);
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
-
-       return ret;
-}
+       g_state = TTS_SETTING_STATE_READY;
 
-int tts_setting_initialize_async(tts_setting_initialized_cb callback, void* user_data)
-{
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Initialize TTS Setting");
+       g_engine_changed_cb = NULL;
+       g_engine_changed_user_data = NULL;
 
-       if (TTS_SETTING_STATE_READY == g_state) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] TTS Setting has already been initialized. \n");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
-               return TTS_SETTING_ERROR_NONE;
-       }
+       g_voice_changed_cb = NULL;
+       g_voice_changed_user_data = NULL;
 
-       if( 0 != tts_setting_dbus_open_connection() ) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to open connection\n ");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
-               return TTS_SETTING_ERROR_OPERATION_FAILED;
-       }
-       
-       g_initialized_cb = callback;
-       g_user_data = user_data;
+       g_speed_changed_cb = NULL;
+       g_speed_changed_user_data = NULL;
 
-       ecore_timer_add(0, __tts_setting_connect_daemon, NULL);
+       g_pitch_changed_cb = NULL;
+       g_pitch_changed_user_data = NULL;
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
        return TTS_SETTING_ERROR_NONE;
 }
 
-
 int tts_setting_finalize()
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Finalize TTS Setting");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Finalize TTS Setting");
 
-       if (TTS_SETTING_STATE_NONE == g_state) {
-               SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
-               return TTS_SETTING_ERROR_INVALID_STATE;
-       }
+       tts_config_mgr_finalize(getpid());
 
-       int ret = tts_setting_dbus_request_finalilze(); 
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] result : %d", ret);
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       g_state = TTS_SETTING_STATE_NONE;
 
-               return TTS_SETTING_ERROR_OPERATION_FAILED;
-       }
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
-       if (0 != tts_setting_dbus_close_connection()) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to close connection\n ");
-       } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Finalize");
-       }
+       return TTS_SETTING_ERROR_NONE;
+}
 
-       g_state = TTS_SETTING_STATE_NONE;
-       
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+bool __tts_config_mgr_get_engine_list(const char* engine_id, const char* engine_name, const char* setting, void* user_data)
+{
+       if (NULL != g_engine_cb) {
+               return g_engine_cb(engine_id, engine_name, setting, user_data);
+       }
 
-       return TTS_SETTING_ERROR_NONE;
+       return false;
 }
 
 int tts_setting_foreach_supported_engines(tts_setting_supported_engine_cb callback, void* user_data)
-{    
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Foreach supported engines");
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Foreach supported engines");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == callback) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Callback is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_get_engine_list(callback, user_data);
+       g_engine_cb = callback;
+
+       int ret = tts_config_mgr_get_engine_list(__tts_config_mgr_get_engine_list, user_data);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
-       } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Foreach supported engines");
        }
-       
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
-               
-       return ret;
+
+       g_engine_cb = NULL;
+
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+       return __setting_convert_config_error_code(ret);
 }
 
 int tts_setting_get_engine(char** engine_id)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Get current engine");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get current engine");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+               SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == engine_id) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Engine id is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+               SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_get_engine(engine_id);
+       int ret = tts_config_mgr_get_engine(engine_id);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
                SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get current engine");
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
-       return ret;
+       return __setting_convert_config_error_code(ret);
 }
 
 int tts_setting_set_engine(const char* engine_id)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Set current engine");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set current engine");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+               SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == engine_id) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Engine id is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+               SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_set_engine(engine_id);
+       int ret = tts_config_mgr_set_engine(engine_id);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set current engine");
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set current engine : %s", engine_id);
        }
-       
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
-    
-       return ret;
+
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+       return __setting_convert_config_error_code(ret);
 }
 
-int tts_setting_foreach_surpported_voices(tts_setting_supported_voice_cb callback, void* user_data)
+int tts_setting_foreach_supported_voices(tts_setting_supported_voice_cb callback, void* user_data)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Foreach supported voices");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Foreach supported voices");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == callback) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_get_voice_list(callback, user_data);
+       char* current_engine = NULL;
+       int ret = tts_config_mgr_get_engine(&current_engine);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get current engine : %d", ret);
+               return TTS_SETTING_ERROR_OPERATION_FAILED;
+       }
+
+       ret = tts_config_mgr_get_voice_list(current_engine, (tts_config_supported_voice_cb)callback, user_data);
+
+       if (NULL != current_engine)
+               free(current_engine);
 
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
@@ -318,324 +284,359 @@ int tts_setting_foreach_surpported_voices(tts_setting_supported_voice_cb callbac
                SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Foreach supported voices");
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
-       return ret;
+       return __setting_convert_config_error_code(ret);
 }
 
-int tts_setting_get_default_voice(char** language, tts_setting_voice_type_e* voice_type)
+int tts_setting_get_voice(char** language, int* voice_type)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Get default voice");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get default voice");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == language || NULL == voice_type) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_get_default_voice(language, voice_type);
+       int ret = tts_config_mgr_get_voice(language, (int*)voice_type);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Foreach supported voices");
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get default voices : lang(%s) type(%d)", *language, *voice_type);
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
-       return ret;
+       return __setting_convert_config_error_code(ret);
 }
 
-int tts_setting_set_default_voice(const char* language, tts_setting_voice_type_e voice_type)
+int tts_setting_set_voice(const char* language, int voice_type)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Set default voice");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set default voice");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == language) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       if (voice_type < TTS_SETTING_VOICE_TYPE_MALE || TTS_SETTING_VOICE_TYPE_USER3 < voice_type ) {
+       if (voice_type < TTS_SETTING_VOICE_TYPE_MALE || TTS_SETTING_VOICE_TYPE_CHILD < voice_type) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Invalid voice type");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_set_default_voice(language, voice_type);
+       int ret = tts_config_mgr_set_voice(language, (int)voice_type);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
+       } else {
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default voice : lang(%s) type(%d)", language, voice_type);
+       }
+
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+       return __setting_convert_config_error_code(ret);
+}
+
+int tts_setting_set_auto_voice(bool value)
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set auto voice");
+
+       if (TTS_SETTING_STATE_NONE == g_state) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
+               return TTS_SETTING_ERROR_INVALID_STATE;
+       }
+
+       if (value != true && value != false) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Invalid value");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
+       }
+
+       int ret = tts_config_mgr_set_auto_voice(value);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
+       } else {
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set auto voice %s", value ? "on" : "off");
+       }
+
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+       return __setting_convert_config_error_code(ret);
+}
+
+int tts_setting_get_auto_voice(bool* value)
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get auto voice");
+
+       if (TTS_SETTING_STATE_NONE == g_state) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
+               return TTS_SETTING_ERROR_INVALID_STATE;
+       }
+
+       if (NULL == value) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Param is NULL");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
+       }
+
+       int ret = tts_config_mgr_get_auto_voice(value);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default voice");
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get auto voice : %d ", (int)*value);
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
-    
-       return ret;
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+       return __setting_convert_config_error_code(ret);
 }
 
+int tts_setting_get_speed_range(int* min, int* normal, int* max)
+{
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get speed range");
 
-int tts_setting_get_default_speed(tts_setting_speed_e* speed)
+       if (TTS_SETTING_STATE_NONE == g_state) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
+               return TTS_SETTING_ERROR_INVALID_STATE;
+       }
+
+       if (NULL == min || NULL == normal || NULL == max) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is null");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
+       }
+
+       *min = TTS_SPEED_MIN;
+       *normal = TTS_SPEED_NORMAL;
+       *max = TTS_SPEED_MAX;
+
+       SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get speed range : min(%d) normal(%d) max(%d)", *min, *normal, *max);
+
+       return TTS_SETTING_ERROR_NONE;
+}
+
+int tts_setting_get_speed(int* speed)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Get default speed");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get default speed");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
        if (NULL == speed) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
        int temp;
        temp = 0;
 
-       int ret = tts_setting_dbus_request_get_default_speed(&temp);
+       int ret = tts_config_mgr_get_speech_rate(&temp);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
                /* Copy value */
-               *speed = (tts_setting_speed_e)temp;
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get default speed : %d ", (int)*speed);
+               *speed = temp;
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get default speed : %d ", *speed);
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
-       return ret;
+       return __setting_convert_config_error_code(ret);
 }
 
-
-int tts_setting_set_default_speed(tts_setting_speed_e speed)
+int tts_setting_set_speed(int speed)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Set default speed");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set default speed");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
-       if (speed < TTS_SETTING_SPEED_VERY_SLOW || TTS_SETTING_SPEED_VERY_FAST < speed) {
+       if (TTS_SPEED_MIN > speed || speed > TTS_SPEED_MAX) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Invalid speed");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_set_default_speed((int)speed);
+       int ret = tts_config_mgr_set_speech_rate(speed);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default speed");
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default speed, %d", speed);
        }
-       
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
 
-       return ret;
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+       return __setting_convert_config_error_code(ret);
 }
 
-int tts_setting_foreach_engine_settings(tts_setting_engine_setting_cb callback, void* user_data)
+int tts_setting_get_pitch_range(int* min, int* normal, int* max)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Foreach engine setting");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get speed range");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
-       if (NULL == callback) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       if (NULL == min || NULL == normal || NULL == max) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is null");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_get_engine_setting(callback, user_data);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
-       } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Foreach engine setting");
-       }
+       *min = TTS_PITCH_MIN;
+       *normal = TTS_PITCH_NORMAL;
+       *max = TTS_PITCH_MAX;
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get pitch range : min(%d) normal(%d) max(%d)", *min, *normal, *max);
 
-       return ret;
+       return TTS_SETTING_ERROR_NONE;
 }
 
-int tts_setting_set_engine_setting(const char* key, const char* value)
+int tts_setting_set_pitch(int pitch)
 {
-       SLOG(LOG_DEBUG, TAG_TTSC, "===== Set engine setting");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set default pitch");
 
        if (TTS_SETTING_STATE_NONE == g_state) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
                return TTS_SETTING_ERROR_INVALID_STATE;
        }
 
-       if(NULL == key || NULL == value) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Param is NULL");
-               SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-               SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       if (TTS_PITCH_MIN > pitch || pitch > TTS_PITCH_MAX) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Invalid pitch");
                return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       int ret = tts_setting_dbus_request_set_engine_setting(key, value);
+       int ret = tts_config_mgr_set_pitch(pitch);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
        } else {
-               SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Foreach engine setting");
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default pitch, %d", pitch);
        }
 
-       SLOG(LOG_DEBUG, TAG_TTSC, "=====");
-       SLOG(LOG_DEBUG, TAG_TTSC, " ");
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
 
-       return ret;
+       return __setting_convert_config_error_code(ret);
 }
 
-int __setting_get_cmd_line(char *file, char *buf) 
+int tts_setting_get_pitch(int* pitch)
 {
-       FILE *fp = NULL;
-       int i;
+       SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get default pitch");
+
+       if (TTS_SETTING_STATE_NONE == g_state) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
+               return TTS_SETTING_ERROR_INVALID_STATE;
+       }
 
-       fp = fopen(file, "r");
-       if (fp == NULL) {
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Get command line");
-               return -1;
+       if (NULL == pitch) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is NULL");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       memset(buf, 0, sizeof(buf));
-       fgets(buf, 256, fp);
-       fclose(fp);
+       int temp;
+       temp = 0;
+
+       int ret = tts_config_mgr_get_pitch(&temp);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
+       } else {
+               /* Copy value */
+               *pitch = temp;
+               SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get default pitch : %d ", *pitch);
+       }
 
-       return 0;
+       return __setting_convert_config_error_code(ret);
 }
 
-/* Functions for tts-daemon fork */
-static bool __tts_setting_is_alive()
+int tts_setting_set_engine_changed_cb(tts_setting_engine_changed_cb callback, void* user_data)
 {
-       DIR *dir;
-       struct dirent *entry;
-       struct stat filestat;
-       
-       int pid;
-       char cmdLine[256];
-       char tempPath[256];
-
-       dir  = opendir("/proc");
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input param is NULL");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
+       }
 
-       while ((entry = readdir(dir)) != NULL) {
-               lstat(entry->d_name, &filestat);
+       g_engine_changed_cb = callback;
+       g_engine_changed_user_data = user_data;
 
-               if (!S_ISDIR(filestat.st_mode))
-                       continue;
+       return TTS_SETTING_ERROR_NONE;
+}
 
-               pid = atoi(entry->d_name);
-               if (pid <= 0) continue;
+int tts_setting_unset_engine_changed_cb()
+{
+       g_engine_changed_cb = NULL;
+       g_engine_changed_user_data = NULL;
 
-               sprintf(tempPath, "/proc/%d/cmdline", pid);
-               if (0 != __setting_get_cmd_line(tempPath, cmdLine)) {
-                       break;
-               }
+       return TTS_SETTING_ERROR_NONE;
+}
 
-               if (0 == strncmp(cmdLine, "[tts-daemon]", strlen("[tts-daemon]")) ||
-                       0 == strncmp(cmdLine, "tts-daemon", strlen("tts-daemon")) ||
-                       0 == strncmp(cmdLine, "/usr/bin/tts-daemon", strlen("/usr/bin/tts-daemon"))) {
-                               SLOG(LOG_DEBUG, TAG_TTSC, "tts-daemon is ALIVE !! \n");
-                               return TRUE;
-               }
+int tts_setting_set_voice_changed_cb(tts_setting_voice_changed_cb callback, void* user_data)
+{
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input param is NULL");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
-       SLOG(LOG_DEBUG, TAG_TTSC, "THERE IS NO tts-daemon !! \n");
 
-       closedir(dir);
-       return FALSE;
+       g_voice_changed_cb = callback;
+       g_voice_changed_user_data = user_data;
 
+       return TTS_SETTING_ERROR_NONE;
 }
 
-static void __setting_my_sig_child(int signo, siginfo_t *info, void *data)
+int tts_setting_unset_voice_changed_cb()
 {
-       int status;
-       pid_t child_pid, child_pgid;
+       g_voice_changed_cb = NULL;
+       g_voice_changed_user_data = NULL;
 
-       child_pgid = getpgid(info->si_pid);
-       SLOG(LOG_DEBUG, TAG_TTSC, "Signal handler: dead pid = %d, pgid = %d", info->si_pid, child_pgid);
+       return TTS_SETTING_ERROR_NONE;
+}
 
-       while ((child_pid = waitpid(-1, &status, WNOHANG)) > 0) {
-               if(child_pid == child_pgid)
-                       killpg(child_pgid, SIGKILL);
+int tts_setting_set_speed_changed_cb(tts_setting_speed_changed_cb callback, void* user_data)
+{
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input param is NULL");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       return;
+       g_speed_changed_cb = callback;
+       g_speed_changed_user_data = user_data;
+
+       return TTS_SETTING_ERROR_NONE;
 }
 
-static int __check_setting_tts_daemon()
+int tts_setting_unset_speed_changed_cb()
 {
-       if( TRUE == __tts_setting_is_alive() )
-               return 0;
+       g_speed_changed_cb = NULL;
+       g_speed_changed_user_data = NULL;
 
-       /* fork-exec tts-daemom */
-       int pid, i;
-       struct sigaction act, dummy;
+       return TTS_SETTING_ERROR_NONE;
+}
 
-       act.sa_handler = NULL;
-       act.sa_sigaction = __setting_my_sig_child;
-       sigemptyset(&act.sa_mask);
-       act.sa_flags = SA_NOCLDSTOP | SA_SIGINFO;
 
-       if (sigaction(SIGCHLD, &act, &dummy) < 0) {
-               SLOG(LOG_ERROR, TAG_TTSC, "Cannot make a signal handler");
-               return -1;
+int tts_setting_set_pitch_changed_cb(tts_setting_pitch_changed_cb callback, void* user_data)
+{
+       if (NULL == callback) {
+               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input param is NULL");
+               return TTS_SETTING_ERROR_INVALID_PARAMETER;
        }
 
-       pid = fork();
+       g_pitch_changed_cb = callback;
+       g_pitch_changed_user_data = user_data;
 
-       switch(pid) {
-       case -1:
-               SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to create tts-daemon ");
-               break;
-
-       case 0:
-               setsid();
-               for( i = 0 ; i < _NSIG ; i++ )
-                       signal(i, SIG_DFL);
-
-               execl("/usr/bin/tts-daemon", "/usr/bin/tts-daemon", NULL);
-               break;
+       return TTS_SETTING_ERROR_NONE;
+}
 
-       default:
-               break;
-       }
+int tts_setting_unset_pitch_changed_cb()
+{
+       g_pitch_changed_cb = NULL;
+       g_pitch_changed_user_data = NULL;
 
-       return 0;
-}
\ No newline at end of file
+       return TTS_SETTING_ERROR_NONE;
+}