2 * Copyright 2018-2019 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "multi_assistant_main.h"
18 #include "multi_assistant_dbus.h"
19 #include "multi_assistant_dbus_server.h"
20 #include "multi_assistant_service_client.h"
23 * Dbus Client-Daemon Server
25 int ma_service_dbus_hello(DBusConnection* conn, DBusMessage* msg)
27 MAS_LOGD("[DEBUG] MAS HELLO");
30 reply = dbus_message_new_method_return(msg);
33 if (!dbus_connection_send(conn, reply, NULL)) {
34 MAS_LOGE("[OUT ERROR] Out Of Memory!");
37 dbus_connection_flush(conn);
38 dbus_message_unref(reply);
40 MAS_LOGE("[OUT ERROR] Fail to create reply message!!");
46 int ma_service_dbus_initialize(DBusConnection* conn, DBusMessage* msg)
49 dbus_error_init(&err);
54 dbus_message_get_args(msg, &err,
55 DBUS_TYPE_INT32, &pid,
58 MAS_LOGD("[DEBUG] MAS INITIALIZE");
60 if (dbus_error_is_set(&err)) {
61 MAS_LOGE("[IN ERROR] mas initialize : get arguments error (%s)", err.message);
62 dbus_error_free(&err);
63 ret = -1; //MAS_ERROR_OPERATION_FAILED;
65 MAS_LOGD("[IN] mas initialize : pid(%d)", pid);
66 ret = mas_client_initialize(pid);
70 reply = dbus_message_new_method_return(msg);
72 MAS_LOGD("[OUT] mas initialize : result(%d)", ret);
74 dbus_message_append_args(reply,
75 DBUS_TYPE_INT32, &ret,
79 MAS_LOGD("[OUT] mas initialize : result(%d)", ret);
81 MAS_LOGE("[OUT ERROR] mas initialize : result(%d)", ret);
84 if (!dbus_connection_send(conn, reply, NULL)) {
85 MAS_LOGE("[OUT ERROR] mas initialize : Out Of Memory!");
88 dbus_connection_flush(conn);
89 dbus_message_unref(reply);
91 MAS_LOGE("[OUT ERROR] mas initialize : Fail to create reply message!!");
97 int ma_service_dbus_deinitialize(DBusConnection* conn, DBusMessage* msg)
100 dbus_error_init(&err);
105 dbus_message_get_args(msg, &err,
106 DBUS_TYPE_INT32, &pid,
109 MAS_LOGD("[DEBUG] MAS DEINITIALIZE");
111 if (dbus_error_is_set(&err)) {
112 MAS_LOGE("[IN ERROR] mas deinitialize : get arguments error (%s)", err.message);
113 dbus_error_free(&err);
114 ret = -1; //MAS_ERROR_OPERATION_FAILED;
116 MAS_LOGD("[IN] mas deinitialize : pid(%d)", pid);
117 ret = mas_client_deinitialize(pid);
121 reply = dbus_message_new_method_return(msg);
123 MAS_LOGD("[OUT] mas deinitialize : result(%d)", ret);
125 dbus_message_append_args(reply,
126 DBUS_TYPE_INT32, &ret,
130 MAS_LOGD("[OUT] mas deinitialize : result(%d)", ret);
132 MAS_LOGE("[OUT ERROR] mas deinitialize : result(%d)", ret);
135 if (!dbus_connection_send(conn, reply, NULL)) {
136 MAS_LOGE("[OUT ERROR] mas deinitialize : Out Of Memory!");
139 dbus_connection_flush(conn);
140 dbus_message_unref(reply);
142 MAS_LOGE("[OUT ERROR] mas deinitialize : Fail to create reply message!!");
148 int ma_service_dbus_get_audio_format(DBusConnection* conn, DBusMessage* msg)
151 dbus_error_init(&err);
154 int rate, channel, audio_type;
157 dbus_message_get_args(msg, &err,
158 DBUS_TYPE_INT32, &pid,
161 MAS_LOGD("[DEBUG] MAS GET AUDIO FORMAT");
163 if (dbus_error_is_set(&err)) {
164 MAS_LOGE("[IN ERROR] mas get audio format : Get arguments error (%s)", err.message);
165 dbus_error_free(&err);
166 ret = -1; //MAS_ERROR_OPERATION_FAILED;
168 MAS_LOGD("[IN] mas get default voice");
169 ret = mas_client_get_audio_format(pid, &rate, &channel, &audio_type);
173 reply = dbus_message_new_method_return(msg);
176 /* Append result and voice */
177 dbus_message_append_args(reply,
178 DBUS_TYPE_INT32, &ret,
179 DBUS_TYPE_INT32, &rate,
180 DBUS_TYPE_INT32, &channel,
181 DBUS_TYPE_INT32, &audio_type,
184 MAS_LOGD("[OUT] mas get audio format : rate(%d), channel(%d), audio_type(%d)", rate, channel, audio_type);
186 MAS_LOGE("[OUT ERROR] mas get audio format : result(%d)", ret);
189 if (!dbus_connection_send(conn, reply, NULL)) {
190 MAS_LOGE("[OUT ERROR] mas get audio format : Out Of Memory!");
193 dbus_connection_flush(conn);
194 dbus_message_unref(reply);
196 MAS_LOGE("[OUT ERROR] tts default voice : Fail to create reply message!!");
202 int ma_service_dbus_get_audio_source_type(DBusConnection* conn, DBusMessage* msg)
205 dbus_error_init(&err);
211 dbus_message_get_args(msg, &err,
212 DBUS_TYPE_INT32, &pid,
215 MAS_LOGD("[DEBUG] MAS GET AUDIO SOURCE TYPE");
217 if (dbus_error_is_set(&err)) {
218 MAS_LOGE("[IN ERROR] mas get audio source type : Get arguments error (%s)", err.message);
219 dbus_error_free(&err);
220 ret = -1; //MAS_ERROR_OPERATION_FAILED;
222 MAS_LOGD("[IN] mas get default voice");
223 ret = mas_client_get_audio_source_type(pid, &type);
227 reply = dbus_message_new_method_return(msg);
229 char* temp_type = NULL;
232 temp_type = strdup(type);
234 temp_type = strdup("#NULL");
237 /* Append result and voice */
238 dbus_message_append_args(reply,
239 DBUS_TYPE_INT32, &ret,
240 DBUS_TYPE_STRING, &temp_type,
243 MAS_LOGD("[OUT] mas get audio source type : type(%s)", temp_type);
245 MAS_LOGE("[OUT ERROR] mas get audio source type : result(%d)", ret);
248 if (!dbus_connection_send(conn, reply, NULL)) {
249 MAS_LOGE("[OUT ERROR] mas get audio source type : Out Of Memory!");
252 dbus_connection_flush(conn);
253 dbus_message_unref(reply);
255 MAS_LOGE("[OUT ERROR] mas get audio source type : Fail to create reply message!!");
264 int ma_service_dbus_send_asr_result(DBusConnection* conn, DBusMessage* msg)
267 dbus_error_init(&err);
273 dbus_message_get_args(msg, &err,
274 DBUS_TYPE_INT32, &pid,
275 DBUS_TYPE_INT32, &event,
276 DBUS_TYPE_STRING, &asr_result,
279 MAS_LOGD("[DEBUG] MAS SEND ASR RESULT");
281 if (dbus_error_is_set(&err)) {
282 MAS_LOGE("[IN ERROR] mas send asr result : Get arguments error (%s)", err.message);
283 dbus_error_free(&err);
284 ret = -1; //MAS_ERROR_OPERATION_FAILED;
286 MAS_LOGD("[IN] mas send asr result : pid(%d), event(%d), asr_result(%s)", pid, event, asr_result);
287 ret = mas_client_send_asr_result(pid, event, asr_result);
291 reply = dbus_message_new_method_return(msg);
294 dbus_message_append_args(reply,
295 DBUS_TYPE_INT32, &ret,
299 MAS_LOGD("[OUT] mas send asr result : result(%d)", ret);
301 MAS_LOGE("[OUT ERROR] mas send asr result : result(%d)", ret);
304 if (!dbus_connection_send(conn, reply, NULL)) {
305 MAS_LOGE("[OUT ERROR] mas send asr result : Out Of Memory!");
308 dbus_connection_flush(conn);
309 dbus_message_unref(reply);
311 MAS_LOGE("[OUT ERROR] mas send asr result : Fail to create reply message!!");
320 int ma_service_dbus_send_result(DBusConnection* conn, DBusMessage* msg)
323 dbus_error_init(&err);
327 char* utterance_text;
331 dbus_message_get_args(msg, &err,
332 DBUS_TYPE_INT32, &pid,
333 DBUS_TYPE_STRING, &display_text,
334 DBUS_TYPE_STRING, &utterance_text,
335 DBUS_TYPE_STRING, &result_json,
338 MAS_LOGD("[DEBUG] MAS SEND RESULT");
340 if (dbus_error_is_set(&err)) {
341 MAS_LOGE("[IN ERROR] mas send result : Get arguments error (%s)", err.message);
342 dbus_error_free(&err);
343 ret = -1; //MAS_ERROR_OPERATION_FAILED;
345 MAS_LOGD("[IN] mas send result : pid(%d), display_text(%s), utterance_text(%s), result_json(%s)", pid, display_text, utterance_text, result_json);
346 ret = mas_client_send_result(pid, display_text, utterance_text, result_json);
350 reply = dbus_message_new_method_return(msg);
353 dbus_message_append_args(reply,
354 DBUS_TYPE_INT32, &ret,
358 MAS_LOGD("[OUT] mas send result : result(%d)", ret);
360 MAS_LOGE("[OUT ERROR] mas send result : result(%d)", ret);
363 if (!dbus_connection_send(conn, reply, NULL)) {
364 MAS_LOGE("[OUT ERROR] mas send result : Out Of Memory!");
367 dbus_connection_flush(conn);
368 dbus_message_unref(reply);
370 MAS_LOGE("[OUT ERROR] mas send result : Fail to create reply message!!");
379 int ma_service_dbus_send_recognition_result(DBusConnection* conn, DBusMessage* msg)
382 dbus_error_init(&err);
388 dbus_message_get_args(msg, &err,
389 DBUS_TYPE_INT32, &pid,
390 DBUS_TYPE_INT32, &result,
393 MAS_LOGD("[DEBUG] MAS SEND RECOGNITION RESULT");
395 if (dbus_error_is_set(&err)) {
396 MAS_LOGE("[IN ERROR] mas send error : Get arguments error (%s)", err.message);
397 dbus_error_free(&err);
398 ret = -1; //MAS_ERROR_OPERATION_FAILED;
400 MAS_LOGD("[IN] mas send error : pid(%d), result(%d)", pid, result);
401 ret = mas_client_send_recognition_result(pid, result);
410 int ma_service_dbus_start_streaming_audio_data(DBusConnection* conn, DBusMessage* msg)
413 dbus_error_init(&err);
419 dbus_message_get_args(msg, &err,
420 DBUS_TYPE_INT32, &pid,
421 DBUS_TYPE_INT32, &type,
424 MAS_LOGD("[DEBUG] MAS SEND START STREAMING");
426 if (dbus_error_is_set(&err)) {
427 MAS_LOGE("[IN ERROR] mas send start streaming : Get arguments error (%s)", err.message);
428 dbus_error_free(&err);
429 ret = -1; //MAS_ERROR_OPERATION_FAILED;
431 MAS_LOGD("[IN] mas send start streaming : pid(%d), type(%d)", pid, type);
432 ret = mas_client_start_streaming_audio_data(pid, type);
441 int ma_service_dbus_stop_streaming_audio_data(DBusConnection* conn, DBusMessage* msg)
444 dbus_error_init(&err);
450 dbus_message_get_args(msg, &err,
451 DBUS_TYPE_INT32, &pid,
452 DBUS_TYPE_INT32, &type,
455 MAS_LOGD("[DEBUG] MAS SEND STOP STREAMING");
457 if (dbus_error_is_set(&err)) {
458 MAS_LOGE("[IN ERROR] mas stop streaming : Get arguments error (%s)", err.message);
459 dbus_error_free(&err);
460 ret = -1; //MAS_ERROR_OPERATION_FAILED;
462 MAS_LOGD("[IN] mas stop streaming : pid(%d), type(%d)", pid, type);
463 ret = mas_client_stop_streaming_audio_data(pid, type);
472 int ma_service_dbus_update_voice_feedback_state(DBusConnection* conn, DBusMessage* msg)
475 dbus_error_init(&err);
481 dbus_message_get_args(msg, &err,
482 DBUS_TYPE_INT32, &pid,
483 DBUS_TYPE_INT32, &state,
486 MAS_LOGD("[DEBUG] MAS SEND UPDATE VOICE FEEDBACK");
488 if (dbus_error_is_set(&err)) {
489 MAS_LOGE("[IN ERROR] mas update voice feedback : Get arguments error (%s)", err.message);
490 dbus_error_free(&err);
491 ret = -1; //MAS_ERROR_OPERATION_FAILED;
493 MAS_LOGD("[IN] mas update voice feedback : pid(%d), state(%d)", pid, state);
494 ret = mas_client_update_voice_feedback_state(pid, state);
503 int ma_service_dbus_send_assistant_specific_command(DBusConnection* conn, DBusMessage* msg)
506 dbus_error_init(&err);
512 dbus_message_get_args(msg, &err,
513 DBUS_TYPE_INT32, &pid,
514 DBUS_TYPE_STRING, &command,
517 MAS_LOGD("[DEBUG] MAS SEND ASSISTANT SPECIFIC COMMAND");
519 if (dbus_error_is_set(&err)) {
520 MAS_LOGE("[IN ERROR] mas send assistant specific command : Get arguments error (%s)", err.message);
521 dbus_error_free(&err);
522 ret = -1; //MAS_ERROR_OPERATION_FAILED;
524 MAS_LOGD("[IN] mas send assistant specific command : pid(%d), command(%s)", pid, command);
525 ret = mas_client_send_assistant_specific_command(pid, command);
534 int ma_service_dbus_set_background_volume(DBusConnection* conn, DBusMessage* msg)
537 dbus_error_init(&err);
543 dbus_message_get_args(msg, &err,
544 DBUS_TYPE_INT32, &pid,
545 DBUS_TYPE_DOUBLE, &ratio,
548 MAS_LOGD("[DEBUG] MAS SET BACKGROUND VOLUME");
550 if (dbus_error_is_set(&err)) {
551 MAS_LOGE("[IN ERROR] mas set background volume : Get arguments error (%s)", err.message);
552 dbus_error_free(&err);
553 ret = -1; //MAS_ERROR_OPERATION_FAILED;
555 MAS_LOGD("[IN] mas set background volume : pid(%d), ratio(%f)", pid, ratio);
556 ret = mas_client_set_background_volume(pid, ratio);
565 int ma_service_dbus_set_preprocessing_allow_mode(DBusConnection* conn, DBusMessage* msg)
568 dbus_error_init(&err);
575 dbus_message_get_args(msg, &err,
576 DBUS_TYPE_INT32, &pid,
577 DBUS_TYPE_INT32, &mode,
578 DBUS_TYPE_STRING, &app_id,
581 MAS_LOGD("[DEBUG] MAS SET PREPROCESSING ALLOW MODE");
583 if (dbus_error_is_set(&err)) {
584 MAS_LOGE("[IN ERROR] mas set preprocessing allow mode : Get arguments error (%s)", err.message);
585 dbus_error_free(&err);
586 ret = -1; //MAS_ERROR_OPERATION_FAILED;
588 char* temp_app_id = NULL;
589 if (NULL != app_id && strcmp("#NULL", app_id)) {
590 temp_app_id = strdup(app_id);
592 MAS_LOGD("[IN] mas set preprocessing allow mode : pid(%d), mode(%d), app_id(%s)", pid, mode, temp_app_id);
593 ret = mas_client_set_preprocessing_allow_mode(pid, mode, temp_app_id);
594 if (NULL != temp_app_id)
604 int ma_service_dbus_send_preprocessing_result(DBusConnection* conn, DBusMessage* msg)
607 dbus_error_init(&err);
613 dbus_message_get_args(msg, &err,
614 DBUS_TYPE_INT32, &pid,
615 DBUS_TYPE_INT32, &result,
618 MAS_LOGD("[DEBUG] MAS SEND PREPROCESSING RESULT");
620 if (dbus_error_is_set(&err)) {
621 MAS_LOGE("[IN ERROR] mas send preprocessing result : Get arguments error (%s)", err.message);
622 dbus_error_free(&err);
623 ret = -1; //MAS_ERROR_OPERATION_FAILED;
625 MAS_LOGD("[IN] mas send preprocessing result : pid(%d), result(%d)", pid, result);
626 ret = mas_client_send_preprocessing_result(pid, (bool)result);
635 int ma_service_dbus_set_wake_word_audio_require_flag(DBusConnection* conn, DBusMessage* msg)
638 dbus_error_init(&err);
644 dbus_message_get_args(msg, &err,
645 DBUS_TYPE_INT32, &pid,
646 DBUS_TYPE_INT32, &require,
649 MAS_LOGD("[DEBUG] MAS SET WAKE WORD AUDIO REQUIRE FLAG");
651 if (dbus_error_is_set(&err)) {
652 MAS_LOGE("[IN ERROR] mas set wake word audio require flag : Get arguments error (%s)", err.message);
653 dbus_error_free(&err);
654 ret = -1; //MAS_ERROR_OPERATION_FAILED;
656 MAS_LOGD("[IN] mas set wake word audio require flag : pid(%d), require(%d)", pid, require);
657 ret = mas_client_set_wake_word_audio_require_flag(pid, (bool)require);
666 int ma_service_dbus_set_assistant_language(DBusConnection* conn, DBusMessage* msg)
669 dbus_error_init(&err);
675 dbus_message_get_args(msg, &err,
676 DBUS_TYPE_INT32, &pid,
677 DBUS_TYPE_STRING, &language,
680 MAS_LOGD("[DEBUG] MAS SET ASSISTANT LANGUAGE");
682 if (dbus_error_is_set(&err)) {
683 MAS_LOGE("[IN ERROR] mas set assistant language : Get arguments error (%s)", err.message);
684 dbus_error_free(&err);
685 ret = -1; //MAS_ERROR_OPERATION_FAILED;
687 MAS_LOGD("[IN] mas set assistant language : pid(%d), language(%s)", pid, language);
688 ret = mas_client_set_assistant_language(pid, language);
697 int ma_service_ui_dbus_initialize(DBusConnection* conn, DBusMessage* msg)
700 dbus_error_init(&err);
705 dbus_message_get_args(msg, &err,
706 DBUS_TYPE_INT32, &pid,
709 MAS_LOGD("[DEBUG] MAS UI INITIALIZE");
711 if (dbus_error_is_set(&err)) {
712 MAS_LOGE("[IN ERROR] mas ui initialize : get arguments error (%s)", err.message);
713 dbus_error_free(&err);
714 ret = -1; //MAS_ERROR_OPERATION_FAILED;
716 MAS_LOGD("[IN] mas ui initialize : pid(%d)", pid);
717 ret = mas_ui_client_initialize(pid);
721 reply = dbus_message_new_method_return(msg);
723 MAS_LOGD("[OUT] mas ui initialize : result(%d)", ret);
725 dbus_message_append_args(reply,
726 DBUS_TYPE_INT32, &ret,
730 MAS_LOGD("[OUT] mas ui initialize : result(%d)", ret);
732 MAS_LOGE("[OUT ERROR] mas ui initialize : result(%d)", ret);
735 if (!dbus_connection_send(conn, reply, NULL)) {
736 MAS_LOGE("[OUT ERROR] mas ui initialize : Out Of Memory!");
739 dbus_connection_flush(conn);
740 dbus_message_unref(reply);
742 MAS_LOGE("[OUT ERROR] mas ui initialize : Fail to create reply message!!");
748 int ma_service_ui_dbus_deinitialize(DBusConnection* conn, DBusMessage* msg)
751 dbus_error_init(&err);
756 dbus_message_get_args(msg, &err,
757 DBUS_TYPE_INT32, &pid,
760 MAS_LOGD("[DEBUG] MAS UI DEINITIALIZE");
762 if (dbus_error_is_set(&err)) {
763 MAS_LOGE("[IN ERROR] mas ui deinitialize : get arguments error (%s)", err.message);
764 dbus_error_free(&err);
765 ret = -1; //MAS_ERROR_OPERATION_FAILED;
767 MAS_LOGD("[IN] mas ui deinitialize : pid(%d)", pid);
768 ret = mas_ui_client_deinitialize(pid);
772 reply = dbus_message_new_method_return(msg);
774 MAS_LOGD("[OUT] mas ui deinitialize : result(%d)", ret);
776 dbus_message_append_args(reply,
777 DBUS_TYPE_INT32, &ret,
781 MAS_LOGD("[OUT] mas ui deinitialize : result(%d)", ret);
783 MAS_LOGE("[OUT ERROR] mas ui deinitialize : result(%d)", ret);
786 if (!dbus_connection_send(conn, reply, NULL)) {
787 MAS_LOGE("[OUT ERROR] mas ui deinitialize : Out Of Memory!");
790 dbus_connection_flush(conn);
791 dbus_message_unref(reply);
793 MAS_LOGE("[OUT ERROR] mas ui deinitialize : Fail to create reply message!!");
799 int ma_service_ui_dbus_change_assistant(DBusConnection* conn, DBusMessage* msg)
802 dbus_error_init(&err);
807 dbus_message_get_args(msg, &err,
808 DBUS_TYPE_STRING, &app_id,
811 MAS_LOGD("[DEBUG] MAS UI CHANGE ASSISTANT : %s", (app_id ? app_id : "NULL"));
813 if (dbus_error_is_set(&err)) {
814 MAS_LOGE("[IN ERROR] mas ui change assisant : Get arguments error (%s)", err.message);
815 dbus_error_free(&err);
816 ret = -1; //MAS_ERROR_OPERATION_FAILED;
818 MAS_LOGD("[IN] mas ui change assisant : app_id(%s)", app_id);
819 ret = mas_ui_client_change_assistant(app_id);
823 reply = dbus_message_new_method_return(msg);
826 dbus_message_append_args(reply,
827 DBUS_TYPE_INT32, &ret,
831 MAS_LOGD("[OUT] mas ui change assisant : result(%d)", ret);
833 MAS_LOGE("[OUT ERROR] mas ui change assisant : result(%d)", ret);
836 if (!dbus_connection_send(conn, reply, NULL)) {
837 MAS_LOGE("[OUT ERROR] mas ui change assisant : Out Of Memory!");
840 dbus_connection_flush(conn);
841 dbus_message_unref(reply);
843 MAS_LOGE("[OUT ERROR] mas ui change assisant : Fail to create reply message!!");