2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd All Rights Reserved
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 * http://www.apache.org/licenses/LICENSE-2.0
7 * Unless required by applicable law or agreed to in writing, software
8 * distributed under the License is distributed on an "AS IS" BASIS,
9 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 * See the License for the specific language governing permissions and
11 * limitations under the License.
19 #include "tts_client.h"
21 #define INIT_WAITING_TIME 5000
22 #define WAITING_TIME 1000
24 static Ecore_Fd_Handler* g_fd_handler = NULL;
26 static DBusConnection* g_conn = NULL;
29 extern int __tts_cb_error(int uid, tts_error_e reason, int utt_id);
31 extern int __tts_cb_set_state(int uid, int state);
33 extern int __tts_cb_utt_started(int uid, int utt_id);
35 extern int __tts_cb_utt_completed(int uid, int utt_id);
38 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
40 DBusConnection* conn = (DBusConnection*)data;
42 if (NULL == conn) return ECORE_CALLBACK_RENEW;
44 dbus_connection_read_write_dispatch(conn, 50);
46 DBusMessage* msg = NULL;
47 msg = dbus_connection_pop_message(conn);
49 /* loop again if we haven't read a message */
51 return ECORE_CALLBACK_RENEW;
55 dbus_error_init(&err);
57 DBusMessage *reply = NULL;
60 snprintf(if_name, 64, "%s%d", TTS_CLIENT_SERVICE_INTERFACE, getpid());
62 /* check if the message is a signal from the correct interface and with the correct name */
63 if (dbus_message_is_method_call(msg, if_name, TTSD_METHOD_HELLO)) {
64 SLOG(LOG_DEBUG, TAG_TTSC, "===== Get Hello");
68 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
71 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get hello : uid(%d) \n", uid);
74 tts_client_s* client = tts_client_get_by_uid(uid);
80 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get hello : invalid uid \n");
83 reply = dbus_message_new_method_return(msg);
86 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
88 if (!dbus_connection_send(conn, reply, NULL))
89 SLOG(LOG_ERROR, TAG_TTSC, ">>>> tts get hello : fail to send reply");
91 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> tts get hello : result(%d)", response);
93 dbus_connection_flush(conn);
94 dbus_message_unref(reply);
96 SLOG(LOG_ERROR, TAG_TTSC, ">>>> tts get hello : fail to create reply message");
99 SLOG(LOG_DEBUG, TAG_TTSC, "=====");
100 SLOG(LOG_DEBUG, TAG_TTSC, " ");
101 } /* TTSD_METHOD_HELLO */
103 else if (dbus_message_is_method_call(msg, if_name, TTSD_METHOD_UTTERANCE_STARTED)) {
104 SLOG(LOG_DEBUG, TAG_TTSC, "===== Get utterance started");
106 dbus_message_get_args(msg, &err,
107 DBUS_TYPE_INT32, &uid,
108 DBUS_TYPE_INT32, &uttid,
111 if (dbus_error_is_set(&err)) {
112 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Utterance started - Get arguments error (%s)\n", err.message);
113 dbus_error_free(&err);
115 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< Get Utterance started message : uid(%d), uttid(%d) \n", uid, uttid);
116 __tts_cb_utt_started(uid, uttid);
119 SLOG(LOG_DEBUG, TAG_TTSC, "=====");
120 SLOG(LOG_DEBUG, TAG_TTSC, " ");
121 }/* TTS_SIGNAL_UTTERANCE_STARTED */
123 else if (dbus_message_is_method_call(msg, if_name, TTSD_METHOD_UTTERANCE_COMPLETED)) {
124 SLOG(LOG_DEBUG, TAG_TTSC, "===== Get utterance completed");
126 dbus_message_get_args(msg, &err,
127 DBUS_TYPE_INT32, &uid,
128 DBUS_TYPE_INT32, &uttid,
131 if (dbus_error_is_set(&err)) {
132 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Utterance completed - Get arguments error (%s)\n", err.message);
133 dbus_error_free(&err);
135 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< Get Utterance completed message : uid(%d), uttid(%d) \n", uid, uttid);
136 __tts_cb_utt_completed(uid, uttid);
139 SLOG(LOG_DEBUG, TAG_TTSC, "=====");
140 SLOG(LOG_DEBUG, TAG_TTSC, " ");
141 }/* TTS_SIGNAL_UTTERANCE_COMPLETED */
143 else if (dbus_message_is_method_call(msg, if_name, TTSD_METHOD_SET_STATE)) {
144 SLOG(LOG_DEBUG, TAG_TTSC, "===== Get state changed callback");
147 dbus_message_get_args(msg, &err,
148 DBUS_TYPE_INT32, &uid,
149 DBUS_TYPE_INT32, &state,
152 if (dbus_error_is_set(&err)) {
153 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get state change - Get arguments error (%s)", err.message);
154 dbus_error_free(&err);
156 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< Get state change : uid(%d) , state(%d)", uid, state);
157 __tts_cb_set_state(uid, state);
160 SLOG(LOG_DEBUG, TAG_TTSC, "=====");
161 SLOG(LOG_DEBUG, TAG_TTSC, " ");
162 } /* TTSD_METHOD_SET_STATE */
164 else if (dbus_message_is_method_call(msg, if_name, TTSD_METHOD_ERROR)) {
165 SLOG(LOG_DEBUG, TAG_TTSC, "===== Get error callback");
171 dbus_message_get_args(msg, &err,
172 DBUS_TYPE_INT32, &uid,
173 DBUS_TYPE_INT32, &uttid,
174 DBUS_TYPE_INT32, &reason,
177 if (dbus_error_is_set(&err)) {
178 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Error signal - Get arguments error (%s)\n", err.message);
179 dbus_error_free(&err);
181 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< Get Error signal : uid(%d), error(%d), uttid(%d)\n", uid, reason, uttid);
182 __tts_cb_error(uid, reason, uttid);
185 SLOG(LOG_DEBUG, TAG_TTSC, "=====");
186 SLOG(LOG_DEBUG, TAG_TTSC, " ");
187 }/* TTS_SIGNAL_ERROR */
189 /* free the message */
190 dbus_message_unref(msg);
192 return ECORE_CALLBACK_PASS_ON;
196 int tts_dbus_open_connection()
198 if (NULL != g_conn) {
199 SLOG(LOG_WARN, TAG_TTSC, "already existed connection ");
206 /* initialise the error value */
207 dbus_error_init(&err);
209 /* connect to the DBUS system bus, and check for errors */
210 g_conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
212 if (dbus_error_is_set(&err)) {
213 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Dbus Connection Error (%s)\n", err.message);
214 dbus_error_free(&err);
217 if (NULL == g_conn) {
218 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] fail to get dbus connection \n");
219 return TTS_ERROR_OPERATION_FAILED;
222 dbus_connection_set_exit_on_disconnect(g_conn, false);
226 char service_name[64];
227 memset(service_name, 0, 64);
228 snprintf(service_name, 64, "%s%d", TTS_CLIENT_SERVICE_NAME, pid);
230 SLOG(LOG_DEBUG, TAG_TTSC, "Service name is %s\n", service_name);
232 /* register our name on the bus, and check for errors */
233 ret = dbus_bus_request_name(g_conn, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
235 if (dbus_error_is_set(&err)) {
236 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Name Error (%s)\n", err.message);
237 dbus_error_free(&err);
240 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
241 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to open connection : Service name has already been existed. \n");
242 return TTS_ERROR_OPERATION_FAILED;
246 snprintf(rule, 128, "type='signal',interface='%s%d'", TTS_CLIENT_SERVICE_INTERFACE, pid);
248 /* add a rule for which messages we want to see */
249 dbus_bus_add_match(g_conn, rule, &err);
250 dbus_connection_flush(g_conn);
252 if (dbus_error_is_set(&err)) {
253 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Match Error (%s)\n", err.message);
254 return TTS_ERROR_OPERATION_FAILED;
258 dbus_connection_get_unix_fd(g_conn, &fd);
260 g_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, g_conn, NULL, NULL);
262 if (NULL == g_fd_handler) {
263 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get fd handler from ecore \n");
264 return TTS_ERROR_OPERATION_FAILED;
271 int tts_dbus_close_connection()
274 dbus_error_init(&err);
276 ecore_main_fd_handler_del(g_fd_handler);
280 char service_name[64];
281 memset(service_name, 0, 64);
282 snprintf(service_name, 64, "%s%d", TTS_CLIENT_SERVICE_NAME, pid);
284 dbus_bus_release_name (g_conn, service_name, &err);
286 dbus_connection_close(g_conn);
295 int tts_dbus_reconnect()
297 bool connected = dbus_connection_get_is_connected(g_conn);
298 SLOG(LOG_DEBUG, "[DBUS] %s\n", connected ? "Connected" : "Not connected");
300 if (false == connected) {
301 tts_dbus_close_connection();
303 if(0 != tts_dbus_open_connection()) {
304 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to reconnect");
308 SLOG(LOG_DEBUG, TAG_TTSC, "[DBUS] Reconnect");
314 DBusMessage* __tts_dbus_make_message(int uid, const char* method)
316 if (NULL == method) {
317 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input method is NULL");
321 tts_client_s* client = tts_client_get_by_uid(uid);
324 if (NULL == client) {
325 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not available");
331 if (TTS_MODE_DEFAULT == client->mode) {
332 msg = dbus_message_new_method_call(
333 TTS_SERVER_SERVICE_NAME,
334 TTS_SERVER_SERVICE_OBJECT_PATH,
335 TTS_SERVER_SERVICE_INTERFACE,
337 } else if (TTS_MODE_NOTIFICATION == client->mode) {
338 msg = dbus_message_new_method_call(
339 TTS_NOTI_SERVER_SERVICE_NAME,
340 TTS_NOTI_SERVER_SERVICE_OBJECT_PATH,
341 TTS_NOTI_SERVER_SERVICE_INTERFACE,
343 } else if (TTS_MODE_SCREEN_READER == client->mode) {
344 msg = dbus_message_new_method_call(
345 TTS_SR_SERVER_SERVICE_NAME,
346 TTS_SR_SERVER_SERVICE_OBJECT_PATH,
347 TTS_SR_SERVER_SERVICE_INTERFACE,
350 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Input mode is not available");
357 int tts_dbus_request_hello(int uid)
361 msg = __tts_dbus_make_message(uid, TTS_METHOD_HELLO);
364 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts hello : Fail to make message \n");
365 return TTS_ERROR_OPERATION_FAILED;
369 dbus_error_init(&err);
371 DBusMessage* result_msg = NULL;
374 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err);
376 dbus_message_unref(msg);
378 if (NULL != result_msg) {
379 dbus_message_unref(result_msg);
381 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts hello");
384 result = TTS_ERROR_OPERATION_FAILED;
390 int tts_dbus_request_initialize(int uid)
394 dbus_error_init(&err);
396 msg = __tts_dbus_make_message(uid, TTS_METHOD_INITIALIZE);
399 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts initialize : Fail to make message \n");
400 if (dbus_error_is_set(&err))
401 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
403 return TTS_ERROR_OPERATION_FAILED;
405 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts initialize : uid(%d)", uid);
409 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
410 dbus_message_unref(msg);
411 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
413 return TTS_ERROR_OPERATION_FAILED;
416 DBusMessage* result_msg;
417 int result = TTS_ERROR_OPERATION_FAILED;
419 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, INIT_WAITING_TIME, &err);
420 dbus_message_unref(msg);
422 if (dbus_error_is_set(&err))
423 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
425 if (NULL != result_msg) {
426 dbus_message_get_args(result_msg, &err,
427 DBUS_TYPE_INT32, &result,
430 if (dbus_error_is_set(&err)) {
431 SLOG(LOG_ERROR, TAG_TTSC, "Get arguments error (%s)\n", err.message);
432 dbus_error_free(&err);
433 result = TTS_ERROR_OPERATION_FAILED;
436 dbus_message_unref(result_msg);
438 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
439 if (dbus_error_is_set(&err))
440 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
441 tts_dbus_reconnect();
445 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts initialize : result = %d \n", result);
447 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts initialize : result = %d \n", result);
454 int tts_dbus_request_finalize(int uid)
458 dbus_error_init(&err);
460 msg = __tts_dbus_make_message(uid, TTS_METHOD_FINALIZE);
463 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts finalize : Fail to make message");
464 if (dbus_error_is_set(&err))
465 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
467 return TTS_ERROR_OPERATION_FAILED;
469 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts finalize : uid(%d)", uid);
472 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
473 dbus_message_unref(msg);
474 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
476 return TTS_ERROR_OPERATION_FAILED;
479 DBusMessage* result_msg;
480 int result = TTS_ERROR_OPERATION_FAILED;
482 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err);
483 dbus_message_unref(msg);
485 if (dbus_error_is_set(&err))
486 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
488 if (NULL != result_msg) {
489 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
491 if (dbus_error_is_set(&err)) {
492 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)\n", err.message);
493 dbus_error_free(&err);
494 result = TTS_ERROR_OPERATION_FAILED;
497 dbus_message_unref(result_msg);
499 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
500 if (dbus_error_is_set(&err))
501 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
502 tts_dbus_reconnect();
506 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts finalize : result = %d \n", result);
508 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts finalize : result = %d \n", result);
514 int tts_dbus_request_get_support_voice(int uid, tts_h tts, tts_supported_voice_cb callback, void* user_data)
518 dbus_error_init(&err);
520 msg = __tts_dbus_make_message(uid, TTS_METHOD_GET_SUPPORT_VOICES);
523 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get supported voices : Fail to make message");
524 if (dbus_error_is_set(&err))
525 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
527 return TTS_ERROR_OPERATION_FAILED;
529 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get supported voices : uid(%d)", uid);
532 if (true != dbus_message_append_args( msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
533 dbus_message_unref(msg);
534 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
536 return TTS_ERROR_OPERATION_FAILED;
539 DBusMessage* result_msg;
540 DBusMessageIter args;
541 int result = TTS_ERROR_OPERATION_FAILED;
543 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err );
544 dbus_message_unref(msg);
546 if (dbus_error_is_set(&err)) {
547 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
548 printf("result message : %p\n", result_msg);
551 if (NULL != result_msg) {
552 if (dbus_message_iter_init(result_msg, &args)) {
554 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
555 dbus_message_iter_get_basic(&args, &result);
556 dbus_message_iter_next(&args);
560 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get supported voices : result = %d \n", result);
567 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
568 dbus_message_iter_get_basic(&args, &size);
569 dbus_message_iter_next(&args);
573 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts size of voice error : size = %d \n", size);
576 for (i=0 ; i<size ; i++) {
577 dbus_message_iter_get_basic(&args, &(temp_char) );
578 dbus_message_iter_next(&args);
579 dbus_message_iter_get_basic(&args, &(temp_int) );
580 dbus_message_iter_next(&args);
582 if (true != callback(tts, temp_char, (tts_voice_type_e)temp_int, user_data)) {
588 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get supported voices : result = %d \n", result);
591 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get supported voices : result message is invalid \n");
592 result = TTS_ERROR_OPERATION_FAILED;
594 dbus_message_unref(result_msg);
596 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL");
597 if (dbus_error_is_set(&err))
598 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
599 tts_dbus_reconnect();
605 int tts_dbus_request_get_default_voice(int uid , char** lang, tts_voice_type_e* vctype)
607 if (NULL == lang || NULL == vctype) {
608 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
609 return TTS_ERROR_INVALID_PARAMETER;
614 dbus_error_init(&err);
616 msg = __tts_dbus_make_message(uid, TTS_METHOD_GET_CURRENT_VOICE);
619 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get default voice : Fail to make message");
620 if (dbus_error_is_set(&err))
621 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
623 return TTS_ERROR_OPERATION_FAILED;
625 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get default voice : uid(%d)", uid);
628 if (true != dbus_message_append_args( msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
629 dbus_message_unref(msg);
630 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
632 return TTS_ERROR_OPERATION_FAILED;
635 DBusMessage* result_msg;
636 int result = TTS_ERROR_OPERATION_FAILED;
640 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err);
641 dbus_message_unref(msg);
643 if (dbus_error_is_set(&err)) {
644 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
645 printf("result message : %p\n", result_msg);
648 if (NULL != result_msg) {
649 dbus_message_get_args(result_msg, &err,
650 DBUS_TYPE_INT32, &result,
651 DBUS_TYPE_STRING, &temp_lang,
652 DBUS_TYPE_INT32, &voice_type,
655 if (dbus_error_is_set(&err)) {
656 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)\n", err.message);
657 dbus_error_free(&err);
658 result = TTS_ERROR_OPERATION_FAILED;
660 dbus_message_unref(result_msg);
662 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
663 if (dbus_error_is_set(&err))
664 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
665 tts_dbus_reconnect();
669 *lang = strdup(temp_lang);
670 *vctype = (tts_voice_type_e)voice_type;
673 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get default voice : Out of memory \n");
674 result = TTS_ERROR_OUT_OF_MEMORY;
676 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get default voice : result(%d), lang(%s), vctype(%d) \n", result, *lang, *vctype);
679 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get default voice : result(%d) \n", result);
686 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid)
688 if (NULL == text || NULL == lang) {
689 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
690 return TTS_ERROR_INVALID_PARAMETER;
695 dbus_error_init(&err);
697 msg = __tts_dbus_make_message(uid, TTS_METHOD_ADD_QUEUE);
700 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add text : Fail to make message");
701 if (dbus_error_is_set(&err))
702 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
704 return TTS_ERROR_OPERATION_FAILED;
706 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add text : uid(%d), text(%s), lang(%s), type(%d), speed(%d), id(%d)",
707 uid, text, lang, vctype, speed, uttid);
710 if (true != dbus_message_append_args( msg,
711 DBUS_TYPE_INT32, &uid,
712 DBUS_TYPE_STRING, &text,
713 DBUS_TYPE_STRING, &lang,
714 DBUS_TYPE_INT32, &vctype,
715 DBUS_TYPE_INT32, &speed,
716 DBUS_TYPE_INT32, &uttid,
717 DBUS_TYPE_INVALID)) {
718 dbus_message_unref(msg);
719 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
721 return TTS_ERROR_OPERATION_FAILED;
724 DBusMessage* result_msg;
725 int result = TTS_ERROR_OPERATION_FAILED;
727 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
728 dbus_message_unref(msg);
730 if (dbus_error_is_set(&err))
731 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
733 if (NULL != result_msg) {
734 dbus_message_get_args(result_msg, &err,
735 DBUS_TYPE_INT32, &result,
738 if (dbus_error_is_set(&err)) {
739 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : Get arguments error (%s)\n", err.message);
740 dbus_error_free(&err);
741 result = TTS_ERROR_OPERATION_FAILED;
743 dbus_message_unref(result_msg);
745 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
746 if (dbus_error_is_set(&err))
747 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
748 tts_dbus_reconnect();
752 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add text : result(%d) \n", result);
754 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : result(%d) \n", result);
760 int tts_dbus_request_play(int uid)
764 dbus_error_init(&err);
766 msg = __tts_dbus_make_message(uid, TTS_METHOD_PLAY);
769 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play : Fail to make message");
770 if (dbus_error_is_set(&err))
771 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
773 return TTS_ERROR_OPERATION_FAILED;
775 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play : uid(%d)", uid);
778 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
779 dbus_message_unref(msg);
780 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
782 return TTS_ERROR_OPERATION_FAILED;
785 DBusMessage* result_msg;
786 int result = TTS_ERROR_OPERATION_FAILED;
788 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
789 dbus_message_unref(msg);
791 if (dbus_error_is_set(&err))
792 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
794 if (NULL != result_msg) {
795 dbus_message_get_args(result_msg, &err,
796 DBUS_TYPE_INT32, &result,
799 if (dbus_error_is_set(&err)) {
800 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : Get arguments error (%s)\n", err.message);
801 dbus_error_free(&err);
802 result = TTS_ERROR_OPERATION_FAILED;
804 dbus_message_unref(result_msg);
806 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
807 if (dbus_error_is_set(&err))
808 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
809 tts_dbus_reconnect();
813 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play : result(%d) \n", result);
815 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : result(%d) \n", result);
822 int tts_dbus_request_stop(int uid)
826 dbus_error_init(&err);
828 msg = __tts_dbus_make_message(uid, TTS_METHOD_STOP);
831 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop : Fail to make message");
832 if (dbus_error_is_set(&err))
833 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
835 return TTS_ERROR_OPERATION_FAILED;
837 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop : uid(%d)", uid);
840 DBusMessage* result_msg;
841 int result = TTS_ERROR_OPERATION_FAILED;
843 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
844 dbus_message_unref(msg);
845 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
847 return TTS_ERROR_OPERATION_FAILED;
850 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
851 dbus_message_unref(msg);
853 if (dbus_error_is_set(&err))
854 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
856 if (NULL != result_msg) {
857 dbus_message_get_args(result_msg, &err,
858 DBUS_TYPE_INT32, &result,
861 if (dbus_error_is_set(&err)) {
862 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : Get arguments error (%s)\n", err.message);
863 dbus_error_free(&err);
864 result = TTS_ERROR_OPERATION_FAILED;
866 dbus_message_unref(result_msg);
868 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
869 if (dbus_error_is_set(&err))
870 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
871 tts_dbus_reconnect();
875 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop : result(%d) \n", result);
877 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : result(%d) \n", result);
883 int tts_dbus_request_pause(int uid)
887 dbus_error_init(&err);
889 msg = __tts_dbus_make_message(uid, TTS_METHOD_PAUSE);
892 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts pause : Fail to make message");
893 if (dbus_error_is_set(&err))
894 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
896 return TTS_ERROR_OPERATION_FAILED;
898 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts pause : uid(%d)", uid);
901 DBusMessage* result_msg;
902 int result = TTS_ERROR_OPERATION_FAILED;
904 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
905 dbus_message_unref(msg);
906 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
908 return TTS_ERROR_OPERATION_FAILED;
911 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
912 dbus_message_unref(msg);
914 if (dbus_error_is_set(&err))
915 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
917 if (NULL != result_msg) {
918 dbus_message_get_args(result_msg, &err,
919 DBUS_TYPE_INT32, &result,
922 if (dbus_error_is_set(&err)) {
923 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : Get arguments error (%s)\n", err.message);
924 dbus_error_free(&err);
925 result = TTS_ERROR_OPERATION_FAILED;
927 dbus_message_unref(result_msg);
929 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
930 if (dbus_error_is_set(&err))
931 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
932 tts_dbus_reconnect();
936 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts pause : result(%d) \n", result);
938 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : result(%d) \n", result);