/*
-* Copyright (c) 2011 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 <dirent.h>
+#include <Ecore.h>
#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "tts_config_mgr.h"
#include "tts_main.h"
#include "tts_setting.h"
-#include "tts_setting_dbus.h"
-#define CONNECTION_RETRY_COUNT 2
+/**
+* @brief Enumerations of setting state.
+*/
+typedef enum {
+ TTS_SETTING_STATE_NONE = 0,
+ TTS_SETTING_STATE_READY
+} tts_setting_state_e;
+
-static bool g_is_setting_initialized = false;
+static tts_setting_state_e g_state = TTS_SETTING_STATE_NONE;
-static int __check_tts_daemon();
+static tts_setting_supported_engine_cb g_engine_cb;
+static tts_setting_engine_changed_cb g_engine_changed_cb;
+static void* g_engine_changed_user_data;
-/* API Implementation */
-int tts_setting_initialize()
+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;
+
+static tts_setting_background_volume_ratio_changed_cb g_bg_volume_ratio_changed_cb;
+static void* g_bg_volume_ratio_changed_user_data;
+
+
+const char* tts_tag()
{
- SLOG(LOG_DEBUG, TAG_TTSC, "===== Initialize TTS Setting");
+ return "ttsc";
+}
- if (true == g_is_setting_initialized) {
- 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;
- }
+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;
- 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_tts_daemon();
- }
+ return TTS_SETTING_ERROR_NONE;
+}
- /* do request */
- int i = 1;
- int ret = 0;
- while(1) {
- ret = tts_setting_dbus_request_initialize();
+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)
+{
+ SLOG(LOG_DEBUG, TAG_TTSC, "Engine changed : engine(%s) setting(%s) lang(%s) type(%d)",
+ engine_id, setting, language, voice_type);
- if( TTS_SETTING_ERROR_ENGINE_NOT_FOUND == ret ) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Engine not found");
- break;
- } else if(ret) {
- usleep(1);
- if (i == CONNECTION_RETRY_COUNT) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Connection Time out");
- ret = TTS_SETTING_ERROR_TIMED_OUT;
- break;
- }
- i++;
- } else {
- /* success to connect tts-daemon */
- break;
- }
- }
+ if (NULL != g_engine_changed_cb)
+ g_engine_changed_cb(engine_id, g_engine_changed_user_data);
- if (TTS_SETTING_ERROR_NONE == ret) {
- g_is_setting_initialized = true;
- SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Initialize");
- }
+ if (NULL != g_voice_changed_cb)
+ g_voice_changed_cb(language, voice_type, auto_voice, g_voice_changed_user_data);
+}
- SLOG(LOG_DEBUG, TAG_TTSC, "=====");
- SLOG(LOG_DEBUG, TAG_TTSC, " ");
+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");
- return ret;
+ if (NULL != g_voice_changed_cb)
+ g_voice_changed_cb(language, voice_type, auto_voice, g_voice_changed_user_data);
}
+void __setting_config_speech_rate_changed_cb(int value, void* user_data)
+{
+ SLOG(LOG_DEBUG, TAG_TTSC, "Speech rate : %d", value);
-int tts_setting_finalize()
+ if (NULL != g_speed_changed_cb)
+ g_speed_changed_cb(value, g_speed_changed_user_data);
+}
+
+void __setting_config_pitch_changed_cb(int value, void* user_data)
{
- SLOG(LOG_DEBUG, TAG_TTSC, "===== Finalize TTS Setting");
+ SLOG(LOG_DEBUG, TAG_TTSC, "Pitch : %d", value);
- if (false == g_is_setting_initialized) {
- SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Not initialized");
- SLOG(LOG_DEBUG, TAG_TTSC, "=====");
- SLOG(LOG_DEBUG, TAG_TTSC, " ");
+ if (NULL != g_pitch_changed_cb)
+ g_pitch_changed_cb(value, g_pitch_changed_user_data);
+}
+
+void __setting_config_bg_volume_ratio_changed_cb(double value, void* user_data)
+{
+ SLOG(LOG_DEBUG, TAG_TTSC, "Rratio : %lf", value);
+
+ if (NULL != g_bg_volume_ratio_changed_cb)
+ g_bg_volume_ratio_changed_cb(value, g_bg_volume_ratio_changed_user_data);
+}
+
+int tts_setting_initialize()
+{
+ 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.");
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
return TTS_SETTING_ERROR_NONE;
}
- int ret = tts_setting_dbus_request_finalilze();
+ int ret = tts_config_mgr_initialize(getpid());
if (0 != ret) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] result : %d", ret);
- SLOG(LOG_DEBUG, TAG_TTSC, "=====");
- SLOG(LOG_DEBUG, TAG_TTSC, " ");
-
- return TTS_SETTING_ERROR_OPERATION_FAILED;
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to initialize config manager : %d", ret);
+ return __setting_convert_config_error_code(ret);
}
- 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");
+ 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, __setting_config_bg_volume_ratio_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);
}
- g_is_setting_initialized = false;
-
- SLOG(LOG_DEBUG, TAG_TTSC, "=====");
- SLOG(LOG_DEBUG, TAG_TTSC, " ");
+ g_state = TTS_SETTING_STATE_READY;
+
+ g_engine_changed_cb = NULL;
+ g_engine_changed_user_data = NULL;
+
+ g_voice_changed_cb = NULL;
+ g_voice_changed_user_data = NULL;
+
+ g_speed_changed_cb = NULL;
+ g_speed_changed_user_data = NULL;
+
+ g_pitch_changed_cb = NULL;
+ g_pitch_changed_user_data = NULL;
+
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
return TTS_SETTING_ERROR_NONE;
}
+int tts_setting_finalize()
+{
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Finalize TTS Setting");
+
+ tts_config_mgr_finalize(getpid());
+
+ g_state = TTS_SETTING_STATE_NONE;
+
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+ return TTS_SETTING_ERROR_NONE;
+}
+
+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 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 (false == g_is_setting_initialized) {
+ 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 (false == g_is_setting_initialized) {
+ 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 (false == g_is_setting_initialized) {
+ 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 (false == g_is_setting_initialized) {
+ 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(¤t_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);
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 (false == g_is_setting_initialized) {
+ 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 (false == g_is_setting_initialized) {
+ 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 {
- SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default voice");
+ SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set default voice : lang(%s) type(%d)", language, voice_type);
}
- SLOG(LOG_DEBUG, TAG_TTSC, "=====");
- SLOG(LOG_DEBUG, TAG_TTSC, " ");
-
- return TTS_SETTING_ERROR_NONE;
+ 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 {
+ SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get auto voice : %d ", (int)*value);
+ }
+
+ 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");
+
+ 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;
-int tts_setting_get_default_speed(tts_setting_speed_e* speed)
+ 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 (!g_is_setting_initialized) {
+ 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 (!g_is_setting_initialized) {
+ 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 (!g_is_setting_initialized) {
+ 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);
+ *min = TTS_PITCH_MIN;
+ *normal = TTS_PITCH_NORMAL;
+ *max = TTS_PITCH_MAX;
+
+ SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get pitch range : min(%d) normal(%d) max(%d)", *min, *normal, *max);
+
+ return TTS_SETTING_ERROR_NONE;
+}
+
+int tts_setting_set_pitch(int pitch)
+{
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set default pitch");
+
+ if (TTS_SETTING_STATE_NONE == g_state) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
+ return TTS_SETTING_ERROR_INVALID_STATE;
+ }
+
+ 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_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 tts_setting_set_engine_setting(const char* key, const char* value)
+int tts_setting_get_background_volume_ratio(double *ratio)
{
- SLOG(LOG_DEBUG, TAG_TTSC, "===== Set engine setting");
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Get background ratio");
- if (!g_is_setting_initialized) {
+ 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) {
+ if (NULL == ratio) {
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_set_engine_setting(key, value);
+ double temp;
+ temp = 0;
+
+ int ret = tts_config_mgr_get_bg_volume_ratio(&temp);
if (0 != ret) {
SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
} else {
- SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Foreach engine setting");
+ /* Copy value */
+ *ratio = temp;
+ SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Get bg volume duration : %lf", *ratio);
}
- 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_background_volume_ratio(double ratio)
+{
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Set bg volume duration");
+
+ if (TTS_SETTING_STATE_NONE == g_state) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Not initialized");
+ return TTS_SETTING_ERROR_INVALID_STATE;
+ }
+ if (0.0 > ratio || ratio > 1.0) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Invalid bg volume ratio(%lf)", ratio);
+ return TTS_SETTING_ERROR_INVALID_PARAMETER;
+ }
-/* Functions for tts-daemon fork */
-static bool __tts_is_alive()
+ int ret = tts_config_mgr_set_bg_volume_ratio(ratio);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Result : %d", ret);
+ } else {
+ SECURE_SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Set bg volume ratio : %lf", ratio);
+ }
+
+ SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
+
+ return __setting_convert_config_error_code(ret);
+}
+
+int tts_setting_get_pitch(int* pitch)
{
- FILE *fp = NULL;
- char buff[256];
- char cmd[256];
+ 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;
+ }
+
+ if (NULL == pitch) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input parameter is NULL");
+ return TTS_SETTING_ERROR_INVALID_PARAMETER;
+ }
+
+ 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);
+ }
- memset(buff, '\0', sizeof(char) * 256);
- memset(cmd, '\0', sizeof(char) * 256);
+ return __setting_convert_config_error_code(ret);
+}
- fp = popen("ps", "r");
- if (NULL == fp) {
- SLOG(LOG_DEBUG, TAG_TTSC, "[TTS SETTING ERROR] popen error \n");
- return FALSE;
+int tts_setting_set_engine_changed_cb(tts_setting_engine_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;
}
- while (fgets(buff, 255, fp)) {
- strcpy(cmd, buff + 26);
+ g_engine_changed_cb = callback;
+ g_engine_changed_user_data = user_data;
+
+ return TTS_SETTING_ERROR_NONE;
+}
- if( 0 == strncmp(cmd, "[tts-daemon]", strlen("[tts-daemon]")) ||
- 0 == strncmp(cmd, "tts-daemon", strlen("tts-daemon")) ||
- 0 == strncmp(cmd, "/usr/bin/tts-daemon", strlen("/usr/bin/tts-daemon"))
- ) {
- SLOG(LOG_DEBUG, TAG_TTSC, "tts-daemon is ALIVE !!");
- fclose(fp);
- return TRUE;
- }
+int tts_setting_unset_engine_changed_cb()
+{
+ g_engine_changed_cb = NULL;
+ g_engine_changed_user_data = NULL;
+
+ return TTS_SETTING_ERROR_NONE;
+}
+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;
}
- fclose(fp);
- SLOG(LOG_DEBUG, TAG_TTSC, "THERE IS NO tts-daemon !! \n");
+ g_voice_changed_cb = callback;
+ g_voice_changed_user_data = user_data;
- return FALSE;
+ return TTS_SETTING_ERROR_NONE;
}
-static void __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_tts_daemon()
+int tts_setting_unset_speed_changed_cb()
{
- if( TRUE == __tts_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 = __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;
+ return TTS_SETTING_ERROR_NONE;
+}
- case 0:
- setsid();
- for( i = 0 ; i < _NSIG ; i++ )
- signal(i, SIG_DFL);
+int tts_setting_unset_pitch_changed_cb()
+{
+ g_pitch_changed_cb = NULL;
+ g_pitch_changed_user_data = NULL;
+
+ return TTS_SETTING_ERROR_NONE;
+}
- execl("/usr/bin/tts-daemon", "/usr/bin/tts-daemon", NULL);
- break;
- default:
- sleep(1);
- break;
+int tts_setting_set_background_volume_ratio_changed_cb(tts_setting_background_volume_ratio_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 0;
-}
\ No newline at end of file
+ g_bg_volume_ratio_changed_cb = callback;
+ g_bg_volume_ratio_changed_user_data = user_data;
+
+ return TTS_SETTING_ERROR_NONE;
+}
+
+int tts_setting_unset_background_volume_ratio_changed_cb()
+{
+ g_bg_volume_ratio_changed_cb = NULL;
+ g_bg_volume_ratio_changed_user_data = NULL;
+
+ return TTS_SETTING_ERROR_NONE;
+}