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 <system_info.h>
21 #include "vc_cmd_db.h"
22 #include "vc_config_mgr.h"
23 #include "vc_command.h"
24 #include "vc_info_parser.h"
25 #include "vc_json_parser.h"
27 #include "vc_mgr_client.h"
28 #include "vc_mgr_dbus.h"
29 #include "voice_control.h"
30 #include "voice_control_command.h"
31 #include "voice_control_command_expand.h"
32 #include "voice_control_common.h"
33 #include "voice_control_manager.h"
36 #define VC_MANAGER_CONFIG_HANDLE 100000
38 static Ecore_Timer* g_m_connect_timer = NULL;
40 static vc_h g_vc_m = NULL;
42 static GSList* g_demandable_client_list = NULL;
44 static float g_volume_db = 0;
46 static int g_daemon_pid = 0;
48 static int g_feature_enabled = -1;
50 static bool g_err_callback_status = false;
52 static Eina_Bool __vc_mgr_notify_state_changed(void *data);
53 static Eina_Bool __vc_mgr_notify_error(void *data);
54 static Eina_Bool __vc_mgr_notify_result(void *data);
56 static const char* __vc_mgr_get_error_code(vc_error_e err)
59 case VC_ERROR_NONE: return "VC_ERROR_NONE";
60 case VC_ERROR_OUT_OF_MEMORY: return "VC_ERROR_OUT_OF_MEMORY";
61 case VC_ERROR_IO_ERROR: return "VC_ERROR_IO_ERROR";
62 case VC_ERROR_INVALID_PARAMETER: return "VC_ERROR_INVALID_PARAMETER";
63 case VC_ERROR_TIMED_OUT: return "VC_ERROR_TIMED_OUT";
64 case VC_ERROR_RECORDER_BUSY: return "VC_ERROR_RECORDER_BUSY";
65 case VC_ERROR_INVALID_STATE: return "VC_ERROR_INVALID_STATE";
66 case VC_ERROR_INVALID_LANGUAGE: return "VC_ERROR_INVALID_LANGUAGE";
67 case VC_ERROR_ENGINE_NOT_FOUND: return "VC_ERROR_ENGINE_NOT_FOUND";
68 case VC_ERROR_OPERATION_FAILED: return "VC_ERROR_OPERATION_FAILED";
69 default: return "Invalid error code";
74 static void __vc_mgr_lang_changed_cb(const char* before_lang, const char* current_lang)
76 SLOG(LOG_DEBUG, TAG_VCM, "Lang changed : Before lang(%s) Current lang(%s)",
77 before_lang, current_lang);
79 vc_current_language_changed_cb callback = NULL;
81 vc_mgr_client_get_current_lang_changed_cb(g_vc_m, &callback, &lang_user_data);
83 if (NULL != callback) {
84 vc_mgr_client_use_callback(g_vc_m);
85 callback(before_lang, current_lang, lang_user_data);
86 vc_mgr_client_not_use_callback(g_vc_m);
87 SLOG(LOG_DEBUG, TAG_VCM, "Language changed callback is called");
89 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Language changed callback is null");
95 static int __vc_mgr_get_feature_enabled()
97 if (0 == g_feature_enabled) {
98 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Voice control feature NOT supported");
99 return VC_ERROR_NOT_SUPPORTED;
100 } else if (-1 == g_feature_enabled) {
101 bool vc_supported = false;
102 bool mic_supported = false;
103 if (0 == system_info_get_platform_bool(VC_FEATURE_PATH, &vc_supported)) {
104 if (0 == system_info_get_platform_bool(VC_MIC_FEATURE_PATH, &mic_supported)) {
105 if (false == vc_supported || false == mic_supported) {
106 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Voice control feature NOT supported");
107 g_feature_enabled = 0;
108 return VC_ERROR_NOT_SUPPORTED;
111 g_feature_enabled = 1;
119 int vc_mgr_initialize()
121 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Initialize");
124 if (0 != __vc_mgr_get_feature_enabled()) {
125 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] not supported");
126 return VC_ERROR_NOT_SUPPORTED;
130 if (true == vc_mgr_client_is_valid(g_vc_m)) {
131 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Already initialized");
132 return VC_ERROR_NONE;
135 if (0 != vc_mgr_dbus_open_connection()) {
136 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to open connection");
137 return VC_ERROR_OPERATION_FAILED;
140 if (0 != vc_mgr_client_create(&g_vc_m)) {
141 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create client!!!!!");
142 return VC_ERROR_OUT_OF_MEMORY;
145 int ret = vc_config_mgr_initialize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
147 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to init config manager : %d", ret);
148 vc_mgr_client_destroy(g_vc_m);
149 return VC_ERROR_OPERATION_FAILED;
152 ret = vc_config_mgr_set_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE, __vc_mgr_lang_changed_cb);
154 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set callback : %d", ret);
155 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
156 vc_mgr_client_destroy(g_vc_m);
157 return VC_ERROR_OPERATION_FAILED;
160 ret = vc_db_initialize();
162 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to initialize DB : %d", ret);
163 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
164 vc_mgr_client_destroy(g_vc_m);
168 SLOG(LOG_DEBUG, TAG_VCM, "[Success] pid(%d)", g_vc_m->handle);
170 SLOG(LOG_DEBUG, TAG_VCM, "=====");
171 SLOG(LOG_DEBUG, TAG_VCM, " ");
173 return VC_ERROR_NONE;
176 static void __vc_mgr_internal_unprepare()
178 int ret = vc_mgr_dbus_request_finalize(g_vc_m->handle);
180 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request finalize : %s", __vc_mgr_get_error_code(ret));
185 int vc_mgr_deinitialize()
187 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Deinitialize");
189 if (false == vc_mgr_client_is_valid(g_vc_m)) {
190 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] NOT initialized");
191 SLOG(LOG_DEBUG, TAG_VCM, "=====");
192 SLOG(LOG_DEBUG, TAG_VCM, " ");
193 return VC_ERROR_INVALID_STATE;
197 vc_mgr_client_get_client_state(g_vc_m, &state);
202 __vc_mgr_internal_unprepare();
203 /* no break. need to next step*/
204 case VC_STATE_INITIALIZED:
205 if (NULL != g_m_connect_timer) {
206 SLOG(LOG_DEBUG, TAG_VCM, "Connect Timer is deleted");
207 ecore_timer_del(g_m_connect_timer);
210 vc_config_mgr_unset_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
211 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
213 /* Free client resources */
214 vc_mgr_client_destroy(g_vc_m);
221 SLOG(LOG_DEBUG, TAG_VCM, "Success: destroy");
223 int cnt = VC_COMMAND_TYPE_FOREGROUND;
225 int ret = vc_cmd_parser_delete_file(getpid(), cnt);
227 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to delete file, type(%d), ret(%d)", cnt, ret);
228 } while (VC_COMMAND_TYPE_EXCLUSIVE >= ++cnt);
230 int ret = vc_db_finalize();
232 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to finalize DB, ret(%d)", ret);
235 if (0 != vc_mgr_dbus_close_connection()) {
236 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to close connection");
239 SLOG(LOG_DEBUG, TAG_VCM, "=====");
240 SLOG(LOG_DEBUG, TAG_VCM, " ");
242 return VC_ERROR_NONE;
245 static Eina_Bool __vc_mgr_connect_daemon(void *data)
247 /* request initialization */
249 int service_state = 0;
250 int foreground = VC_RUNTIME_INFO_NO_FOREGROUND;
252 g_m_connect_timer = NULL;
254 ret = vc_mgr_dbus_request_initialize(g_vc_m->handle, &service_state, &foreground, &g_daemon_pid);
256 if (VC_ERROR_ENGINE_NOT_FOUND == ret) {
257 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to initialize : %s", __vc_mgr_get_error_code(ret));
259 vc_mgr_client_set_error(g_vc_m, VC_ERROR_ENGINE_NOT_FOUND);
260 ecore_timer_add(0, __vc_mgr_notify_error, g_vc_m);
262 SLOG(LOG_DEBUG, TAG_VCM, "=====");
263 SLOG(LOG_DEBUG, TAG_VCM, " ");
266 } else if (0 != ret) {
267 SLOG(LOG_ERROR, TAG_VCM, "[WARNING] Fail to connection. Retry to connect : %s", __vc_mgr_get_error_code(ret));
270 /* Success to connect */
273 /* Set service state */
274 vc_mgr_client_set_service_state(g_vc_m, (vc_service_state_e)service_state);
277 vc_mgr_client_set_foreground(g_vc_m, foreground, true);
279 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Connected daemon");
281 vc_mgr_client_set_client_state(g_vc_m, VC_STATE_READY);
283 vc_state_changed_cb changed_callback = NULL;
284 void* user_data = NULL;
286 vc_mgr_client_get_state_changed_cb(g_vc_m, &changed_callback, &user_data);
288 vc_state_e current_state;
289 vc_state_e before_state;
291 vc_mgr_client_get_before_state(g_vc_m, ¤t_state, &before_state);
293 if (NULL != changed_callback) {
294 vc_mgr_client_use_callback(g_vc_m);
295 changed_callback(before_state, current_state, user_data);
296 vc_mgr_client_not_use_callback(g_vc_m);
297 SLOG(LOG_DEBUG, TAG_VCM, "State changed callback is called");
299 SLOG(LOG_WARN, TAG_VCM, "[WARNING] State changed callback is null");
302 SLOG(LOG_DEBUG, TAG_VCM, "=====");
303 SLOG(LOG_DEBUG, TAG_VCM, " ");
308 static Eina_Bool __vc_mgr_prepare_daemon(void *data)
311 if (0 != vc_mgr_dbus_request_hello()) {
315 g_m_connect_timer = NULL;
316 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Connect daemon");
318 g_m_connect_timer = ecore_idler_add(__vc_mgr_connect_daemon, data);
325 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Prepare");
328 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
329 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
330 SLOG(LOG_DEBUG, TAG_VCM, "=====");
331 SLOG(LOG_DEBUG, TAG_VCM, " ");
332 return VC_ERROR_INVALID_STATE;
336 if (state != VC_STATE_INITIALIZED) {
337 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'CREATED'");
338 SLOG(LOG_DEBUG, TAG_VCM, "=====");
339 SLOG(LOG_DEBUG, TAG_VCM, " ");
340 return VC_ERROR_INVALID_STATE;
343 g_m_connect_timer = ecore_timer_add(0, __vc_mgr_prepare_daemon, NULL);
345 SLOG(LOG_DEBUG, TAG_VCM, "=====");
346 SLOG(LOG_DEBUG, TAG_VCM, " ");
348 return VC_ERROR_NONE;
351 int vc_mgr_unprepare()
353 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Unprepare");
356 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
357 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
358 SLOG(LOG_DEBUG, TAG_VCM, "=====");
359 SLOG(LOG_DEBUG, TAG_VCM, " ");
360 return VC_ERROR_INVALID_STATE;
364 if (state != VC_STATE_READY) {
365 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
366 SLOG(LOG_DEBUG, TAG_VCM, "=====");
367 SLOG(LOG_DEBUG, TAG_VCM, " ");
368 return VC_ERROR_INVALID_STATE;
371 __vc_mgr_internal_unprepare();
373 vc_mgr_client_set_client_state(g_vc_m, VC_STATE_INITIALIZED);
374 ecore_timer_add(0, __vc_mgr_notify_state_changed, g_vc_m);
376 SLOG(LOG_DEBUG, TAG_VCM, "=====");
377 SLOG(LOG_DEBUG, TAG_VCM, " ");
379 return VC_ERROR_NONE;
382 int vc_mgr_foreach_supported_languages(vc_supported_language_cb callback, void* user_data)
384 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Foreach Supported Language");
386 if (NULL == callback) {
387 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
388 SLOG(LOG_DEBUG, TAG_VCM, "=====");
389 SLOG(LOG_DEBUG, TAG_VCM, " ");
390 return VC_ERROR_INVALID_PARAMETER;
394 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
395 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
396 SLOG(LOG_DEBUG, TAG_VCM, "=====");
397 SLOG(LOG_DEBUG, TAG_VCM, " ");
398 return VC_ERROR_INVALID_STATE;
402 ret = vc_config_mgr_get_language_list(callback, user_data);
404 ret = vc_config_convert_error_code((vc_config_error_e)ret);
405 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get languages : %s", __vc_mgr_get_error_code(ret));
408 SLOG(LOG_DEBUG, TAG_VCM, "=====");
409 SLOG(LOG_DEBUG, TAG_VCM, " ");
411 return VC_ERROR_NONE;
414 int vc_mgr_get_current_language(char** language)
416 if (NULL == language) {
417 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
418 return VC_ERROR_INVALID_PARAMETER;
422 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
423 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
424 return VC_ERROR_INVALID_STATE;
428 ret = vc_config_mgr_get_default_language(language);
430 ret = vc_config_convert_error_code((vc_config_error_e)ret);
431 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get current languages : %s", __vc_mgr_get_error_code(ret));
433 SLOG(LOG_DEBUG, TAG_VCM, "[Get current language] language : %s", *language);
439 int vc_mgr_get_state(vc_state_e* state)
441 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get State");
444 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
445 return VC_ERROR_INVALID_PARAMETER;
449 if (0 != vc_mgr_client_get_client_state(g_vc_m, &temp)) {
450 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
451 SLOG(LOG_DEBUG, TAG_VCM, "=====");
452 SLOG(LOG_DEBUG, TAG_VCM, " ");
453 return VC_ERROR_INVALID_STATE;
459 case VC_STATE_NONE: SLOG(LOG_DEBUG, TAG_VCM, "Current state is 'None'"); break;
460 case VC_STATE_INITIALIZED: SLOG(LOG_DEBUG, TAG_VCM, "Current state is 'Created'"); break;
461 case VC_STATE_READY: SLOG(LOG_DEBUG, TAG_VCM, "Current state is 'Ready'"); break;
462 default: SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid state");
465 SLOG(LOG_DEBUG, TAG_VCM, "=====");
466 SLOG(LOG_DEBUG, TAG_VCM, " ");
468 return VC_ERROR_NONE;
471 int vc_mgr_get_service_state(vc_service_state_e* state)
473 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get Service State");
476 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
477 return VC_ERROR_INVALID_PARAMETER;
480 vc_state_e client_state;
481 if (0 != vc_mgr_client_get_client_state(g_vc_m, &client_state)) {
482 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
483 return VC_ERROR_INVALID_STATE;
487 if (client_state != VC_STATE_READY) {
488 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Current state is not 'READY'");
489 return VC_ERROR_INVALID_STATE;
492 /* get service state */
493 vc_service_state_e service_state;
494 if (0 != vc_mgr_client_get_service_state(g_vc_m, &service_state)) {
495 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get service state");
496 return VC_ERROR_OPERATION_FAILED;
499 *state = service_state;
502 case VC_SERVICE_STATE_NONE: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'None'"); break;
503 case VC_SERVICE_STATE_READY: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'Ready'"); break;
504 case VC_SERVICE_STATE_RECORDING: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'Recording'"); break;
505 case VC_SERVICE_STATE_PROCESSING: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'Processing'"); break;
506 default: SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid state");
509 SLOG(LOG_DEBUG, TAG_VCM, "=====");
510 SLOG(LOG_DEBUG, TAG_VCM, " ");
512 return VC_ERROR_NONE;
515 int vc_mgr_set_demandable_client_rule(const char* rule)
517 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set Demandable client rule");
520 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
521 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
522 SLOG(LOG_DEBUG, TAG_VCM, "=====");
523 SLOG(LOG_DEBUG, TAG_VCM, " ");
524 return VC_ERROR_INVALID_STATE;
528 if (state != VC_STATE_READY) {
529 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
530 SLOG(LOG_DEBUG, TAG_VCM, "=====");
531 SLOG(LOG_DEBUG, TAG_VCM, " ");
532 return VC_ERROR_INVALID_STATE;
536 ret = vc_info_parser_set_demandable_client(rule);
538 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] rule is NOT valid");
539 SLOG(LOG_DEBUG, TAG_VCM, "=====");
540 SLOG(LOG_DEBUG, TAG_VCM, " ");
541 return VC_ERROR_INVALID_PARAMETER;
544 if (0 != vc_info_parser_get_demandable_clients(&g_demandable_client_list)) {
545 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get demandable clients");
546 return VC_ERROR_OPERATION_FAILED;
549 SLOG(LOG_DEBUG, TAG_VCM, "=====");
550 SLOG(LOG_DEBUG, TAG_VCM, " ");
558 ret = vc_mgr_dbus_request_demandable_client(g_vc_m->handle);
560 if (VC_ERROR_TIMED_OUT != ret) {
561 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request set client rule to daemon : %s", __vc_mgr_get_error_code(ret));
564 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request set client rule : %s", __vc_mgr_get_error_code(ret));
567 if (VC_RETRY_COUNT == count) {
568 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
575 SLOG(LOG_DEBUG, TAG_VCM, "=====");
576 SLOG(LOG_DEBUG, TAG_VCM, " ");
582 int vc_mgr_unset_demandable_client_rule()
584 vc_info_parser_set_demandable_client(NULL);
589 ret = vc_mgr_dbus_request_demandable_client(g_vc_m->handle);
591 if (VC_ERROR_TIMED_OUT != ret) {
592 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request unset client rule to daemon : %s", __vc_mgr_get_error_code(ret));
595 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request unset client rule : %s", __vc_mgr_get_error_code(ret));
598 if (VC_RETRY_COUNT == count) {
599 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
609 int vc_mgr_is_command_format_supported(vc_cmd_format_e format, bool* support)
611 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Is command type supported");
614 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
615 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
616 SLOG(LOG_DEBUG, TAG_VCM, "=====");
617 SLOG(LOG_DEBUG, TAG_VCM, " ");
618 return VC_ERROR_INVALID_STATE;
622 bool non_fixed_support = false;
623 if (0 != vc_config_mgr_get_nonfixed_support(&non_fixed_support)) {
624 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get nonfixed support info");
628 case VC_CMD_FORMAT_FIXED: *support = true; break;
629 case VC_CMD_FORMAT_FIXED_AND_VFIXED: *support = true; break;
630 case VC_CMD_FORMAT_VFIXED_AND_FIXED: *support = true; break;
631 case VC_CMD_FORMAT_FIXED_AND_NONFIXED: *support = non_fixed_support; break;
632 case VC_CMD_FORMAT_NONFIXED_AND_FIXED: *support = non_fixed_support; break;
633 default: *support = false; break;
636 SLOG(LOG_ERROR, TAG_VCM, "[DEBUG] Format(%d) support(%s)", format, *support ? "true" : "false");
638 SLOG(LOG_DEBUG, TAG_VCM, "=====");
639 SLOG(LOG_DEBUG, TAG_VCM, " ");
641 return VC_ERROR_NONE;
644 int vc_mgr_set_command_list(vc_cmd_list_h vc_cmd_list)
646 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set Command list");
649 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
650 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
651 SLOG(LOG_DEBUG, TAG_VCM, "=====");
652 SLOG(LOG_DEBUG, TAG_VCM, " ");
653 return VC_ERROR_INVALID_STATE;
657 if (state != VC_STATE_READY) {
658 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
659 SLOG(LOG_DEBUG, TAG_VCM, "=====");
660 SLOG(LOG_DEBUG, TAG_VCM, " ");
661 return VC_ERROR_INVALID_STATE;
664 /* Check service state */
665 vc_service_state_e service_state = -1;
666 vc_mgr_client_get_service_state(g_vc_m, &service_state);
667 if (service_state != VC_SERVICE_STATE_READY) {
668 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
669 SLOG(LOG_DEBUG, TAG_VCM, "=====");
670 SLOG(LOG_DEBUG, TAG_VCM, " ");
671 return VC_ERROR_INVALID_STATE;
674 vc_cmd_list_s* list = NULL;
675 list = (vc_cmd_list_s*)vc_cmd_list;
679 bool success_save = false;
680 for (i = VC_COMMAND_TYPE_FOREGROUND; i <= VC_COMMAND_TYPE_EXCLUSIVE; i++) {
681 ret = vc_cmd_parser_delete_file(getpid(), i);
683 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to delete file, type(%d), ret(%d)", i, ret);
685 ret = vc_cmd_parser_save_file(getpid(), i, list->list, NULL);
687 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to save file, type(%d), ret(%d)", i, ret);
689 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Save file, type(%d)", i);
694 if (true != success_save) {
695 ret = VC_ERROR_INVALID_PARAMETER;
696 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to save command group : %s", __vc_mgr_get_error_code(ret));
700 ret = vc_mgr_dbus_request_set_command(g_vc_m->handle);
702 if (VC_ERROR_TIMED_OUT != ret) {
703 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request set command to daemon : %s", __vc_mgr_get_error_code(ret));
706 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request set command : %s", __vc_mgr_get_error_code(ret));
709 if (VC_RETRY_COUNT == count) {
710 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
718 SLOG(LOG_DEBUG, TAG_VCM, "=====");
719 SLOG(LOG_DEBUG, TAG_VCM, " ");
724 int vc_mgr_unset_command_list()
726 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Unset Command list");
729 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
730 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
731 return VC_ERROR_INVALID_STATE;
735 if (state != VC_STATE_READY) {
736 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Current state is not 'READY'");
737 return VC_ERROR_INVALID_STATE;
743 ret = vc_mgr_dbus_request_unset_command(g_vc_m->handle);
745 if (VC_ERROR_TIMED_OUT != ret) {
746 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request unset command to daemon : %s", __vc_mgr_get_error_code(ret));
749 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request unset command : %s", __vc_mgr_get_error_code(ret));
752 if (VC_RETRY_COUNT == count) {
753 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
761 for (i = VC_COMMAND_TYPE_FOREGROUND; i <= VC_COMMAND_TYPE_EXCLUSIVE; i++) {
762 ret = vc_cmd_parser_delete_file(getpid(), i);
764 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to delete file, type(%d), ret(%d)", i, ret);
767 SLOG(LOG_DEBUG, TAG_VCM, "=====");
768 SLOG(LOG_DEBUG, TAG_VCM, " ");
773 int vc_mgr_set_command_list_from_file(const char* file_path, int type)
775 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set Command list from file");
777 if (NULL == file_path) {
778 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid parameter!!");
779 return VC_ERROR_INVALID_PARAMETER;
781 SLOG(LOG_DEBUG, TAG_VCM, "===== File path: %s", file_path);
785 if (VC_COMMAND_TYPE_FOREGROUND > type || VC_COMMAND_TYPE_EXCLUSIVE < type) {
786 SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Invalid command type: input type is %d", type);
787 SLOG(LOG_DEBUG, TAG_VCC, "=====");
788 SLOG(LOG_DEBUG, TAG_VCC, " ");
789 return VC_ERROR_INVALID_PARAMETER;
793 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
794 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
795 return VC_ERROR_INVALID_STATE;
799 if (state != VC_STATE_READY) {
800 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
801 return VC_ERROR_INVALID_STATE;
804 /* Check service state */
805 vc_service_state_e service_state = -1;
806 vc_mgr_client_get_service_state(g_vc_m, &service_state);
807 if (service_state != VC_SERVICE_STATE_READY) {
808 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
809 return VC_ERROR_INVALID_STATE;
812 int ret = vc_cmd_parser_delete_file(getpid(), type);
814 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to delete file, type(4), ret(%d)", ret);
816 if (0 != vc_json_set_commands_from_file(file_path, type, NULL)) {
817 ret = VC_ERROR_INVALID_PARAMETER;
818 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to save command list (%d)", ret);
822 ret = vc_mgr_dbus_request_set_command(g_vc_m->handle);
824 if (VC_ERROR_TIMED_OUT != ret) {
825 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request set command to daemon : %s", __vc_mgr_get_error_code(ret));
828 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request set command : %s", __vc_mgr_get_error_code(ret));
831 if (VC_RETRY_COUNT == count) {
832 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
840 SLOG(LOG_DEBUG, TAG_VCM, "=====");
841 SLOG(LOG_DEBUG, TAG_VCM, " ");
846 int vc_mgr_set_preloaded_commands_from_file(const char* file_path)
848 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set preloaded command list");
851 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
852 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
853 return VC_ERROR_INVALID_STATE;
857 if (state != VC_STATE_READY) {
858 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
859 return VC_ERROR_INVALID_STATE;
862 /* Check service state */
863 vc_service_state_e service_state = -1;
864 vc_mgr_client_get_service_state(g_vc_m, &service_state);
865 if (service_state != VC_SERVICE_STATE_READY) {
866 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
867 return VC_ERROR_INVALID_STATE;
870 /* Only support to set background commands for preloaded application */
871 int ret = vc_json_set_commands_from_file(file_path, VC_COMMAND_TYPE_BACKGROUND, NULL);
873 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to insert preloaded commands into db");
875 SLOG(LOG_DEBUG, TAG_VCM, "=====");
876 SLOG(LOG_DEBUG, TAG_VCM, " ");
880 int vc_mgr_set_audio_type(const char* audio_id)
882 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set audio type");
884 if (NULL == audio_id) {
885 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
886 return VC_ERROR_INVALID_PARAMETER;
890 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
891 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
892 SLOG(LOG_DEBUG, TAG_VCM, "=====");
893 SLOG(LOG_DEBUG, TAG_VCM, " ");
894 return VC_ERROR_INVALID_STATE;
898 if (state != VC_STATE_READY) {
899 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
900 SLOG(LOG_DEBUG, TAG_VCM, "=====");
901 SLOG(LOG_DEBUG, TAG_VCM, " ");
902 return VC_ERROR_INVALID_STATE;
905 /* Check service state */
906 vc_service_state_e service_state = -1;
907 vc_mgr_client_get_service_state(g_vc_m, &service_state);
908 if (service_state != VC_SERVICE_STATE_READY) {
909 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
910 SLOG(LOG_DEBUG, TAG_VCM, "=====");
911 SLOG(LOG_DEBUG, TAG_VCM, " ");
912 return VC_ERROR_INVALID_STATE;
922 ret = vc_mgr_dbus_request_set_audio_type(g_vc_m->handle, audio_id);
924 if (VC_ERROR_TIMED_OUT != ret) {
925 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set audio type : %s", __vc_mgr_get_error_code(ret));
928 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry to set audio type : %s", __vc_mgr_get_error_code(ret));
931 if (VC_RETRY_COUNT == count) {
932 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
937 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set audio type");
939 vc_mgr_client_set_audio_type(g_vc_m, audio_id);
943 SLOG(LOG_DEBUG, TAG_VCM, "=====");
944 SLOG(LOG_DEBUG, TAG_VCM, " ");
949 int vc_mgr_get_audio_type(char** audio_id)
951 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get audio type");
953 if (NULL == audio_id) {
954 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
955 return VC_ERROR_INVALID_PARAMETER;
959 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
960 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
961 SLOG(LOG_DEBUG, TAG_VCM, "=====");
962 SLOG(LOG_DEBUG, TAG_VCM, " ");
963 return VC_ERROR_INVALID_STATE;
967 if (state != VC_STATE_READY) {
968 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
969 SLOG(LOG_DEBUG, TAG_VCM, "=====");
970 SLOG(LOG_DEBUG, TAG_VCM, " ");
971 return VC_ERROR_INVALID_STATE;
974 /* Check service state */
975 vc_service_state_e service_state = -1;
976 vc_mgr_client_get_service_state(g_vc_m, &service_state);
977 if (service_state != VC_SERVICE_STATE_READY) {
978 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
979 SLOG(LOG_DEBUG, TAG_VCM, "=====");
980 SLOG(LOG_DEBUG, TAG_VCM, " ");
981 return VC_ERROR_INVALID_STATE;
986 vc_mgr_client_get_audio_type(g_vc_m, &temp);
989 /* Not initiallized */
993 ret = vc_mgr_dbus_request_get_audio_type(g_vc_m->handle, &temp);
995 if (VC_ERROR_TIMED_OUT != ret) {
996 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get audio type : %s", __vc_mgr_get_error_code(ret));
999 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry to get audio type : %s", __vc_mgr_get_error_code(ret));
1002 if (VC_RETRY_COUNT == count) {
1003 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1008 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Get audio type : %s", temp);
1010 vc_mgr_client_set_audio_type(g_vc_m, temp);
1016 *audio_id = strdup(temp);
1024 int vc_mgr_get_current_commands(vc_cmd_list_h* vc_cmd_list)
1026 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Foreach current commands");
1029 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1030 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1031 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1032 SLOG(LOG_DEBUG, TAG_VCM, " ");
1033 return VC_ERROR_INVALID_STATE;
1037 if (state != VC_STATE_READY) {
1038 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1039 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1040 SLOG(LOG_DEBUG, TAG_VCM, " ");
1041 return VC_ERROR_INVALID_STATE;
1044 /* Check service state */
1045 vc_service_state_e service_state = -1;
1046 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1047 if (service_state != VC_SERVICE_STATE_READY) {
1048 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1049 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1050 SLOG(LOG_DEBUG, TAG_VCM, " ");
1051 return VC_ERROR_INVALID_STATE;
1054 if (NULL == vc_cmd_list) {
1055 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid Parameter");
1056 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1057 SLOG(LOG_DEBUG, TAG_VCM, " ");
1058 return VC_ERROR_INVALID_PARAMETER;
1061 vc_cmd_list_h temp_list = NULL;
1062 if (0 != vc_cmd_list_create(&temp_list)) {
1063 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create list");
1064 return VC_ERROR_INVALID_PARAMETER;
1067 *vc_cmd_list = temp_list;
1074 /* Get foreground pid */
1075 if (0 != vc_mgr_client_get_foreground(g_vc_m, &fg_pid)) {
1076 /* There is no foreground app for voice control */
1077 SLOG(LOG_WARN, TAG_VCM, "[Manager WARNING] No foreground pid for voice control");
1079 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Foreground pid(%d)", fg_pid);
1082 if (0 != vc_mgr_client_get_pid(g_vc_m, &mgr_pid)) {
1083 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Fail to get manager pid");
1084 return VC_ERROR_OPERATION_FAILED;
1086 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Manager pid(%d)", mgr_pid);
1089 /* Get system command */
1090 ret = vc_cmd_parser_append_commands(mgr_pid, VC_COMMAND_TYPE_SYSTEM, temp_list);
1092 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No system commands");
1099 ret = vc_mgr_dbus_request_set_client_info(g_vc_m->handle);
1101 if (VC_ERROR_TIMED_OUT != ret) {
1102 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set client info : %s", __vc_mgr_get_error_code(ret));
1105 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry to set client info : %s", __vc_mgr_get_error_code(ret));
1108 if (VC_RETRY_COUNT == count) {
1109 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1114 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set client info");
1118 GSList *iter = NULL;
1119 GSList* client_info_list = NULL;
1120 vc_client_info_s *client_info = NULL;
1121 bool is_fgpid = false;
1123 if (0 != vc_info_parser_get_client_info(&client_info_list)) {
1124 SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] No client");
1128 if (VC_NO_FOREGROUND_PID != fg_pid) {
1129 iter = g_slist_nth(client_info_list, 0);
1130 while (NULL != iter) {
1131 client_info = iter->data;
1132 if (NULL != client_info) {
1133 if (fg_pid == client_info->pid) {
1138 iter = g_slist_next(iter);
1142 /* Get foreground commands and widget */
1143 if (true == is_fgpid) {
1145 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] fore cmd(%d)", client_info->fg_cmd);
1147 /* Get foreground command */
1148 if (true == client_info->fg_cmd) {
1149 ret = vc_cmd_parser_append_commands(fg_pid, VC_COMMAND_TYPE_FOREGROUND, temp_list);
1151 SLOG(LOG_ERROR, TAG_VCM, "[Client Data ERROR] Fail to get the fg command list");
1154 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No foreground commands");
1157 /* Check exclusive option */
1158 if (true == client_info->exclusive_cmd) {
1159 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Exclusive command is ON");
1161 /* Set background command for exclusive option */
1162 if (true == client_info->bg_cmd) {
1163 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Set background command");
1164 ret = vc_cmd_parser_append_commands(client_info->pid, VC_COMMAND_TYPE_BACKGROUND, temp_list);
1166 SLOG(LOG_ERROR, TAG_VCM, "[Client Data ERROR] Fail to get the bg command list : pid(%d)", client_info->pid);
1170 /* need to release client info */
1171 iter = g_slist_nth(client_info_list, 0);
1173 while (NULL != iter) {
1174 client_info = iter->data;
1175 if (NULL != client_info) {
1178 client_info_list = g_slist_remove_link(client_info_list, iter);
1179 iter = g_slist_nth(client_info_list, 0);
1182 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1183 SLOG(LOG_DEBUG, TAG_VCM, " ");
1188 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No foreground app");
1191 /* Get background commands */
1192 if (0 < g_slist_length(client_info_list)) {
1193 iter = g_slist_nth(client_info_list, 0);
1195 while (NULL != iter) {
1196 client_info = iter->data;
1198 if (NULL != client_info) {
1199 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Pid(%d) Back cmd(%d)", client_info->pid, client_info->bg_cmd);
1200 if (true == client_info->bg_cmd) {
1201 ret = vc_cmd_parser_append_commands(client_info->pid, VC_COMMAND_TYPE_BACKGROUND, temp_list);
1203 SLOG(LOG_ERROR, TAG_VCM, "[Client Data ERROR] Fail to get the bg command list : pid(%d)", client_info->pid);
1208 client_info_list = g_slist_remove_link(client_info_list, iter);
1210 iter = g_slist_nth(client_info_list, 0);
1214 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No background commands");
1217 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1218 SLOG(LOG_DEBUG, TAG_VCM, " ");
1223 int vc_mgr_set_recognition_mode(vc_recognition_mode_e mode)
1225 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set recognition mode = %d", mode);
1228 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1229 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1230 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1231 SLOG(LOG_DEBUG, TAG_VCM, " ");
1232 return VC_ERROR_INVALID_STATE;
1236 if (state != VC_STATE_READY) {
1237 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1238 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1239 SLOG(LOG_DEBUG, TAG_VCM, " ");
1240 return VC_ERROR_INVALID_STATE;
1243 /* Check service state */
1244 vc_service_state_e service_state = -1;
1245 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1246 if (service_state != VC_SERVICE_STATE_READY) {
1247 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1248 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1249 SLOG(LOG_DEBUG, TAG_VCM, " ");
1250 return VC_ERROR_INVALID_STATE;
1253 vc_mgr_client_set_recognition_mode(g_vc_m, mode);
1257 int vc_mgr_get_recognition_mode(vc_recognition_mode_e* mode)
1261 ret = vc_mgr_client_get_recognition_mode(g_vc_m, mode);
1263 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get recognition mode");
1267 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get recognition mode = %d", *mode);
1271 int vc_mgr_set_private_data(const char* key, const char* data)
1273 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set private data");
1276 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid parameter");
1277 return VC_ERROR_INVALID_PARAMETER;
1281 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1282 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1283 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1284 SLOG(LOG_DEBUG, TAG_VCM, " ");
1285 return VC_ERROR_INVALID_STATE;
1289 if (state != VC_STATE_READY) {
1290 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1291 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1292 SLOG(LOG_DEBUG, TAG_VCM, " ");
1293 return VC_ERROR_INVALID_STATE;
1296 /* Check service state */
1297 vc_service_state_e service_state = -1;
1298 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1299 if (service_state != VC_SERVICE_STATE_READY) {
1300 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1301 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1302 SLOG(LOG_DEBUG, TAG_VCM, " ");
1303 return VC_ERROR_INVALID_STATE;
1309 ret = vc_mgr_dbus_request_set_private_data(g_vc_m->handle, key, data);
1311 if (VC_ERROR_TIMED_OUT != ret) {
1312 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to set private data request : %s", __vc_mgr_get_error_code(ret));
1315 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry set private data request : %s", __vc_mgr_get_error_code(ret));
1318 if (VC_RETRY_COUNT == count) {
1319 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1324 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set domain");
1327 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1328 SLOG(LOG_DEBUG, TAG_VCM, " ");
1333 int vc_mgr_get_private_data(const char* key, char** data)
1335 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get private data");
1337 if (NULL == key || NULL == data) {
1338 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid parameter");
1339 return VC_ERROR_INVALID_PARAMETER;
1343 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1344 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1345 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1346 SLOG(LOG_DEBUG, TAG_VCM, " ");
1347 return VC_ERROR_INVALID_STATE;
1351 if (state != VC_STATE_READY) {
1352 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1353 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1354 SLOG(LOG_DEBUG, TAG_VCM, " ");
1355 return VC_ERROR_INVALID_STATE;
1358 /* Check service state */
1359 vc_service_state_e service_state = -1;
1360 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1361 if (service_state != VC_SERVICE_STATE_READY) {
1362 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1363 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1364 SLOG(LOG_DEBUG, TAG_VCM, " ");
1365 return VC_ERROR_INVALID_STATE;
1373 ret = vc_mgr_dbus_request_get_private_data(g_vc_m->handle, key, &temp);
1375 if (VC_ERROR_TIMED_OUT != ret) {
1376 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to get private data request : %s", __vc_mgr_get_error_code(ret));
1379 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry get private data request : %s", __vc_mgr_get_error_code(ret));
1382 if (VC_RETRY_COUNT == count) {
1383 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1388 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Get private data, key(%s), data(%s)", key, temp);
1393 *data = strdup(temp);
1398 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1399 SLOG(LOG_DEBUG, TAG_VCM, " ");
1404 int vc_mgr_set_domain(const char* domain)
1406 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set domain");
1408 if (NULL == domain) {
1409 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid parameter");
1410 return VC_ERROR_INVALID_PARAMETER;
1414 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1415 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1416 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1417 SLOG(LOG_DEBUG, TAG_VCM, " ");
1418 return VC_ERROR_INVALID_STATE;
1422 if (state != VC_STATE_READY) {
1423 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1424 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1425 SLOG(LOG_DEBUG, TAG_VCM, " ");
1426 return VC_ERROR_INVALID_STATE;
1429 /* Check service state */
1430 vc_service_state_e service_state = -1;
1431 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1432 if (service_state != VC_SERVICE_STATE_READY) {
1433 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1434 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1435 SLOG(LOG_DEBUG, TAG_VCM, " ");
1436 return VC_ERROR_INVALID_STATE;
1442 ret = vc_mgr_dbus_request_set_domain(g_vc_m->handle, domain);
1444 if (VC_ERROR_TIMED_OUT != ret) {
1445 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to set domain request : %s", __vc_mgr_get_error_code(ret));
1448 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry set domain request : %s", __vc_mgr_get_error_code(ret));
1451 if (VC_RETRY_COUNT == count) {
1452 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1457 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set domain");
1460 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1461 SLOG(LOG_DEBUG, TAG_VCM, " ");
1466 int vc_mgr_do_action(vc_send_event_type_e type, char* send_event)
1468 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] do action");
1470 if (NULL == send_event) {
1471 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid parameter");
1472 return VC_ERROR_INVALID_PARAMETER;
1476 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1477 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1478 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1479 SLOG(LOG_DEBUG, TAG_VCM, " ");
1480 return VC_ERROR_INVALID_STATE;
1484 if (state != VC_STATE_READY) {
1485 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1486 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1487 SLOG(LOG_DEBUG, TAG_VCM, " ");
1488 return VC_ERROR_INVALID_STATE;
1491 /* Check service state */
1492 vc_service_state_e service_state = -1;
1493 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1494 if (service_state != VC_SERVICE_STATE_READY) {
1495 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1496 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1497 SLOG(LOG_DEBUG, TAG_VCM, " ");
1498 return VC_ERROR_INVALID_STATE;
1504 ret = vc_mgr_dbus_request_do_action(g_vc_m->handle, type, send_event);
1506 if (VC_ERROR_TIMED_OUT != ret) {
1507 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to do action request : %s", __vc_mgr_get_error_code(ret));
1510 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry do action request : %s", __vc_mgr_get_error_code(ret));
1513 if (VC_RETRY_COUNT == count) {
1514 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1519 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] do action");
1522 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1523 SLOG(LOG_DEBUG, TAG_VCM, " ");
1528 int vc_mgr_start(bool exclusive_command_option)
1530 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Request start");
1533 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1534 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1535 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1536 SLOG(LOG_DEBUG, TAG_VCM, " ");
1537 return VC_ERROR_INVALID_STATE;
1541 if (state != VC_STATE_READY) {
1542 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1543 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1544 SLOG(LOG_DEBUG, TAG_VCM, " ");
1545 return VC_ERROR_INVALID_STATE;
1548 /* Check service state */
1549 vc_service_state_e service_state = -1;
1550 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1551 if (service_state != VC_SERVICE_STATE_READY) {
1552 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1553 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1554 SLOG(LOG_DEBUG, TAG_VCM, " ");
1555 return VC_ERROR_INVALID_STATE;
1558 vc_mgr_client_set_exclusive_command(g_vc_m, exclusive_command_option);
1560 bool start_by_client = false;
1561 if (0 != vc_mgr_client_get_start_by_client(g_vc_m, &start_by_client)) {
1562 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get start by client");
1567 vc_recognition_mode_e recognition_mode = VC_RECOGNITION_MODE_STOP_BY_SILENCE;
1568 if (0 != vc_mgr_get_recognition_mode(&recognition_mode)) {
1569 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get recognition mode");
1576 ret = vc_mgr_dbus_request_start(g_vc_m->handle, (int)recognition_mode, exclusive_command_option, start_by_client);
1578 if (VC_ERROR_TIMED_OUT != ret) {
1579 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to start request start : %s", __vc_mgr_get_error_code(ret));
1582 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry start request start : %s", __vc_mgr_get_error_code(ret));
1585 if (VC_RETRY_COUNT == count) {
1586 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1587 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1592 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] start recognition");
1596 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1597 SLOG(LOG_DEBUG, TAG_VCM, " ");
1604 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Request stop");
1607 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1608 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1609 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1610 SLOG(LOG_DEBUG, TAG_VCM, " ");
1611 return VC_ERROR_INVALID_STATE;
1615 if (state != VC_STATE_READY) {
1616 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: client state is not 'READY'");
1617 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1618 SLOG(LOG_DEBUG, TAG_VCM, " ");
1619 return VC_ERROR_INVALID_STATE;
1622 /* Check service state */
1623 vc_service_state_e service_state = -1;
1624 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1625 if (service_state != VC_SERVICE_STATE_RECORDING) {
1626 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'RECORDING'");
1627 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1628 SLOG(LOG_DEBUG, TAG_VCM, " ");
1629 return VC_ERROR_INVALID_STATE;
1636 ret = vc_mgr_dbus_request_stop(g_vc_m->handle);
1638 if (VC_ERROR_TIMED_OUT != ret) {
1639 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to stop request : %s", __vc_mgr_get_error_code(ret));
1642 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry stop request : %s", __vc_mgr_get_error_code(ret));
1645 if (VC_RETRY_COUNT == count) {
1646 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1651 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Stop recognition");
1655 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1656 SLOG(LOG_DEBUG, TAG_VCM, " ");
1663 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Request cancel");
1666 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1667 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1668 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1669 SLOG(LOG_DEBUG, TAG_VCM, " ");
1670 return VC_ERROR_INVALID_STATE;
1674 if (state != VC_STATE_READY) {
1675 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: client state is not 'READY'");
1676 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1677 SLOG(LOG_DEBUG, TAG_VCM, " ");
1678 return VC_ERROR_INVALID_STATE;
1681 /* Check service state */
1682 vc_service_state_e service_state = -1;
1683 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1684 if (service_state != VC_SERVICE_STATE_RECORDING && service_state != VC_SERVICE_STATE_PROCESSING) {
1685 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'RECORDING' or 'PROCESSING'");
1686 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1687 SLOG(LOG_DEBUG, TAG_VCM, " ");
1688 return VC_ERROR_INVALID_STATE;
1694 ret = vc_mgr_dbus_request_cancel(g_vc_m->handle);
1696 if (VC_ERROR_TIMED_OUT != ret) {
1697 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to cancel request : %s", __vc_mgr_get_error_code(ret));
1700 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry cancel request : %s", __vc_mgr_get_error_code(ret));
1703 if (VC_RETRY_COUNT == count) {
1704 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1709 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Cancel recognition");
1713 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1715 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1716 SLOG(LOG_DEBUG, TAG_VCM, " ");
1721 int __vc_mgr_cb_set_volume(float volume)
1723 g_volume_db = volume;
1724 SLOG(LOG_DEBUG, TAG_VCM, "Set volume (%f)", g_volume_db);
1729 int vc_mgr_get_recording_volume(float* volume)
1731 if (NULL == volume) {
1732 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
1733 return VC_ERROR_INVALID_PARAMETER;
1736 vc_service_state_e service_state = -1;
1737 if (0 != vc_mgr_client_get_service_state(g_vc_m, &service_state)) {
1738 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1739 return VC_ERROR_INVALID_STATE;
1743 if (VC_SERVICE_STATE_RECORDING != service_state) {
1744 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Service state is not 'RECORDING'");
1745 return VC_ERROR_INVALID_STATE;
1748 *volume = g_volume_db;
1753 int __vc_mgr_cb_set_foreground(int pid, bool value)
1755 vc_mgr_client_set_foreground(g_vc_m, pid, value);
1757 /* get authorized valid app */
1759 if (0 != vc_mgr_client_get_valid_authorized_client(g_vc_m, &tmp_pid)) {
1760 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get authorized valid app");
1761 return VC_ERROR_INVALID_PARAMETER;
1764 if (true == value) {
1765 /* compare & set valid */
1766 if (tmp_pid != pid) {
1767 SLOG(LOG_DEBUG, TAG_VCM, "Authority(%d) changed to invalid", tmp_pid);
1769 /* set authorized valid */
1770 if (true == vc_mgr_client_is_authorized_client(g_vc_m, pid)) {
1771 SLOG(LOG_DEBUG, TAG_VCM, "Authority(%d) change to valid", pid);
1772 vc_mgr_client_set_valid_authorized_client(g_vc_m, pid);
1774 SLOG(LOG_DEBUG, TAG_VCM, "No valid Authority");
1775 vc_mgr_client_set_valid_authorized_client(g_vc_m, -1);
1779 if (tmp_pid == pid) {
1780 SLOG(LOG_DEBUG, TAG_VCM, "Authority(%d) changed to invalid", tmp_pid);
1781 vc_mgr_client_set_valid_authorized_client(g_vc_m, -1);
1788 int vc_mgr_set_selected_results(vc_cmd_list_h vc_cmd_list)
1790 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Select result");
1792 /* Do not check state for 'restart continusly' mode */
1794 vc_service_state_e service_state = -1;
1795 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1796 if (service_state != VC_SERVICE_STATE_PROCESSING) {
1797 vc_recognition_mode_e recognition_mode;
1798 vc_mgr_get_recognition_mode(&recognition_mode);
1800 if (VC_RECOGNITION_MODE_RESTART_CONTINUOUSLY != recognition_mode) {
1801 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'PROCESSING' and mode is not 'Restart continously'");
1802 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1803 SLOG(LOG_DEBUG, TAG_VCM, " ");
1804 return VC_ERROR_INVALID_STATE;
1808 if (NULL != vc_cmd_list) {
1810 char* result_text = NULL;
1812 vc_mgr_client_get_all_result(g_vc_m, &event, &result_text);
1814 vc_info_parser_set_result(result_text, event, NULL, vc_cmd_list, false);
1816 if (NULL != result_text) {
1829 ret = vc_mgr_dbus_send_result_selection(g_vc_m->handle);
1831 if (VC_ERROR_TIMED_OUT != ret) {
1832 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to send result selection : %s", __vc_mgr_get_error_code(ret));
1835 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry send result selection : %s", __vc_mgr_get_error_code(ret));
1838 if (VC_RETRY_COUNT == count) {
1839 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1844 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] result selection");
1848 vc_mgr_client_unset_all_result(g_vc_m);
1850 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1851 SLOG(LOG_DEBUG, TAG_VCM, " ");
1856 static Eina_Bool __vc_mgr_set_select_result(void *data)
1858 vc_mgr_set_selected_results(NULL);
1862 static void __vc_mgr_notify_all_result(vc_result_type_e result_type)
1864 char* temp_text = NULL;
1866 char* temp_message = NULL;
1867 vc_cmd_list_h vc_cmd_list = NULL;
1869 vc_mgr_all_result_cb all_callback = NULL;
1870 void* all_user_data = NULL;
1872 vc_mgr_client_get_all_result_cb(g_vc_m, &all_callback, &all_user_data);
1873 if (NULL == all_callback) {
1874 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] All result callback is NULL");
1878 if (0 != vc_cmd_list_create(&vc_cmd_list)) {
1879 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create command list");
1883 vc_info_parser_get_result(&temp_text, &event, &temp_message, -1, vc_cmd_list, vc_mgr_client_get_exclusive_command(g_vc_m));
1885 SLOG(LOG_DEBUG, TAG_VCM, "Result info : result type(%d) result text(%s) event(%d) result_message(%s)",
1886 result_type, temp_text, event, temp_message);
1888 vc_cmd_print_list(vc_cmd_list);
1892 vc_mgr_client_use_callback(g_vc_m);
1893 cb_ret = all_callback(event, vc_cmd_list, temp_text, temp_message, all_user_data);
1894 vc_mgr_client_not_use_callback(g_vc_m);
1896 if (true == vc_mgr_client_get_exclusive_command(g_vc_m)) {
1898 vc_result_cb callback = NULL;
1899 void* user_data = NULL;
1901 vc_mgr_client_get_result_cb(g_vc_m, &callback, &user_data);
1902 if (NULL == callback) {
1903 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client result callback is NULL");
1907 vc_mgr_client_use_callback(g_vc_m);
1908 callback(event, vc_cmd_list, temp_text, user_data);
1909 vc_mgr_client_not_use_callback(g_vc_m);
1910 SLOG(LOG_DEBUG, TAG_VCM, "Exclusive result callback called");
1912 /* Release result */
1913 if (NULL != temp_text) free(temp_text);
1916 vc_cmd_list_destroy(vc_cmd_list, true);
1918 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1924 vc_cmd_list_get_count(vc_cmd_list, &count);
1926 vc_mgr_client_set_all_result(g_vc_m, event, temp_text);
1927 if (true == cb_ret) {
1928 SLOG(LOG_DEBUG, TAG_VCM, "Callback result is true");
1929 if (VC_RESULT_TYPE_NOTIFICATION != result_type)
1930 ecore_idler_add(__vc_mgr_set_select_result, NULL);
1932 SLOG(LOG_DEBUG, TAG_VCM, "Callback result is false");
1933 /* need to select conflicted result */
1936 if (VC_RESULT_TYPE_NOTIFICATION != result_type)
1937 ecore_idler_add(__vc_mgr_set_select_result, NULL);
1939 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1940 vc_mgr_client_unset_all_result(g_vc_m);
1943 /* Release result */
1944 if (NULL != temp_text) {
1950 vc_cmd_list_destroy(vc_cmd_list, true);
1955 static Eina_Bool __vc_mgr_notify_result(void *data)
1957 char* temp_text = NULL;
1959 vc_cmd_list_h vc_cmd_list = NULL;
1961 vc_result_cb callback = NULL;
1962 void* user_data = NULL;
1964 vc_mgr_client_get_result_cb(g_vc_m, &callback, &user_data);
1965 if (NULL == callback) {
1966 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client result callback is NULL");
1970 if (0 != vc_cmd_list_create(&vc_cmd_list)) {
1971 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create command list");
1975 vc_info_parser_get_result(&temp_text, &event, NULL, getpid(), vc_cmd_list, false);
1977 SLOG(LOG_DEBUG, TAG_VCM, "Result : result text(%s) event(%d)", temp_text, event);
1979 vc_cmd_print_list(vc_cmd_list);
1981 vc_mgr_client_use_callback(g_vc_m);
1982 callback(event, vc_cmd_list, temp_text, user_data);
1983 vc_mgr_client_not_use_callback(g_vc_m);
1984 SLOG(LOG_DEBUG, TAG_VCM, "Result callback called");
1986 vc_cmd_list_destroy(vc_cmd_list, true);
1988 /* Release result */
1989 if (NULL != temp_text) free(temp_text);
1994 void __vc_mgr_cb_all_result(vc_result_type_e type)
1996 if (false == vc_mgr_client_get_exclusive_command(g_vc_m)) {
1997 __vc_mgr_notify_all_result(type);
1999 __vc_mgr_notify_result(0);
2005 void __vc_mgr_cb_pre_result(vc_pre_result_event_e event, const char* pre_result)
2007 vc_mgr_pre_result_cb callback = NULL;
2008 void* user_data = NULL;
2010 vc_mgr_client_get_pre_result_cb(g_vc_m, &callback, &user_data);
2011 if (NULL == callback) {
2012 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client pre result callback is NULL");
2016 vc_mgr_client_use_callback(g_vc_m);
2017 callback(event, pre_result, user_data);
2018 vc_mgr_client_not_use_callback(g_vc_m);
2019 SLOG(LOG_DEBUG, TAG_VCM, "Pre result callback is called");
2024 void __vc_mgr_cb_system_result()
2026 __vc_mgr_notify_result(NULL);
2030 static Eina_Bool __vc_mgr_speech_detected(void *data)
2032 vc_mgr_begin_speech_detected_cb callback = NULL;
2033 void* user_data = NULL;
2035 vc_mgr_client_get_speech_detected_cb(g_vc_m, &callback, &user_data);
2036 if (NULL == callback) {
2037 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client speech detected callback is NULL");
2041 vc_mgr_client_use_callback(g_vc_m);
2042 callback(user_data);
2043 vc_mgr_client_not_use_callback(g_vc_m);
2044 SLOG(LOG_DEBUG, TAG_VCM, "Speech detected callback called");
2049 void __vc_mgr_cb_speech_detected()
2051 __vc_mgr_speech_detected(NULL);
2056 int vc_mgr_set_all_result_cb(vc_mgr_all_result_cb callback, void* user_data)
2058 if (NULL == callback)
2059 return VC_ERROR_INVALID_PARAMETER;
2062 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2063 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : A handle is not available");
2064 return VC_ERROR_INVALID_STATE;
2068 if (state != VC_STATE_INITIALIZED) {
2069 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : Current state is not 'Initialized'");
2070 return VC_ERROR_INVALID_STATE;
2073 vc_mgr_client_set_all_result_cb(g_vc_m, callback, user_data);
2075 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set all result callback");
2080 int vc_mgr_unset_all_result_cb()
2083 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2084 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : A handle is not available");
2085 return VC_ERROR_INVALID_STATE;
2089 if (state != VC_STATE_INITIALIZED) {
2090 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : Current state is not 'Initialized'");
2091 return VC_ERROR_INVALID_STATE;
2094 vc_mgr_client_set_all_result_cb(g_vc_m, NULL, NULL);
2099 int vc_mgr_set_result_cb(vc_result_cb callback, void* user_data)
2101 if (NULL == callback)
2102 return VC_ERROR_INVALID_PARAMETER;
2105 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2106 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : A handle is not available");
2107 return VC_ERROR_INVALID_STATE;
2111 if (state != VC_STATE_INITIALIZED) {
2112 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : Current state is not 'Initialized'");
2113 return VC_ERROR_INVALID_STATE;
2116 vc_mgr_client_set_result_cb(g_vc_m, callback, user_data);
2121 int vc_mgr_unset_result_cb()
2124 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2125 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : A handle is not available");
2126 return VC_ERROR_INVALID_STATE;
2130 if (state != VC_STATE_INITIALIZED) {
2131 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : Current state is not 'Initialized'");
2132 return VC_ERROR_INVALID_STATE;
2135 vc_mgr_client_set_result_cb(g_vc_m, NULL, NULL);
2140 int vc_mgr_set_pre_result_cb(vc_mgr_pre_result_cb callback, void* user_data)
2142 if (NULL == callback)
2143 return VC_ERROR_INVALID_PARAMETER;
2146 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2147 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set pre result callback : A handle is not available");
2148 return VC_ERROR_INVALID_STATE;
2152 if (state != VC_STATE_INITIALIZED) {
2153 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set pre result callback : Current state is not 'Initialized'");
2154 return VC_ERROR_INVALID_STATE;
2157 vc_mgr_client_set_pre_result_cb(g_vc_m, callback, user_data);
2162 int vc_mgr_unset_pre_result_cb()
2165 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2166 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset pre result callback : A handle is not available");
2167 return VC_ERROR_INVALID_STATE;
2171 if (state != VC_STATE_INITIALIZED) {
2172 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset pre result callback : Current state is not 'Initialize'");
2173 return VC_ERROR_INVALID_STATE;
2176 vc_mgr_client_set_pre_result_cb(g_vc_m, NULL, NULL);
2181 int vc_mgr_get_error_message(char** err_msg)
2183 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get error message");
2185 if (NULL == err_msg) {
2186 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] invalid parameter");
2187 return VC_ERROR_INVALID_PARAMETER;
2190 if (false == g_err_callback_status) {
2191 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not in error callback");
2192 return VC_ERROR_OPERATION_FAILED;
2196 ret = vc_mgr_client_get_error_message(g_vc_m, err_msg);
2198 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get error message");
2201 SLOG(LOG_DEBUG, TAG_VCM, "=====");
2202 SLOG(LOG_DEBUG, TAG_VCM, " ");
2207 static Eina_Bool __vc_mgr_notify_error(void *data)
2209 vc_h vc_m = (vc_h)data;
2211 vc_error_cb callback = NULL;
2212 void* user_data = NULL;
2215 vc_mgr_client_get_error_cb(vc_m, &callback, &user_data);
2216 vc_mgr_client_get_error(vc_m, &reason);
2218 if (NULL != callback) {
2219 vc_mgr_client_use_callback(vc_m);
2220 g_err_callback_status = true;
2221 callback(reason, user_data);
2222 g_err_callback_status = false;
2223 vc_mgr_client_not_use_callback(vc_m);
2224 SLOG(LOG_DEBUG, TAG_VCM, "Error callback is called");
2226 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Error callback is null");
2232 int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg)
2235 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2236 SLOG(LOG_ERROR, TAG_VCM, "[WARNING] Invalid client");
2241 if (state != VC_STATE_READY) {
2242 SLOG(LOG_ERROR, TAG_VCM, "[WARNING] not connected client yet");
2246 if (VC_ERROR_SERVICE_RESET == reason) {
2247 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] VC daemon reset");
2249 vc_mgr_client_set_client_state(g_vc_m, VC_STATE_INITIALIZED);
2250 __vc_mgr_notify_state_changed(g_vc_m);
2252 if (0 != vc_mgr_prepare()) {
2253 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to prepare");
2257 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Error reason(%d), msg(%s)", reason, msg);
2259 vc_mgr_client_set_error(g_vc_m, reason);
2260 vc_mgr_client_set_error_message(g_vc_m, msg);
2261 __vc_mgr_notify_error(g_vc_m);
2266 static Eina_Bool __vc_mgr_notify_state_changed(void *data)
2268 vc_state_changed_cb changed_callback = NULL;
2271 vc_mgr_client_get_state_changed_cb(g_vc_m, &changed_callback, &user_data);
2273 vc_state_e current_state;
2274 vc_state_e before_state;
2276 vc_mgr_client_get_before_state(g_vc_m, ¤t_state, &before_state);
2278 if (NULL != changed_callback) {
2279 vc_mgr_client_use_callback(g_vc_m);
2280 changed_callback(before_state, current_state, user_data);
2281 vc_mgr_client_not_use_callback(g_vc_m);
2282 SLOG(LOG_DEBUG, TAG_VCM, "State changed callback is called");
2284 SLOG(LOG_WARN, TAG_VCM, "[WARNING] State changed callback is null");
2290 int vc_mgr_set_state_changed_cb(vc_state_changed_cb callback, void* user_data)
2292 if (callback == NULL)
2293 return VC_ERROR_INVALID_PARAMETER;
2296 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2297 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : A handle is not available");
2298 return VC_ERROR_INVALID_STATE;
2302 if (state != VC_STATE_INITIALIZED) {
2303 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : Current state is not 'Initialized'");
2304 return VC_ERROR_INVALID_STATE;
2307 vc_mgr_client_set_state_changed_cb(g_vc_m, callback, user_data);
2309 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set state changed callback");
2313 int vc_mgr_unset_state_changed_cb()
2316 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2317 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : A handle is not available");
2318 return VC_ERROR_INVALID_STATE;
2322 if (state != VC_STATE_INITIALIZED) {
2323 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : Current state is not 'Initialized'");
2324 return VC_ERROR_INVALID_STATE;
2327 vc_mgr_client_set_state_changed_cb(g_vc_m, NULL, NULL);
2332 int __vc_mgr_cb_service_state(int state)
2334 vc_service_state_e current_state = (vc_service_state_e)state;
2335 vc_service_state_e before_state;
2336 vc_mgr_client_get_service_state(g_vc_m, &before_state);
2338 if (current_state == before_state) {
2339 SLOG(LOG_WARN, TAG_VCM, "Service State NOT changed : Before(%d) Current(%d)",
2340 before_state, current_state);
2344 SLOG(LOG_DEBUG, TAG_VCM, "Service State changed : Before(%d) Current(%d)",
2345 before_state, current_state);
2347 /* Save service state */
2348 vc_mgr_client_set_service_state(g_vc_m, current_state);
2350 vc_service_state_changed_cb callback = NULL;
2351 void* service_user_data = NULL;
2352 vc_mgr_client_get_service_state_changed_cb(g_vc_m, &callback, &service_user_data);
2354 if (NULL != callback) {
2355 vc_mgr_client_use_callback(g_vc_m);
2356 callback(before_state, current_state, service_user_data);
2357 vc_mgr_client_not_use_callback(g_vc_m);
2358 SLOG(LOG_DEBUG, TAG_VCM, "Service state changed callback is called");
2360 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Service state changed callback is null");
2366 int vc_mgr_set_service_state_changed_cb(vc_service_state_changed_cb callback, void* user_data)
2368 if (callback == NULL)
2369 return VC_ERROR_INVALID_PARAMETER;
2372 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2373 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : A handle is not available");
2374 return VC_ERROR_INVALID_STATE;
2378 if (state != VC_STATE_INITIALIZED) {
2379 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : Current state is not 'Initialized'");
2380 return VC_ERROR_INVALID_STATE;
2383 vc_mgr_client_set_service_state_changed_cb(g_vc_m, callback, user_data);
2385 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set sevice state changed callback");
2389 int vc_mgr_unset_service_state_changed_cb()
2392 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2393 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : A handle is not available");
2394 return VC_ERROR_INVALID_STATE;
2398 if (state != VC_STATE_INITIALIZED) {
2399 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : Current state is not 'Initialized'");
2400 return VC_ERROR_INVALID_STATE;
2403 vc_mgr_client_set_service_state_changed_cb(g_vc_m, NULL, NULL);
2407 int vc_mgr_set_speech_detected_cb(vc_mgr_begin_speech_detected_cb callback, void* user_data)
2409 if (callback == NULL)
2410 return VC_ERROR_INVALID_PARAMETER;
2413 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2414 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : A handle is not available");
2415 return VC_ERROR_INVALID_STATE;
2419 if (state != VC_STATE_INITIALIZED) {
2420 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set speech detected callback : Current state is not 'Initialized'");
2421 return VC_ERROR_INVALID_STATE;
2424 vc_mgr_client_set_speech_detected_cb(g_vc_m, callback, user_data);
2426 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set speech detected callback");
2430 int vc_mgr_unset_speech_detected_cb()
2433 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2434 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : A handle is not available");
2435 return VC_ERROR_INVALID_STATE;
2439 if (state != VC_STATE_INITIALIZED) {
2440 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : Current state is not 'Initialized'");
2441 return VC_ERROR_INVALID_STATE;
2444 vc_mgr_client_set_speech_detected_cb(g_vc_m, NULL, NULL);
2448 int vc_mgr_set_current_language_changed_cb(vc_current_language_changed_cb callback, void* user_data)
2450 if (NULL == callback)
2451 return VC_ERROR_INVALID_PARAMETER;
2454 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2455 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set current language changed : A handle is not available");
2456 return VC_ERROR_INVALID_STATE;
2460 if (state != VC_STATE_INITIALIZED) {
2461 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set current language changed : Current state is not 'Initialized'");
2462 return VC_ERROR_INVALID_STATE;
2465 vc_mgr_client_set_current_lang_changed_cb(g_vc_m, callback, user_data);
2467 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set current language changed callback");
2471 int vc_mgr_unset_current_language_changed_cb()
2474 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2475 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset current language changed : A handle is not available");
2476 return VC_ERROR_INVALID_STATE;
2480 if (state != VC_STATE_INITIALIZED) {
2481 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset current language changed : Current state is not 'Initialized'");
2482 return VC_ERROR_INVALID_STATE;
2485 vc_mgr_client_set_current_lang_changed_cb(g_vc_m, NULL, NULL);
2490 int vc_mgr_set_error_cb(vc_error_cb callback, void* user_data)
2492 if (NULL == callback)
2493 return VC_ERROR_INVALID_PARAMETER;
2496 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2497 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set error callback : A handle is not available");
2498 return VC_ERROR_INVALID_STATE;
2502 if (state != VC_STATE_INITIALIZED) {
2503 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set error callback : Current state is not 'Initialized'");
2504 return VC_ERROR_INVALID_STATE;
2507 vc_mgr_client_set_error_cb(g_vc_m, callback, user_data);
2512 int vc_mgr_unset_error_cb()
2515 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2516 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset error callback : A handle is not available");
2517 return VC_ERROR_INVALID_STATE;
2521 if (state != VC_STATE_INITIALIZED) {
2522 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset error callback : Current state is not 'Initialized'");
2523 return VC_ERROR_INVALID_STATE;
2526 vc_mgr_client_set_error_cb(g_vc_m, NULL, NULL);
2531 int __vc_mgr_cb_dialog(int pid, const char* disp_text, const char* utt_text, bool continuous)
2533 vc_mgr_dialog_request_cb callback = NULL;
2534 void* user_data = NULL;
2536 vc_mgr_client_get_dialog_request_cb(g_vc_m, &callback, &user_data);
2538 if (NULL != callback) {
2539 vc_mgr_client_use_callback(g_vc_m);
2540 callback(pid, disp_text, utt_text, continuous, user_data);
2541 vc_mgr_client_not_use_callback(g_vc_m);
2542 SLOG(LOG_DEBUG, TAG_VCM, "Dialog callback is called");
2544 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Error callback is null");
2550 int vc_mgr_set_dialog_request_cb(vc_mgr_dialog_request_cb callback, void* user_data)
2552 if (NULL == callback)
2553 return VC_ERROR_INVALID_PARAMETER;
2556 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2557 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set error callback : A handle is not available");
2558 return VC_ERROR_INVALID_STATE;
2562 if (state != VC_STATE_INITIALIZED) {
2563 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set error callback : Current state is not 'Initialized'");
2564 return VC_ERROR_INVALID_STATE;
2567 vc_mgr_client_set_dialog_request_cb(g_vc_m, callback, user_data);
2572 int vc_mgr_unset_dialog_request_cb()
2575 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
2576 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset error callback : A handle is not available");
2577 return VC_ERROR_INVALID_STATE;
2581 if (state != VC_STATE_INITIALIZED) {
2582 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset error callback : Current state is not 'Initialized'");
2583 return VC_ERROR_INVALID_STATE;
2586 vc_mgr_client_set_dialog_request_cb(g_vc_m, NULL, NULL);
2591 static bool __vc_mgr_check_demandable_client(int pid)
2593 if (0 == g_slist_length(g_demandable_client_list)) {
2594 SLOG(LOG_WARN, TAG_VCM, "[WARNING] No demandable clients");
2598 char appid[128] = {'\0', };
2599 aul_app_get_appid_bypid(pid, appid, sizeof(appid));
2601 if (0 >= strlen(appid)) {
2602 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No appid");
2605 SLOG(LOG_DEBUG, TAG_VCM, "[CHECK] Appid - %s", appid);
2607 GSList *iter = NULL;
2608 vc_demandable_client_s* temp_client;
2609 iter = g_slist_nth(g_demandable_client_list, 0);
2611 while (NULL != iter) {
2612 temp_client = iter->data;
2614 if (NULL != temp_client) {
2615 if (NULL != temp_client->appid) {
2616 if (!strcmp(temp_client->appid, appid)) {
2617 SLOG(LOG_DEBUG, TAG_VCM, "pid(%d) is available", pid);
2623 iter = g_slist_next(iter);
2630 int __vc_mgr_request_auth_enable(int pid)
2632 if (false == __vc_mgr_check_demandable_client(pid)) {
2633 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not demandable client");
2634 return VC_ERROR_INVALID_PARAMETER;
2637 /* check already authorized */
2638 if (true == vc_mgr_client_is_authorized_client(g_vc_m, pid)) {
2639 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Already authorized");
2640 return VC_ERROR_INVALID_PARAMETER;
2643 /* add authorized list */
2644 if (0 != vc_mgr_client_add_authorized_client(g_vc_m, pid)) {
2645 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to add authorized client");
2646 return VC_ERROR_OPERATION_FAILED;
2649 /* foreground check */
2651 if (0 != vc_mgr_client_get_foreground(g_vc_m, &fore_pid)) {
2652 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get foreground");
2653 return VC_ERROR_OPERATION_FAILED;
2656 if (pid == fore_pid) {
2657 vc_mgr_client_set_valid_authorized_client(g_vc_m, pid);
2663 int __vc_mgr_request_auth_disable(int pid)
2665 /* check authorized */
2666 if (false == vc_mgr_client_is_authorized_client(g_vc_m, pid)) {
2667 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No authorized");
2668 return VC_ERROR_INVALID_PARAMETER;
2671 /* remove authorized list */
2672 if (0 != vc_mgr_client_remove_authorized_client(g_vc_m, pid)) {
2673 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to remove authorized client");
2674 return VC_ERROR_OPERATION_FAILED;
2677 /* check authority valid */
2678 if (true == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2679 SLOG(LOG_DEBUG, TAG_VCM, "Valid authorized client is removed");
2680 if (0 != vc_mgr_client_set_valid_authorized_client(g_vc_m, -1)) {
2681 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set valid authorized client");
2682 return VC_ERROR_OPERATION_FAILED;
2689 static Eina_Bool __request_auth_start(void* data)
2691 SLOG(LOG_DEBUG, TAG_VCM, "Request Start");
2693 if (0 != vc_mgr_client_set_start_by_client(g_vc_m, true)) {
2694 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set start by client");
2697 if (0 != vc_mgr_start(false)) {
2698 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Request start is failed");
2699 /* TODO - Error handling? */
2702 if (0 != vc_mgr_client_set_start_by_client(g_vc_m, false)) {
2703 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set start by client");
2710 int __vc_mgr_request_auth_start(int pid)
2712 /* check authorized */
2713 if (false == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2714 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No valid authorized client");
2715 return VC_ERROR_INVALID_PARAMETER;
2718 /* add timer for start recording */
2719 ecore_timer_add(0, __request_auth_start, NULL);
2724 static Eina_Bool __request_auth_stop(void* data)
2726 SLOG(LOG_DEBUG, TAG_VCM, "Request Stop");
2728 if (0 != vc_mgr_stop()) {
2729 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Request stop is failed");
2730 /* TODO - Error handling? */
2736 int __vc_mgr_request_auth_stop(int pid)
2738 /* check authorized */
2739 if (false == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2740 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No valid authorized client");
2741 return VC_ERROR_INVALID_PARAMETER;
2744 /* add timer for start recording */
2745 ecore_timer_add(0, __request_auth_stop, NULL);
2750 static Eina_Bool __request_auth_cancel(void* data)
2752 SLOG(LOG_DEBUG, TAG_VCM, "Request Cancel");
2754 if (0 != vc_mgr_cancel()) {
2755 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Request cancel is failed");
2756 /* TODO - Error handling? */
2762 int __vc_mgr_request_auth_cancel(int pid)
2764 /* check authorized */
2765 if (false == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2766 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No valid authorized client");
2767 return VC_ERROR_INVALID_PARAMETER;
2770 /* add timer for start recording */
2771 ecore_timer_add(0, __request_auth_cancel, NULL);