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");
315 int tts_dbus_request_hello()
319 msg = dbus_message_new_method_call(
320 TTS_SERVER_SERVICE_NAME,
321 TTS_SERVER_SERVICE_OBJECT_PATH,
322 TTS_SERVER_SERVICE_INTERFACE,
326 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts hello : Fail to make message \n");
327 return TTS_ERROR_OPERATION_FAILED;
331 dbus_error_init(&err);
333 DBusMessage* result_msg = NULL;
336 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err);
338 dbus_message_unref(msg);
340 if (NULL != result_msg) {
341 dbus_message_unref(result_msg);
343 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts hello");
346 result = TTS_ERROR_OPERATION_FAILED;
352 int tts_dbus_request_initialize(int uid)
356 dbus_error_init(&err);
358 msg = dbus_message_new_method_call(
359 TTS_SERVER_SERVICE_NAME,
360 TTS_SERVER_SERVICE_OBJECT_PATH,
361 TTS_SERVER_SERVICE_INTERFACE,
362 TTS_METHOD_INITIALIZE);
365 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts initialize : Fail to make message \n");
366 if (dbus_error_is_set(&err))
367 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
369 return TTS_ERROR_OPERATION_FAILED;
371 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts initialize : uid(%d)", uid);
375 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
376 dbus_message_unref(msg);
377 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
379 return TTS_ERROR_OPERATION_FAILED;
382 DBusMessage* result_msg;
383 int result = TTS_ERROR_OPERATION_FAILED;
385 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, INIT_WAITING_TIME, &err);
386 dbus_message_unref(msg);
388 if (dbus_error_is_set(&err))
389 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
391 if (NULL != result_msg) {
392 dbus_message_get_args(result_msg, &err,
393 DBUS_TYPE_INT32, &result,
396 if (dbus_error_is_set(&err)) {
397 SLOG(LOG_ERROR, TAG_TTSC, "Get arguments error (%s)\n", err.message);
398 dbus_error_free(&err);
399 result = TTS_ERROR_OPERATION_FAILED;
402 dbus_message_unref(result_msg);
404 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
405 if (dbus_error_is_set(&err))
406 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
407 tts_dbus_reconnect();
411 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts initialize : result = %d \n", result);
413 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts initialize : result = %d \n", result);
420 int tts_dbus_request_finalize(int uid)
424 dbus_error_init(&err);
426 msg = dbus_message_new_method_call(
427 TTS_SERVER_SERVICE_NAME,
428 TTS_SERVER_SERVICE_OBJECT_PATH,
429 TTS_SERVER_SERVICE_INTERFACE,
430 TTS_METHOD_FINALIZE);
433 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts finalize : Fail to make message");
434 if (dbus_error_is_set(&err))
435 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
437 return TTS_ERROR_OPERATION_FAILED;
439 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts finalize : uid(%d)", uid);
442 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
443 dbus_message_unref(msg);
444 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
446 return TTS_ERROR_OPERATION_FAILED;
449 DBusMessage* result_msg;
450 int result = TTS_ERROR_OPERATION_FAILED;
452 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err);
453 dbus_message_unref(msg);
455 if (dbus_error_is_set(&err))
456 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
458 if (NULL != result_msg) {
459 dbus_message_get_args(result_msg, &err, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);
461 if (dbus_error_is_set(&err)) {
462 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)\n", err.message);
463 dbus_error_free(&err);
464 result = TTS_ERROR_OPERATION_FAILED;
467 dbus_message_unref(result_msg);
469 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
470 if (dbus_error_is_set(&err))
471 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
472 tts_dbus_reconnect();
476 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts finalize : result = %d \n", result);
478 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts finalize : result = %d \n", result);
484 int tts_dbus_request_get_support_voice(int uid, tts_h tts, tts_supported_voice_cb callback, void* user_data)
488 dbus_error_init(&err);
490 msg = dbus_message_new_method_call(
491 TTS_SERVER_SERVICE_NAME,
492 TTS_SERVER_SERVICE_OBJECT_PATH,
493 TTS_SERVER_SERVICE_INTERFACE,
494 TTS_METHOD_GET_SUPPORT_VOICES);
497 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get supported voices : Fail to make message");
498 if (dbus_error_is_set(&err))
499 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
501 return TTS_ERROR_OPERATION_FAILED;
503 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get supported voices : uid(%d)", uid);
506 if (true != dbus_message_append_args( msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
507 dbus_message_unref(msg);
508 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
510 return TTS_ERROR_OPERATION_FAILED;
513 DBusMessage* result_msg;
514 DBusMessageIter args;
515 int result = TTS_ERROR_OPERATION_FAILED;
517 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err );
518 dbus_message_unref(msg);
520 if (dbus_error_is_set(&err)) {
521 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
522 printf("result message : %p\n", result_msg);
525 if (NULL != result_msg) {
526 if (dbus_message_iter_init(result_msg, &args)) {
528 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
529 dbus_message_iter_get_basic(&args, &result);
530 dbus_message_iter_next(&args);
534 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get supported voices : result = %d \n", result);
541 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
542 dbus_message_iter_get_basic(&args, &size);
543 dbus_message_iter_next(&args);
547 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts size of voice error : size = %d \n", size);
550 for (i=0 ; i<size ; i++) {
551 dbus_message_iter_get_basic(&args, &(temp_char) );
552 dbus_message_iter_next(&args);
553 dbus_message_iter_get_basic(&args, &(temp_int) );
554 dbus_message_iter_next(&args);
556 if (true != callback(tts, temp_char, (tts_voice_type_e)temp_int, user_data)) {
562 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get supported voices : result = %d \n", result);
565 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get supported voices : result message is invalid \n");
566 result = TTS_ERROR_OPERATION_FAILED;
568 dbus_message_unref(result_msg);
570 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL");
571 if (dbus_error_is_set(&err))
572 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
573 tts_dbus_reconnect();
579 int tts_dbus_request_get_default_voice(int uid , char** lang, tts_voice_type_e* vctype)
581 if (NULL == lang || NULL == vctype) {
582 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
583 return TTS_ERROR_INVALID_PARAMETER;
588 dbus_error_init(&err);
590 msg = dbus_message_new_method_call(
591 TTS_SERVER_SERVICE_NAME,
592 TTS_SERVER_SERVICE_OBJECT_PATH,
593 TTS_SERVER_SERVICE_INTERFACE,
594 TTS_METHOD_GET_CURRENT_VOICE);
597 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts get default voice : Fail to make message");
598 if (dbus_error_is_set(&err))
599 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
601 return TTS_ERROR_OPERATION_FAILED;
603 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts get default voice : uid(%d)", uid);
606 if (true != dbus_message_append_args( msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
607 dbus_message_unref(msg);
608 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
610 return TTS_ERROR_OPERATION_FAILED;
613 DBusMessage* result_msg;
614 int result = TTS_ERROR_OPERATION_FAILED;
618 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, WAITING_TIME, &err);
619 dbus_message_unref(msg);
621 if (dbus_error_is_set(&err)) {
622 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
623 printf("result message : %p\n", result_msg);
626 if (NULL != result_msg) {
627 dbus_message_get_args(result_msg, &err,
628 DBUS_TYPE_INT32, &result,
629 DBUS_TYPE_STRING, &temp_lang,
630 DBUS_TYPE_INT32, &voice_type,
633 if (dbus_error_is_set(&err)) {
634 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get arguments error (%s)\n", err.message);
635 dbus_error_free(&err);
636 result = TTS_ERROR_OPERATION_FAILED;
638 dbus_message_unref(result_msg);
640 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
641 if (dbus_error_is_set(&err))
642 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
643 tts_dbus_reconnect();
647 *lang = strdup(temp_lang);
648 *vctype = (tts_voice_type_e)voice_type;
651 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get default voice : Out of memory \n");
652 result = TTS_ERROR_OUT_OF_MEMORY;
654 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts get default voice : result(%d), lang(%s), vctype(%d) \n", result, *lang, *vctype);
657 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts get default voice : result(%d) \n", result);
664 int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid)
666 if (NULL == text || NULL == lang) {
667 SLOG(LOG_ERROR, TAG_TTSC, "Input parameter is NULL");
668 return TTS_ERROR_INVALID_PARAMETER;
673 dbus_error_init(&err);
675 msg = dbus_message_new_method_call(
676 TTS_SERVER_SERVICE_NAME,
677 TTS_SERVER_SERVICE_OBJECT_PATH,
678 TTS_SERVER_SERVICE_INTERFACE,
679 TTS_METHOD_ADD_QUEUE);
682 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts add text : Fail to make message");
683 if (dbus_error_is_set(&err))
684 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
686 return TTS_ERROR_OPERATION_FAILED;
688 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts add text : uid(%d), text(%s), lang(%s), type(%d), speed(%d), id(%d)",
689 uid, text, lang, vctype, speed, uttid);
692 if (true != dbus_message_append_args( msg,
693 DBUS_TYPE_INT32, &uid,
694 DBUS_TYPE_STRING, &text,
695 DBUS_TYPE_STRING, &lang,
696 DBUS_TYPE_INT32, &vctype,
697 DBUS_TYPE_INT32, &speed,
698 DBUS_TYPE_INT32, &uttid,
699 DBUS_TYPE_INVALID)) {
700 dbus_message_unref(msg);
701 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
703 return TTS_ERROR_OPERATION_FAILED;
706 DBusMessage* result_msg;
707 int result = TTS_ERROR_OPERATION_FAILED;
709 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
710 dbus_message_unref(msg);
712 if (dbus_error_is_set(&err))
713 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
715 if (NULL != result_msg) {
716 dbus_message_get_args(result_msg, &err,
717 DBUS_TYPE_INT32, &result,
720 if (dbus_error_is_set(&err)) {
721 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : Get arguments error (%s)\n", err.message);
722 dbus_error_free(&err);
723 result = TTS_ERROR_OPERATION_FAILED;
725 dbus_message_unref(result_msg);
727 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
728 if (dbus_error_is_set(&err))
729 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
730 tts_dbus_reconnect();
734 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts add text : result(%d) \n", result);
736 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts add text : result(%d) \n", result);
742 int tts_dbus_request_play(int uid)
746 dbus_error_init(&err);
748 msg = dbus_message_new_method_call(
749 TTS_SERVER_SERVICE_NAME,
750 TTS_SERVER_SERVICE_OBJECT_PATH,
751 TTS_SERVER_SERVICE_INTERFACE,
755 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts play : Fail to make message");
756 if (dbus_error_is_set(&err))
757 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
759 return TTS_ERROR_OPERATION_FAILED;
761 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts play : uid(%d)", uid);
764 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
765 dbus_message_unref(msg);
766 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
768 return TTS_ERROR_OPERATION_FAILED;
771 DBusMessage* result_msg;
772 int result = TTS_ERROR_OPERATION_FAILED;
774 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
775 dbus_message_unref(msg);
777 if (dbus_error_is_set(&err))
778 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
780 if (NULL != result_msg) {
781 dbus_message_get_args(result_msg, &err,
782 DBUS_TYPE_INT32, &result,
785 if (dbus_error_is_set(&err)) {
786 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : Get arguments error (%s)\n", err.message);
787 dbus_error_free(&err);
788 result = TTS_ERROR_OPERATION_FAILED;
790 dbus_message_unref(result_msg);
792 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
793 if (dbus_error_is_set(&err))
794 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
795 tts_dbus_reconnect();
799 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts play : result(%d) \n", result);
801 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts play : result(%d) \n", result);
808 int tts_dbus_request_stop(int uid)
812 dbus_error_init(&err);
814 msg = dbus_message_new_method_call(
815 TTS_SERVER_SERVICE_NAME,
816 TTS_SERVER_SERVICE_OBJECT_PATH,
817 TTS_SERVER_SERVICE_INTERFACE,
821 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts stop : Fail to make message");
822 if (dbus_error_is_set(&err))
823 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
825 return TTS_ERROR_OPERATION_FAILED;
827 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts stop : uid(%d)", uid);
830 DBusMessage* result_msg;
831 int result = TTS_ERROR_OPERATION_FAILED;
833 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
834 dbus_message_unref(msg);
835 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
837 return TTS_ERROR_OPERATION_FAILED;
840 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
841 dbus_message_unref(msg);
843 if (dbus_error_is_set(&err))
844 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
846 if (NULL != result_msg) {
847 dbus_message_get_args(result_msg, &err,
848 DBUS_TYPE_INT32, &result,
851 if (dbus_error_is_set(&err)) {
852 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : Get arguments error (%s)\n", err.message);
853 dbus_error_free(&err);
854 result = TTS_ERROR_OPERATION_FAILED;
856 dbus_message_unref(result_msg);
858 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
859 if (dbus_error_is_set(&err))
860 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
861 tts_dbus_reconnect();
865 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts stop : result(%d) \n", result);
867 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts stop : result(%d) \n", result);
873 int tts_dbus_request_pause(int uid)
877 dbus_error_init(&err);
879 msg = dbus_message_new_method_call(
880 TTS_SERVER_SERVICE_NAME,
881 TTS_SERVER_SERVICE_OBJECT_PATH,
882 TTS_SERVER_SERVICE_INTERFACE,
886 SLOG(LOG_ERROR, TAG_TTSC, ">>>> Request tts pause : Fail to make message");
887 if (dbus_error_is_set(&err))
888 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
890 return TTS_ERROR_OPERATION_FAILED;
892 SLOG(LOG_DEBUG, TAG_TTSC, ">>>> Request tts pause : uid(%d)", uid);
895 DBusMessage* result_msg;
896 int result = TTS_ERROR_OPERATION_FAILED;
898 if (true != dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID)) {
899 dbus_message_unref(msg);
900 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to append args");
902 return TTS_ERROR_OPERATION_FAILED;
905 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 5000, &err);
906 dbus_message_unref(msg);
908 if (dbus_error_is_set(&err))
909 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
911 if (NULL != result_msg) {
912 dbus_message_get_args(result_msg, &err,
913 DBUS_TYPE_INT32, &result,
916 if (dbus_error_is_set(&err)) {
917 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : Get arguments error (%s)\n", err.message);
918 dbus_error_free(&err);
919 result = TTS_ERROR_OPERATION_FAILED;
921 dbus_message_unref(result_msg);
923 SLOG(LOG_ERROR, TAG_TTSC, "<<<< Result message is NULL ");
924 if (dbus_error_is_set(&err))
925 SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] %s", err.message);
926 tts_dbus_reconnect();
930 SLOG(LOG_DEBUG, TAG_TTSC, "<<<< tts pause : result(%d) \n", result);
932 SLOG(LOG_ERROR, TAG_TTSC, "<<<< tts pause : result(%d) \n", result);