} while (0 != ret);
} else {
SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : g_sr(%d) mode(%d)", g_screen_reader, client->mode);
- tts_ipc_method_e method;
- ret = tts_ipc_get_method(&method);
- if (TTS_ERROR_NONE == ret && TTS_IPC_METHOD_DBUS == method) {
- ret = tts_dbus_remove_match(client->mode);
- if (0 != ret) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
- }
+ ret = tts_ipc_stop_listening(client->uid);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
}
}
client->err_msg = NULL;
client->hello_timer = NULL;
+ client->start_listening = false;
client->credential = NULL;
client->credential_needed = false;
}
pthread_mutex_unlock(&g_client_list_mutex);
- SLOG(LOG_WARN, TAG_TTSC, "uid is not valid");
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid(%d) is not valid", uid);
return NULL;
}
return client->current_state;
}
+void tts_client_set_start_listening(int uid, bool is_listening_started)
+{
+ tts_client_s* client = tts_client_get_by_uid(uid);
+ if (NULL == client) {
+ return;
+ }
+
+ client->start_listening = is_listening_started;
+}
+
+bool tts_client_is_listening_started(int uid)
+{
+ tts_client_s* client = tts_client_get_by_uid(uid);
+ if (NULL == client) {
+ return false;
+ }
+
+ return client->start_listening;
+}
+
void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data)
{
if (NULL == client || false == tts_client_is_valid(client->uid)) {
/* connection */
int prepare_count;
Ecore_Timer* hello_timer;
+ bool start_listening;
/* options */
char* credential;
void tts_client_set_current_state(tts_client_s* client, tts_state_e state);
tts_state_e tts_client_get_current_state(tts_client_s* client);
+void tts_client_set_start_listening(int uid, bool is_listening_started);
+bool tts_client_is_listening_started(int uid);
+
void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data);
void tts_client_set_utterance_started_cb(tts_client_s* client, tts_utterance_started_cb callback, void* user_data);
void tts_client_set_utterance_completed_cb(tts_client_s* client, tts_utterance_completed_cb callback, void* user_data);
int count = 0;
if (false == is_screen_reader_on && TTS_MODE_SCREEN_READER == client->mode) {
SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : is_screen_reader(%d) mode(%d)", is_screen_reader_on, client->mode);
- tts_ipc_method_e method;
- ret = tts_ipc_get_method(&method);
- if (TTS_ERROR_NONE == ret && TTS_IPC_METHOD_DBUS == method) {
- ret = tts_dbus_remove_match(client->mode);
- if (0 != ret) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
- }
+ ret = tts_ipc_stop_listening(client->uid);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret));
}
} else {
bool is_prepared = false;
return 0;
}
-int tts_dbus_remove_match(int mode)
-{
- return __tts_dbus_remove_match(mode);
-}
-
static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
{
if (NULL == g_conn_listener) return ECORE_CALLBACK_RENEW;
return 0;
}
+int tts_dbus_stop_listening(int uid)
+{
+ tts_client_s* client = tts_client_get_by_uid(uid);
+ if (NULL == client) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid");
+ return TTS_ERROR_INVALID_PARAMETER;
+ }
+
+ return __tts_dbus_remove_match(client->mode);
+}
+
int tts_dbus_reconnect()
{
if (!g_conn_sender || !g_conn_listener) {
/*
-* Copyright (c) 2011-2016 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
int tts_dbus_close_connection();
+int tts_dbus_stop_listening(int uid);
+
int tts_dbus_request_hello(int uid);
int tts_dbus_request_hello_sync(int uid);
int tts_dbus_set_sound_type(int uid, int type);
-int tts_dbus_remove_match(int mode);
-
int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential);
int tts_dbus_request_play(int uid, const char* credential);
#include "tts_dbus.h"
#include "tts_tidl.h"
-int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_request_hello,
- &tts_dbus_request_hello_sync, &tts_dbus_request_initialize, &tts_dbus_request_finalize,
- &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop,
+
+typedef enum {
+ OPEN_CONNECTION,
+ CLOSE_CONNECTION,
+ STOP_LISTENING,
+ REQUEST_HELLO,
+ REQUEST_HELLO_SYNC,
+ REQUEST_INITIALIZE,
+ REQUEST_FINALIZE,
+ REQUEST_ADD_TEXT,
+ REQUEST_PLAY,
+ REQUEST_STOP,
+ REQUEST_PAUSE,
+ REQUEST_SET_PRIVATE_DATA,
+ REQUEST_GET_PRIVATE_DATA,
+ REQUEST_PLAY_PCM,
+ REQUEST_STOP_PCM,
+ REQUEST_ADD_PCM
+} tts_ipc_vtable_e;
+
+
+int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_stop_listening,
+ &tts_dbus_request_hello, &tts_dbus_request_hello_sync, &tts_dbus_request_initialize,
+ &tts_dbus_request_finalize, &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop,
&tts_dbus_request_pause, &tts_dbus_request_set_private_data, &tts_dbus_request_get_private_data,
&tts_dbus_request_play_pcm, &tts_dbus_request_stop_pcm, &tts_dbus_request_add_pcm };
-int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_request_hello,
- &tts_tidl_request_hello_sync, &tts_tidl_request_initialize, &tts_tidl_request_finalize,
- &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop,
+int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_stop_listening,
+ &tts_tidl_request_hello, &tts_tidl_request_hello_sync, &tts_tidl_request_initialize,
+ &tts_tidl_request_finalize, &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop,
&tts_tidl_request_pause, &tts_tidl_request_set_private_data, &tts_tidl_request_get_private_data,
&tts_tidl_request_play_pcm, &tts_tidl_request_stop_pcm, &tts_tidl_request_add_pcm };
}
}
+int tts_ipc_stop_listening(int uid)
+{
+ SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_stop_listening");
+
+ if (false == tts_client_is_valid(uid)) {
+ SLOG(LOG_ERROR, TAG_TTSC, "Fail to get tts_client with uid");
+ return TTS_ERROR_INVALID_PARAMETER;
+ }
+
+ if (NULL == g_vtable) {
+ SLOG(LOG_ERROR, TAG_TTSC, "g_vtable is NULL");
+ return TTS_ERROR_OPERATION_FAILED;
+ }
+
+ return g_vtable[STOP_LISTENING](uid);
+}
+
int tts_ipc_request_hello(int uid)
{
SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_hello");
extern "C" {
#endif
-typedef enum {
- OPEN_CONNECTION,
- CLOSE_CONNECTION,
- REQUEST_HELLO,
- REQUEST_HELLO_SYNC,
- REQUEST_INITIALIZE,
- REQUEST_FINALIZE,
- REQUEST_ADD_TEXT,
- REQUEST_PLAY,
- REQUEST_STOP,
- REQUEST_PAUSE,
- REQUEST_SET_PRIVATE_DATA,
- REQUEST_GET_PRIVATE_DATA,
- REQUEST_PLAY_PCM,
- REQUEST_STOP_PCM,
- REQUEST_ADD_PCM
-} tts_ipc_vtable_e;
-
int tts_ipc_set_method(tts_ipc_method_e method);
int tts_ipc_get_method(tts_ipc_method_e* method);
int tts_ipc_close_connection(int uid);
+int tts_ipc_stop_listening(int uid);
+
int tts_ipc_request_hello(int uid);
int tts_ipc_request_hello_sync(int uid);
if (0 == strncmp(TTSD_METHOD_HELLO, method, strlen(TTSD_METHOD_HELLO))) {
bundle_get_str(msg, TTS_BUNDLE_CREDENTIAL_NEEDED, &val);
if (val) {
+ tts_client_set_start_listening(uid, true);
tts_core_receive_hello(uid, 0, atoi(val));
}
} else if (0 == strncmp(TTSD_METHOD_UTTERANCE_STARTED, method, strlen(TTSD_METHOD_UTTERANCE_STARTED))) {
}
tts->connected = FALSE;
- __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
- SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server");
- ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid);
- SLOG(LOG_DEBUG, TAG_TTSC, "Try to reconnect to server");
+ if (tts_client_is_listening_started(uid)) {
+ __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server");
+
+ ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid);
+ SLOG(LOG_DEBUG, TAG_TTSC, "Try to reconnect to server");
+ }
}
static void __on_rejected(rpc_port_proxy_tts_h h, void *user_data)
return TTS_ERROR_NONE;
}
+int tts_tidl_stop_listening(int uid)
+{
+ if (false == tts_client_is_valid(uid)) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid");
+ return TTS_ERROR_INVALID_PARAMETER;
+ }
+
+ tts_client_set_start_listening(uid, false);
+
+ return TTS_ERROR_NONE;
+}
+
int tts_tidl_request_hello(int uid)
{
SLOG(LOG_DEBUG, TAG_TTSC, "[TIDL] tts_tidl_request_hello");
return TTS_ERROR_OPERATION_FAILED;
}
+ tts_client_set_start_listening(uid, false);
return TTS_ERROR_NONE;
}
int tts_tidl_close_connection(int uid);
+int tts_tidl_stop_listening(int uid);
+
int tts_tidl_request_hello(int uid);
int tts_tidl_request_hello_sync(int uid);