2 * Copyright (c) 2022 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 "vcd_client_data.h"
21 #include "vcd_server.h"
22 #include "vcd_config.h"
26 #include "vcd_setting_stub.h"
27 #include "vcd_mgr_stub.h"
28 #include "vcd_mgr_proxy.h"
29 #include "vcd_widget_stub.h"
30 #include "vcd_widget_proxy.h"
32 static rpc_port_stub_vcd_mgr_stub_vc_mgr_callback_s g_mgr_callback;
34 static pthread_mutex_t g_mgr_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER;
36 static rpc_port_stub_vcd_widget_stub_vc_widget_callback_s g_widget_callback;
38 static pthread_mutex_t g_widget_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER;
40 static rpc_port_stub_vcd_stub_vc_callback_s g_client_callback;
42 static pthread_mutex_t g_client_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER;
44 static rpc_port_stub_vcd_setting_stub_vc_setting_callback_s g_setting_callback;
46 static pthread_mutex_t g_setting_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER;
48 static int g_volume_count = 0;
50 extern int __client_tidl_open_connection();
51 extern int __client_tidl_close_connection();
52 extern int __mgr_tidl_open_connection();
53 extern int __mgr_tidl_close_connection();
54 extern int __widget_tidl_open_connection();
55 extern int __widget_tidl_close_connection();
56 extern int __setting_tidl_open_connection();
57 extern int __setting_tidl_close_connection();
63 static void __request_tidl_connect(vcd_client_type_e type, int pid)
65 char* type_str = NULL;
68 if (VCD_CLIENT_TYPE_MANAGER == type) {
69 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
70 if (NULL == mgr_tidl_info) {
71 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] manager tidl info not allocated");
75 if (mgr_tidl_info->connection_requesting) {
79 ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_connect(mgr_tidl_info->rpc_h);
82 mgr_tidl_info->connection_requesting = true;
85 // TODO: uncomment after client done
86 // } else if (VCD_CLIENT_TYPE_NORMAL == type) {
87 // client_tidl_info_s* client_tidl_info = vcd_client_client_get_tidl_info(pid);
88 // if (NULL == client_tidl_info) {
89 // SLOG(LOG_ERROR, TAG_VCD, "[TIDL] client tidl info not allocated");
93 // if (client_tidl_info->connection_requesting) {
97 // ret = rpc_port_proxy_vcd_client_connect(client_tidl_info->rpc_h);
100 // SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
101 // client_tidl_info->connection_requesting = true;
103 // type_str = "client";
104 } else if (VCD_CLIENT_TYPE_WIDGET == type) {
105 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
106 if (NULL == widget_tidl_info) {
107 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] widget tidl info not allocated");
111 if (widget_tidl_info->connection_requesting) {
115 ret = rpc_port_proxy_vcd_widget_proxy_vcd_widget_connect(widget_tidl_info->rpc_h);
118 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
119 widget_tidl_info->connection_requesting = true;
123 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] client type is NOT valid(%d)", type);
127 if (RPC_PORT_ERROR_NONE != ret) {
128 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Request connection to %s stub. ret(%d)", type_str, ret);
130 SLOG(LOG_INFO, TAG_VCD, "[INFO] Request connection to %s stub. ret(%d)", type_str, ret);
134 void __send_msg_to_mgr(bundle* msg)
136 pthread_mutex_lock(&g_mgr_tidl_info_mutex);
138 SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to manager");
139 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
140 if (NULL == mgr_tidl_info) {
141 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
142 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
146 rpc_port_stub_vcd_mgr_stub_vc_mgr_notify_cb_h handle = mgr_tidl_info->notify_cb;
147 if (NULL == handle) {
148 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
149 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
153 if (0 != rpc_port_stub_vcd_mgr_stub_vc_mgr_notify_cb_invoke(handle, msg)) {
154 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
155 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
158 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
162 void __send_msg(bundle* msg, vcd_client_type_e type, int pid)
164 SLOG(LOG_INFO, TAG_VCD, "[TIDL] send msg start");
166 if (VCD_CLIENT_TYPE_MANAGER == type) {
167 __send_msg_to_mgr(msg);
168 } else if (VCD_CLIENT_TYPE_NORMAL == type) {
169 pthread_mutex_lock(&g_client_tidl_info_mutex);
171 SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to client");
172 client_tidl_info_s* client_tidl_info = vcd_client_get_tidl_info(pid);
173 if (NULL == client_tidl_info) {
174 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
175 pthread_mutex_unlock(&g_client_tidl_info_mutex);
179 rpc_port_stub_vcd_stub_vc_notify_cb_h handle = client_tidl_info->notify_cb;
180 if (NULL == handle) {
181 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
182 pthread_mutex_unlock(&g_client_tidl_info_mutex);
186 if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(handle, pid, msg)) {
187 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
188 pthread_mutex_unlock(&g_client_tidl_info_mutex);
191 pthread_mutex_unlock(&g_client_tidl_info_mutex);
192 } else if (VCD_CLIENT_TYPE_WIDGET == type) {
193 pthread_mutex_lock(&g_widget_tidl_info_mutex);
195 SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to widget");
196 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
197 if (NULL == widget_tidl_info) {
198 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
199 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
203 rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_h handle = widget_tidl_info->notify_cb;
204 if (NULL == handle) {
205 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
206 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
210 if (0 != rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_invoke(handle, msg)) {
211 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
212 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
215 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
217 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] client type is NOT valid(%d)", type);
222 void __send_signal(bundle* msg, vcd_client_type_e type)
224 SLOG(LOG_INFO, TAG_VCD, "[TIDL] send signal start");
226 if (VCD_CLIENT_TYPE_MANAGER == type) {
227 __send_msg_to_mgr(msg);
228 } /* signal to MANAGER */
229 else if (VCD_CLIENT_TYPE_NORMAL == type) {
230 pthread_mutex_lock(&g_client_tidl_info_mutex);
232 int* client_list = NULL;
233 int client_count = 0;
235 ret = vcd_client_get_tidl_list(&client_list, &client_count);
237 client_tidl_info_s* client_tidl_info = NULL;
240 if (0 == ret && 0 < client_count) {
241 for (int i = 0 ; i < client_count ; i++) {
242 pid = client_list[i];
244 client_tidl_info = vcd_client_get_tidl_info(pid);
245 if (NULL == client_tidl_info) {
246 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
250 if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(client_tidl_info->notify_cb, pid, msg)) {
251 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
258 pthread_mutex_unlock(&g_client_tidl_info_mutex);
259 } /* signal to clients */
260 else if (VCD_CLIENT_TYPE_WIDGET == type) {
261 pthread_mutex_lock(&g_widget_tidl_info_mutex);
263 GSList* widget_list = vcd_client_widget_get_tidl_info_list();
265 int count = g_slist_length(widget_list);
268 widget_tidl_info_s *widget_tidl_info = NULL;
271 iter = g_slist_nth(widget_list, 0);
272 for (i = 0; i < count; i++) {
274 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] widget list iterator broken");
278 widget_tidl_info = iter->data;
280 if (NULL == widget_tidl_info) {
281 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] widget list data broken");
285 SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to widget");
287 rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_h handle = widget_tidl_info->notify_cb;
288 if (NULL == handle) {
289 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
293 if (0 != rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_invoke(handle, msg)) {
294 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
298 iter = g_slist_next(iter);
301 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
302 } /* signal to widgets */
307 * TIDL callback functions for VC client
309 static void __vc_create_cb(rpc_port_stub_vcd_stub_vc_context_h context, void *user_data)
311 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_create_cb");
315 rpc_port_stub_vcd_stub_vc_context_get_sender(context, &sender);
317 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Sender is NULL");
321 SLOG(LOG_INFO, TAG_VCD, "[TIDL] sender(%s)", sender); // sender (app_id)
325 static void __vc_terminate_cb(rpc_port_stub_vcd_stub_vc_context_h context, void *user_data)
327 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_terminate_cb");
330 rpc_port_stub_vcd_stub_vc_context_get_tag(context, &tag);
333 int pid = (uintptr_t)tag;
334 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC FINALIZE. pid(%u)", pid);
336 pthread_mutex_lock(&g_client_tidl_info_mutex);
337 client_tidl_info_s* tidl_info = vcd_client_get_tidl_info(pid);
338 if (NULL == tidl_info) {
339 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get client tidl info.");
340 pthread_mutex_unlock(&g_client_tidl_info_mutex);
344 if (0 != vcd_client_unset_tidl_notify_cb(pid)) {
345 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
347 if (0 != vcd_client_unset_tidl_feedback_cb(pid)) {
348 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset feedback callback");
351 if (0 != vcd_client_delete_tidl_info(pid)) {
352 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete client tidl info");
356 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC FINALIZE DONE");
358 pthread_mutex_unlock(&g_client_tidl_info_mutex);
361 rpc_port_stub_vcd_stub_vc_context_set_tag(context, NULL);
364 static void __vc_register_notify_cb_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, rpc_port_stub_vcd_stub_vc_notify_cb_h callback, void *user_data)
366 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_register_notify_cb_cb. pid(%d)", pid);
368 if (NULL == callback) {
369 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
374 ret = vcd_client_add_tidl_info(pid);
376 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
380 ret = vcd_client_set_tidl_notify_cb(pid, callback, user_data);
382 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
384 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
388 static int __vc_register_notify_cb_sync_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, rpc_port_stub_vcd_stub_vc_notify_cb_h callback, void *user_data)
390 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_register_notify_cb_sync_cb. pid(%d)", pid);
392 if (NULL == callback) {
393 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
394 return VCD_ERROR_INVALID_PARAMETER;
398 ret = vcd_client_add_tidl_info(pid);
400 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
404 ret = vcd_client_set_tidl_notify_cb(pid, callback, user_data);
406 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
408 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
414 static void __vc_register_feedback_cb_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, rpc_port_stub_vcd_stub_vc_feedback_cb_h callback, void *user_data)
416 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_register_feedback_cb_cb. pid(%d)", pid);
418 if (NULL == callback) {
419 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
424 ret = vcd_client_add_tidl_info(pid);
426 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
430 ret = vcd_client_set_tidl_feedback_cb(pid, callback, user_data);
432 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set feedback callback.");
434 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set feedback callback.");
438 static int __vc_register_feedback_cb_sync_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, rpc_port_stub_vcd_stub_vc_feedback_cb_h callback, void *user_data)
440 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_register_feedback_cb_sync_cb. pid(%d)", pid);
442 if (NULL == callback) {
443 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
444 return VCD_ERROR_INVALID_PARAMETER;
448 ret = vcd_client_add_tidl_info(pid);
450 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
454 ret = vcd_client_set_tidl_feedback_cb(pid, callback, user_data);
456 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set feedback callback.");
458 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set feedback callback.");
464 static int __vc_initialize_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int *mgr_pid, int *service_state, int *daemon_pid, void *user_data)
466 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_initialize_cb. pid(%d)", pid);
468 int ret = VCD_ERROR_OPERATION_FAILED;
470 uintptr_t ptr_pid = pid;
471 rpc_port_stub_vcd_stub_vc_context_set_tag(context, (void*)ptr_pid);
473 ret = vcd_server_initialize(pid);
474 *service_state = vcd_server_get_service_state();
475 *daemon_pid = getpid();
476 *mgr_pid = vcd_client_manager_get_pid();
478 if (VCD_ERROR_NONE == ret) {
479 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd initialize : pid(%d) daemon_pid(%d)", pid, *daemon_pid);
481 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd initialize : pid(%d) daemon_pid(%d) ret(%d)", pid, *daemon_pid, ret);
487 static int __vc_finalize_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, void *user_data)
489 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_finalize_cb");
491 int ret = VCD_ERROR_OPERATION_FAILED;
493 ret = vcd_server_finalize(pid);
494 if (VCD_ERROR_NONE == ret) {
495 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd finalize : pid(%d)", pid);
497 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd finalize : pid(%d) ret(%d)", pid, ret);
503 static int __vc_set_command_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int cmd_type, void *user_data)
505 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_set_command_cb");
507 int ret = VCD_ERROR_OPERATION_FAILED;
509 ret = vcd_server_set_command(pid, (vc_cmd_type_e)cmd_type);
510 if (VCD_ERROR_NONE == ret) {
511 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd set command : pid(%d), cmd_type(%d)", pid, cmd_type);
513 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd set command : pid(%d), cmd_type(%d) ret(%d)", pid, cmd_type, ret);
519 static int __vc_unset_command_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int cmd_type, void *user_data)
521 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_unset_command_cb");
523 int ret = VCD_ERROR_OPERATION_FAILED;
525 ret = vcd_server_unset_command(pid, (vc_cmd_type_e)cmd_type);
526 if (VCD_ERROR_NONE == ret) {
527 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd unset command : pid(%d), cmd_type(%d)", pid, cmd_type);
529 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd unset command : pid(%d), cmd_type(%d) ret(%d)", pid, cmd_type, ret);
535 static int __vc_set_foreground_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, bool value, void *user_data)
538 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_set_foreground_cb");
540 int ret = VCD_ERROR_OPERATION_FAILED;
542 ret = vcd_server_set_foreground(pid, value);
543 if (VCD_ERROR_NONE != ret) {
544 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd set foreground : pid(%d) ret(%d)", pid, ret);
548 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd set foreground : pid(%d)", pid);
549 vcdc_send_request_set_foreground(pid, value);
554 static int __vc_set_server_dialog_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, const char *app_id, const char *credential, void *user_data)
556 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_set_server_dialog_cb");
558 int ret = VCD_ERROR_OPERATION_FAILED;
560 ret = vcd_server_set_server_dialog(pid, app_id, credential);
561 if (VCD_ERROR_NONE == ret) {
562 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd set server dialog : pid(%d), app_id(%s)", pid, app_id);
564 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd set server dialog : pid(%d), app_id(%s) ret(%d)", pid, app_id, ret);
570 static int __vc_request_dialog_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, const char *disp_text, const char *utt_text, bool continuous, void *user_data)
572 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_request_dialog_cb");
574 int ret = VCD_ERROR_OPERATION_FAILED;
576 ret = vcd_server_dialog(pid, disp_text, utt_text, continuous);
577 if (VCD_ERROR_NONE == ret) {
578 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd request dialog : pid(%d), disp_text(%s), utt_text(%s), continuous(%d)", pid, disp_text, utt_text, continuous);
580 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd request dialog : pid(%d), disp_text(%s), utt_text(%s), continuous(%d), ret(%d)", pid, disp_text, utt_text, continuous, ret);
583 return VCD_ERROR_NONE;
586 static int __vc_is_system_command_valid_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, bool *is_sys_cmd_valid, void *user_data)
588 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_is_system_command_valid_cb");
590 int ret = VCD_ERROR_OPERATION_FAILED;
592 ret = vcd_server_is_system_command_valid(pid, (int*)is_sys_cmd_valid);
593 if (VCD_ERROR_NONE == ret) {
594 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd check system command is valid : pid(%d), is_sys_cmd_valid(%d)", pid, *is_sys_cmd_valid);
596 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd check system command is valid : pid(%d), ret(%d)", pid, ret);
602 static int __vc_auth_enable_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int mgr_pid, void *user_data)
604 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_auth_enable_cb. Send a request to vc_mgr");
606 int ret = VCD_ERROR_OPERATION_FAILED;
607 ret = vcdc_send_request_auth_enable(pid);
608 if (VCD_ERROR_NONE == ret) {
609 SLOG(LOG_INFO, TAG_VCD, "[SUCCESS] Send request auth enable. pid(%d), mgr_pid(%d)", pid, mgr_pid);
611 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send request auth enable. ret(%d), pid(%d), mgr_pid(%d)", ret, pid, mgr_pid);
617 static int __vc_auth_disable_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int mgr_pid, void *user_data)
619 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_auth_disable_cb. Send a request to vc_mgr");
621 int ret = VCD_ERROR_OPERATION_FAILED;
622 ret = vcdc_send_request_auth_disable(pid);
623 if (VCD_ERROR_NONE == ret) {
624 SLOG(LOG_INFO, TAG_VCD, "[SUCCESS] Send request auth disable. pid(%d), mgr_pid(%d)", pid, mgr_pid);
626 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send request auth disable. ret(%d), pid(%d), mgr_pid(%d)", ret, pid, mgr_pid);
632 static int __vc_auth_start_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int mgr_pid, void *user_data)
634 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_auth_start_cb. Send a request to vc_mgr");
636 int ret = VCD_ERROR_OPERATION_FAILED;
637 ret = vcdc_send_request_auth_start(pid);
638 if (VCD_ERROR_NONE == ret) {
639 SLOG(LOG_INFO, TAG_VCD, "[SUCCESS] Send request auth start. pid(%d), mgr_pid(%d)", pid, mgr_pid);
641 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send request auth start. ret(%d), pid(%d), mgr_pid(%d)", ret, pid, mgr_pid);
647 static int __vc_auth_stop_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int mgr_pid, void *user_data)
649 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_auth_stop_cb. Send a request to vc_mgr");
651 int ret = VCD_ERROR_OPERATION_FAILED;
652 ret = vcdc_send_request_auth_stop(pid);
653 if (VCD_ERROR_NONE == ret) {
654 SLOG(LOG_INFO, TAG_VCD, "[SUCCESS] Send request auth stop. pid(%d), mgr_pid(%d)", pid, mgr_pid);
656 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send request auth stop. ret(%d), pid(%d), mgr_pid(%d)", ret, pid, mgr_pid);
662 static int __vc_auth_cancel_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int mgr_pid, void *user_data)
664 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_auth_cancel_cb. Send a request to vc_mgr");
666 int ret = VCD_ERROR_OPERATION_FAILED;
667 ret = vcdc_send_request_auth_cancel(pid);
668 if (VCD_ERROR_NONE == ret) {
669 SLOG(LOG_INFO, TAG_VCD, "[SUCCESS] Send request auth cancel. pid(%d), mgr_pid(%d)", pid, mgr_pid);
671 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send request auth cancel. ret(%d), pid(%d), mgr_pid(%d)", ret, pid, mgr_pid);
677 static int __vc_request_tts_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, const char *text, const char *lang, bool to_vcm, int *utt_id, void *user_data)
679 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_request_tts_cb");
681 int ret = VCD_ERROR_OPERATION_FAILED;
683 ret = vcd_server_request_tts(pid, text, lang, to_vcm, utt_id);
684 if (VCD_ERROR_NONE == ret) {
685 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd request tts : pid(%d), text(%s), language(%s), to_vcm(%d)", pid, text, lang, to_vcm);
687 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd request tts : pid(%d), text(%s), language(%s), to_vcm(%d), ret(%d)", pid, text, lang, to_vcm, ret);
693 static int __vc_cancel_tts_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int utt_id, void *user_data)
695 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_cancel_tts_cb");
697 int ret = VCD_ERROR_OPERATION_FAILED;
699 ret = vcd_server_cancel_tts(pid, utt_id);
700 if (VCD_ERROR_NONE == ret) {
701 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd cancel tts : pid(%d), utt_id(%d)", pid, utt_id);
703 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd cancel tts : pid(%d), utt_id(%d), ret(%d)", pid, utt_id, ret);
709 static int __vc_get_tts_audio_format_cb(rpc_port_stub_vcd_stub_vc_context_h context, int pid, int *rate, int *channel, int *audio_type, void *user_data)
711 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_get_tts_audio_format_cb");
713 int ret = VCD_ERROR_OPERATION_FAILED;
715 ret = vcd_server_get_tts_audio_format(pid, rate, channel, audio_type);
716 if (VCD_ERROR_NONE == ret) {
717 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd get tts audio format : pid(%d), rate(%d), channel(%d), audio_type(%d)", pid, *rate, *channel, *audio_type);
719 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to vcd get tts audio format : pid(%d) ret(%d)", pid, ret);
725 int __client_tidl_open_connection()
727 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __client_tidl_open_connection");
729 g_client_callback.create = __vc_create_cb;
730 g_client_callback.terminate = __vc_terminate_cb;
731 g_client_callback.register_notify_cb = __vc_register_notify_cb_cb;
732 g_client_callback.register_notify_cb_sync = __vc_register_notify_cb_sync_cb;
733 g_client_callback.register_feedback_cb = __vc_register_feedback_cb_cb;
734 g_client_callback.register_feedback_cb_sync = __vc_register_feedback_cb_sync_cb;
735 g_client_callback.initialize = __vc_initialize_cb;
736 g_client_callback.finalize = __vc_finalize_cb;
737 g_client_callback.set_command = __vc_set_command_cb;
738 g_client_callback.unset_command = __vc_unset_command_cb;
739 g_client_callback.set_foreground = __vc_set_foreground_cb;
740 g_client_callback.set_server_dialog = __vc_set_server_dialog_cb;
741 g_client_callback.request_dialog = __vc_request_dialog_cb;
742 g_client_callback.is_system_command_valid = __vc_is_system_command_valid_cb;
743 g_client_callback.auth_enable = __vc_auth_enable_cb;
744 g_client_callback.auth_disable = __vc_auth_disable_cb;
745 g_client_callback.auth_start = __vc_auth_start_cb;
746 g_client_callback.auth_stop = __vc_auth_stop_cb;
747 g_client_callback.auth_cancel = __vc_auth_cancel_cb;
748 g_client_callback.request_tts = __vc_request_tts_cb;
749 g_client_callback.cancel_tts = __vc_cancel_tts_cb;
750 g_client_callback.get_tts_audio_format = __vc_get_tts_audio_format_cb;
753 ret = rpc_port_stub_vcd_stub_vc_register(&g_client_callback, NULL);
754 if (VCD_ERROR_NONE != ret) {
755 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to register TIDL callbacks. ret(%d)", ret);
756 return VCD_ERROR_OPERATION_FAILED;
759 return VCD_ERROR_NONE;
762 int __client_tidl_close_connection()
764 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __client_tidl_close_connection");
765 rpc_port_stub_vcd_stub_vc_unregister();
767 return VCD_ERROR_NONE;
771 * TIDL callback functions for VC manager
773 static void __mgr_on_connected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
775 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
777 if (NULL == mgr_tidl_info) {
778 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
782 mgr_tidl_info->connected = true;
783 mgr_tidl_info->connection_requesting = false;
785 SLOG(LOG_INFO, TAG_VCD, "Connected to manager");
788 static void __mgr_on_disconnected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
790 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
792 if (NULL == mgr_tidl_info) {
793 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
797 mgr_tidl_info->connected = false;
798 mgr_tidl_info->connection_requesting = false;
800 SLOG(LOG_INFO, TAG_VCD, "Disonnected to manager");
803 static void __mgr_on_rejected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data)
805 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
807 if (NULL == mgr_tidl_info) {
808 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
812 mgr_tidl_info->connection_requesting = false;
814 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from manager");
817 static rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h __mgr_create_rpc_port(const char* engine_app_id)
819 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_create_rpc_port");
820 rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_callback_s rpc_callback = {
821 .connected = __mgr_on_connected,
822 .disconnected = __mgr_on_disconnected,
823 .rejected = __mgr_on_rejected
826 rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h handle = NULL;
827 if (0 != rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_create(engine_app_id, &rpc_callback, NULL, &handle)) {
828 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy");
835 static void __vc_mgr_create_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data)
839 rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
841 SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
845 SLOG(LOG_DEBUG, TAG_VCD, "@@@ Manager connect. appid(%s)", sender);
847 pthread_mutex_lock(&g_mgr_tidl_info_mutex);
849 ret = vcd_client_manager_create_tidl_info();
852 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create manager tidl info.");
854 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
858 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
860 if (NULL == mgr_tidl_info) {
861 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info");
863 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
867 mgr_tidl_info->rpc_h = __mgr_create_rpc_port(sender);
869 if (NULL == mgr_tidl_info->rpc_h) {
870 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy");
872 SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", mgr_tidl_info->rpc_h, sender);
876 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
877 __request_tidl_connect(VCD_CLIENT_TYPE_MANAGER, -1);
880 static void __vc_mgr_terminate_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data)
882 pthread_mutex_lock(&g_mgr_tidl_info_mutex);
883 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
884 if (NULL == mgr_tidl_info) {
885 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info.");
886 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
890 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC MANAGER FINALIZE.");
892 if (0 != vcd_client_manager_unset_tidl_notify_cb()) {
893 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
896 if (0 != vcd_client_manager_unset_tidl_send_buffer_cb()) {
897 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset send buffer callback");
900 if (0 != vcd_client_manager_delete_tidl_info()) {
901 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete manager tidl info");
903 mgr_tidl_info = NULL;
905 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
909 rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender);
913 SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender);
918 static void __vc_mgr_register_cb_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, rpc_port_stub_vcd_mgr_stub_vc_mgr_notify_cb_h notify_callback, rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h send_buffer_callback, void *user_data)
920 pthread_mutex_lock(&g_mgr_tidl_info_mutex);
921 SLOG(LOG_INFO, TAG_VCD, "@@@ VC MANAGER REGISTER CALLBACK");
923 if (0 != vcd_client_manager_set_tidl_notify_cb(notify_callback, user_data)) {
924 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback");
926 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
929 if (0 != vcd_client_manager_set_tidl_send_buffer_cb(send_buffer_callback, user_data)) {
930 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set send buffer callback");
932 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set send buffer callback.");
935 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
937 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC MANAGER REGISTER CALLBACK DONE");
940 static int __vc_mgr_initialize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int audio_streaming_mode, int *service_state, int *foreground, int *daemon_pid, void *user_data)
942 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Initialize : pid(%d) service state(%d) foreground(%d) daemon_pid(%d)", pid, *service_state, *foreground, *daemon_pid);
946 vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)audio_streaming_mode);
947 ret = vcd_server_mgr_initialize(pid, audio_streaming_mode);
949 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
952 *service_state = vcd_server_get_service_state();
953 *foreground = vcd_server_get_foreground();
954 *daemon_pid = getpid();
956 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr initialize : pid(%d) service state(%d) foreground(%d) daemon_pid(%d)", pid, *service_state, *foreground, *daemon_pid);
960 static int __vc_mgr_finalize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
962 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Finalize : pid(%d)", pid);
966 ret = vcd_server_mgr_finalize(pid);
968 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
971 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr finalize : pid(%d)", pid);
976 static int __vc_mgr_set_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
978 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Set command : pid(%d)", pid);
982 ret = vcd_server_mgr_set_command(pid);
984 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
988 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set command : pid(%d)", pid);
993 static int __vc_mgr_unset_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
995 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager unset command : pid(%d)", pid);
999 ret = vcd_server_mgr_unset_command(pid);
1001 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1005 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr unset command : pid(%d)", pid);
1010 static int __vc_mgr_set_demandable_client_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
1012 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Set demandable client : pid(%d)", pid);
1016 ret = vcd_server_mgr_set_demandable_client(pid);
1018 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1022 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set demandable client : pid(%d)", pid);
1027 static int __vc_mgr_set_audio_type_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *audio_type, void *user_data)
1029 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager set audio type : pid(%d), audio type(%s)", pid, audio_type);
1033 ret = vcd_server_mgr_set_audio_type(pid, audio_type);
1035 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1039 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d), audio type(%s)", pid, audio_type);
1044 static int __vc_mgr_get_audio_type_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, char **audio_type, void *user_data)
1046 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager get audio type : pid(%d)", pid);
1049 char* tmp_audio_type = NULL;
1051 ret = vcd_server_mgr_get_audio_type(pid, &tmp_audio_type);
1053 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1054 free(tmp_audio_type);
1058 *audio_type = strdup(tmp_audio_type);
1059 free(tmp_audio_type);
1061 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d)", pid);
1066 static void __vc_mgr_set_private_data_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *key, const char *data, void *user_data)
1068 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager set private data : pid(%d), key(%s), data(%s)", pid, key, data);
1072 ret = vcd_server_mgr_set_private_data(pid, key, data);
1074 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set private data");
1075 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1078 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set private data : pid(%d), key(%s), data(%s)", pid, key, data);
1081 static int __vc_mgr_get_private_data_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *key, char **data, void *user_data)
1083 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager get private data : pid(%d), key(%s)", pid, key);
1086 char *temp_data = NULL;
1088 ret = vcd_server_mgr_get_private_data(pid, key, &temp_data);
1090 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1093 if (NULL == temp_data) {
1094 SLOG(LOG_INFO, TAG_VCD, "data parameter is NULL");
1095 temp_data = strdup("#NULL");
1098 *data = strdup(temp_data);
1101 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr get private data : pid(%d), key(%s)", pid, key);
1106 static int __vc_mgr_set_client_info_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
1108 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager set client info : pid(%d)", pid);
1112 ret = vcd_server_mgr_set_client_info(pid);
1114 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1118 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set client info : pid(%d)", pid);
1123 static int __vc_mgr_set_domain_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *domain, void *user_data)
1125 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager set domain type : pid(%d), domain(%s)", pid, domain);
1129 ret = vcd_server_mgr_set_domain(pid, domain);
1131 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1135 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), domain(%s)", pid, domain);
1140 static void __vc_mgr_do_action_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int type, const char *send_event, void *user_data)
1142 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager request to do action : pid(%d), type(%d) send_event(%s)", pid, type, send_event);
1146 ret = vcd_server_mgr_do_action(pid, type, send_event);
1148 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1151 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr request to do action : pid(%d), type(%d) send_event(%s)", pid, type, send_event);
1154 static int __vc_mgr_start_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int recognition_mode, bool exclusive_command_option, bool start_by_client, int disabled_cmd_type, void *user_data)
1156 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager start");
1157 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd check enabled or disabled command types. disabled cmd type(%d)", disabled_cmd_type);
1161 vcd_server_mgr_set_disabled_command_type(pid, disabled_cmd_type);
1163 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr start : pid(%d) recognition_mode(%d) exclusive(%d) start by client(%d)", pid, recognition_mode, exclusive_command_option, start_by_client);
1164 ret = vcd_server_mgr_start((vcd_recognition_mode_e)recognition_mode, exclusive_command_option, start_by_client);
1166 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1170 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager start DONE");
1175 static int __vc_mgr_stop_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
1177 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager stop : pid(%d)", pid);
1181 ret = vcd_server_mgr_stop();
1184 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1188 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr stop : pid(%d)", pid);
1193 static int __vc_mgr_cancel_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
1195 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager cancel : pid(%d)", pid);
1199 ret = vcd_server_mgr_cancel();
1201 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1205 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr cancel : pid(%d)", pid);
1210 static void __vc_mgr_set_audio_streaming_mode_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int mode, void *user_data)
1212 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager set audio streaming mode : pid(%d) mode(%d)", pid, mode);
1214 vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)mode);
1216 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio streaming mode : pid(%d) mode(%d)", pid, mode);
1219 static void __vc_mgr_send_specific_engine_request_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, const char *engine_app_id, const char *event, const char *request, void *user_data)
1221 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager specific engine request");
1224 gsize decodingSize = 0;
1225 gchar *gDecodedRequest = (gchar *)g_base64_decode((const gchar *)request, &decodingSize);
1227 if (gDecodedRequest) {
1228 ret = vcd_server_mgr_send_specific_engine_request(pid, engine_app_id, event, gDecodedRequest);
1230 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1233 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr specific engine request : pid(%d), engine_app_id(%s), event(%s), request(%s), ret(%d)", pid, engine_app_id, event, gDecodedRequest, ret);
1234 g_free(gDecodedRequest);
1237 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager specific engine request DONE");
1240 static void __vc_mgr_send_result_selection_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data)
1242 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager result selection : pid(%d)", pid);
1244 vcd_server_mgr_result_select();
1246 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr result selection : pid(%d)", pid);
1249 static void __vc_mgr_send_utterance_status_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int utt_id, int utt_status, void *user_data)
1251 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager send utterance status : pid(%d), utt_id(%d), utt_status(%d)", pid, utt_id, utt_status);
1253 pthread_mutex_lock(&g_client_tidl_info_mutex);
1255 SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to client");
1256 client_tidl_info_s* client_tidl_info = vcd_client_get_tidl_info(pid);
1257 if (NULL == client_tidl_info) {
1258 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated");
1259 pthread_mutex_unlock(&g_client_tidl_info_mutex);
1263 rpc_port_stub_vcd_stub_vc_notify_cb_h handle = client_tidl_info->notify_cb;
1264 if (NULL == handle) {
1265 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
1266 pthread_mutex_unlock(&g_client_tidl_info_mutex);
1270 bundle* msg = bundle_create();
1272 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
1273 pthread_mutex_unlock(&g_client_tidl_info_mutex);
1277 char pid_char[10] = {0};
1278 char uttid_char[10] = {0};
1279 char uttstatus_char[10] = {0};
1280 snprintf(pid_char, 10, "%d", pid);
1281 snprintf(uttid_char, 10, "%d", utt_id);
1282 snprintf(uttstatus_char, 10, "%d", utt_status);
1284 bundle_add_str(msg, VC_BUNDLE_METHOD, VC_MANAGER_METHOD_UTTERANCE_STATUS);
1285 bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
1286 bundle_add_str(msg, VC_BUNDLE_REASON, uttid_char);
1287 bundle_add_str(msg, VC_BUNDLE_ERR_MSG, uttstatus_char);
1289 if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(handle, pid, msg)) {
1290 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
1292 pthread_mutex_unlock(&g_client_tidl_info_mutex);
1297 pthread_mutex_unlock(&g_client_tidl_info_mutex);
1299 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send utterance status : pid(%d), utt_id(%d), utt_status(%d)", pid, utt_id, utt_status);
1302 static void __vc_mgr_send_audio_streaming_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, int event, rpc_port_stub_vcd_mgr_stub_array_char_h data, void *user_data)
1304 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager send audio streaming");
1306 char* buffer = NULL;
1309 rpc_port_stub_vcd_mgr_stub_array_char_get(data, &buffer, &len);
1311 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send audio streaming : pid(%d), event(%d), buffer(%p), len(%d)", pid, event, buffer, len);
1313 ret = vcd_server_mgr_send_audio_streaming(pid, event, buffer, (unsigned int)len);
1315 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1318 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager send audio streaming DONE");
1321 int __mgr_tidl_open_connection()
1323 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_tidl_open_connection");
1325 g_mgr_callback.create = __vc_mgr_create_cb;
1326 g_mgr_callback.terminate = __vc_mgr_terminate_cb;
1327 g_mgr_callback.register_cb = __vc_mgr_register_cb_cb;
1328 g_mgr_callback.initialize = __vc_mgr_initialize_cb;
1329 g_mgr_callback.finalize = __vc_mgr_finalize_cb;
1330 g_mgr_callback.set_command = __vc_mgr_set_command_cb;
1331 g_mgr_callback.unset_command = __vc_mgr_unset_command_cb;
1332 g_mgr_callback.demandable_client = __vc_mgr_set_demandable_client_cb;
1333 g_mgr_callback.set_audio_type = __vc_mgr_set_audio_type_cb;
1334 g_mgr_callback.get_audio_type = __vc_mgr_get_audio_type_cb;
1335 g_mgr_callback.set_private_data = __vc_mgr_set_private_data_cb;
1336 g_mgr_callback.get_private_data = __vc_mgr_get_private_data_cb;
1337 g_mgr_callback.set_client_info = __vc_mgr_set_client_info_cb;
1338 g_mgr_callback.set_domain = __vc_mgr_set_domain_cb;
1339 g_mgr_callback.do_action = __vc_mgr_do_action_cb;
1340 g_mgr_callback.start = __vc_mgr_start_cb;
1341 g_mgr_callback.stop = __vc_mgr_stop_cb;
1342 g_mgr_callback.cancel = __vc_mgr_cancel_cb;
1343 g_mgr_callback.set_audio_streaming_mode = __vc_mgr_set_audio_streaming_mode_cb;
1344 g_mgr_callback.send_specific_engine_request = __vc_mgr_send_specific_engine_request_cb;
1345 g_mgr_callback.send_result_selection = __vc_mgr_send_result_selection_cb;
1346 g_mgr_callback.send_utterance_status = __vc_mgr_send_utterance_status_cb;
1347 g_mgr_callback.send_audio_streaming = __vc_mgr_send_audio_streaming_cb;
1351 while (VC_RETRY_MIN_COUNT >= count) {
1352 ret = rpc_port_stub_vcd_mgr_stub_vc_mgr_register(&g_mgr_callback, NULL);
1354 SLOG(LOG_DEBUG, TAG_VCD, "register callback");
1355 return VCD_ERROR_NONE;
1361 SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
1362 return VCD_ERROR_OPERATION_FAILED;
1365 int __mgr_tidl_close_connection()
1367 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
1368 rpc_port_stub_vcd_mgr_stub_vc_mgr_unregister();
1370 return VCD_ERROR_NONE;
1374 * TIDL callback functions for VC widget
1376 static void __widget_on_connected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
1378 int pid = (intptr_t)user_data;
1379 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
1381 widget_tidl_info->connected = true;
1382 widget_tidl_info->connection_requesting = false;
1384 SLOG(LOG_INFO, TAG_VCD, "Connected to widget");
1387 static void __widget_on_disconnected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
1389 int pid = (intptr_t)user_data;
1390 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
1392 widget_tidl_info->connected = false;
1393 widget_tidl_info->connection_requesting = false;
1395 SLOG(LOG_INFO, TAG_VCD, "Disonnected to widget");
1398 static void __widget_on_rejected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data)
1400 int pid = (intptr_t)user_data;
1401 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
1403 widget_tidl_info->connection_requesting = false;
1405 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from widget");
1408 static rpc_port_proxy_vcd_widget_proxy_vcd_widget_h __widget_create_rpc_port(const char* engine_app_id, int pid)
1410 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_create_rpc_port");
1411 rpc_port_proxy_vcd_widget_proxy_vcd_widget_callback_s rpc_callback = {
1412 .connected = __widget_on_connected,
1413 .disconnected = __widget_on_disconnected,
1414 .rejected = __widget_on_rejected
1417 rpc_port_proxy_vcd_widget_proxy_vcd_widget_h handle = NULL;
1418 intptr_t ptr_pid = pid;
1419 if (0 != rpc_port_proxy_vcd_widget_proxy_vcd_widget_create(engine_app_id, &rpc_callback, (void *)ptr_pid, &handle)) {
1420 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy");
1427 static void __vc_widget_create_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data)
1429 char *sender = NULL;
1431 rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
1433 SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
1437 SLOG(LOG_DEBUG, TAG_VCD, "@@@ Widget connect. appid(%s)", sender);
1441 static void __vc_widget_terminate_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data)
1444 rpc_port_stub_vcd_widget_stub_vc_widget_context_get_tag(context, &tag);
1447 int pid = (intptr_t)tag;
1448 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC WIDGET FINALIZE. pid(%u)", pid);
1450 pthread_mutex_lock(&g_widget_tidl_info_mutex);
1451 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
1452 if (NULL == widget_tidl_info) {
1453 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info.");
1454 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
1458 if (0 != vcd_client_widget_unset_tidl_notify_cb(pid)) {
1459 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
1462 if (0 != vcd_client_widget_delete_tidl_info(pid)) {
1463 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete widget tidl info");
1465 widget_tidl_info = NULL;
1467 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
1469 char *sender = NULL;
1470 rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
1474 SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender);
1478 rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, NULL);
1481 static void __vc_widget_register_cb_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, rpc_port_stub_vcd_widget_stub_vc_widget_notify_cb_h notify_callback, void *user_data)
1483 pthread_mutex_lock(&g_widget_tidl_info_mutex);
1484 SLOG(LOG_INFO, TAG_VCD, "@@@ VC WIDGET REGISTER CALLBACK");
1487 ret = vcd_client_widget_add_tidl_info(pid);
1490 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add widget tidl info.");
1491 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
1494 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
1496 if (NULL == widget_tidl_info) {
1497 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info. pid(%d)", pid);
1498 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
1502 char *sender = NULL;
1503 rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender);
1506 SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL");
1507 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
1511 widget_tidl_info->rpc_h = __widget_create_rpc_port(sender, pid);
1513 if (NULL == widget_tidl_info->rpc_h) {
1514 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy");
1516 SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", widget_tidl_info->rpc_h, sender);
1521 if (0 != vcd_client_widget_set_tidl_notify_cb(pid, notify_callback, user_data)) {
1522 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback");
1524 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
1527 pthread_mutex_unlock(&g_widget_tidl_info_mutex);
1529 __request_tidl_connect(VCD_CLIENT_TYPE_WIDGET, pid);
1531 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC WIDGET REGISTER CALLBACK DONE");
1534 static int __vc_widget_initialize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int *service_state, int *daemon_pid, void *user_data)
1536 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Initialize");
1538 uintptr_t ptr_pid = pid;
1541 rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, (void*)ptr_pid);
1543 ret = vcd_server_widget_initialize(pid);
1545 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1548 *service_state = vcd_server_get_service_state();
1549 *daemon_pid = getpid();
1551 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget initialize : pid(%d) service state(%d) daemon_pid(%d)", pid, *service_state, *daemon_pid);
1555 static int __vc_widget_finalize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
1557 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Finalize : pid(%d)", pid);
1561 ret = vcd_server_widget_finalize(pid);
1563 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1567 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget finalize : pid(%d)", pid);
1572 static int __vc_widget_start_recording_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int command, void *user_data)
1574 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Start Recording : pid(%d) command(%d)", pid, command);
1578 ret = vcd_server_widget_start_recording(pid, command);
1580 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1584 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start recording : pid(%d) command(%d)", pid, command);
1589 static int __vc_widget_start_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int silence, void *user_data)
1591 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Start : pid(%d) silence(%d)", pid, silence);
1595 ret = vcd_server_widget_start(pid, (bool)silence);
1597 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1601 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start : pid(%d) silence(%d)", pid, silence);
1606 static int __vc_widget_stop_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
1608 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Stop : pid(%d)", pid);
1612 ret = vcd_server_widget_stop(pid);
1614 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1618 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget stop : pid(%d)", pid);
1623 static int __vc_widget_cancel_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data)
1625 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Cancel : pid(%d)", pid);
1629 ret = vcd_server_widget_cancel(pid);
1631 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1635 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget cancel : pid(%d)", pid);
1640 static int __vc_widget_enable_asr_result_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int enable, void *user_data)
1642 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Enable Asr Result : pid(%d) enable(%d)", pid, enable);
1646 ret = vcd_server_widget_enable_asr_result(pid, enable);
1648 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1652 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget enable asr result : pid(%d) enable(%d)", pid, enable);
1657 static void __vc_widget_set_foreground_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int value, void *user_data)
1659 SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Set Foreground : pid(%d) value(%d)", pid, value);
1663 ret = vcd_server_set_foreground(pid, value);
1665 SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret);
1669 SLOG(LOG_DEBUG, TAG_VCD, "@@@ send request set foreground to manager");
1670 vcdc_send_request_set_foreground(pid, value);
1672 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget set foreground : pid(%d) value(%d)", pid, value);
1677 int __widget_tidl_open_connection()
1679 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_tidl_open_connection");
1681 g_widget_callback.create = __vc_widget_create_cb;
1682 g_widget_callback.terminate = __vc_widget_terminate_cb;
1683 g_widget_callback.register_cb = __vc_widget_register_cb_cb;
1684 g_widget_callback.initialize = __vc_widget_initialize_cb;
1685 g_widget_callback.finalize = __vc_widget_finalize_cb;
1686 g_widget_callback.start_recording = __vc_widget_start_recording_cb;
1687 g_widget_callback.start = __vc_widget_start_cb;
1688 g_widget_callback.stop = __vc_widget_stop_cb;
1689 g_widget_callback.cancel = __vc_widget_cancel_cb;
1690 g_widget_callback.enable_asr_result = __vc_widget_enable_asr_result_cb;
1691 g_widget_callback.set_foreground = __vc_widget_set_foreground_cb;
1695 while (VC_RETRY_MIN_COUNT >= count) {
1696 ret = rpc_port_stub_vcd_widget_stub_vc_widget_register(&g_widget_callback, NULL);
1698 SLOG(LOG_DEBUG, TAG_VCD, "register callback");
1699 return VCD_ERROR_NONE;
1705 SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
1706 return VCD_ERROR_OPERATION_FAILED;
1709 int __widget_tidl_close_connection()
1711 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
1712 rpc_port_stub_vcd_widget_stub_vc_widget_unregister();
1714 return VCD_ERROR_NONE;
1718 * TIDL callback functions for VC setting client
1720 static void __vc_setting_create_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data)
1722 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_create_cb");
1724 char *sender = NULL;
1726 rpc_port_stub_vcd_setting_stub_vc_setting_context_get_sender(context, &sender);
1728 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Sender is NULL");
1732 SLOG(LOG_INFO, TAG_VCD, "[TIDL] sender(%s)", sender); // sender (app_id)
1736 static void __vc_setting_terminate_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data)
1738 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_terminate_cb");
1740 rpc_port_stub_vcd_setting_stub_vc_setting_context_get_tag(context, &tag);
1743 int pid = (intptr_t)tag;
1744 SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC SETTING FINALIZE. pid(%u)", pid);
1746 pthread_mutex_lock(&g_setting_tidl_info_mutex);
1747 setting_tidl_info_s* setting_tidl_info = vcd_client_setting_get_tidl_info(pid);
1748 if (NULL == setting_tidl_info) {
1749 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get setting tidl info.");
1750 pthread_mutex_unlock(&g_setting_tidl_info_mutex);
1754 if (0 != vcd_client_setting_unset_tidl_notify_cb(pid)) {
1755 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback");
1758 if (0 != vcd_client_setting_delete_tidl_info(pid)) {
1759 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete setting tidl info");
1761 setting_tidl_info = NULL;
1763 pthread_mutex_unlock(&g_setting_tidl_info_mutex);
1765 rpc_port_stub_vcd_setting_stub_vc_setting_context_set_tag(context, NULL);
1768 static void __vc_setting_register_notify_cb_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, rpc_port_stub_vcd_setting_stub_vc_setting_notify_cb_h callback, void *user_data)
1770 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_cb. pid(%d)", pid);
1772 if (NULL == callback) {
1773 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
1778 ret = vcd_client_setting_add_tidl_info(pid);
1780 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
1784 ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data);
1786 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
1788 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
1792 static int __vc_setting_register_notify_cb_sync_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, rpc_port_stub_vcd_setting_stub_vc_setting_notify_cb_h callback, void *user_data)
1794 SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_sync_cb. pid(%d)", pid);
1796 if (NULL == callback) {
1797 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null.");
1798 return VCD_ERROR_INVALID_PARAMETER;
1802 ret = vcd_client_setting_add_tidl_info(pid);
1804 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info.");
1808 ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data);
1810 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback.");
1812 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback.");
1818 int __vc_setting_set_language_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, int pid, const char *language, void *user_data)
1820 if (NULL == language) {
1821 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter");
1822 return VCD_ERROR_INVALID_PARAMETER;
1825 SLOG(LOG_INFO, TAG_VCD, "[IN] vcd server set language : language(%s)", language);
1827 int ret = vcd_server_set_language(language);
1829 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set language(%d).", ret);
1831 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set language.");
1837 int __setting_tidl_open_connection()
1839 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __setting_tidl_open_connection");
1841 g_setting_callback.create = __vc_setting_create_cb;
1842 g_setting_callback.terminate = __vc_setting_terminate_cb;
1843 g_setting_callback.register_notify_cb = __vc_setting_register_notify_cb_cb;
1844 g_setting_callback.register_notify_cb_sync = __vc_setting_register_notify_cb_sync_cb;
1845 g_setting_callback.set_language = __vc_setting_set_language_cb;
1849 while (VC_RETRY_MIN_COUNT >= count) {
1850 ret = rpc_port_stub_vcd_setting_stub_vc_setting_register(&g_setting_callback, NULL);
1852 SLOG(LOG_DEBUG, TAG_VCD, "register callback");
1853 return VCD_ERROR_NONE;
1859 SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret);
1860 return VCD_ERROR_OPERATION_FAILED;
1863 int __setting_tidl_close_connection()
1865 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection");
1866 rpc_port_stub_vcd_setting_stub_vc_setting_unregister();
1868 return VCD_ERROR_NONE;
1873 * Functions for sending the information to client sides
1875 int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg)
1877 if (NULL == err_msg) {
1878 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
1879 return VCD_ERROR_INVALID_PARAMETER;
1882 client_tidl_info_s* info = vcd_client_get_tidl_info(pid);
1884 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
1885 return VCD_ERROR_INVALID_PARAMETER;
1888 bundle* msg = bundle_create();
1890 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
1891 return VCD_ERROR_OUT_OF_MEMORY;
1894 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send error signal to app(%d)", pid);
1896 char pid_char[10] = {0};
1897 char reason_char[10] = {0};
1898 snprintf(pid_char, 10, "%d", pid);
1899 snprintf(reason_char, 10, "%d", reason);
1901 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_ERROR);
1902 bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
1903 bundle_add_str(msg, VC_BUNDLE_REASON, reason_char);
1904 bundle_add_str(msg, VC_BUNDLE_ERR_MSG, err_msg);
1906 rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg);
1910 return VCD_ERROR_NONE;
1913 int vcdc_send_manager_pid(int manager_pid)
1915 // send signal to all pid
1918 int* client_list = NULL;
1919 int client_count = 0;
1921 ret = vcd_client_get_tidl_list(&client_list, &client_count);
1922 if (0 != ret || 0 == client_count) {
1923 SLOG(LOG_WARN, TAG_VCD, "[WARNING] There is no client");
1924 if (NULL != client_list)
1926 return VCD_ERROR_NONE;
1929 client_tidl_info_s* info;
1932 char pid_char[10] = {0};
1933 char mgrpid_char[10] = {0};
1934 for (int i = 0 ; i < client_count ; i++) {
1935 pid = client_list[i];
1937 info = vcd_client_get_tidl_info(pid);
1939 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
1943 msg = bundle_create();
1945 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
1949 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send manager pid(%d) to app(%d)", manager_pid, pid);
1951 snprintf(pid_char, 10, "%d", pid);
1952 snprintf(mgrpid_char, 10, "%d", manager_pid);
1954 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SEND_MANAGER_PID);
1955 bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
1956 bundle_add_str(msg, VC_BUNDLE_MANAGER_PID, mgrpid_char);
1958 rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg);
1965 return VCD_ERROR_NONE;
1968 int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
1970 if (NULL == buffer || 0 >= len) {
1971 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter");
1972 return VCD_ERROR_INVALID_PARAMETER;
1975 client_tidl_info_s* info = vcd_client_get_tidl_info(pid);
1977 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid);
1978 return VCD_ERROR_NONE;
1981 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send feedback streaming to app(%d), utt_id(%d), event(%d), length(%d)", pid, utt_id, event, len);
1983 rpc_port_stub_vcd_stub_array_char_h arr_char = NULL;
1984 rpc_port_stub_vcd_stub_array_char_create(&arr_char);
1985 rpc_port_stub_vcd_stub_array_char_set(arr_char, buffer, len);
1987 rpc_port_stub_vcd_stub_vc_feedback_cb_invoke(info->feedback_cb, utt_id, event, arr_char, len);
1989 rpc_port_stub_vcd_stub_array_char_destroy(arr_char);
1992 return VCD_ERROR_NONE;
1995 int vcdc_send_hello(int pid, vcd_client_type_e type)
1997 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send hello");
1999 char tmp_pid[10] = {0, };
2001 bundle* msg = bundle_create();
2002 snprintf(tmp_pid, 10, "%d", pid);
2004 if (VCD_CLIENT_TYPE_NORMAL == type) {
2005 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_HELLO);
2006 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2007 } else if (VCD_CLIENT_TYPE_MANAGER == type) {
2008 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_HELLO);
2009 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2010 } else if (VCD_CLIENT_TYPE_WIDGET == type) {
2011 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_HELLO);
2012 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2014 SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Client type is NOT valid");
2016 return VCD_ERROR_INVALID_PARAMETER;
2019 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] VCD SEND MESSAGE");
2021 // TODO: VCD_CLIENT_TYPE_MANAGER?? type??
2022 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid);
2025 return VCD_ERROR_NONE;
2028 int vcd_tidl_open_connection()
2030 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_open_connection");
2032 if (0 != __mgr_tidl_open_connection()) {
2033 SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to manager");
2034 return VCD_ERROR_OPERATION_FAILED;
2037 if (0 != __client_tidl_open_connection()) {
2038 SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to client");
2039 return VCD_ERROR_OPERATION_FAILED;
2042 if (0 != __widget_tidl_open_connection()) {
2043 SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to widget");
2044 return VCD_ERROR_OPERATION_FAILED;
2047 if (0 != __setting_tidl_open_connection()) {
2048 SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to setting");
2049 return VCD_ERROR_OPERATION_FAILED;
2052 return VCD_ERROR_NONE;
2055 int vcd_tidl_close_connection()
2057 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_close_connection");
2059 if (0 != __mgr_tidl_close_connection()) {
2060 SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to manager");
2061 return VCD_ERROR_OPERATION_FAILED;
2064 if (0 != __client_tidl_close_connection()) {
2065 SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to client");
2066 return VCD_ERROR_OPERATION_FAILED;
2069 if (0 != __widget_tidl_close_connection()) {
2070 SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to widget");
2071 return VCD_ERROR_OPERATION_FAILED;
2074 if (0 != __setting_tidl_close_connection()) {
2075 SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to setting");
2076 return VCD_ERROR_OPERATION_FAILED;
2079 return VCD_ERROR_NONE;
2082 int vcdc_send_set_volume(int manager_pid, float volume)
2084 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set volume");
2086 char tmp_volume[20] = {0, };
2088 bundle* msg = bundle_create();
2090 snprintf(tmp_volume, 20, "%.6f", volume);
2091 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_VOLUME);
2092 bundle_add_str(msg, VC_BUNDLE_VOLUME, tmp_volume);
2095 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2096 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2097 if (20 == g_volume_count) {
2098 SLOG(LOG_INFO, TAG_VCD, "@@ Send set volume : pid(%d), volume(%f)", manager_pid, volume);
2105 return VCD_ERROR_NONE;
2108 int vcdc_send_show_tooltip(int pid, bool show)
2110 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager");
2112 char tmp_pid[10] = {0, };
2113 char tmp_show[10] = {0, };
2115 bundle* msg = bundle_create();
2117 snprintf(tmp_pid, 10, "%d", pid);
2118 snprintf(tmp_show, 10, "%d", (int)show);
2120 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_SHOW_TOOLTIP);
2121 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2122 bundle_add_str(msg, VC_BUNDLE_SHOW, tmp_show);
2124 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2126 __send_msg(msg, VCD_CLIENT_TYPE_WIDGET, pid);
2129 return VCD_ERROR_NONE;
2132 int vcdc_send_result(int pid, int manager_pid, int cmd_type)
2134 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result");
2136 vcd_client_type_e type;
2137 bundle* msg = bundle_create();
2139 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data");
2140 return VCD_ERROR_OUT_OF_MEMORY;
2143 SLOG(LOG_INFO, TAG_VCD, "[TIDL] Result command type(%d)", cmd_type);
2146 case VC_COMMAND_TYPE_FOREGROUND:
2147 case VC_COMMAND_TYPE_BACKGROUND:
2148 if (pid == manager_pid) {
2149 type = VCD_CLIENT_TYPE_MANAGER;
2150 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT);
2152 type = VCD_CLIENT_TYPE_NORMAL;
2153 char pid_char[10] = {0};
2154 snprintf(pid_char, 10, "%d", pid);
2155 bundle_add_str(msg, VC_BUNDLE_PID, pid_char);
2156 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_RESULT);
2159 case VC_COMMAND_TYPE_WIDGET:
2160 type = VCD_CLIENT_TYPE_WIDGET;
2161 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_RESULT);
2163 case VC_COMMAND_TYPE_SYSTEM:
2164 case VC_COMMAND_TYPE_SYSTEM_BACKGROUND:
2165 case VC_COMMAND_TYPE_EXCLUSIVE:
2166 type = VCD_CLIENT_TYPE_MANAGER;
2167 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT);
2171 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Command type is NOT valid(%d)", cmd_type);
2173 return VCD_ERROR_INVALID_PARAMETER;
2176 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2178 __send_msg(msg, type, pid);
2181 return VCD_ERROR_NONE;
2184 int vcdc_send_pre_result_to_manager(int manager_pid, int event, const char* pre_result)
2186 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager");
2188 char tmp_event[10] = {0, };
2190 bundle* msg = bundle_create();
2191 snprintf(tmp_event, 10, "%d", event);
2193 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_PRE_RESULT);
2194 bundle_add_str(msg, VC_BUNDLE_EVENT, tmp_event);
2195 bundle_add_str(msg, VC_BUNDLE_PRE_RESULT, pre_result);
2197 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2199 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2202 return VCD_ERROR_NONE;
2205 int vcdc_send_specific_engine_result_to_manager(int manager_pid, const char* engine_app_id, const char* event, const char* result)
2207 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send specific engine result to manager");
2209 bundle* msg = bundle_create();
2211 gchar *gEncodedResult = g_base64_encode((const guchar*)result, strlen(result));
2213 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT);
2214 bundle_add_str(msg, VC_BUNDLE_ENGINE_APP_ID, engine_app_id);
2215 bundle_add_str(msg, VC_BUNDLE_EVENT, event);
2216 bundle_add_str(msg, VC_BUNDLE_RESULT, gEncodedResult);
2218 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2220 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2224 g_free(gEncodedResult);
2226 return VCD_ERROR_NONE;
2229 int vcdc_send_result_to_manager(int manager_pid, int result_type)
2231 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result to manager");
2233 char tmp_result[10] = {0, };
2235 bundle* msg = bundle_create();
2236 snprintf(tmp_result, 10, "%d", result_type);
2238 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_ALL_RESULT);
2239 bundle_add_str(msg, VC_BUNDLE_RESULT, tmp_result);
2242 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2244 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2247 return VCD_ERROR_NONE;
2250 int vcdc_send_speech_detected(int manager_pid)
2252 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send speech detected");
2254 bundle* msg = bundle_create();
2256 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPEECH_DETECTED);
2258 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2260 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2263 return VCD_ERROR_NONE;
2266 int vcdc_send_service_state(vcd_state_e state)
2268 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send service state");
2270 char tmp_state[10] = {0, };
2272 bundle* msg = bundle_create();
2273 snprintf(tmp_state, 10, "%d", (int)state);
2275 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SET_SERVICE_STATE);
2276 bundle_add_str(msg, VC_BUNDLE_SERVICE_STATE, tmp_state);
2278 __send_signal(msg, VCD_CLIENT_TYPE_MANAGER);
2279 __send_signal(msg, VCD_CLIENT_TYPE_NORMAL);
2280 __send_signal(msg, VCD_CLIENT_TYPE_WIDGET);
2282 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL");
2285 return VCD_ERROR_NONE;
2288 int vcdc_send_dialog(int manager_pid, int pid, const char* disp_text, const char* utt_text, int continuous)
2290 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send dialog");
2292 char tmp_pid[10] = {0, };
2293 char tmp_continuous[10] = {0, };
2294 char* tmp_disp_text = NULL;
2295 char* tmp_utt_text = NULL;
2296 bundle* msg = bundle_create();
2297 snprintf(tmp_pid, 10, "%d", pid);
2298 snprintf(tmp_continuous, 10, "%d", continuous);
2300 if (NULL == disp_text) {
2301 tmp_disp_text = strdup("#NULL");
2303 tmp_disp_text = strdup(disp_text);
2306 if (NULL == utt_text) {
2307 tmp_utt_text = strdup("#NULL");
2309 tmp_utt_text = strdup(utt_text);
2312 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_DIALOG);
2313 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2314 bundle_add_str(msg, VC_BUNDLE_DISP_TEXT, tmp_disp_text);
2315 bundle_add_str(msg, VC_BUNDLE_UTT_TEXT, tmp_utt_text);
2316 bundle_add_str(msg, VC_BUNDLE_CONTINUOUS, tmp_continuous);
2318 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2320 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2322 free(tmp_disp_text);
2325 return VCD_ERROR_NONE;
2328 int vcdc_send_error_to_manager(int manager_pid, int reason, char *err_msg)
2330 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal to manager");
2332 char tmp_reason[10] = {0, };
2333 char tmp_daemon_pid[10] = {0, };
2334 char *temp_msg = NULL;
2336 if (NULL == err_msg) {
2337 SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
2338 temp_msg = strdup("#NULL");
2340 temp_msg = strdup(err_msg);
2343 bundle* msg = bundle_create();
2344 snprintf(tmp_reason, 10, "%d", reason);
2345 snprintf(tmp_daemon_pid, 10, "%d", getpid());
2347 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
2348 bundle_add_str(msg, VC_BUNDLE_REASON, tmp_reason);
2349 bundle_add_str(msg, VC_BUNDLE_DAEMON_PID, tmp_daemon_pid);
2350 bundle_add_str(msg, VC_BUNDLE_ERR_MSG, temp_msg);
2352 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2354 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2360 return VCD_ERROR_NONE;
2364 // TODO: remove _tidl after remove dbus
2365 // TODO: make client, widget error signal
2366 // But... it seems there is no call of this function.. Need to check.
2367 int vcdc_tidl_send_error(int reason, char *err_msg)
2369 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal");
2371 char tmp_reason[10] = {0, };
2372 char tmp_daemon_pid[10] = {0, };
2373 char *temp_msg = NULL;
2375 if (NULL == err_msg) {
2376 SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL");
2377 temp_msg = strdup("#NULL");
2379 temp_msg = strdup(err_msg);
2382 bundle* msg = bundle_create();
2383 snprintf(tmp_reason, 10, "%d", reason);
2384 snprintf(tmp_daemon_pid, 10, "%d", getpid());
2386 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR);
2387 bundle_add_str(msg, VC_BUNDLE_REASON, tmp_reason);
2388 bundle_add_str(msg, VC_BUNDLE_DAEMON_PID, tmp_daemon_pid);
2389 bundle_add_str(msg, VC_BUNDLE_ERR_MSG, temp_msg);
2391 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_ERROR);
2392 bundle_add_str(msg, VC_BUNDLE_REASON, tmp_reason);
2393 bundle_add_str(msg, VC_BUNDLE_DAEMON_PID, tmp_daemon_pid);
2394 bundle_add_str(msg, VC_BUNDLE_ERR_MSG, temp_msg);
2396 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL");
2405 return VCD_ERROR_NONE;
2408 int vcdc_send_request_set_private_data(int pid, const char* key, const char* data)
2410 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set private data");
2412 char tmp_pid[10] = { 0, };
2414 bundle* msg = bundle_create();
2415 snprintf(tmp_pid, 10, "%d", pid);
2417 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_PRIVATE_DATA);
2418 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2419 bundle_add_str(msg, VC_BUNDLE_KEY, key);
2420 bundle_add_str(msg, VC_BUNDLE_PRIVATE_DATA, data);
2422 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2424 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid);
2427 return VCD_ERROR_NONE;
2430 int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type)
2432 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback audio format to manager");
2434 char tmp_rate[10] = {0, };
2435 char tmp_channel[10] = {0, };
2436 char tmp_audio_type[10] = {0, };
2438 bundle* msg = bundle_create();
2439 snprintf(tmp_rate, 10, "%d", rate);
2440 snprintf(tmp_channel, 10, "%d", (int)channel);
2441 snprintf(tmp_audio_type, 10, "%d", (int)audio_type);
2442 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT);
2443 bundle_add_str(msg, VC_BUNDLE_AUDIO_RATE, tmp_rate);
2444 bundle_add_str(msg, VC_BUNDLE_AUDIO_CHANNEL, tmp_channel);
2445 bundle_add_str(msg, VC_BUNDLE_AUDIO_TYPE, tmp_audio_type);
2447 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2449 __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid);
2452 return VCD_ERROR_NONE;
2455 int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len)
2457 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback streaming to manager");
2459 char tmp_pid[10] = {0, };
2460 char tmp_utt_id[10] = {0, };
2461 char tmp_event[10] = {0, };
2463 bundle* msg = bundle_create();
2464 snprintf(tmp_pid, 10, "%d", pid);
2465 snprintf(tmp_utt_id, 10, "%d", utt_id);
2466 snprintf(tmp_event, 10, "%d", (int)event);
2467 bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_STREAMING);
2468 bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid);
2469 bundle_add_str(msg, VC_BUNDLE_UTT_ID, tmp_utt_id);
2470 bundle_add_str(msg, VC_BUNDLE_EVENT, tmp_event);
2472 rpc_port_stub_vcd_mgr_stub_array_char_h streaming_data = NULL;
2473 rpc_port_stub_vcd_mgr_stub_array_char_create(&streaming_data);
2474 if (NULL == streaming_data) {
2475 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to create data handle");
2477 return VCD_ERROR_OUT_OF_MEMORY;
2480 if (NULL != buffer && 0 < len) {
2481 rpc_port_stub_vcd_mgr_stub_array_char_set(streaming_data, (char*)buffer, len);
2483 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] buffer is empty");
2486 SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE");
2488 pthread_mutex_lock(&g_mgr_tidl_info_mutex);
2489 SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to manager");
2490 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2492 if (NULL == mgr_tidl_info) {
2493 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid);
2494 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
2495 rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
2497 return VCD_ERROR_NONE;
2500 rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h handle = mgr_tidl_info->send_buffer_cb;
2501 if (NULL == handle) {
2502 SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null");
2503 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
2504 rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
2506 return VCD_ERROR_OPERATION_FAILED;
2509 if (0 != rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_invoke(handle, streaming_data, msg)) {
2510 SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg");
2511 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
2512 rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
2514 return VCD_ERROR_OPERATION_FAILED;
2516 pthread_mutex_unlock(&g_mgr_tidl_info_mutex);
2517 rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data);
2520 return VCD_ERROR_NONE;
2523 void vcdc_send_request_set_foreground(int pid, int value)
2525 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set foreground");
2527 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2529 if (NULL == mgr_tidl_info) {
2530 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2534 if (!mgr_tidl_info->connected) {
2535 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2539 rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_set_foreground(mgr_tidl_info->rpc_h, pid, value);
2541 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request set foreground");
2544 int vcdc_send_request_get_private_data(int pid, const char* key, char** data)
2546 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Get private data");
2548 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2550 if (NULL == mgr_tidl_info) {
2551 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2552 return VC_ERROR_OPERATION_FAILED;
2555 if (!mgr_tidl_info->connected) {
2556 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2557 return VC_ERROR_OPERATION_FAILED;
2561 int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_get_private_data(mgr_tidl_info->rpc_h, pid, key, &tmp);
2562 if (RPC_PORT_ERROR_NONE != ret) {
2563 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd manager get private data : Fail to invoke message, error(%d)", ret);
2568 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd manager get private data : Success");
2572 return VC_ERROR_NONE;
2575 int vcdc_send_request_auth_enable(int pid)
2577 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth enable");
2579 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2581 if (NULL == mgr_tidl_info) {
2582 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2583 return VC_ERROR_OPERATION_FAILED;
2586 if (!mgr_tidl_info->connected) {
2587 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2588 return VC_ERROR_OPERATION_FAILED;
2591 int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_enable(mgr_tidl_info->rpc_h, pid);
2592 if (RPC_PORT_ERROR_NONE != ret) {
2593 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth enable : Fail to invoke message, error(%d)", ret);
2596 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth enable : Success");
2598 return VC_ERROR_NONE;
2601 int vcdc_send_request_auth_disable(int pid)
2603 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth disable");
2605 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2607 if (NULL == mgr_tidl_info) {
2608 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2609 return VC_ERROR_OPERATION_FAILED;
2612 if (!mgr_tidl_info->connected) {
2613 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2614 return VC_ERROR_OPERATION_FAILED;
2617 int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_disable(mgr_tidl_info->rpc_h, pid);
2618 if (RPC_PORT_ERROR_NONE != ret) {
2619 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth disable : Fail to invoke message, error(%d)", ret);
2622 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth disable : Success");
2624 return VC_ERROR_NONE;
2627 int vcdc_send_request_auth_start(int pid)
2629 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth start");
2631 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2633 if (NULL == mgr_tidl_info) {
2634 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2635 return VC_ERROR_OPERATION_FAILED;
2638 if (!mgr_tidl_info->connected) {
2639 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2640 return VC_ERROR_OPERATION_FAILED;
2643 int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_start(mgr_tidl_info->rpc_h, pid);
2644 if (RPC_PORT_ERROR_NONE != ret) {
2645 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth start : Fail to invoke message, error(%d)", ret);
2648 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth start : Success");
2650 return VC_ERROR_NONE;
2653 int vcdc_send_request_auth_stop(int pid)
2655 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth stop");
2657 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2659 if (NULL == mgr_tidl_info) {
2660 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2661 return VC_ERROR_OPERATION_FAILED;
2664 if (!mgr_tidl_info->connected) {
2665 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2666 return VC_ERROR_OPERATION_FAILED;
2669 int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_stop(mgr_tidl_info->rpc_h, pid);
2670 if (RPC_PORT_ERROR_NONE != ret) {
2671 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth stop : Fail to invoke message, error(%d)", ret);
2674 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth stop : Success");
2676 return VC_ERROR_NONE;
2679 int vcdc_send_request_auth_cancel(int pid)
2681 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth cancel");
2683 manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info();
2685 if (NULL == mgr_tidl_info) {
2686 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2687 return VC_ERROR_OPERATION_FAILED;
2690 if (!mgr_tidl_info->connected) {
2691 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2692 return VC_ERROR_OPERATION_FAILED;
2695 int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_cancel(mgr_tidl_info->rpc_h, pid);
2696 if (RPC_PORT_ERROR_NONE != ret) {
2697 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth cancel : Fail to invoke message, error(%d)", ret);
2700 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth cancel : Success");
2702 return VC_ERROR_NONE;
2705 int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_type, bool* is_consumed)
2707 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send asr result");
2709 widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid);
2711 if (NULL == widget_tidl_info) {
2712 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info");
2713 return VC_ERROR_OPERATION_FAILED;
2716 if (!widget_tidl_info->connected) {
2717 SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected");
2718 return VC_ERROR_OPERATION_FAILED;
2722 int ret = rpc_port_proxy_vcd_widget_proxy_vcd_widget_invoke_send_asr_result(widget_tidl_info->rpc_h, pid, event, asr_result, &temp);
2723 if (RPC_PORT_ERROR_NONE != ret) {
2724 SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd widget send asr result : Fail to invoke message, error(%d)", ret);
2727 SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd widget send asr result : Success");
2729 *is_consumed = temp;
2731 return VC_ERROR_NONE;