2 * Copyright (c) 2011-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (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://www.apache.org/licenses/LICENSE-2.0
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.
19 #include "vc_mgr_client.h"
25 vc_mgr_all_result_cb all_result_cb;
26 void* all_result_user_data;
27 vc_result_cb result_cb;
28 void* result_user_data;
29 vc_mgr_pre_result_cb pre_result_cb;
30 void* pre_result_user_data;
33 void* error_user_data;
34 vc_service_state_changed_cb service_state_changed_cb;
35 void* service_state_changed_user_data;
36 vc_state_changed_cb state_changed_cb;
37 void* state_changed_user_data;
38 vc_mgr_begin_speech_detected_cb speech_detected_cb;
39 void* speech_detected_user_data;
40 vc_current_language_changed_cb current_lang_changed_cb;
41 void* current_lang_changed_user_data;
42 vc_mgr_dialog_request_cb dialog_request_cb;
43 void* dialog_request_user_data;
44 vc_mgr_private_data_set_cb private_data_set_cb;
45 void* private_data_set_user_data;
46 vc_mgr_private_data_requested_cb private_data_requested_cb;
47 void* private_data_requested_user_data;
48 vc_mgr_specific_engine_result_cb specific_engine_result_cb;
49 void* specific_engine_result_user_data;
51 /* for TTS feedback */
52 vc_mgr_feedback_audio_format_cb feedback_audio_format_cb;
53 void* feedback_audio_format_user_data;
54 vc_mgr_feedback_streaming_cb feedback_streaming_cb;
55 void* feedback_streaming_user_data;
56 vc_mgr_vc_tts_streaming_cb vc_tts_streaming_cb;
57 void* vc_tts_streaming_user_data;
60 vc_result_event_e all_result_event;
61 char* all_result_text;
63 /* exclusive command flag */
64 bool exclusive_cmd_option;
71 vc_service_state_e service_state;
73 vc_internal_state_e internal_state;
76 vc_state_e previous_state;
77 vc_state_e current_state;
80 char* previous_language;
81 char* current_language;
86 /* disabled command type */
87 int disabled_cmd_type;
89 /* recognition mode */
90 vc_recognition_mode_e recognition_mode;
100 GSList* authorized_client_list;
101 int valid_authorized_pid;
102 bool start_by_client;
107 /* multi-assistant */
108 vc_audio_streaming_mode_e streaming_mode;
113 } vc_authorized_client_s;
115 static vc_mgr_client_s *g_mgr_client = NULL;
117 int vc_mgr_client_create()
119 if (NULL != g_mgr_client) {
120 SLOG(LOG_WARN, TAG_VCM, "[WARNING] A manager client is already exist.");
121 return VC_ERROR_NONE;
124 g_mgr_client = (vc_mgr_client_s*)calloc(1, sizeof(vc_mgr_client_s));
125 if (NULL == g_mgr_client) {
126 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to allocate memory");
127 return VC_ERROR_OUT_OF_MEMORY;
130 /* initialize client data */
131 g_mgr_client->pid = getpid();
133 g_mgr_client->all_result_cb = NULL;
134 g_mgr_client->all_result_user_data = NULL;
135 g_mgr_client->result_cb = NULL;
136 g_mgr_client->result_user_data = NULL;
137 g_mgr_client->pre_result_cb = NULL;
138 g_mgr_client->pre_result_user_data = NULL;
140 g_mgr_client->error_cb = NULL;
141 g_mgr_client->error_user_data = NULL;
142 g_mgr_client->service_state_changed_cb = NULL;
143 g_mgr_client->service_state_changed_user_data = NULL;
144 g_mgr_client->state_changed_cb = NULL;
145 g_mgr_client->state_changed_user_data = NULL;
146 g_mgr_client->speech_detected_cb = NULL;
147 g_mgr_client->speech_detected_user_data = NULL;
148 g_mgr_client->current_lang_changed_cb = NULL;
149 g_mgr_client->current_lang_changed_user_data = NULL;
150 g_mgr_client->dialog_request_cb = NULL;
151 g_mgr_client->dialog_request_user_data = NULL;
152 g_mgr_client->private_data_set_cb = NULL;
153 g_mgr_client->private_data_set_user_data = NULL;
154 g_mgr_client->private_data_requested_cb = NULL;
155 g_mgr_client->private_data_requested_user_data = NULL;
156 g_mgr_client->specific_engine_result_cb = NULL;
157 g_mgr_client->specific_engine_result_user_data = NULL;
159 g_mgr_client->feedback_audio_format_cb = NULL;
160 g_mgr_client->feedback_audio_format_user_data = NULL;
161 g_mgr_client->feedback_streaming_cb = NULL;
162 g_mgr_client->feedback_streaming_user_data = NULL;
163 g_mgr_client->vc_tts_streaming_cb = NULL;
164 g_mgr_client->vc_tts_streaming_user_data = NULL;
166 g_mgr_client->exclusive_cmd_option = false;
168 g_mgr_client->all_result_event = 0;
169 g_mgr_client->all_result_text = NULL;
171 g_mgr_client->result_event = -1;
172 g_mgr_client->result_text = NULL;
174 g_mgr_client->service_state = VC_SERVICE_STATE_NONE;
176 g_mgr_client->internal_state = VC_INTERNAL_STATE_NONE;
178 g_mgr_client->previous_state = VC_STATE_INITIALIZED;
179 g_mgr_client->current_state = VC_STATE_INITIALIZED;
181 g_mgr_client->previous_language = NULL;
182 g_mgr_client->current_language = NULL;
184 g_mgr_client->audio_id = NULL;
185 g_mgr_client->recognition_mode = VC_RECOGNITION_MODE_STOP_BY_SILENCE;
187 g_mgr_client->reason = 0;
188 g_mgr_client->err_msg = NULL;
190 g_mgr_client->cb_ref_count = 0;
192 g_mgr_client->disabled_cmd_type = 0x00;
195 g_mgr_client->authorized_client_list = NULL;
196 g_mgr_client->valid_authorized_pid = -1;
197 g_mgr_client->start_by_client = false;
199 g_mgr_client->foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
201 g_mgr_client->streaming_mode = VC_AUDIO_STREAMING_MODE_VC_SERVICE;
203 return VC_ERROR_NONE;
206 int vc_mgr_client_destroy()
208 if (NULL == g_mgr_client) {
209 SLOG(LOG_ERROR, TAG_VCM, "A manager client is already NULL"); //LCOV_EXCL_LINE
210 return VC_ERROR_NONE;
213 while (0 != g_mgr_client->cb_ref_count) {
214 /* wait for release callback function */
218 if (NULL != g_mgr_client->audio_id) {
219 free(g_mgr_client->audio_id);
222 if (NULL != g_mgr_client->all_result_text) {
223 free(g_mgr_client->all_result_text);
226 if (NULL != g_mgr_client->err_msg) {
227 free(g_mgr_client->err_msg);
233 return VC_ERROR_NONE;
236 bool vc_mgr_client_is_valid()
239 if (NULL == g_mgr_client) {
240 SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] manager client not allocated");
247 int vc_mgr_client_get_pid(int* pid)
250 if (NULL == g_mgr_client) {
251 SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] manager client not allocated");
252 return VC_ERROR_OPERATION_FAILED;
255 *pid = g_mgr_client->pid;
256 return VC_ERROR_NONE;
259 /* set/get callback function */
260 int vc_mgr_client_set_all_result_cb(vc_mgr_all_result_cb callback, void* user_data)
263 if (NULL == g_mgr_client)
264 return VC_ERROR_OPERATION_FAILED;
266 g_mgr_client->all_result_cb = callback;
267 g_mgr_client->all_result_user_data = user_data;
269 return VC_ERROR_NONE;
272 int vc_mgr_client_get_all_result_cb(vc_mgr_all_result_cb* callback, void** user_data)
275 if (NULL == g_mgr_client)
276 return VC_ERROR_OPERATION_FAILED;
278 *callback = g_mgr_client->all_result_cb;
279 *user_data = g_mgr_client->all_result_user_data;
281 return VC_ERROR_NONE;
284 int vc_mgr_client_set_result_cb(vc_result_cb callback, void* user_data)
287 if (NULL == g_mgr_client)
288 return VC_ERROR_OPERATION_FAILED;
290 g_mgr_client->result_cb = callback;
291 g_mgr_client->result_user_data = user_data;
293 return VC_ERROR_NONE;
296 int vc_mgr_client_get_result_cb(vc_result_cb* callback, void** user_data)
299 if (NULL == g_mgr_client)
300 return VC_ERROR_OPERATION_FAILED;
302 *callback = g_mgr_client->result_cb;
303 *user_data = g_mgr_client->result_user_data;
305 return VC_ERROR_NONE;
308 int vc_mgr_client_set_pre_result_cb(vc_mgr_pre_result_cb callback, void* user_data)
311 if (NULL == g_mgr_client)
312 return VC_ERROR_OPERATION_FAILED;
314 g_mgr_client->pre_result_cb = callback;
315 g_mgr_client->pre_result_user_data = user_data;
317 return VC_ERROR_NONE;
320 int vc_mgr_client_get_pre_result_cb(vc_mgr_pre_result_cb* callback, void** user_data)
323 if (NULL == g_mgr_client)
324 return VC_ERROR_OPERATION_FAILED;
326 *callback = g_mgr_client->pre_result_cb;
327 *user_data = g_mgr_client->pre_result_user_data;
329 return VC_ERROR_NONE;
332 int vc_mgr_client_set_service_state_changed_cb(vc_service_state_changed_cb callback, void* user_data)
335 if (NULL == g_mgr_client)
336 return VC_ERROR_OPERATION_FAILED;
338 g_mgr_client->service_state_changed_cb = callback;
339 g_mgr_client->service_state_changed_user_data = user_data;
341 return VC_ERROR_NONE;
344 int vc_mgr_client_get_service_state_changed_cb(vc_service_state_changed_cb* callback, void** user_data)
347 if (NULL == g_mgr_client)
348 return VC_ERROR_OPERATION_FAILED;
350 *callback = g_mgr_client->service_state_changed_cb;
351 *user_data = g_mgr_client->service_state_changed_user_data;
353 return VC_ERROR_NONE;
356 int vc_mgr_client_set_state_changed_cb(vc_state_changed_cb callback, void* user_data)
359 if (NULL == g_mgr_client)
360 return VC_ERROR_OPERATION_FAILED;
362 g_mgr_client->state_changed_cb = callback;
363 g_mgr_client->state_changed_user_data = user_data;
365 return VC_ERROR_NONE;
368 int vc_mgr_client_get_state_changed_cb(vc_state_changed_cb* callback, void** user_data)
371 if (NULL == g_mgr_client)
372 return VC_ERROR_OPERATION_FAILED;
374 *callback = g_mgr_client->state_changed_cb;
375 *user_data = g_mgr_client->state_changed_user_data;
377 return VC_ERROR_NONE;
380 int vc_mgr_client_set_speech_detected_cb(vc_mgr_begin_speech_detected_cb callback, void* user_data)
383 if (NULL == g_mgr_client)
384 return VC_ERROR_OPERATION_FAILED;
386 g_mgr_client->speech_detected_cb = callback;
387 g_mgr_client->speech_detected_user_data = user_data;
389 return VC_ERROR_NONE;
392 int vc_mgr_client_get_speech_detected_cb(vc_mgr_begin_speech_detected_cb* callback, void** user_data)
395 if (NULL == g_mgr_client)
396 return VC_ERROR_OPERATION_FAILED;
398 *callback = g_mgr_client->speech_detected_cb;
399 *user_data = g_mgr_client->speech_detected_user_data;
401 return VC_ERROR_NONE;
404 int vc_mgr_client_set_current_lang_changed_cb(vc_current_language_changed_cb callback, void* user_data)
407 if (NULL == g_mgr_client)
408 return VC_ERROR_OPERATION_FAILED;
410 g_mgr_client->current_lang_changed_cb = callback;
411 g_mgr_client->current_lang_changed_user_data = user_data;
413 return VC_ERROR_NONE;
416 int vc_mgr_client_get_current_lang_changed_cb(vc_current_language_changed_cb* callback, void** user_data)
419 if (NULL == g_mgr_client)
420 return VC_ERROR_OPERATION_FAILED;
422 *callback = g_mgr_client->current_lang_changed_cb;
423 *user_data = g_mgr_client->current_lang_changed_user_data;
425 return VC_ERROR_NONE;
428 int vc_mgr_client_set_error_cb(vc_error_cb callback, void* user_data)
431 if (NULL == g_mgr_client)
432 return VC_ERROR_OPERATION_FAILED;
434 g_mgr_client->error_cb = callback;
435 g_mgr_client->error_user_data = user_data;
437 return VC_ERROR_NONE;
440 int vc_mgr_client_get_error_cb(vc_error_cb* callback, void** user_data)
443 if (NULL == g_mgr_client)
444 return VC_ERROR_OPERATION_FAILED;
446 *callback = g_mgr_client->error_cb;
447 *user_data = g_mgr_client->error_user_data;
449 return VC_ERROR_NONE;
452 int vc_mgr_client_set_dialog_request_cb(vc_mgr_dialog_request_cb callback, void* user_data)
455 if (NULL == g_mgr_client)
456 return VC_ERROR_OPERATION_FAILED;
458 g_mgr_client->dialog_request_cb = callback;
459 g_mgr_client->dialog_request_user_data = user_data;
461 return VC_ERROR_NONE;
464 int vc_mgr_client_get_dialog_request_cb(vc_mgr_dialog_request_cb* callback, void** user_data)
467 if (NULL == g_mgr_client)
468 return VC_ERROR_OPERATION_FAILED;
470 *callback = g_mgr_client->dialog_request_cb;
471 *user_data = g_mgr_client->dialog_request_user_data;
473 return VC_ERROR_NONE;
477 int vc_mgr_client_set_private_data_set_cb(vc_mgr_private_data_set_cb callback, void* user_data)
480 if (NULL == g_mgr_client)
481 return VC_ERROR_OPERATION_FAILED;
483 g_mgr_client->private_data_set_cb = callback;
484 g_mgr_client->private_data_set_user_data = user_data;
486 return VC_ERROR_NONE;
489 int vc_mgr_client_get_private_data_set_cb(vc_mgr_private_data_set_cb* callback, void** user_data)
492 if (NULL == g_mgr_client)
493 return VC_ERROR_OPERATION_FAILED;
495 *callback = g_mgr_client->private_data_set_cb;
496 *user_data = g_mgr_client->private_data_set_user_data;
498 return VC_ERROR_NONE;
501 int vc_mgr_client_set_private_data_requested_cb(vc_mgr_private_data_requested_cb callback, void* user_data)
504 if (NULL == g_mgr_client)
505 return VC_ERROR_OPERATION_FAILED;
507 g_mgr_client->private_data_requested_cb = callback;
508 g_mgr_client->private_data_requested_user_data = user_data;
510 return VC_ERROR_NONE;
513 int vc_mgr_client_get_private_data_requested_cb(vc_mgr_private_data_requested_cb* callback, void** user_data)
516 if (NULL == g_mgr_client)
517 return VC_ERROR_OPERATION_FAILED;
519 *callback = g_mgr_client->private_data_requested_cb;
520 *user_data = g_mgr_client->private_data_requested_user_data;
522 return VC_ERROR_NONE;
525 int vc_mgr_client_set_feedback_audio_format_cb(vc_mgr_feedback_audio_format_cb callback, void* user_data)
528 if (NULL == g_mgr_client)
529 return VC_ERROR_OPERATION_FAILED;
531 g_mgr_client->feedback_audio_format_cb = callback;
532 g_mgr_client->feedback_audio_format_user_data = user_data;
534 return VC_ERROR_NONE;
537 int vc_mgr_client_get_feedback_audio_format_cb(vc_mgr_feedback_audio_format_cb* callback, void** user_data)
540 if (NULL == g_mgr_client)
541 return VC_ERROR_OPERATION_FAILED;
543 *callback = g_mgr_client->feedback_audio_format_cb;
544 *user_data = g_mgr_client->feedback_audio_format_user_data;
546 return VC_ERROR_NONE;
549 int vc_mgr_client_set_feedback_streaming_cb(vc_mgr_feedback_streaming_cb callback, void* user_data)
552 if (NULL == g_mgr_client)
553 return VC_ERROR_OPERATION_FAILED;
555 g_mgr_client->feedback_streaming_cb = callback;
556 g_mgr_client->feedback_streaming_user_data = user_data;
558 return VC_ERROR_NONE;
561 int vc_mgr_client_get_feedback_streaming_cb(vc_mgr_feedback_streaming_cb* callback, void** user_data)
564 if (NULL == g_mgr_client)
565 return VC_ERROR_OPERATION_FAILED;
567 *callback = g_mgr_client->feedback_streaming_cb;
568 *user_data = g_mgr_client->feedback_streaming_user_data;
570 return VC_ERROR_NONE;
573 int vc_mgr_client_set_vc_tts_streaming_cb(vc_mgr_vc_tts_streaming_cb callback, void* user_data)
576 if (NULL == g_mgr_client)
577 return VC_ERROR_OPERATION_FAILED;
579 g_mgr_client->vc_tts_streaming_cb = callback;
580 g_mgr_client->vc_tts_streaming_user_data = user_data;
582 return VC_ERROR_NONE;
585 int vc_mgr_client_get_vc_tts_streaming_cb(vc_mgr_vc_tts_streaming_cb* callback, void** user_data)
588 if (NULL == g_mgr_client)
589 return VC_ERROR_OPERATION_FAILED;
591 *callback = g_mgr_client->vc_tts_streaming_cb;
592 *user_data = g_mgr_client->vc_tts_streaming_user_data;
594 return VC_ERROR_NONE;
598 int vc_mgr_client_set_service_state(vc_service_state_e state)
601 if (NULL == g_mgr_client)
602 return VC_ERROR_OPERATION_FAILED;
604 g_mgr_client->service_state = state;
606 return VC_ERROR_NONE;
609 int vc_mgr_client_get_service_state(vc_service_state_e* state)
612 if (NULL == g_mgr_client)
613 return VC_ERROR_OPERATION_FAILED;
615 *state = g_mgr_client->service_state;
617 return VC_ERROR_NONE;
620 int vc_mgr_client_set_internal_state(vc_internal_state_e state)
623 if (NULL == g_mgr_client)
624 return VC_ERROR_OPERATION_FAILED;
626 g_mgr_client->internal_state = state;
628 return VC_ERROR_NONE;
631 int vc_mgr_client_get_internal_state(vc_internal_state_e* state)
634 if (NULL == g_mgr_client)
635 return VC_ERROR_OPERATION_FAILED;
637 *state = g_mgr_client->internal_state;
639 return VC_ERROR_NONE;
642 int vc_mgr_client_set_client_state(vc_state_e state)
645 if (NULL == g_mgr_client)
646 return VC_ERROR_OPERATION_FAILED;
648 g_mgr_client->previous_state = g_mgr_client->current_state;
649 g_mgr_client->current_state = state;
651 return VC_ERROR_NONE;
654 int vc_mgr_client_get_client_state(vc_state_e* state)
657 if (NULL == g_mgr_client)
658 return VC_ERROR_OPERATION_FAILED;
660 *state = g_mgr_client->current_state;
662 return VC_ERROR_NONE;
665 int vc_mgr_client_get_previous_state(vc_state_e* state, vc_state_e* previous_state)
668 if (NULL == g_mgr_client)
669 return VC_ERROR_OPERATION_FAILED;
671 *previous_state = g_mgr_client->previous_state;
672 *state = g_mgr_client->current_state;
674 return VC_ERROR_NONE;
677 int vc_mgr_client_set_error(int reason)
680 if (NULL == g_mgr_client)
681 return VC_ERROR_OPERATION_FAILED;
683 g_mgr_client->reason = reason;
685 return VC_ERROR_NONE;
688 int vc_mgr_client_get_error(int* reason)
691 if (NULL == g_mgr_client)
692 return VC_ERROR_OPERATION_FAILED;
694 *reason = g_mgr_client->reason;
696 return VC_ERROR_NONE;
699 int vc_mgr_client_set_error_message(const char* err_msg)
702 if (NULL == g_mgr_client)
703 return VC_ERROR_OPERATION_FAILED;
705 if (NULL != g_mgr_client->err_msg) {
706 free(g_mgr_client->err_msg);
707 g_mgr_client->err_msg = NULL;
710 if (NULL != err_msg) {
711 g_mgr_client->err_msg = strdup(err_msg);
712 if (NULL == g_mgr_client->err_msg) {
713 return VC_ERROR_OUT_OF_MEMORY;
717 return VC_ERROR_NONE;
720 int vc_mgr_client_get_error_message(char** err_msg)
723 if (NULL == g_mgr_client)
724 return VC_ERROR_OPERATION_FAILED;
726 if (NULL != g_mgr_client->err_msg) {
727 *err_msg = strdup(g_mgr_client->err_msg);
728 if (NULL == *err_msg) {
729 return VC_ERROR_OUT_OF_MEMORY;
733 return VC_ERROR_NONE;
736 int vc_mgr_client_enable_command_type(vc_cmd_type_e cmd_type)
738 SLOG(LOG_INFO, TAG_VCM, "[Manager INFO] enable command type (%d)", cmd_type);
741 if (NULL == g_mgr_client)
742 return VC_ERROR_OPERATION_FAILED;
744 g_mgr_client->disabled_cmd_type &= ~(1 << cmd_type);
746 return VC_ERROR_NONE;
749 int vc_mgr_client_disable_command_type(vc_cmd_type_e cmd_type)
751 SLOG(LOG_INFO, TAG_VCM, "[Manager INFO] disable command type (%d)", cmd_type);
754 if (NULL == g_mgr_client)
755 return VC_ERROR_OPERATION_FAILED;
757 g_mgr_client->disabled_cmd_type |= (1 << cmd_type);
759 return VC_ERROR_NONE;
762 int vc_mgr_client_get_disabled_command_type(int* disabled_cmd_type)
764 SLOG(LOG_INFO, TAG_VCM, "[Manager INFO] get disabled command type");
767 if (NULL == g_mgr_client)
768 return VC_ERROR_OPERATION_FAILED;
770 *disabled_cmd_type = g_mgr_client->disabled_cmd_type;
772 return VC_ERROR_NONE;
775 int vc_mgr_client_set_exclusive_command(bool value)
778 if (NULL == g_mgr_client)
779 return VC_ERROR_OPERATION_FAILED;
781 g_mgr_client->exclusive_cmd_option = value;
783 return VC_ERROR_NONE;
786 bool vc_mgr_client_get_exclusive_command()
789 if (NULL == g_mgr_client)
790 return VC_ERROR_OPERATION_FAILED;
792 return g_mgr_client->exclusive_cmd_option;
795 int vc_mgr_client_set_all_result(int event, const char* result_text)
798 if (NULL == g_mgr_client)
799 return VC_ERROR_OPERATION_FAILED;
801 g_mgr_client->all_result_event = event;
803 if (NULL != g_mgr_client->all_result_text) {
804 free(g_mgr_client->all_result_text);
805 g_mgr_client->all_result_text = NULL;
807 if (NULL != result_text) {
808 g_mgr_client->all_result_text = strdup(result_text);
811 return VC_ERROR_NONE;
814 int vc_mgr_client_get_all_result(int* event, char** result_text)
817 if (NULL == g_mgr_client)
818 return VC_ERROR_OPERATION_FAILED;
820 *event = g_mgr_client->all_result_event;
821 if (NULL != result_text) {
822 if (NULL != g_mgr_client->all_result_text) {
823 *result_text = strdup(g_mgr_client->all_result_text);
827 return VC_ERROR_NONE;
830 int vc_mgr_client_unset_all_result()
833 if (NULL == g_mgr_client)
834 return VC_ERROR_OPERATION_FAILED;
836 g_mgr_client->all_result_event = -1;
838 if (NULL != g_mgr_client->all_result_text) {
839 free(g_mgr_client->all_result_text);
840 g_mgr_client->all_result_text = NULL;
843 return VC_ERROR_NONE;
846 int vc_mgr_client_set_audio_type(const char* audio_id)
849 if (NULL == g_mgr_client)
850 return VC_ERROR_OPERATION_FAILED;
852 if (NULL != audio_id) {
853 if (NULL != g_mgr_client->audio_id) {
854 free(g_mgr_client->audio_id);
855 g_mgr_client->audio_id = NULL;
857 g_mgr_client->audio_id = strdup(audio_id);
860 return VC_ERROR_NONE;
863 int vc_mgr_client_get_audio_type(char** audio_id)
865 if (NULL == audio_id) {
866 return VC_ERROR_INVALID_PARAMETER;
870 if (NULL == g_mgr_client)
871 return VC_ERROR_OPERATION_FAILED;
873 if (NULL != g_mgr_client->audio_id)
874 *audio_id = strdup(g_mgr_client->audio_id);
878 return VC_ERROR_NONE;
881 int vc_mgr_client_set_recognition_mode(vc_recognition_mode_e mode)
884 if (NULL == g_mgr_client)
885 return VC_ERROR_OPERATION_FAILED;
887 g_mgr_client->recognition_mode = mode;
889 return VC_ERROR_NONE;
892 int vc_mgr_client_get_recognition_mode(vc_recognition_mode_e* mode)
895 return VC_ERROR_INVALID_PARAMETER;
899 if (NULL == g_mgr_client)
900 return VC_ERROR_OPERATION_FAILED;
902 *mode = g_mgr_client->recognition_mode;
903 return VC_ERROR_NONE;
906 int vc_mgr_client_set_foreground(int pid, bool value)
909 if (NULL == g_mgr_client)
910 return VC_ERROR_OPERATION_FAILED;
913 g_mgr_client->foreground_pid = pid;
915 if (pid == g_mgr_client->foreground_pid) {
916 g_mgr_client->foreground_pid = VC_RUNTIME_INFO_NO_FOREGROUND;
920 return VC_ERROR_NONE;
923 int vc_mgr_client_get_foreground(int* pid)
926 if (NULL == g_mgr_client)
927 return VC_ERROR_OPERATION_FAILED;
929 *pid = g_mgr_client->foreground_pid;
930 return VC_ERROR_NONE;
934 int vc_mgr_client_use_callback()
937 if (NULL == g_mgr_client)
938 return VC_ERROR_OPERATION_FAILED;
940 g_mgr_client->cb_ref_count++;
941 return VC_ERROR_NONE;
944 int vc_mgr_client_not_use_callback()
947 if (NULL == g_mgr_client)
948 return VC_ERROR_OPERATION_FAILED;
950 g_mgr_client->cb_ref_count--;
951 return VC_ERROR_NONE;
955 int vc_mgr_client_add_authorized_client(int pid)
958 if (NULL == g_mgr_client)
959 return VC_ERROR_OPERATION_FAILED;
961 vc_authorized_client_s *authorized_client = NULL;
963 authorized_client = (vc_authorized_client_s*)calloc(1, sizeof(vc_authorized_client_s));
964 if (NULL == authorized_client) {
965 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to make authorized client");
966 return VC_ERROR_OPERATION_FAILED;
969 authorized_client->pid = pid;
971 g_mgr_client->authorized_client_list = g_slist_append(g_mgr_client->authorized_client_list, authorized_client);
973 SLOG(LOG_DEBUG, TAG_VCM, "Add authorized client - %d", pid);
975 return VC_ERROR_NONE;
978 int vc_mgr_client_remove_authorized_client(int pid)
981 if (NULL == g_mgr_client)
982 return VC_ERROR_OPERATION_FAILED;
984 vc_authorized_client_s *data = NULL;
986 int count = g_slist_length(g_mgr_client->authorized_client_list);
989 for (i = 0; i < count; i++) {
990 data = g_slist_nth_data(g_mgr_client->authorized_client_list, i);
993 if (pid == data->pid) {
994 g_mgr_client->authorized_client_list = g_slist_remove(g_mgr_client->authorized_client_list, data);
999 SLOG(LOG_DEBUG, TAG_VCM, "Remove authorized client - %d", pid);
1000 return VC_ERROR_NONE;
1005 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] client Not found");
1007 return VC_ERROR_OPERATION_FAILED;
1010 bool vc_mgr_client_is_authorized_client(int pid)
1013 if (NULL == g_mgr_client)
1014 return VC_ERROR_OPERATION_FAILED;
1016 vc_authorized_client_s *data = NULL;
1018 int count = g_slist_length(g_mgr_client->authorized_client_list);
1021 for (i = 0; i < count; i++) {
1022 data = g_slist_nth_data(g_mgr_client->authorized_client_list, i);
1025 if (pid == data->pid) {
1026 SLOG(LOG_DEBUG, TAG_VCM, "Authorized client - %d", pid);
1032 SLOG(LOG_DEBUG, TAG_VCM, "Un-Authorized client - %d", pid);
1037 int vc_mgr_client_set_valid_authorized_client(int pid)
1040 if (NULL == g_mgr_client)
1041 return VC_ERROR_OPERATION_FAILED;
1043 g_mgr_client->valid_authorized_pid = pid;
1045 return VC_ERROR_NONE;
1048 int vc_mgr_client_get_valid_authorized_client(int* pid)
1051 if (NULL == g_mgr_client)
1052 return VC_ERROR_OPERATION_FAILED;
1054 *pid = g_mgr_client->valid_authorized_pid;
1056 return VC_ERROR_NONE;
1059 bool vc_mgr_client_is_valid_authorized_client(int pid)
1062 if (NULL == g_mgr_client)
1063 return VC_ERROR_OPERATION_FAILED;
1065 if (pid == g_mgr_client->valid_authorized_pid)
1071 int vc_mgr_client_set_start_by_client(bool option)
1074 if (NULL == g_mgr_client)
1075 return VC_ERROR_OPERATION_FAILED;
1077 g_mgr_client->start_by_client = option;
1079 return VC_ERROR_NONE;
1082 int vc_mgr_client_get_start_by_client(bool* option)
1085 if (NULL == g_mgr_client)
1086 return VC_ERROR_OPERATION_FAILED;
1088 *option = g_mgr_client->start_by_client;
1090 return VC_ERROR_NONE;
1093 int vc_mgr_client_set_specific_engine_result_cb(vc_mgr_specific_engine_result_cb callback, void* user_data)
1096 if (NULL == g_mgr_client)
1097 return VC_ERROR_OPERATION_FAILED;
1099 g_mgr_client->specific_engine_result_cb = callback;
1100 g_mgr_client->specific_engine_result_user_data = user_data;
1102 return VC_ERROR_NONE;
1105 int vc_mgr_client_get_specific_engine_result_cb(vc_mgr_specific_engine_result_cb* callback, void** user_data)
1108 if (NULL == g_mgr_client)
1109 return VC_ERROR_OPERATION_FAILED;
1111 *callback = g_mgr_client->specific_engine_result_cb;
1112 *user_data = g_mgr_client->specific_engine_result_user_data;
1114 return VC_ERROR_NONE;
1117 int vc_mgr_client_set_audio_streaming_mode(vc_audio_streaming_mode_e streaming_mode)
1120 if (NULL == g_mgr_client)
1121 return VC_ERROR_OPERATION_FAILED;
1123 g_mgr_client->streaming_mode = streaming_mode;
1125 return VC_ERROR_NONE;
1128 int vc_mgr_client_get_audio_streaming_mode(vc_audio_streaming_mode_e* streaming_mode)
1131 if (NULL == g_mgr_client)
1132 return VC_ERROR_OPERATION_FAILED;
1134 *streaming_mode = g_mgr_client->streaming_mode;
1136 return VC_ERROR_NONE;