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;
449 SLOG(LOG_DEBUG, TAG_STTC, ">>>> Request stt hello");
453 dbus_error_init(&err);
455 DBusMessage* result_msg = NULL;
458 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, 500, &err);
460 dbus_message_unref(msg);
462 if (NULL != result_msg) {
463 dbus_message_unref(result_msg);
465 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt hello");
468 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt hello : no response");
469 result = STT_ERROR_OPERATION_FAILED;
476 int stt_dbus_request_initialize(int uid, bool* silence_supported, bool* profanity_supported, bool* punctuation_supported)
480 msg = dbus_message_new_method_call(
481 STT_SERVER_SERVICE_NAME,
482 STT_SERVER_SERVICE_OBJECT_PATH,
483 STT_SERVER_SERVICE_INTERFACE,
484 STT_METHOD_INITIALIZE);
487 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt initialize : Fail to make message \n");
488 return STT_ERROR_OPERATION_FAILED;
490 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt initialize : uid(%d)", uid);
494 dbus_message_append_args( msg,
495 DBUS_TYPE_INT32, &pid,
496 DBUS_TYPE_INT32, &uid,
500 dbus_error_init(&err);
502 DBusMessage* result_msg;
503 int result = STT_ERROR_OPERATION_FAILED;
505 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
507 if (NULL != result_msg) {
508 dbus_message_get_args(result_msg, &err,
509 DBUS_TYPE_INT32, &result,
510 DBUS_TYPE_INT32, silence_supported,
511 DBUS_TYPE_INT32, profanity_supported,
512 DBUS_TYPE_INT32, punctuation_supported,
515 if (dbus_error_is_set(&err)) {
516 SLOG(LOG_ERROR, TAG_STTC, "<<<< Get arguments error (%s)\n", err.message);
517 dbus_error_free(&err);
518 result = STT_ERROR_OPERATION_FAILED;
521 dbus_message_unref(result_msg);
523 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
527 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt initialize : result = %d , silence(%d), profanity(%d), punctuation(%d)",
528 result, *silence_supported, *profanity_supported, *punctuation_supported);
530 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt initialize : result = %d \n", result);
533 dbus_message_unref(msg);
538 int stt_dbus_request_finalize(int uid)
542 msg = dbus_message_new_method_call(
543 STT_SERVER_SERVICE_NAME,
544 STT_SERVER_SERVICE_OBJECT_PATH,
545 STT_SERVER_SERVICE_INTERFACE,
546 STT_METHOD_FINALIZE);
549 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt finalize : Fail to make message \n");
550 return STT_ERROR_OPERATION_FAILED;
552 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt finalize : uid(%d)", uid);
555 dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
558 dbus_error_init(&err);
560 DBusMessage* result_msg;
561 int result = STT_ERROR_OPERATION_FAILED;
563 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
565 if (NULL != result_msg) {
566 dbus_message_get_args(result_msg, &err,
567 DBUS_TYPE_INT32, &result,
570 if (dbus_error_is_set(&err)) {
571 printf("<<<< Get arguments error (%s)\n", err.message);
572 dbus_error_free(&err);
573 result = STT_ERROR_OPERATION_FAILED;
576 dbus_message_unref(result_msg);
578 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
582 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt finalize : result = %d \n", result);
584 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt finalize : result = %d \n", result);
587 dbus_message_unref(msg);
592 int stt_dbus_request_get_support_langs(int uid, stt_h stt, stt_supported_language_cb callback, void* user_data)
594 if (NULL == stt || NULL == callback) {
595 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
596 return STT_ERROR_INVALID_PARAMETER;
601 msg = dbus_message_new_method_call(
602 STT_SERVER_SERVICE_NAME,
603 STT_SERVER_SERVICE_OBJECT_PATH,
604 STT_SERVER_SERVICE_INTERFACE,
605 STT_METHOD_GET_SUPPORT_LANGS);
608 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get supported languages : Fail to make message \n");
609 return STT_ERROR_OPERATION_FAILED;
611 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get supported languages : uid(%d)", uid);
614 dbus_message_append_args(msg, DBUS_TYPE_INT32, &uid, DBUS_TYPE_INVALID);
617 dbus_error_init(&err);
619 DBusMessage* result_msg;
620 DBusMessageIter args;
621 int result = STT_ERROR_OPERATION_FAILED;
623 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err );
625 if (NULL != result_msg) {
626 if (dbus_message_iter_init(result_msg, &args)) {
628 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
629 dbus_message_iter_get_basic(&args, &result);
630 dbus_message_iter_next(&args);
634 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get support languages : result = %d \n", result);
638 if (DBUS_TYPE_INT32 == dbus_message_iter_get_arg_type(&args)) {
639 dbus_message_iter_get_basic(&args, &size);
640 dbus_message_iter_next(&args);
644 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt size of language error : size = %d \n", size);
649 for (i=0 ; i<size ; i++) {
650 dbus_message_iter_get_basic(&args, &(temp_lang));
651 dbus_message_iter_next(&args);
653 if (true != callback(stt, temp_lang, user_data)) {
659 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get support languages : result = %d \n", result);
662 dbus_message_unref(result_msg);
664 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get support languages : result message is NULL \n");
667 dbus_message_unref(msg);
672 int stt_dbus_request_get_default_lang(int uid, char** language)
674 if (NULL == language) {
675 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
676 return STT_ERROR_INVALID_PARAMETER;
682 msg = dbus_message_new_method_call(
683 STT_SERVER_SERVICE_NAME,
684 STT_SERVER_SERVICE_OBJECT_PATH,
685 STT_SERVER_SERVICE_INTERFACE,
686 STT_METHOD_GET_CURRENT_LANG);
689 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get default language : Fail to make message \n");
690 return STT_ERROR_OPERATION_FAILED;
692 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get default language : uid(%d)", uid);
695 dbus_message_append_args( msg,
696 DBUS_TYPE_INT32, &uid,
700 dbus_error_init(&err);
702 DBusMessage* result_msg;
703 int result = STT_ERROR_OPERATION_FAILED;
704 char* temp_lang = NULL;
706 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
708 if (NULL != result_msg) {
709 dbus_message_get_args(result_msg, &err,
710 DBUS_TYPE_INT32, &result,
711 DBUS_TYPE_STRING, &temp_lang,
714 if (dbus_error_is_set(&err)) {
715 printf("<<<< Get arguments error (%s)\n", err.message);
716 dbus_error_free(&err);
717 result = STT_ERROR_OPERATION_FAILED;
719 dbus_message_unref(result_msg);
721 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
725 *language = strdup(temp_lang);
726 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get default language : result = %d, language = %s \n", result, *language);
728 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get default language : result = %d \n", result);
731 dbus_message_unref(msg);
736 int stt_dbus_request_is_partial_result_supported(int uid, bool* partial_result)
738 if (NULL == partial_result) {
739 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
740 return STT_ERROR_INVALID_PARAMETER;
745 msg = dbus_message_new_method_call(
746 STT_SERVER_SERVICE_NAME,
747 STT_SERVER_SERVICE_OBJECT_PATH,
748 STT_SERVER_SERVICE_INTERFACE,
749 STT_METHOD_IS_PARTIAL_SUPPORTED);
752 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt is partial result supported : Fail to make message \n");
753 return STT_ERROR_OPERATION_FAILED;
755 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt is partial result supported : uid(%d)", uid);
758 dbus_message_append_args( msg,
759 DBUS_TYPE_INT32, &uid,
763 dbus_error_init(&err);
765 DBusMessage* result_msg;
766 int result = STT_ERROR_OPERATION_FAILED;
769 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
771 if (NULL != result_msg) {
772 dbus_message_get_args(result_msg, &err,
773 DBUS_TYPE_INT32, &result,
774 DBUS_TYPE_INT32, &support,
777 if (dbus_error_is_set(&err)) {
778 printf("<<<< Get arguments error (%s)\n", err.message);
779 dbus_error_free(&err);
780 result = STT_ERROR_OPERATION_FAILED;
782 dbus_message_unref(result_msg);
784 SLOG(LOG_ERROR, TAG_STTC, "<<<< Result message is NULL \n");
788 *partial_result = (bool)support;
789 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt is partial result supported : result = %d, support = %s \n", result, *partial_result ? "true" : "false");
791 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt is partial result supported : result = %d \n", result);
794 dbus_message_unref(msg);
799 int stt_dbus_request_start(int uid, const char* lang, const char* type, int profanity, int punctuation, int silence)
801 if (NULL == lang || NULL == type) {
802 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
803 return STT_ERROR_INVALID_PARAMETER;
808 /* create a signal & check for errors */
809 msg = dbus_message_new_method_call(
810 STT_SERVER_SERVICE_NAME,
811 STT_SERVER_SERVICE_OBJECT_PATH,
812 STT_SERVER_SERVICE_INTERFACE,
816 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt start : Fail to make message \n");
817 return STT_ERROR_OPERATION_FAILED;
819 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt start : uid(%d), language(%s), type(%s)", uid, lang, type);
822 dbus_message_append_args( msg,
823 DBUS_TYPE_INT32, &uid,
824 DBUS_TYPE_STRING, &lang,
825 DBUS_TYPE_STRING, &type,
826 DBUS_TYPE_INT32, &profanity,
827 DBUS_TYPE_INT32, &punctuation,
828 DBUS_TYPE_INT32, &silence,
832 dbus_error_init(&err);
834 DBusMessage* result_msg;
835 int result = STT_ERROR_OPERATION_FAILED;
837 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_start_time, &err);
839 if (NULL != result_msg) {
840 dbus_message_get_args(result_msg, &err,
841 DBUS_TYPE_INT32, &result,
844 if (dbus_error_is_set(&err)) {
845 printf("<<<< Get arguments error (%s)\n", err.message);
846 dbus_error_free(&err);
847 result = STT_ERROR_OPERATION_FAILED;
849 dbus_message_unref(result_msg);
851 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
855 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt start : result = %d ", result);
857 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt start : result = %d ", result);
860 dbus_message_unref(msg);
865 int stt_dbus_request_stop(int uid)
869 /* create a signal & check for errors */
870 msg = dbus_message_new_method_call(
871 STT_SERVER_SERVICE_NAME,
872 STT_SERVER_SERVICE_OBJECT_PATH,
873 STT_SERVER_SERVICE_INTERFACE,
877 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt stop : Fail to make message \n");
878 return STT_ERROR_OPERATION_FAILED;
880 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt stop : uid(%d)", uid);
883 dbus_message_append_args(msg,
884 DBUS_TYPE_INT32, &uid,
888 dbus_error_init(&err);
890 DBusMessage* result_msg;
891 int result = STT_ERROR_OPERATION_FAILED;
893 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
895 if (NULL != result_msg) {
896 dbus_message_get_args(result_msg, &err,
897 DBUS_TYPE_INT32, &result,
900 if (dbus_error_is_set(&err)) {
901 printf("<<<< Get arguments error (%s)\n", err.message);
902 dbus_error_free(&err);
903 result = STT_ERROR_OPERATION_FAILED;
905 dbus_message_unref(result_msg);
907 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
911 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt stop : result = %d ", result);
913 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt stop : result = %d ", result);
916 dbus_message_unref(msg);
921 int stt_dbus_request_cancel(int uid)
925 /* create a signal & check for errors */
926 msg = dbus_message_new_method_call(
927 STT_SERVER_SERVICE_NAME,
928 STT_SERVER_SERVICE_OBJECT_PATH, /* object name of the signal */
929 STT_SERVER_SERVICE_INTERFACE, /* interface name of the signal */
930 STT_METHOD_CANCEL); /* name of the signal */
933 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt cancel : Fail to make message \n");
934 return STT_ERROR_OPERATION_FAILED;
936 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt cancel : uid(%d)", uid);
939 dbus_message_append_args(msg,
940 DBUS_TYPE_INT32, &uid,
944 dbus_error_init(&err);
946 DBusMessage* result_msg;
947 int result = STT_ERROR_OPERATION_FAILED;
949 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
951 if (NULL != result_msg) {
952 dbus_message_get_args(result_msg, &err,
953 DBUS_TYPE_INT32, &result,
956 if (dbus_error_is_set(&err)) {
957 printf("<<<< Get arguments error (%s)\n", err.message);
958 dbus_error_free(&err);
959 result = STT_ERROR_OPERATION_FAILED;
961 dbus_message_unref(result_msg);
963 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
967 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt cancel : result = %d ", result);
969 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt cancel : result = %d ", result);
972 dbus_message_unref(msg);
978 int stt_dbus_request_get_audio_volume(int uid, float* volume)
980 if (NULL == volume) {
981 SLOG(LOG_ERROR, TAG_STTC, "Input parameter is NULL");
982 return STT_ERROR_INVALID_PARAMETER;
987 msg = dbus_message_new_method_call(
988 STT_SERVER_SERVICE_NAME,
989 STT_SERVER_SERVICE_OBJECT_PATH,
990 STT_SERVER_SERVICE_INTERFACE,
991 STT_METHOD_GET_AUDIO_VOLUME);
994 SLOG(LOG_ERROR, TAG_STTC, ">>>> stt get volume : Fail to make message \n");
995 return STT_ERROR_OPERATION_FAILED;
997 SLOG(LOG_DEBUG, TAG_STTC, ">>>> stt get volume : uid(%d)", uid);
1000 dbus_message_append_args( msg,
1001 DBUS_TYPE_INT32, &uid,
1005 dbus_error_init(&err);
1007 DBusMessage* result_msg;
1008 int result = STT_ERROR_OPERATION_FAILED;
1011 result_msg = dbus_connection_send_with_reply_and_block(g_conn, msg, g_waiting_time, &err);
1013 if (NULL != result_msg) {
1014 dbus_message_get_args(result_msg, &err,
1015 DBUS_TYPE_INT32, &result,
1016 DBUS_TYPE_DOUBLE, &vol,
1019 if (dbus_error_is_set(&err)) {
1020 printf("<<<<< Get arguments error (%s)\n", err.message);
1021 dbus_error_free(&err);
1022 result = STT_ERROR_OPERATION_FAILED;
1024 dbus_message_unref(result_msg);
1026 SLOG(LOG_DEBUG, TAG_STTC, "<<<< Result Message is NULL");
1030 *volume = (float)vol;
1031 SLOG(LOG_DEBUG, TAG_STTC, "<<<< stt get audio volume : result = %d, volume = %f \n", result, *volume);
1033 SLOG(LOG_ERROR, TAG_STTC, "<<<< stt get audio volume : result = %d\n", result);
1036 dbus_message_unref(msg);