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.
20 #include "stt_client.h"
22 static int g_waiting_time = 1500;
23 static int g_waiting_start_time = 2000;
25 static Ecore_Fd_Handler* g_fd_handler = NULL;
27 static DBusConnection* g_conn = NULL;
30 extern int __stt_cb_error(int uid, int reason);
32 extern int __stt_cb_result(int uid, const char* type, const char** data, int data_count, const char* msg);
34 extern int __stt_cb_partial_result(int uid, const char* data);
36 extern int __stt_cb_set_state(int uid, int state);
38 static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler)
40 DBusConnection* conn = (DBusConnection*)data;
41 DBusMessage* msg = NULL;
42 DBusMessage *reply = NULL;
45 return ECORE_CALLBACK_RENEW;
47 dbus_connection_read_write_dispatch(conn, 50);
49 msg = dbus_connection_pop_message(conn);
51 /* loop again if we haven't read a message */
53 return ECORE_CALLBACK_RENEW;
57 dbus_error_init(&err);
60 snprintf(if_name, 64, "%s%d", STT_CLIENT_SERVICE_INTERFACE, getpid());
62 if (dbus_message_is_method_call(msg, if_name, STTD_METHOD_HELLO)) {
63 SLOG(LOG_DEBUG, TAG_STTC, "===== Get Hello");
67 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
70 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get hello : uid(%d) \n", uid);
73 stt_client_s* client = stt_client_get_by_uid(uid);
79 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get hello : invalid uid \n");
82 reply = dbus_message_new_method_return(msg);
85 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
87 if (!dbus_connection_send(conn, reply, NULL))
88 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get hello : fail to send reply");
90 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get hello : result(%d)", response);
92 dbus_connection_flush(conn);
93 dbus_message_unref(reply);
95 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get hello : fail to create reply message");
98 SLOG(LOG_DEBUG, TAG_STTC, "=====");
99 SLOG(LOG_DEBUG, TAG_STTC, " ");
100 } /* STTD_METHOD_HELLO */
102 else if (dbus_message_is_method_call(msg, if_name, STTD_METHOD_SET_STATE)) {
103 SLOG(LOG_DEBUG, TAG_STTC, "===== Set State");
108 dbus_message_get_args(msg, &err,
109 DBUS_TYPE_INT32, &uid,
110 DBUS_TYPE_INT32, &state,
113 if (uid > 0 && state >= 0) {
114 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt set state : uid(%d), state(%d)", uid, state);
116 response = __stt_cb_set_state(uid, state);
118 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt set state : invalid uid or state");
121 reply = dbus_message_new_method_return(msg);
124 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
126 if (!dbus_connection_send(conn, reply, NULL))
127 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt set state : fail to send reply");
129 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt set state : result(%d)", response);
131 dbus_connection_flush(conn);
132 dbus_message_unref(reply);
134 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt set state : fail to create reply message");
137 SLOG(LOG_DEBUG, TAG_STTC, "=====");
138 SLOG(LOG_DEBUG, TAG_STTC, " ");
139 } /* STTD_METHOD_SET_STATE */
141 else if (dbus_message_is_method_call(msg, if_name, STTD_METHOD_GET_STATE)) {
142 SLOG(LOG_DEBUG, TAG_STTC, "===== Get state");
146 dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
149 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get state : uid(%d) \n", uid);
152 stt_client_s* client = stt_client_get_by_uid(uid);
154 response = client->current_state;
156 SLOG(LOG_ERROR, TAG_STTC, "invalid uid \n");
159 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get state : invalid uid \n");
162 reply = dbus_message_new_method_return(msg);
165 dbus_message_append_args(reply, DBUS_TYPE_INT32, &response, DBUS_TYPE_INVALID);
167 if (!dbus_connection_send(conn, reply, NULL))
168 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get state : fail to send reply");
170 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get state : result(%d)", response);
172 dbus_connection_flush(conn);
173 dbus_message_unref(reply);
175 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get hello : fail to create reply message");
178 SLOG(LOG_DEBUG, TAG_STTC, "=====");
179 SLOG(LOG_DEBUG, TAG_STTC, " ");
180 } /* STTD_METHOD_GET_STATE */
182 else if (dbus_message_is_method_call(msg, if_name, STTD_METHOD_RESULT)) {
183 SLOG(LOG_DEBUG, TAG_STTC, "===== Get Result");
185 DBusMessageIter args;
187 dbus_message_iter_init(msg, &args);
190 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
191 dbus_message_iter_get_basic(&args, &uid);
192 dbus_message_iter_next(&args);
196 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get result : uid(%d) \n", uid);
198 char* temp_msg = NULL;
199 char* temp_char = NULL;
203 /* Get recognition type */
204 if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
205 dbus_message_iter_get_basic(&args, &temp_type);
206 dbus_message_iter_next(&args);
209 if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
210 dbus_message_iter_get_basic(&args, &(temp_msg) );
211 dbus_message_iter_next(&args);
215 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
216 dbus_message_iter_get_basic(&args, &temp_count);
217 dbus_message_iter_next(&args);
220 if (temp_count <= 0) {
221 SLOG(LOG_WARN, TAG_STTC, "Result count is 0");
222 __stt_cb_result(uid, temp_type, NULL, 0, temp_msg);
224 temp_result = g_malloc0(temp_count * sizeof(char*));
226 if (NULL == temp_result) {
227 SLOG(LOG_ERROR, TAG_STTC, "Fail : memory allocation error \n");
230 for (i = 0;i < temp_count;i++) {
231 dbus_message_iter_get_basic(&args, &(temp_char) );
232 dbus_message_iter_next(&args);
234 if (NULL != temp_char)
235 temp_result[i] = strdup(temp_char);
238 __stt_cb_result(uid, temp_type, (const char**)temp_result, temp_count, temp_msg);
240 for (i = 0;i < temp_count;i++) {
241 if (NULL != temp_result[i])
242 free(temp_result[i]);
249 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get result : invalid uid \n");
252 SLOG(LOG_DEBUG, TAG_STTC, "=====");
253 SLOG(LOG_DEBUG, TAG_STTC, " ");
254 }/* STTD_METHOD_RESULT */
256 else if (dbus_message_is_method_call(msg, if_name, STTD_METHOD_PARTIAL_RESULT)) {
257 SLOG(LOG_DEBUG, TAG_STTC, "===== Get Partial Result");
259 DBusMessageIter args;
261 dbus_message_iter_init(msg, &args);
264 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
265 dbus_message_iter_get_basic(&args, &uid);
266 dbus_message_iter_next(&args);
270 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get partial result : uid(%d) \n", uid);
271 char* temp_char = NULL;
273 if (DBUS_TYPE_STRING == dbus_message_iter_get_arg_type(&args)) {
274 dbus_message_iter_get_basic(&args, &(temp_char) );
275 dbus_message_iter_next(&args);
278 __stt_cb_partial_result(uid, temp_char);
280 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get partial result : invalid uid \n");
283 SLOG(LOG_DEBUG, TAG_STTC, "=====");
284 SLOG(LOG_DEBUG, TAG_STTC, " ");
285 }/* STTD_METHOD_PARTIAL_RESULT */
287 else if (dbus_message_is_method_call(msg, if_name, STTD_METHOD_ERROR)) {
288 SLOG(LOG_DEBUG, TAG_STTC, "===== Get Error");
293 dbus_message_get_args(msg, &err,
294 DBUS_TYPE_INT32, &uid,
295 DBUS_TYPE_INT32, &reason,
296 DBUS_TYPE_STRING, &err_msg,
299 if (dbus_error_is_set(&err)) {
300 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt Get Error message : Get arguments error (%s)\n", err.message);
301 dbus_error_free(&err);
303 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt Get Error message : uid(%d), reason(%d), msg(%s)\n", uid, reason, err_msg);
304 __stt_cb_error(uid, reason);
307 reply = dbus_message_new_method_return(msg);
310 if (!dbus_connection_send(conn, reply, NULL))
311 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt Error message : fail to send reply");
313 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt Error message");
315 dbus_connection_flush(conn);
316 dbus_message_unref(reply);
318 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt Error message : fail to create reply message");
321 SLOG(LOG_DEBUG, TAG_STTC, "=====");
322 SLOG(LOG_DEBUG, TAG_STTC, " ");
323 }/* STTD_METHOD_ERROR */
325 /* free the message */
326 dbus_message_unref(msg);
328 return ECORE_CALLBACK_PASS_ON;
331 int stt_dbus_open_connection()
333 if (NULL != g_conn) {
334 SLOG(LOG_WARN, TAG_STTC, "already existed connection ");
341 /* initialise the error value */
342 dbus_error_init(&err);
344 /* connect to the DBUS system bus, and check for errors */
345 g_conn = dbus_bus_get_private(DBUS_BUS_SYSTEM, &err);
347 if (dbus_error_is_set(&err)) {
348 SLOG(LOG_ERROR, TAG_STTC, "Dbus Connection Error (%s)\n", err.message);
349 dbus_error_free(&err);
352 if (NULL == g_conn) {
353 SLOG(LOG_ERROR, TAG_STTC, "Fail to get dbus connection \n");
354 return STT_ERROR_OPERATION_FAILED;
359 char service_name[64];
360 memset(service_name, '\0', 64);
361 snprintf(service_name, 64, "%s%d", STT_CLIENT_SERVICE_NAME, pid);
363 SLOG(LOG_DEBUG, TAG_STTC, "service name is %s\n", service_name);
365 /* register our name on the bus, and check for errors */
366 ret = dbus_bus_request_name(g_conn, service_name, DBUS_NAME_FLAG_REPLACE_EXISTING , &err);
368 if (dbus_error_is_set(&err)) {
369 SLOG(LOG_ERROR, TAG_STTC, "Name Error (%s)\n", err.message);
370 dbus_error_free(&err);
373 if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
374 printf("fail dbus_bus_request_name()\n");
378 if( NULL != g_fd_handler ) {
379 SLOG(LOG_WARN, TAG_STTC, "The handler already exists.");
384 snprintf(rule, 128, "type='signal',interface='%s%d'", STT_CLIENT_SERVICE_INTERFACE, pid);
386 /* add a rule for which messages we want to see */
387 dbus_bus_add_match(g_conn, rule, &err);
388 dbus_connection_flush(g_conn);
390 if (dbus_error_is_set(&err))
392 SLOG(LOG_ERROR, TAG_STTC, "Match Error (%s)\n", err.message);
393 return STT_ERROR_OPERATION_FAILED;
397 if (1 != dbus_connection_get_unix_fd(g_conn, &fd)) {
398 SLOG(LOG_ERROR, TAG_STTC, "fail to get fd from dbus \n");
399 return STT_ERROR_OPERATION_FAILED;
401 SLOG(LOG_DEBUG, TAG_STTC, "Get fd from dbus : %d\n", fd);
404 g_fd_handler = ecore_main_fd_handler_add(fd, ECORE_FD_READ, (Ecore_Fd_Cb)listener_event_callback, g_conn, NULL, NULL);
406 if (NULL == g_fd_handler) {
407 SLOG(LOG_ERROR, TAG_STTC, "fail to get fd handler from ecore \n");
408 return STT_ERROR_OPERATION_FAILED;
414 int stt_dbus_close_connection()
417 dbus_error_init(&err);
421 char service_name[64];
422 memset(service_name, '\0', 64);
423 snprintf(service_name, 64, "%s%d", STT_CLIENT_SERVICE_NAME, pid);
425 dbus_bus_release_name (g_conn, service_name, &err);
427 dbus_connection_close(g_conn);
435 int stt_dbus_request_hello()
439 msg = dbus_message_new_method_call(
440 STT_SERVER_SERVICE_NAME,
441 STT_SERVER_SERVICE_OBJECT_PATH,
442 STT_SERVER_SERVICE_INTERFACE,
446 SLOG(LOG_ERROR, TAG_STTC, ">>>> Request stt hello : Fail to make message \n");
447 return STT_ERROR_OPERATION_FAILED;
451 dbus_error_init(&err);
453 DBusMessage* result_msg = NULL;
456 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 500, &err);
458 dbus_message_unref(msg);
460 if (NULL != result_msg) {
461 dbus_message_unref(result_msg);
463 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt hello");
466 result = STT_ERROR_OPERATION_FAILED;
473 int stt_dbus_request_initialize(int uid, bool* silence_supported, bool* profanity_supported, bool* punctuation_supported)
477 msg = dbus_message_new_method_call(
478 STT_SERVER_SERVICE_NAME,
479 STT_SERVER_SERVICE_OBJECT_PATH,
480 STT_SERVER_SERVICE_INTERFACE,
481 STT_METHOD_INITIALIZE);
484 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt initialize : Fail to make message \n");
485 return STT_ERROR_OPERATION_FAILED;
487 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt initialize : uid(%d)", uid);
491 dbus_message_append_args( msg,
492 DBUS_TYPE_INT32, &pid,
493 DBUS_TYPE_INT32, &uid,
497 dbus_error_init(&err);
499 DBusMessage* result_msg;
500 int result = STT_ERROR_OPERATION_FAILED;
502 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
504 if (NULL != result_msg) {
505 dbus_message_get_args(result_msg, &err,
506 DBUS_TYPE_INT32, &result,
507 DBUS_TYPE_INT32, silence_supported,
508 DBUS_TYPE_INT32, profanity_supported,
509 DBUS_TYPE_INT32, punctuation_supported,
512 if (dbus_error_is_set(&err)) {
513 SLOG(LOG_ERROR, TAG_STTC, "<<<< Get arguments error (%s)\n", err.message);
514 dbus_error_free(&err);
515 result = STT_ERROR_OPERATION_FAILED;
518 dbus_message_unref(result_msg);
520 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
524 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt initialize : result = %d , silence(%d), profanity(%d), punctuation(%d)",
525 result, *silence_supported, *profanity_supported, *punctuation_supported);
527 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt initialize : result = %d \n", result);
530 dbus_message_unref(msg);
535 int stt_dbus_request_finalize(int uid)
539 msg = dbus_message_new_method_call(
540 STT_SERVER_SERVICE_NAME,
541 STT_SERVER_SERVICE_OBJECT_PATH,
542 STT_SERVER_SERVICE_INTERFACE,
543 STT_METHOD_FINALIZE);
546 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt finalize : Fail to make message \n");
547 return STT_ERROR_OPERATION_FAILED;
549 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt finalize : uid(%d)", uid);
552 dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
555 dbus_error_init(&err);
557 DBusMessage* result_msg;
558 int result = STT_ERROR_OPERATION_FAILED;
560 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
562 if (NULL != result_msg) {
563 dbus_message_get_args(result_msg, &err,
564 DBUS_TYPE_INT32, &result,
567 if (dbus_error_is_set(&err)) {
568 printf("<<<< Get arguments error (%s)\n", err.message);
569 dbus_error_free(&err);
570 result = STT_ERROR_OPERATION_FAILED;
573 dbus_message_unref(result_msg);
575 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
579 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt finalize : result = %d \n", result);
581 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt finalize : result = %d \n", result);
584 dbus_message_unref(msg);
589 int stt_dbus_request_get_support_langs(int uid, stt_h stt, stt_supported_language_cb callback, void* user_data)
591 if (NULL == stt || NULL == callback) {
592 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
593 return STT_ERROR_INVALID_PARAMETER;
598 msg = dbus_message_new_method_call(
599 STT_SERVER_SERVICE_NAME,
600 STT_SERVER_SERVICE_OBJECT_PATH,
601 STT_SERVER_SERVICE_INTERFACE,
602 STT_METHOD_GET_SUPPORT_LANGS);
605 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get supported languages : Fail to make message \n");
606 return STT_ERROR_OPERATION_FAILED;
608 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get supported languages : uid(%d)", uid);
611 dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
614 dbus_error_init(&err);
616 DBusMessage* result_msg;
617 DBusMessageIter args;
618 int result = STT_ERROR_OPERATION_FAILED;
620 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err );
622 if (NULL != result_msg) {
623 if (dbus_message_iter_init(result_msg, &args)) {
625 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
626 dbus_message_iter_get_basic(&args, &result);
627 dbus_message_iter_next(&args);
631 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get support languages : result = %d \n", result);
635 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
636 dbus_message_iter_get_basic(&args, &size);
637 dbus_message_iter_next(&args);
641 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt size of language error : size = %d \n", size);
646 for (i=0 ; i<size ; i++) {
647 dbus_message_iter_get_basic(&args, &(temp_lang));
648 dbus_message_iter_next(&args);
650 if (true != callback(stt, temp_lang, user_data)) {
656 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get support languages : result = %d \n", result);
659 dbus_message_unref(result_msg);
661 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get support languages : result message is NULL \n");
664 dbus_message_unref(msg);
669 int stt_dbus_request_get_default_lang(int uid, char** language)
671 if (NULL == language) {
672 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
673 return STT_ERROR_INVALID_PARAMETER;
679 msg = dbus_message_new_method_call(
680 STT_SERVER_SERVICE_NAME,
681 STT_SERVER_SERVICE_OBJECT_PATH,
682 STT_SERVER_SERVICE_INTERFACE,
683 STT_METHOD_GET_CURRENT_LANG);
686 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get default language : Fail to make message \n");
687 return STT_ERROR_OPERATION_FAILED;
689 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get default language : uid(%d)", uid);
692 dbus_message_append_args( msg,
693 DBUS_TYPE_INT32, &uid,
697 dbus_error_init(&err);
699 DBusMessage* result_msg;
700 int result = STT_ERROR_OPERATION_FAILED;
701 char* temp_lang = NULL;
703 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
705 if (NULL != result_msg) {
706 dbus_message_get_args(result_msg, &err,
707 DBUS_TYPE_INT32, &result,
708 DBUS_TYPE_STRING, &temp_lang,
711 if (dbus_error_is_set(&err)) {
712 printf("<<<< Get arguments error (%s)\n", err.message);
713 dbus_error_free(&err);
714 result = STT_ERROR_OPERATION_FAILED;
716 dbus_message_unref(result_msg);
718 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
722 *language = strdup(temp_lang);
723 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get default language : result = %d, language = %s \n", result, *language);
725 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get default language : result = %d \n", result);
728 dbus_message_unref(msg);
733 int stt_dbus_request_is_partial_result_supported(int uid, bool* partial_result)
735 if (NULL == partial_result) {
736 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
737 return STT_ERROR_INVALID_PARAMETER;
742 msg = dbus_message_new_method_call(
743 STT_SERVER_SERVICE_NAME,
744 STT_SERVER_SERVICE_OBJECT_PATH,
745 STT_SERVER_SERVICE_INTERFACE,
746 STT_METHOD_IS_PARTIAL_SUPPORTED);
749 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt is partial result supported : Fail to make message \n");
750 return STT_ERROR_OPERATION_FAILED;
752 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt is partial result supported : uid(%d)", uid);
755 dbus_message_append_args( msg,
756 DBUS_TYPE_INT32, &uid,
760 dbus_error_init(&err);
762 DBusMessage* result_msg;
763 int result = STT_ERROR_OPERATION_FAILED;
766 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
768 if (NULL != result_msg) {
769 dbus_message_get_args(result_msg, &err,
770 DBUS_TYPE_INT32, &result,
771 DBUS_TYPE_INT32, &support,
774 if (dbus_error_is_set(&err)) {
775 printf("<<<< Get arguments error (%s)\n", err.message);
776 dbus_error_free(&err);
777 result = STT_ERROR_OPERATION_FAILED;
779 dbus_message_unref(result_msg);
781 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
785 *partial_result = (bool)support;
786 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt is partial result supported : result = %d, support = %s \n", result, *partial_result ? "true" : "false");
788 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt is partial result supported : result = %d \n", result);
791 dbus_message_unref(msg);
796 int stt_dbus_request_start(int uid, const char* lang, const char* type, int profanity, int punctuation, int silence)
798 if (NULL == lang || NULL == type) {
799 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
800 return STT_ERROR_INVALID_PARAMETER;
805 /* create a signal & check for errors */
806 msg = dbus_message_new_method_call(
807 STT_SERVER_SERVICE_NAME,
808 STT_SERVER_SERVICE_OBJECT_PATH,
809 STT_SERVER_SERVICE_INTERFACE,
813 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt start : Fail to make message \n");
814 return STT_ERROR_OPERATION_FAILED;
816 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt start : uid(%d), language(%s), type(%s)", uid, lang, type);
819 dbus_message_append_args( msg,
820 DBUS_TYPE_INT32, &uid,
821 DBUS_TYPE_STRING, &lang,
822 DBUS_TYPE_STRING, &type,
823 DBUS_TYPE_INT32, &profanity,
824 DBUS_TYPE_INT32, &punctuation,
825 DBUS_TYPE_INT32, &silence,
829 dbus_error_init(&err);
831 DBusMessage* result_msg;
832 int result = STT_ERROR_OPERATION_FAILED;
834 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_start_time, &err);
836 if (NULL != result_msg) {
837 dbus_message_get_args(result_msg, &err,
838 DBUS_TYPE_INT32, &result,
841 if (dbus_error_is_set(&err)) {
842 printf("<<<< Get arguments error (%s)\n", err.message);
843 dbus_error_free(&err);
844 result = STT_ERROR_OPERATION_FAILED;
846 dbus_message_unref(result_msg);
848 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
852 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt start : result = %d ", result);
854 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt start : result = %d ", result);
857 dbus_message_unref(msg);
862 int stt_dbus_request_stop(int uid)
866 /* create a signal & check for errors */
867 msg = dbus_message_new_method_call(
868 STT_SERVER_SERVICE_NAME,
869 STT_SERVER_SERVICE_OBJECT_PATH,
870 STT_SERVER_SERVICE_INTERFACE,
874 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt stop : Fail to make message \n");
875 return STT_ERROR_OPERATION_FAILED;
877 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt stop : uid(%d)", uid);
880 dbus_message_append_args(msg,
881 DBUS_TYPE_INT32, &uid,
885 dbus_error_init(&err);
887 DBusMessage* result_msg;
888 int result = STT_ERROR_OPERATION_FAILED;
890 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
892 if (NULL != result_msg) {
893 dbus_message_get_args(result_msg, &err,
894 DBUS_TYPE_INT32, &result,
897 if (dbus_error_is_set(&err)) {
898 printf("<<<< Get arguments error (%s)\n", err.message);
899 dbus_error_free(&err);
900 result = STT_ERROR_OPERATION_FAILED;
902 dbus_message_unref(result_msg);
904 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
908 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt stop : result = %d ", result);
910 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt stop : result = %d ", result);
913 dbus_message_unref(msg);
918 int stt_dbus_request_cancel(int uid)
922 /* create a signal & check for errors */
923 msg = dbus_message_new_method_call(
924 STT_SERVER_SERVICE_NAME,
925 STT_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
926 STT_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
927 STT_METHOD_CANCEL); /* name of the signal */
930 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt cancel : Fail to make message \n");
931 return STT_ERROR_OPERATION_FAILED;
933 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt cancel : uid(%d)", uid);
936 dbus_message_append_args(msg,
937 DBUS_TYPE_INT32, &uid,
941 dbus_error_init(&err);
943 DBusMessage* result_msg;
944 int result = STT_ERROR_OPERATION_FAILED;
946 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
948 if (NULL != result_msg) {
949 dbus_message_get_args(result_msg, &err,
950 DBUS_TYPE_INT32, &result,
953 if (dbus_error_is_set(&err)) {
954 printf("<<<< Get arguments error (%s)\n", err.message);
955 dbus_error_free(&err);
956 result = STT_ERROR_OPERATION_FAILED;
958 dbus_message_unref(result_msg);
960 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
964 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt cancel : result = %d ", result);
966 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt cancel : result = %d ", result);
969 dbus_message_unref(msg);