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_info_parser.h"
20 #include "vc_config_mgr.h"
21 #include "vc_command.h"
23 #include "vc_mgr_client.h"
24 #include "vc_mgr_dbus.h"
25 #include "voice_control.h"
26 #include "voice_control_command.h"
27 #include "voice_control_command_expand.h"
28 #include "voice_control_common.h"
29 #include "voice_control_manager.h"
32 #define VC_MANAGER_CONFIG_HANDLE 100000
34 static bool g_m_is_daemon_started = false;
36 static Ecore_Timer* g_m_connect_timer = NULL;
38 static vc_h g_vc_m = NULL;
40 static GSList* g_demandable_client_list = NULL;
43 static Eina_Bool __vc_mgr_notify_state_changed(void *data);
44 static Eina_Bool __vc_mgr_notify_error(void *data);
45 static Eina_Bool __vc_mgr_notify_result(void *data);
47 static const char* __vc_mgr_get_error_code(vc_error_e err)
50 case VC_ERROR_NONE: return "VC_ERROR_NONE"; break;
51 case VC_ERROR_OUT_OF_MEMORY: return "VC_ERROR_OUT_OF_MEMORY"; break;
52 case VC_ERROR_IO_ERROR: return "VC_ERROR_IO_ERROR"; break;
53 case VC_ERROR_INVALID_PARAMETER: return "VC_ERROR_INVALID_PARAMETER"; break;
54 case VC_ERROR_TIMED_OUT: return "VC_ERROR_TIMED_OUT"; break;
55 case VC_ERROR_RECORDER_BUSY: return "VC_ERROR_RECORDER_BUSY"; break;
56 case VC_ERROR_INVALID_STATE: return "VC_ERROR_INVALID_STATE"; break;
57 case VC_ERROR_INVALID_LANGUAGE: return "VC_ERROR_INVALID_LANGUAGE"; break;
58 case VC_ERROR_ENGINE_NOT_FOUND: return "VC_ERROR_ENGINE_NOT_FOUND"; break;
59 case VC_ERROR_OPERATION_FAILED: return "VC_ERROR_OPERATION_FAILED"; break;
60 default: return "Invalid error code"; break;
65 static void __vc_mgr_lang_changed_cb(const char* before_lang, const char* current_lang)
67 SECURE_SLOG(LOG_DEBUG, TAG_VCM, "Lang changed : Before lang(%s) Current lang(%s)",
68 before_lang, current_lang);
70 vc_current_language_changed_cb callback = NULL;
72 vc_mgr_client_get_current_lang_changed_cb(g_vc_m, &callback, &lang_user_data);
74 if (NULL != callback) {
75 vc_mgr_client_use_callback(g_vc_m);
76 callback(before_lang, current_lang, lang_user_data);
77 vc_mgr_client_not_use_callback(g_vc_m);
78 SLOG(LOG_DEBUG, TAG_VCM, "Language changed callback is called");
80 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Language changed callback is null");
86 static void __vc_mgr_service_state_changed_cb(int before_state, int current_state)
88 SECURE_SLOG(LOG_DEBUG, TAG_VCM, "Service State changed : Before(%d) Current(%d)",
89 before_state, current_state);
91 /* Save service state */
92 vc_mgr_client_set_service_state(g_vc_m, (vc_service_state_e)current_state);
94 vc_service_state_changed_cb callback = NULL;
95 void* service_user_data;
96 vc_mgr_client_get_service_state_changed_cb(g_vc_m, &callback, &service_user_data);
98 if (NULL != callback) {
99 vc_mgr_client_use_callback(g_vc_m);
100 callback((vc_service_state_e)before_state, (vc_service_state_e)current_state, service_user_data);
101 vc_mgr_client_not_use_callback(g_vc_m);
102 SLOG(LOG_DEBUG, TAG_VCM, "Service state changed callback is called");
104 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Service state changed callback is null");
110 static void __vc_mgr_foreground_changed_cb(int previous, int current)
112 SLOG(LOG_DEBUG, TAG_VCM, "Foreground changed : Before(%d) Current(%d)", previous, current);
114 /* get authorized valid app */
116 if (0 != vc_mgr_client_get_valid_authorized_client(g_vc_m, &pid)) {
117 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get authorized valid app");
121 /* compare & set valid */
122 if (current != pid) {
123 SLOG(LOG_DEBUG, TAG_VCM, "Authority(%d) changed to invalid", pid);
125 /* set authorized valid */
126 if (true == vc_mgr_client_is_authorized_client(g_vc_m, current)) {
127 SLOG(LOG_DEBUG, TAG_VCM, "Authority(%d) change to valid", current);
128 vc_mgr_client_set_valid_authorized_client(g_vc_m, current);
130 SLOG(LOG_DEBUG, TAG_VCM, "No valid Authority");
131 vc_mgr_client_set_valid_authorized_client(g_vc_m, -1);
136 int vc_mgr_initialize()
138 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Initialize");
141 if (true == vc_mgr_client_is_valid(g_vc_m)) {
142 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Already initialized");
143 return VC_ERROR_NONE;
146 if (0 != vc_mgr_dbus_open_connection()) {
147 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to open connection");
148 return VC_ERROR_OPERATION_FAILED;
151 if (0 != vc_mgr_client_create(&g_vc_m)) {
152 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create client!!!!!");
153 return VC_ERROR_OUT_OF_MEMORY;
156 int ret = vc_config_mgr_initialize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
158 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to init config manager : %d", ret);
159 vc_mgr_client_destroy(g_vc_m);
160 return VC_ERROR_OPERATION_FAILED;
163 ret = vc_config_mgr_set_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE, __vc_mgr_lang_changed_cb);
165 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set callback : %d", ret);
166 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
167 vc_mgr_client_destroy(g_vc_m);
168 return VC_ERROR_OPERATION_FAILED;
171 ret = vc_config_mgr_set_service_state_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE, __vc_mgr_service_state_changed_cb);
173 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set service change callback : %d", ret);
174 vc_config_mgr_unset_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
175 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
176 vc_mgr_client_destroy(g_vc_m);
177 return VC_ERROR_OPERATION_FAILED;
180 ret = vc_config_mgr_set_foreground_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE, __vc_mgr_foreground_changed_cb);
182 int service_state = -1;
183 if (0 != vc_config_mgr_get_service_state(&service_state)) {
184 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get service state");
185 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
186 vc_mgr_client_destroy(g_vc_m);
187 return VC_ERROR_OPERATION_FAILED;
190 vc_mgr_client_set_service_state(g_vc_m, service_state);
192 SLOG(LOG_DEBUG, TAG_VCM, "[Success] pid(%d)", g_vc_m->handle);
194 SLOG(LOG_DEBUG, TAG_VCM, "=====");
195 SLOG(LOG_DEBUG, TAG_VCM, " ");
197 return VC_ERROR_NONE;
200 static void __vc_mgr_internal_unprepare()
202 int ret = vc_mgr_dbus_request_finalize(g_vc_m->handle);
204 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request finalize : %s", __vc_mgr_get_error_code(ret));
207 g_m_is_daemon_started = false;
209 vc_cmd_parser_delete_file(getpid(), VC_COMMAND_TYPE_SYSTEM);
210 vc_cmd_parser_delete_file(getpid(), VC_COMMAND_TYPE_EXCLUSIVE);
215 int vc_mgr_deinitialize()
217 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Deinitialize");
219 if (false == vc_mgr_client_is_valid(g_vc_m)) {
220 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] NOT initialized");
221 SLOG(LOG_DEBUG, TAG_VCM, "=====");
222 SLOG(LOG_DEBUG, TAG_VCM, " ");
223 return VC_ERROR_INVALID_STATE;
227 vc_mgr_client_get_client_state(g_vc_m, &state);
232 __vc_mgr_internal_unprepare();
233 /* no break. need to next step*/
234 case VC_STATE_INITIALIZED:
235 if (NULL != g_m_connect_timer) {
236 SLOG(LOG_DEBUG, TAG_VCM, "Connect Timer is deleted");
237 ecore_timer_del(g_m_connect_timer);
240 vc_config_mgr_unset_service_state_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
241 vc_config_mgr_unset_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
242 vc_config_mgr_finalize(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE);
244 /* Free client resources */
245 vc_mgr_client_destroy(g_vc_m);
254 SLOG(LOG_DEBUG, TAG_VCM, "Success: destroy");
256 if (0 != vc_mgr_dbus_close_connection()) {
257 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to close connection");
260 SLOG(LOG_DEBUG, TAG_VCM, "=====");
261 SLOG(LOG_DEBUG, TAG_VCM, " ");
263 return VC_ERROR_NONE;
266 static void* __fork_vc_daemon()
273 SLOG(LOG_ERROR, TAG_VCM, "Fail to create daemon");
277 for (i = 0;i < _NSIG;i++)
280 execl(VC_DAEMON_PATH, VC_DAEMON_PATH, NULL);
289 static Eina_Bool __vc_mgr_connect_daemon(void *data)
292 if (0 != vc_mgr_dbus_request_hello()) {
293 if (false == g_m_is_daemon_started) {
294 g_m_is_daemon_started = true;
298 thread_id = pthread_create(&thread, NULL, __fork_vc_daemon, NULL);
300 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to make thread");
301 g_m_connect_timer = NULL;
305 pthread_detach(thread);
310 g_m_connect_timer = NULL;
311 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Connect daemon");
313 /* request initialization */
315 ret = vc_mgr_dbus_request_initialize(g_vc_m->handle);
317 if (VC_ERROR_ENGINE_NOT_FOUND == ret) {
318 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to initialize : %s", __vc_mgr_get_error_code(ret));
320 vc_mgr_client_set_error(g_vc_m, VC_ERROR_ENGINE_NOT_FOUND);
321 ecore_timer_add(0, __vc_mgr_notify_error, g_vc_m);
323 SLOG(LOG_DEBUG, TAG_VCM, "=====");
324 SLOG(LOG_DEBUG, TAG_VCM, " ");
327 } else if (0 != ret) {
328 SLOG(LOG_ERROR, TAG_VCM, "[WARNING] Fail to connection. Retry to connect : %s", __vc_mgr_get_error_code(ret));
331 /* Success to connect */
334 SECURE_SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Connected daemon");
336 vc_mgr_client_set_client_state(g_vc_m, VC_STATE_READY);
338 vc_state_changed_cb changed_callback = NULL;
339 void* user_data = NULL;
341 vc_mgr_client_get_state_changed_cb(g_vc_m, &changed_callback, &user_data);
343 vc_state_e current_state;
344 vc_state_e before_state;
346 vc_mgr_client_get_before_state(g_vc_m, ¤t_state, &before_state);
348 if (NULL != changed_callback) {
349 vc_mgr_client_use_callback(g_vc_m);
350 changed_callback(before_state, current_state, user_data);
351 vc_mgr_client_not_use_callback(g_vc_m);
352 SLOG(LOG_DEBUG, TAG_VCM, "State changed callback is called");
354 SLOG(LOG_WARN, TAG_VCM, "[WARNING] State changed callback is null");
357 SLOG(LOG_DEBUG, TAG_VCM, "=====");
358 SLOG(LOG_DEBUG, TAG_VCM, " ");
365 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Prepare");
368 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
369 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
370 SLOG(LOG_DEBUG, TAG_VCM, "=====");
371 SLOG(LOG_DEBUG, TAG_VCM, " ");
372 return VC_ERROR_INVALID_STATE;
376 if (state != VC_STATE_INITIALIZED) {
377 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'CREATED'");
378 SLOG(LOG_DEBUG, TAG_VCM, "=====");
379 SLOG(LOG_DEBUG, TAG_VCM, " ");
380 return VC_ERROR_INVALID_STATE;
383 g_m_is_daemon_started = false;
385 g_m_connect_timer = ecore_timer_add(0, __vc_mgr_connect_daemon, NULL);
387 SLOG(LOG_DEBUG, TAG_VCM, "=====");
388 SLOG(LOG_DEBUG, TAG_VCM, " ");
390 return VC_ERROR_NONE;
393 int vc_mgr_unprepare()
395 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Unprepare");
398 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
399 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
400 SLOG(LOG_DEBUG, TAG_VCM, "=====");
401 SLOG(LOG_DEBUG, TAG_VCM, " ");
402 return VC_ERROR_INVALID_STATE;
406 if (state != VC_STATE_READY) {
407 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
408 SLOG(LOG_DEBUG, TAG_VCM, "=====");
409 SLOG(LOG_DEBUG, TAG_VCM, " ");
410 return VC_ERROR_INVALID_STATE;
413 __vc_mgr_internal_unprepare();
415 vc_mgr_client_set_client_state(g_vc_m, VC_STATE_INITIALIZED);
416 ecore_timer_add(0, __vc_mgr_notify_state_changed, g_vc_m);
418 SLOG(LOG_DEBUG, TAG_VCM, "=====");
419 SLOG(LOG_DEBUG, TAG_VCM, " ");
421 return VC_ERROR_NONE;
424 int vc_mgr_foreach_supported_languages(vc_supported_language_cb callback, void* user_data)
426 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Foreach Supported Language");
428 if (NULL == callback) {
429 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
430 SLOG(LOG_DEBUG, TAG_VCM, "=====");
431 SLOG(LOG_DEBUG, TAG_VCM, " ");
432 return VC_ERROR_INVALID_PARAMETER;
436 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
437 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
438 SLOG(LOG_DEBUG, TAG_VCM, "=====");
439 SLOG(LOG_DEBUG, TAG_VCM, " ");
440 return VC_ERROR_INVALID_STATE;
444 ret = vc_config_mgr_get_language_list(callback, user_data);
446 ret = vc_config_convert_error_code((vc_config_error_e)ret);
447 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get languages : %s", __vc_mgr_get_error_code(ret));
450 SLOG(LOG_DEBUG, TAG_VCM, "=====");
451 SLOG(LOG_DEBUG, TAG_VCM, " ");
453 return VC_ERROR_NONE;
456 int vc_mgr_get_current_language(char** language)
458 if (NULL == language) {
459 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
460 return VC_ERROR_INVALID_PARAMETER;
464 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
465 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
466 return VC_ERROR_INVALID_STATE;
470 ret = vc_config_mgr_get_default_language(language);
472 ret = vc_config_convert_error_code((vc_config_error_e)ret);
473 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get current languages : %s", __vc_mgr_get_error_code(ret));
475 SLOG(LOG_DEBUG, TAG_VCM, "[Get current language] language : %s", *language);
481 int vc_mgr_get_state(vc_state_e* state)
483 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get State");
486 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
487 return VC_ERROR_INVALID_PARAMETER;
491 if (0 != vc_mgr_client_get_client_state(g_vc_m, &temp)) {
492 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
493 SLOG(LOG_DEBUG, TAG_VCM, "=====");
494 SLOG(LOG_DEBUG, TAG_VCM, " ");
495 return VC_ERROR_INVALID_STATE;
501 case VC_STATE_NONE: SLOG(LOG_DEBUG, TAG_VCM, "Current state is 'None'"); break;
502 case VC_STATE_INITIALIZED: SLOG(LOG_DEBUG, TAG_VCM, "Current state is 'Created'"); break;
503 case VC_STATE_READY: SLOG(LOG_DEBUG, TAG_VCM, "Current state is 'Ready'"); break;
504 default: SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid state"); break;
507 SLOG(LOG_DEBUG, TAG_VCM, "=====");
508 SLOG(LOG_DEBUG, TAG_VCM, " ");
510 return VC_ERROR_NONE;
513 int vc_mgr_get_service_state(vc_service_state_e* state)
515 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get Service State");
518 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
519 return VC_ERROR_INVALID_PARAMETER;
522 vc_state_e client_state;
523 if (0 != vc_mgr_client_get_client_state(g_vc_m, &client_state)) {
524 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
525 return VC_ERROR_INVALID_STATE;
529 if (client_state != VC_STATE_READY) {
530 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Current state is not 'READY'");
531 return VC_ERROR_INVALID_STATE;
534 /* get service state */
535 vc_service_state_e service_state;
536 if (0 != vc_mgr_client_get_service_state(g_vc_m, &service_state)) {
537 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get service state");
538 return VC_ERROR_OPERATION_FAILED;
541 *state = service_state;
544 case VC_SERVICE_STATE_NONE: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'None'"); break;
545 case VC_SERVICE_STATE_READY: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'Ready'"); break;
546 case VC_SERVICE_STATE_RECORDING: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'Recording'"); break;
547 case VC_SERVICE_STATE_PROCESSING: SLOG(LOG_DEBUG, TAG_VCM, "Current service state is 'Processing'"); break;
548 default: SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid state"); break;
551 SLOG(LOG_DEBUG, TAG_VCM, "=====");
552 SLOG(LOG_DEBUG, TAG_VCM, " ");
554 return VC_ERROR_NONE;
557 int vc_mgr_set_demandable_client_rule(const char* rule)
559 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set Demandable client rule");
562 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
563 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
564 SLOG(LOG_DEBUG, TAG_VCM, "=====");
565 SLOG(LOG_DEBUG, TAG_VCM, " ");
566 return VC_ERROR_INVALID_STATE;
570 if (state != VC_STATE_READY) {
571 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
572 SLOG(LOG_DEBUG, TAG_VCM, "=====");
573 SLOG(LOG_DEBUG, TAG_VCM, " ");
574 return VC_ERROR_INVALID_STATE;
578 ret = vc_info_parser_set_demandable_client(rule);
580 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] rule is NOT valid");
581 SLOG(LOG_DEBUG, TAG_VCM, "=====");
582 SLOG(LOG_DEBUG, TAG_VCM, " ");
583 return VC_ERROR_INVALID_PARAMETER;
586 if (0 != vc_info_parser_get_demandable_clients(&g_demandable_client_list)) {
587 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get demandable clients");
588 return VC_ERROR_OPERATION_FAILED;
591 SLOG(LOG_DEBUG, TAG_VCM, "=====");
592 SLOG(LOG_DEBUG, TAG_VCM, " ");
600 ret = vc_mgr_dbus_request_demandable_client(g_vc_m->handle);
602 if (VC_ERROR_TIMED_OUT != ret) {
603 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request set client rule to daemon : %s", __vc_mgr_get_error_code(ret));
606 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request set client rule : %s", __vc_mgr_get_error_code(ret));
609 if (VC_RETRY_COUNT == count) {
610 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
617 SLOG(LOG_DEBUG, TAG_VCM, "=====");
618 SLOG(LOG_DEBUG, TAG_VCM, " ");
624 int vc_mgr_unset_demandable_client_rule()
626 vc_info_parser_set_demandable_client(NULL);
631 ret = vc_mgr_dbus_request_demandable_client(g_vc_m->handle);
633 if (VC_ERROR_TIMED_OUT != ret) {
634 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request unset client rule to daemon : %s", __vc_mgr_get_error_code(ret));
637 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request unset client rule : %s", __vc_mgr_get_error_code(ret));
640 if (VC_RETRY_COUNT == count) {
641 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
651 int vc_mgr_is_command_format_supported(vc_cmd_format_e format, bool* support)
653 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Is command type supported");
656 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
657 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
658 SLOG(LOG_DEBUG, TAG_VCM, "=====");
659 SLOG(LOG_DEBUG, TAG_VCM, " ");
660 return VC_ERROR_INVALID_STATE;
664 bool non_fixed_support = false;
665 if (0 != vc_config_mgr_get_nonfixed_support(&non_fixed_support)) {
666 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get nonfixed support info");
670 case VC_CMD_FORMAT_FIXED: *support = true; break;
671 case VC_CMD_FORMAT_FIXED_AND_EXTRA: *support = non_fixed_support; break;
672 case VC_CMD_FORMAT_EXTRA_AND_FIXED: *support = non_fixed_support; break;
673 default: *support = false; break;
676 SLOG(LOG_ERROR, TAG_VCM, "[DEBUG] Format(%d) support(%s)", format, *support ? "true" : "false");
678 SLOG(LOG_DEBUG, TAG_VCM, "=====");
679 SLOG(LOG_DEBUG, TAG_VCM, " ");
681 return VC_ERROR_NONE;
684 int vc_mgr_set_command_list(vc_cmd_list_h vc_cmd_list)
686 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set Command list");
689 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
690 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
691 SLOG(LOG_DEBUG, TAG_VCM, "=====");
692 SLOG(LOG_DEBUG, TAG_VCM, " ");
693 return VC_ERROR_INVALID_STATE;
697 if (state != VC_STATE_READY) {
698 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
699 SLOG(LOG_DEBUG, TAG_VCM, "=====");
700 SLOG(LOG_DEBUG, TAG_VCM, " ");
701 return VC_ERROR_INVALID_STATE;
704 /* Check service state */
705 vc_service_state_e service_state = -1;
706 vc_mgr_client_get_service_state(g_vc_m, &service_state);
707 if (service_state != VC_SERVICE_STATE_READY) {
708 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
709 SLOG(LOG_DEBUG, TAG_VCM, "=====");
710 SLOG(LOG_DEBUG, TAG_VCM, " ");
711 return VC_ERROR_INVALID_STATE;
714 vc_cmd_list_s* list = NULL;
715 list = (vc_cmd_list_s*)vc_cmd_list;
717 int system_ret = vc_cmd_parser_save_file(getpid(), VC_COMMAND_TYPE_SYSTEM, list->list);
718 int exclsive_ret = vc_cmd_parser_save_file(getpid(), VC_COMMAND_TYPE_EXCLUSIVE, list->list);
721 if (0 != system_ret && 0 != exclsive_ret) {
722 ret = VC_ERROR_INVALID_PARAMETER;
723 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to save command group : %s", __vc_mgr_get_error_code(ret));
727 ret = vc_mgr_dbus_request_set_command(g_vc_m->handle);
729 if (VC_ERROR_TIMED_OUT != ret) {
730 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request set command to daemon : %s", __vc_mgr_get_error_code(ret));
733 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request set command : %s", __vc_mgr_get_error_code(ret));
736 if (VC_RETRY_COUNT == count) {
737 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
745 SLOG(LOG_DEBUG, TAG_VCM, "=====");
746 SLOG(LOG_DEBUG, TAG_VCM, " ");
751 int vc_mgr_unset_command_list()
753 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Unset Command list");
756 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
757 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
758 return VC_ERROR_INVALID_STATE;
762 if (state != VC_STATE_READY) {
763 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Current state is not 'READY'");
764 return VC_ERROR_INVALID_STATE;
770 ret = vc_mgr_dbus_request_unset_command(g_vc_m->handle);
772 if (VC_ERROR_TIMED_OUT != ret) {
773 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request unset command to daemon : %s", __vc_mgr_get_error_code(ret));
776 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry request unset command : %s", __vc_mgr_get_error_code(ret));
779 if (VC_RETRY_COUNT == count) {
780 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
787 vc_cmd_parser_delete_file(getpid(), VC_COMMAND_TYPE_SYSTEM);
788 vc_cmd_parser_delete_file(getpid(), VC_COMMAND_TYPE_EXCLUSIVE);
790 SLOG(LOG_DEBUG, TAG_VCM, "=====");
791 SLOG(LOG_DEBUG, TAG_VCM, " ");
796 int vc_mgr_set_audio_type(const char* audio_id)
798 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Set audio type");
800 if (NULL == audio_id) {
801 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
802 return VC_ERROR_INVALID_PARAMETER;
806 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
807 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
808 SLOG(LOG_DEBUG, TAG_VCM, "=====");
809 SLOG(LOG_DEBUG, TAG_VCM, " ");
810 return VC_ERROR_INVALID_STATE;
814 if (state != VC_STATE_READY) {
815 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
816 SLOG(LOG_DEBUG, TAG_VCM, "=====");
817 SLOG(LOG_DEBUG, TAG_VCM, " ");
818 return VC_ERROR_INVALID_STATE;
821 /* Check service state */
822 vc_service_state_e service_state = -1;
823 vc_mgr_client_get_service_state(g_vc_m, &service_state);
824 if (service_state != VC_SERVICE_STATE_READY) {
825 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
826 SLOG(LOG_DEBUG, TAG_VCM, "=====");
827 SLOG(LOG_DEBUG, TAG_VCM, " ");
828 return VC_ERROR_INVALID_STATE;
838 ret = vc_mgr_dbus_request_set_audio_type(g_vc_m->handle, audio_id);
840 if (VC_ERROR_TIMED_OUT != ret) {
841 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set audio type : %s", __vc_mgr_get_error_code(ret));
844 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry to set audio type : %s", __vc_mgr_get_error_code(ret));
847 if (VC_RETRY_COUNT == count) {
848 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
853 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set audio type");
855 vc_mgr_client_set_audio_type(g_vc_m, audio_id);
859 SLOG(LOG_DEBUG, TAG_VCM, "=====");
860 SLOG(LOG_DEBUG, TAG_VCM, " ");
865 int vc_mgr_get_audio_type(char** audio_id)
867 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Get audio type");
869 if (NULL == audio_id) {
870 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
871 return VC_ERROR_INVALID_PARAMETER;
875 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
876 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
877 SLOG(LOG_DEBUG, TAG_VCM, "=====");
878 SLOG(LOG_DEBUG, TAG_VCM, " ");
879 return VC_ERROR_INVALID_STATE;
883 if (state != VC_STATE_READY) {
884 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
885 SLOG(LOG_DEBUG, TAG_VCM, "=====");
886 SLOG(LOG_DEBUG, TAG_VCM, " ");
887 return VC_ERROR_INVALID_STATE;
890 /* Check service state */
891 vc_service_state_e service_state = -1;
892 vc_mgr_client_get_service_state(g_vc_m, &service_state);
893 if (service_state != VC_SERVICE_STATE_READY) {
894 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
895 SLOG(LOG_DEBUG, TAG_VCM, "=====");
896 SLOG(LOG_DEBUG, TAG_VCM, " ");
897 return VC_ERROR_INVALID_STATE;
902 vc_mgr_client_get_audio_type(g_vc_m, &temp);
905 /* Not initiallized */
909 ret = vc_mgr_dbus_request_get_audio_type(g_vc_m->handle, &temp);
911 if (VC_ERROR_TIMED_OUT != ret) {
912 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get audio type : %s", __vc_mgr_get_error_code(ret));
915 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry to get audio type : %s", __vc_mgr_get_error_code(ret));
918 if (VC_RETRY_COUNT == count) {
919 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
924 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Get audio type : %s", temp);
926 vc_mgr_client_set_audio_type(g_vc_m, temp);
932 *audio_id = strdup(temp);
940 int vc_mgr_get_current_commands(vc_cmd_list_h* vc_cmd_list)
942 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Foreach current commands");
945 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
946 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
947 SLOG(LOG_DEBUG, TAG_VCM, "=====");
948 SLOG(LOG_DEBUG, TAG_VCM, " ");
949 return VC_ERROR_INVALID_STATE;
953 if (state != VC_STATE_READY) {
954 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
955 SLOG(LOG_DEBUG, TAG_VCM, "=====");
956 SLOG(LOG_DEBUG, TAG_VCM, " ");
957 return VC_ERROR_INVALID_STATE;
960 /* Check service state */
961 vc_service_state_e service_state = -1;
962 vc_mgr_client_get_service_state(g_vc_m, &service_state);
963 if (service_state != VC_SERVICE_STATE_READY) {
964 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
965 SLOG(LOG_DEBUG, TAG_VCM, "=====");
966 SLOG(LOG_DEBUG, TAG_VCM, " ");
967 return VC_ERROR_INVALID_STATE;
970 if (NULL == vc_cmd_list) {
971 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid Parameter");
972 SLOG(LOG_DEBUG, TAG_VCM, "=====");
973 SLOG(LOG_DEBUG, TAG_VCM, " ");
974 return VC_ERROR_INVALID_PARAMETER;
977 vc_cmd_list_h temp_list = NULL;
978 if (0 != vc_cmd_list_create(&temp_list)) {
979 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create list");
980 return VC_ERROR_INVALID_PARAMETER;
983 *vc_cmd_list = temp_list;
990 /* Get foreground pid */
991 if (0 != vc_config_mgr_get_foreground(&fg_pid)) {
992 /* There is no foreground app for voice control */
993 SLOG(LOG_WARN, TAG_VCM, "[Manager WARNING] No foreground pid for voice control");
995 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Foreground pid(%d)", fg_pid);
998 if (0 != vc_mgr_client_get_pid(g_vc_m, &mgr_pid)) {
999 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Fail to get manager pid");
1000 return VC_ERROR_OPERATION_FAILED;
1002 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Manager pid(%d)", mgr_pid);
1005 /* Get system command */
1006 ret = vc_cmd_parser_append_commands(mgr_pid, VC_COMMAND_TYPE_SYSTEM, temp_list);
1008 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No system commands");
1015 ret = vc_mgr_dbus_request_set_client_info(g_vc_m->handle);
1017 if (VC_ERROR_TIMED_OUT != ret) {
1018 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set client info : %s", __vc_mgr_get_error_code(ret));
1021 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry to set client info : %s", __vc_mgr_get_error_code(ret));
1024 if (VC_RETRY_COUNT == count) {
1025 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1030 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set client info");
1034 GSList *iter = NULL;
1035 GSList* client_info_list = NULL;
1036 vc_client_info_s *client_info = NULL;
1037 bool is_fgpid = false;
1039 if (0 != vc_info_parser_get_client_info(&client_info_list)) {
1040 SLOG(LOG_DEBUG, TAG_VCM, "[DEBUG] No client");
1044 if (VC_NO_FOREGROUND_PID != fg_pid) {
1045 iter = g_slist_nth(client_info_list, 0);
1046 while (NULL != iter) {
1047 client_info = iter->data;
1048 if (NULL != client_info) {
1049 if (fg_pid == client_info->pid) {
1054 iter = g_slist_next(iter);
1058 /* Get foreground commands and widget */
1059 if (true == is_fgpid) {
1061 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] fore cmd(%d)", client_info->fg_cmd);
1063 /* Get foreground command */
1064 if (true == client_info->fg_cmd) {
1065 ret = vc_cmd_parser_append_commands(fg_pid, VC_COMMAND_TYPE_FOREGROUND, temp_list);
1067 SLOG(LOG_ERROR, TAG_VCM, "[Client Data ERROR] Fail to get the fg command list");
1070 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No foreground commands");
1073 /* Check exclusive option */
1074 if (true == client_info->exclusive_cmd) {
1075 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Exclusive command is ON");
1077 /* Set background command for exclusive option */
1078 if (true == client_info->bg_cmd) {
1079 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Set background command");
1080 ret = vc_cmd_parser_append_commands(client_info->pid, VC_COMMAND_TYPE_BACKGROUND, temp_list);
1082 SLOG(LOG_ERROR, TAG_VCM, "[Client Data ERROR] Fail to get the bg command list : pid(%d)", client_info->pid);
1086 /* need to release client info */
1087 iter = g_slist_nth(client_info_list, 0);
1089 while (NULL != iter) {
1090 client_info = iter->data;
1091 if (NULL != client_info) {
1094 client_info_list = g_slist_remove_link(client_info_list, iter);
1095 iter = g_slist_nth(client_info_list, 0);
1098 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1099 SLOG(LOG_DEBUG, TAG_VCM, " ");
1104 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No foreground app");
1107 /* Get background commands */
1108 if (0 < g_slist_length(client_info_list)) {
1109 iter = g_slist_nth(client_info_list, 0);
1111 while (NULL != iter) {
1112 client_info = iter->data;
1114 if (NULL != client_info) {
1115 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] Pid(%d) Back cmd(%d)", client_info->pid, client_info->bg_cmd);
1116 if (true == client_info->bg_cmd) {
1117 ret = vc_cmd_parser_append_commands(client_info->pid, VC_COMMAND_TYPE_BACKGROUND, temp_list);
1119 SLOG(LOG_ERROR, TAG_VCM, "[Client Data ERROR] Fail to get the bg command list : pid(%d)", client_info->pid);
1124 client_info_list = g_slist_remove_link(client_info_list, iter);
1126 iter = g_slist_nth(client_info_list, 0);
1130 SLOG(LOG_DEBUG, TAG_VCM, "[Manager] No background commands");
1133 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1134 SLOG(LOG_DEBUG, TAG_VCM, " ");
1139 int vc_mgr_start(bool stop_by_silence, bool exclusive_command_option)
1141 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Request start");
1144 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1145 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1146 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1147 SLOG(LOG_DEBUG, TAG_VCM, " ");
1148 return VC_ERROR_INVALID_STATE;
1152 if (state != VC_STATE_READY) {
1153 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Current state is not 'READY'");
1154 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1155 SLOG(LOG_DEBUG, TAG_VCM, " ");
1156 return VC_ERROR_INVALID_STATE;
1159 /* Check service state */
1160 vc_service_state_e service_state = -1;
1161 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1162 if (service_state != VC_SERVICE_STATE_READY) {
1163 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'READY'");
1164 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1165 SLOG(LOG_DEBUG, TAG_VCM, " ");
1166 return VC_ERROR_INVALID_STATE;
1169 vc_mgr_client_set_exclusive_command(g_vc_m, exclusive_command_option);
1171 bool start_by_client = false;
1172 if (0 != vc_mgr_client_get_start_by_client(g_vc_m, &start_by_client)) {
1173 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get start by client");
1183 ret = vc_mgr_dbus_request_start(g_vc_m->handle, stop_by_silence, exclusive_command_option, start_by_client);
1185 if (VC_ERROR_TIMED_OUT != ret) {
1186 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to start request start : %s", __vc_mgr_get_error_code(ret));
1189 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry start request start : %s", __vc_mgr_get_error_code(ret));
1192 if (VC_RETRY_COUNT == count) {
1193 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1194 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1199 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] start recognition");
1200 vc_mgr_client_set_service_state(g_vc_m, VC_SERVICE_STATE_RECORDING);
1204 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1205 SLOG(LOG_DEBUG, TAG_VCM, " ");
1212 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Request stop");
1215 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1216 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1217 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1218 SLOG(LOG_DEBUG, TAG_VCM, " ");
1219 return VC_ERROR_INVALID_STATE;
1223 if (state != VC_STATE_READY) {
1224 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: client state is not 'READY'");
1225 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1226 SLOG(LOG_DEBUG, TAG_VCM, " ");
1227 return VC_ERROR_INVALID_STATE;
1230 /* Check service state */
1231 vc_service_state_e service_state = -1;
1232 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1233 if (service_state != VC_SERVICE_STATE_RECORDING) {
1234 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'RECORDING'");
1235 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1236 SLOG(LOG_DEBUG, TAG_VCM, " ");
1237 return VC_ERROR_INVALID_STATE;
1244 ret = vc_mgr_dbus_request_stop(g_vc_m->handle);
1246 if (VC_ERROR_TIMED_OUT != ret) {
1247 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to stop request : %s", __vc_mgr_get_error_code(ret));
1250 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry stop request : %s", __vc_mgr_get_error_code(ret));
1253 if (VC_RETRY_COUNT == count) {
1254 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1259 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Stop recognition");
1260 vc_mgr_client_set_service_state(g_vc_m, VC_SERVICE_STATE_PROCESSING);
1264 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1265 SLOG(LOG_DEBUG, TAG_VCM, " ");
1272 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Request cancel");
1275 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1276 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1277 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1278 SLOG(LOG_DEBUG, TAG_VCM, " ");
1279 return VC_ERROR_INVALID_STATE;
1283 if (state != VC_STATE_READY) {
1284 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: client state is not 'READY'");
1285 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1286 SLOG(LOG_DEBUG, TAG_VCM, " ");
1287 return VC_ERROR_INVALID_STATE;
1290 /* Check service state */
1291 vc_service_state_e service_state = -1;
1292 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1293 if (service_state != VC_SERVICE_STATE_RECORDING && service_state != VC_SERVICE_STATE_PROCESSING) {
1294 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'RECORDING' or 'PROCESSING'");
1295 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1296 SLOG(LOG_DEBUG, TAG_VCM, " ");
1297 return VC_ERROR_INVALID_STATE;
1303 ret = vc_mgr_dbus_request_cancel(g_vc_m->handle);
1305 if (VC_ERROR_TIMED_OUT != ret) {
1306 SLOG(LOG_DEBUG, TAG_VCM, "[ERROR] Fail to cancel request : %s", __vc_mgr_get_error_code(ret));
1309 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry cancel request : %s", __vc_mgr_get_error_code(ret));
1312 if (VC_RETRY_COUNT == count) {
1313 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1318 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Cancel recognition");
1319 vc_mgr_client_set_service_state(g_vc_m, VC_SERVICE_STATE_READY);
1323 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1325 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1326 SLOG(LOG_DEBUG, TAG_VCM, " ");
1331 int vc_mgr_get_recording_volume(float* volume)
1333 if (NULL == volume) {
1334 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Input parameter is NULL");
1335 return VC_ERROR_INVALID_PARAMETER;
1338 vc_service_state_e service_state = -1;
1339 if (0 != vc_mgr_client_get_service_state(g_vc_m, &service_state)) {
1340 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] A handle is not available");
1341 return VC_ERROR_INVALID_STATE;
1345 if (VC_SERVICE_STATE_RECORDING != service_state) {
1346 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: Service state is not 'RECORDING'");
1347 return VC_ERROR_INVALID_STATE;
1350 FILE* fp = fopen(VC_RUNTIME_INFO_AUDIO_VOLUME, "rb");
1352 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to open Volume File");
1353 return VC_ERROR_OPERATION_FAILED;
1356 int readlen = fread((void*)volume, sizeof(*volume), 1, fp);
1365 int vc_mgr_set_selected_results(vc_cmd_list_h vc_cmd_list)
1367 SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Select result");
1369 vc_service_state_e service_state = -1;
1370 vc_mgr_client_get_service_state(g_vc_m, &service_state);
1371 if (service_state != VC_SERVICE_STATE_PROCESSING) {
1372 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Invalid State: service state is not 'PROCESSING'");
1373 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1374 SLOG(LOG_DEBUG, TAG_VCM, " ");
1375 return VC_ERROR_INVALID_STATE;
1378 if (NULL != vc_cmd_list) {
1380 char* result_text = NULL;
1382 vc_mgr_client_get_all_result(g_vc_m, &event, &result_text);
1384 vc_info_parser_set_result(result_text, event, NULL, vc_cmd_list, false);
1386 if (NULL != result_text) {
1399 ret = vc_mgr_dbus_send_result_selection(g_vc_m->handle);
1401 if (VC_ERROR_TIMED_OUT != ret) {
1402 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to send result selection : %s", __vc_mgr_get_error_code(ret));
1405 SLOG(LOG_WARN, TAG_VCM, "[WARNING] retry send result selection : %s", __vc_mgr_get_error_code(ret));
1408 if (VC_RETRY_COUNT == count) {
1409 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request");
1414 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] result selection");
1418 vc_mgr_client_unset_all_result(g_vc_m);
1420 SLOG(LOG_DEBUG, TAG_VCM, "=====");
1421 SLOG(LOG_DEBUG, TAG_VCM, " ");
1426 static Eina_Bool __vc_mgr_set_select_result(void *data)
1428 vc_mgr_set_selected_results(NULL);
1432 static Eina_Bool __vc_mgr_notify_all_result(void *data)
1434 char* temp_text = NULL;
1436 char* temp_message = NULL;
1437 vc_cmd_list_h vc_cmd_list = NULL;
1439 vc_mgr_all_result_cb all_callback = NULL;
1440 void* all_user_data = NULL;
1442 vc_mgr_client_get_all_result_cb(g_vc_m, &all_callback, &all_user_data);
1443 if (NULL == all_callback) {
1444 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] All result callback is NULL");
1448 if (0 != vc_cmd_list_create(&vc_cmd_list)) {
1449 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create command list");
1453 vc_info_parser_get_result(&temp_text, &event, &temp_message, -1, vc_cmd_list, vc_mgr_client_get_exclusive_command(g_vc_m));
1455 SLOG(LOG_DEBUG, TAG_VCM, "Result info : result text(%s) event(%d) result_message(%s)", temp_text, event, temp_message);
1457 vc_cmd_print_list(vc_cmd_list);
1461 vc_mgr_client_use_callback(g_vc_m);
1462 cb_ret = all_callback(event, vc_cmd_list, temp_text, temp_message, all_user_data);
1463 vc_mgr_client_not_use_callback(g_vc_m);
1465 if (true == vc_mgr_client_get_exclusive_command(g_vc_m)) {
1467 vc_result_cb callback = NULL;
1468 void* user_data = NULL;
1470 vc_mgr_client_get_result_cb(g_vc_m, &callback, &user_data);
1471 if (NULL == callback) {
1472 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client result callback is NULL");
1476 vc_mgr_client_use_callback(g_vc_m);
1477 callback(event, vc_cmd_list, temp_text, user_data);
1478 vc_mgr_client_not_use_callback(g_vc_m);
1479 SLOG(LOG_DEBUG, TAG_VCM, "Exclusive result callback called");
1481 /* Release result */
1482 if (NULL != temp_text) free(temp_text);
1485 vc_cmd_list_destroy(vc_cmd_list, true);
1487 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1493 vc_cmd_list_get_count(vc_cmd_list, &count);
1495 if (true == cb_ret) {
1496 SLOG(LOG_DEBUG, TAG_VCM, "Callback result is true");
1497 ecore_idler_add(__vc_mgr_set_select_result, NULL);
1499 SLOG(LOG_DEBUG, TAG_VCM, "Callback result is false");
1500 /* need to select conflicted result */
1502 vc_mgr_client_set_all_result(g_vc_m, event, temp_text);
1505 ecore_idler_add(__vc_mgr_set_select_result, NULL);
1506 vc_mgr_client_set_exclusive_command(g_vc_m, false);
1507 vc_mgr_client_unset_all_result(g_vc_m);
1510 /* Release result */
1511 if (NULL != temp_text) free(temp_text);
1514 vc_cmd_list_destroy(vc_cmd_list, true);
1519 static Eina_Bool __vc_mgr_notify_result(void *data)
1523 vc_cmd_list_h vc_cmd_list = NULL;
1525 vc_result_cb callback = NULL;
1526 void* user_data = NULL;
1528 vc_mgr_client_get_result_cb(g_vc_m, &callback, &user_data);
1529 if (NULL == callback) {
1530 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client result callback is NULL");
1534 if (0 != vc_cmd_list_create(&vc_cmd_list)) {
1535 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to create command list");
1539 vc_info_parser_get_result(&temp_text, &event, NULL, getpid(), vc_cmd_list, false);
1541 SLOG(LOG_DEBUG, TAG_VCM, "Result : result text(%s) event(%d)", temp_text, event);
1543 vc_cmd_print_list(vc_cmd_list);
1545 vc_mgr_client_use_callback(g_vc_m);
1546 callback(event, vc_cmd_list, temp_text, user_data);
1547 vc_mgr_client_not_use_callback(g_vc_m);
1548 SLOG(LOG_DEBUG, TAG_VCM, "Result callback called");
1550 vc_cmd_list_destroy(vc_cmd_list, true);
1552 /* Release result */
1553 if (NULL != temp_text) free(temp_text);
1558 void __vc_mgr_cb_all_result()
1560 if (false == vc_mgr_client_get_exclusive_command(g_vc_m)) {
1561 __vc_mgr_notify_all_result(NULL);
1563 __vc_mgr_notify_result(0);
1569 void __vc_mgr_cb_system_result()
1571 __vc_mgr_notify_result(NULL);
1575 static Eina_Bool __vc_mgr_speech_detected(void *data)
1577 vc_mgr_begin_speech_detected_cb callback = NULL;
1578 void* user_data = NULL;
1580 vc_mgr_client_get_speech_detected_cb(g_vc_m, &callback, &user_data);
1581 if (NULL == callback) {
1582 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Client speech detected callback is NULL");
1586 vc_mgr_client_use_callback(g_vc_m);
1587 callback(user_data);
1588 vc_mgr_client_not_use_callback(g_vc_m);
1589 SLOG(LOG_DEBUG, TAG_VCM, "Speech detected callback called");
1594 void __vc_mgr_cb_speech_detected()
1596 __vc_mgr_speech_detected(NULL);
1601 int vc_mgr_set_all_result_cb(vc_mgr_all_result_cb callback, void* user_data)
1603 if (NULL == callback)
1604 return VC_ERROR_INVALID_PARAMETER;
1607 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1608 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : A handle is not available");
1609 return VC_ERROR_INVALID_STATE;
1613 if (state != VC_STATE_INITIALIZED) {
1614 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : Current state is not 'Initialized'");
1615 return VC_ERROR_INVALID_STATE;
1618 vc_mgr_client_set_all_result_cb(g_vc_m, callback, user_data);
1620 SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] Set all result callback");
1625 int vc_mgr_unset_all_result_cb()
1628 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1629 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : A handle is not available");
1630 return VC_ERROR_INVALID_STATE;
1634 if (state != VC_STATE_INITIALIZED) {
1635 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : Current state is not 'Initialized'");
1636 return VC_ERROR_INVALID_STATE;
1639 vc_mgr_client_set_all_result_cb(g_vc_m, NULL, NULL);
1644 int vc_mgr_set_result_cb(vc_result_cb callback, void* user_data)
1646 if (NULL == callback)
1647 return VC_ERROR_INVALID_PARAMETER;
1650 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1651 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : A handle is not available");
1652 return VC_ERROR_INVALID_STATE;
1656 if (state != VC_STATE_INITIALIZED) {
1657 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set result callback : Current state is not 'Initialized'");
1658 return VC_ERROR_INVALID_STATE;
1661 vc_mgr_client_set_result_cb(g_vc_m, callback, user_data);
1666 int vc_mgr_unset_result_cb()
1669 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1670 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : A handle is not available");
1671 return VC_ERROR_INVALID_STATE;
1675 if (state != VC_STATE_INITIALIZED) {
1676 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset result callback : Current state is not 'Initialized'");
1677 return VC_ERROR_INVALID_STATE;
1680 vc_mgr_client_set_result_cb(g_vc_m, NULL, NULL);
1685 static Eina_Bool __vc_mgr_notify_error(void *data)
1687 vc_h vc_m = (vc_h)data;
1689 vc_error_cb callback = NULL;
1690 void* user_data = NULL;
1693 vc_mgr_client_get_error_cb(vc_m, &callback, &user_data);
1694 vc_mgr_client_get_error(vc_m, &reason);
1696 if (NULL != callback) {
1697 vc_mgr_client_use_callback(vc_m);
1698 callback(reason, user_data);
1699 vc_mgr_client_not_use_callback(vc_m);
1700 SLOG(LOG_DEBUG, TAG_VCM, "Error callback is called");
1702 SLOG(LOG_WARN, TAG_VCM, "[WARNING] Error callback is null");
1708 int __vc_mgr_cb_error(int pid, int reason)
1710 if (0 != vc_mgr_client_get_handle(pid, &g_vc_m)) {
1711 SLOG(LOG_ERROR, TAG_VCM, "Handle is not valid");
1715 vc_mgr_client_set_error(g_vc_m, reason);
1716 __vc_mgr_notify_error(g_vc_m);
1721 static Eina_Bool __vc_mgr_notify_state_changed(void *data)
1723 vc_state_changed_cb changed_callback = NULL;
1726 vc_mgr_client_get_state_changed_cb(g_vc_m, &changed_callback, &user_data);
1728 vc_state_e current_state;
1729 vc_state_e before_state;
1731 vc_mgr_client_get_before_state(g_vc_m, ¤t_state, &before_state);
1733 if (NULL != changed_callback) {
1734 vc_mgr_client_use_callback(g_vc_m);
1735 changed_callback(before_state, current_state, user_data);
1736 vc_mgr_client_not_use_callback(g_vc_m);
1737 SLOG(LOG_DEBUG, TAG_VCM, "State changed callback is called");
1739 SLOG(LOG_WARN, TAG_VCM, "[WARNING] State changed callback is null");
1745 int vc_mgr_set_state_changed_cb(vc_state_changed_cb callback, void* user_data)
1747 if (callback == NULL)
1748 return VC_ERROR_INVALID_PARAMETER;
1751 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1752 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : A handle is not available");
1753 return VC_ERROR_INVALID_STATE;
1757 if (state != VC_STATE_INITIALIZED) {
1758 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : Current state is not 'Initialized'");
1759 return VC_ERROR_INVALID_STATE;
1762 vc_mgr_client_set_state_changed_cb(g_vc_m, callback, user_data);
1767 int vc_mgr_unset_state_changed_cb()
1770 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1771 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : A handle is not available");
1772 return VC_ERROR_INVALID_STATE;
1776 if (state != VC_STATE_INITIALIZED) {
1777 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : Current state is not 'Initialized'");
1778 return VC_ERROR_INVALID_STATE;
1781 vc_mgr_client_set_state_changed_cb(g_vc_m, NULL, NULL);
1786 int vc_mgr_set_service_state_changed_cb(vc_service_state_changed_cb callback, void* user_data)
1788 if (callback == NULL)
1789 return VC_ERROR_INVALID_PARAMETER;
1792 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1793 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : A handle is not available");
1794 return VC_ERROR_INVALID_STATE;
1798 if (state != VC_STATE_INITIALIZED) {
1799 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : Current state is not 'Initialized'");
1800 return VC_ERROR_INVALID_STATE;
1803 vc_mgr_client_set_service_state_changed_cb(g_vc_m, callback, user_data);
1808 int vc_mgr_unset_service_state_changed_cb()
1811 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1812 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : A handle is not available");
1813 return VC_ERROR_INVALID_STATE;
1817 if (state != VC_STATE_INITIALIZED) {
1818 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : Current state is not 'Initialized'");
1819 return VC_ERROR_INVALID_STATE;
1822 vc_mgr_client_set_service_state_changed_cb(g_vc_m, NULL, NULL);
1826 int vc_mgr_set_speech_detected_cb(vc_mgr_begin_speech_detected_cb callback, void* user_data)
1828 if (callback == NULL)
1829 return VC_ERROR_INVALID_PARAMETER;
1832 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1833 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set state changed callback : A handle is not available");
1834 return VC_ERROR_INVALID_STATE;
1838 if (state != VC_STATE_INITIALIZED) {
1839 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set speech detected callback : Current state is not 'Initialized'");
1840 return VC_ERROR_INVALID_STATE;
1843 vc_mgr_client_set_speech_detected_cb(g_vc_m, callback, user_data);
1848 int vc_mgr_unset_speech_detected_cb()
1851 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1852 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : A handle is not available");
1853 return VC_ERROR_INVALID_STATE;
1857 if (state != VC_STATE_INITIALIZED) {
1858 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset state changed callback : Current state is not 'Initialized'");
1859 return VC_ERROR_INVALID_STATE;
1862 vc_mgr_client_set_speech_detected_cb(g_vc_m, NULL, NULL);
1866 int vc_mgr_set_current_language_changed_cb(vc_current_language_changed_cb callback, void* user_data)
1868 if (NULL == callback)
1869 return VC_ERROR_INVALID_PARAMETER;
1872 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1873 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set current language changed : A handle is not available");
1874 return VC_ERROR_INVALID_STATE;
1878 if (state != VC_STATE_INITIALIZED) {
1879 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set current language changed : Current state is not 'Initialized'");
1880 return VC_ERROR_INVALID_STATE;
1883 vc_mgr_client_set_current_lang_changed_cb(g_vc_m, callback, user_data);
1888 int vc_mgr_unset_current_language_changed_cb()
1891 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1892 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset current language changed : A handle is not available");
1893 return VC_ERROR_INVALID_STATE;
1897 if (state != VC_STATE_INITIALIZED) {
1898 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset current language changed : Current state is not 'Initialized'");
1899 return VC_ERROR_INVALID_STATE;
1902 vc_mgr_client_set_current_lang_changed_cb(g_vc_m, NULL, NULL);
1907 int vc_mgr_set_error_cb(vc_error_cb callback, void* user_data)
1909 if (NULL == callback)
1910 return VC_ERROR_INVALID_PARAMETER;
1913 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1914 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set error callback : A handle is not available");
1915 return VC_ERROR_INVALID_STATE;
1919 if (state != VC_STATE_INITIALIZED) {
1920 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Set error callback : Current state is not 'Initialized'");
1921 return VC_ERROR_INVALID_STATE;
1924 vc_mgr_client_set_error_cb(g_vc_m, callback, user_data);
1929 int vc_mgr_unset_error_cb()
1932 if (0 != vc_mgr_client_get_client_state(g_vc_m, &state)) {
1933 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset error callback : A handle is not available");
1934 return VC_ERROR_INVALID_STATE;
1938 if (state != VC_STATE_INITIALIZED) {
1939 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Unset error callback : Current state is not 'Initialized'");
1940 return VC_ERROR_INVALID_STATE;
1943 vc_mgr_client_set_error_cb(g_vc_m, NULL, NULL);
1948 static bool __vc_mgr_check_demandable_client(int pid)
1950 if (0 == g_slist_length(g_demandable_client_list)) {
1951 SLOG(LOG_WARN, TAG_VCM, "[WARNING] No demandable clients");
1955 char appid[128] = {'\0', };
1956 aul_app_get_appid_bypid(pid, appid, sizeof(appid));
1958 if (0 >= strlen(appid)) {
1959 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No appid");
1962 SLOG(LOG_DEBUG, TAG_VCM, "[CHECK] Appid - %s", appid);
1964 GSList *iter = NULL;
1965 vc_demandable_client_s* temp_client;
1966 iter = g_slist_nth(g_demandable_client_list, 0);
1968 while (NULL != iter) {
1969 temp_client = iter->data;
1971 if (NULL != temp_client) {
1972 if (NULL != temp_client->appid) {
1973 if (!strcmp(temp_client->appid, appid)) {
1974 SLOG(LOG_DEBUG, TAG_VCM, "pid(%d) is available", pid);
1980 iter = g_slist_next(iter);
1987 int __vc_mgr_request_auth_enable(int pid)
1989 if (false == __vc_mgr_check_demandable_client(pid)) {
1990 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Not demandable client");
1991 return VC_ERROR_INVALID_PARAMETER;
1994 /* check already authorized */
1995 if (true == vc_mgr_client_is_authorized_client(g_vc_m, pid)) {
1996 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Already authorized");
1997 return VC_ERROR_INVALID_PARAMETER;
2000 /* add authorized list */
2001 if (0 != vc_mgr_client_add_authorized_client(g_vc_m, pid)) {
2002 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to add authorized client");
2003 return VC_ERROR_OPERATION_FAILED;
2006 /* foreground check */
2008 if (0 != vc_config_mgr_get_foreground(&fore_pid)) {
2009 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to get foreground");
2010 return VC_ERROR_OPERATION_FAILED;
2013 if (pid == fore_pid) {
2014 vc_mgr_client_set_valid_authorized_client(g_vc_m, pid);
2020 int __vc_mgr_request_auth_disable(int pid)
2022 /* check authorized */
2023 if (false == vc_mgr_client_is_authorized_client(g_vc_m, pid)) {
2024 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No authorized");
2025 return VC_ERROR_INVALID_PARAMETER;
2028 /* remove authorized list */
2029 if (0 != vc_mgr_client_remove_authorized_client(g_vc_m, pid)) {
2030 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to remove authorized client");
2031 return VC_ERROR_OPERATION_FAILED;
2034 /* check authority valid */
2035 if (true == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2036 SLOG(LOG_DEBUG, TAG_VCM, "Valid authorized client is removed");
2037 if (0 != vc_mgr_client_set_valid_authorized_client(g_vc_m, -1)) {
2038 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set valid authorized client");
2039 return VC_ERROR_OPERATION_FAILED;
2046 static Eina_Bool __request_auth_start(void* data)
2048 SLOG(LOG_DEBUG, TAG_VCM, "Request Start");
2050 if (0 != vc_mgr_client_set_start_by_client(g_vc_m, true)) {
2051 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set start by client");
2054 if (0 != vc_mgr_start(true, false)) {
2055 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Request start is failed");
2056 /* TODO - Error handling? */
2059 if (0 != vc_mgr_client_set_start_by_client(g_vc_m, false)) {
2060 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to set start by client");
2067 int __vc_mgr_request_auth_start(int pid)
2069 /* check authorized */
2070 if (false == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2071 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No valid authorized client");
2072 return VC_ERROR_INVALID_PARAMETER;
2075 /* add timer for start recording */
2076 ecore_timer_add(0, __request_auth_start, NULL);
2081 static Eina_Bool __request_auth_stop(void* data)
2083 SLOG(LOG_DEBUG, TAG_VCM, "Request Stop");
2085 if (0 != vc_mgr_stop()) {
2086 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Request stop is failed");
2087 /* TODO - Error handling? */
2093 int __vc_mgr_request_auth_stop(int pid)
2095 /* check authorized */
2096 if (false == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2097 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No valid authorized client");
2098 return VC_ERROR_INVALID_PARAMETER;
2101 /* add timer for start recording */
2102 ecore_timer_add(0, __request_auth_stop, NULL);
2107 static Eina_Bool __request_auth_cancel(void* data)
2109 SLOG(LOG_DEBUG, TAG_VCM, "Request Cancel");
2111 if (0 != vc_mgr_cancel()) {
2112 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Request cancel is failed");
2113 /* TODO - Error handling? */
2119 int __vc_mgr_request_auth_cancel(int pid)
2121 /* check authorized */
2122 if (false == vc_mgr_client_is_valid_authorized_client(g_vc_m, pid)) {
2123 SLOG(LOG_ERROR, TAG_VCM, "[ERROR] No valid authorized client");
2124 return VC_ERROR_INVALID_PARAMETER;
2127 /* add timer for start recording */
2128 ecore_timer_add(0, __request_auth_cancel, NULL);