From 7b7c9adf38b7f96ce12c379b3d67bf5069f9a561 Mon Sep 17 00:00:00 2001 From: sooyeon Date: Tue, 28 Jun 2022 11:22:34 +0900 Subject: [PATCH] Rename extern functions and Rearrange codes Change-Id: I3da3d9e9a46b6126af91b9ddcc16b4f00ef4123f Signed-off-by: sooyeon --- common/vc_defs.h | 2 +- server/vcd_dbus.c | 1 - server/vcd_tidl.c | 2783 +++++++++++++++++++++++++++-------------------------- server/vcd_tidl.h | 15 +- 4 files changed, 1400 insertions(+), 1401 deletions(-) diff --git a/common/vc_defs.h b/common/vc_defs.h index cbe89eb..2a74a03 100644 --- a/common/vc_defs.h +++ b/common/vc_defs.h @@ -281,8 +281,8 @@ extern "C" { #define VC_RUNTIME_INFO_NO_FOREGROUND -1 #define VC_CONNECTION_RETRY_COUNT 10 #define VC_INVALID_TTS_UID 0 -#define VC_TIDL_RETRY_COUNT 100 #define VC_ENGINE_APPID_LEN 256 +#define VC_TIDL_RETRY_COUNT 100 #define VC_FEATURE_PATH "tizen.org/feature/speech.control" #define VC_MGR_FEATURE_PATH "tizen.org/feature/speech.control_manager" diff --git a/server/vcd_dbus.c b/server/vcd_dbus.c index 29b6d75..b03d102 100644 --- a/server/vcd_dbus.c +++ b/server/vcd_dbus.c @@ -276,7 +276,6 @@ int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg) return VCD_ERROR_NONE; } */ - /* int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len) { diff --git a/server/vcd_tidl.c b/server/vcd_tidl.c index 2b78f91..f64dc51 100644 --- a/server/vcd_tidl.c +++ b/server/vcd_tidl.c @@ -14,6 +14,8 @@ * limitations under the License. */ +#include + #include "vcd_client_data.h" #include "vcd_main.h" #include "vcd_server.h" @@ -27,7 +29,6 @@ #include "vcd_widget_stub.h" #include "vcd_widget_proxy.h" - static rpc_port_stub_vcd_mgr_stub_vc_mgr_callback_s g_mgr_callback; static pthread_mutex_t g_mgr_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -46,19 +47,17 @@ static pthread_mutex_t g_setting_tidl_info_mutex = PTHREAD_MUTEX_INITIALIZER; static int g_volume_count = 0; -int vcd_client_tidl_open_connection(); -int vcd_client_tidl_close_connection(); -int vcd_mgr_tidl_open_connection(); -int vcd_mgr_tidl_close_connection(); -int vcd_widget_tidl_open_connection(); -int vcd_widget_tidl_close_connection(); -int vcd_setting_tidl_open_connection(); -int vcd_setting_tidl_close_connection(); - - +extern int __client_tidl_open_connection(); +extern int __client_tidl_close_connection(); +extern int __mgr_tidl_open_connection(); +extern int __mgr_tidl_close_connection(); +extern int __widget_tidl_open_connection(); +extern int __widget_tidl_close_connection(); +extern int __setting_tidl_open_connection(); +extern int __setting_tidl_close_connection(); -/* for common request */ +/* For common request */ static void __request_tidl_connect(vcd_client_type_e type, int pid) { char* type_str = NULL; @@ -311,8 +310,9 @@ void __send_signal(bundle* msg) pthread_mutex_unlock(&g_widget_tidl_info_mutex); } + /** - * TIDL functions for VC client + * TIDL callback functions for VC client */ static void __vc_create_cb(rpc_port_stub_vcd_stub_vc_context_h context, void *user_data) { @@ -730,9 +730,9 @@ static int __vc_get_tts_audio_format_cb(rpc_port_stub_vcd_stub_vc_context_h cont return ret; } -int vcd_client_tidl_open_connection() +int __client_tidl_open_connection() { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] vcd_client_tidl_open_connection"); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] __client_tidl_open_connection"); g_client_callback.create = __vc_create_cb; g_client_callback.terminate = __vc_terminate_cb; @@ -767,2006 +767,2009 @@ int vcd_client_tidl_open_connection() return VCD_ERROR_NONE; } -int vcd_client_tidl_close_connection() +int __client_tidl_close_connection() { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] vcd_tidl_close_connection"); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] __client_tidl_close_connection"); rpc_port_stub_vcd_stub_vc_unregister(); return VCD_ERROR_NONE; } -int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg) +/** + * TIDL callback functions for VC manager + */ +static void __mgr_on_connected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data) { - if (NULL == err_msg) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Input parameter is NULL"); - return VCD_ERROR_INVALID_PARAMETER; - } + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - client_tidl_info_s* info = vcd_client_get_tidl_info(pid); - if (NULL == info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid); - return VCD_ERROR_INVALID_PARAMETER; + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); + return; } - bundle* msg = bundle_create(); - if (NULL == msg) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); - return VCD_ERROR_OUT_OF_MEMORY; - } + mgr_tidl_info->connected = true; + mgr_tidl_info->connection_requesting = false; - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send error signal to app(%d)", pid); + SLOG(LOG_INFO, TAG_VCD, "Connected to manager"); +} - char pid_char[10] = {0}; - char reason_char[10] = {0}; - snprintf(pid_char, 10, "%d", pid); - snprintf(reason_char, 10, "%d", reason); +static void __mgr_on_disconnected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data) +{ + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_ERROR_TO_APP); - bundle_add_str(msg, VC_BUNDLE_PID, pid_char); - bundle_add_str(msg, VC_BUNDLE_REASON, reason_char); - bundle_add_str(msg, VC_BUNDLE_ERR_MSG, err_msg); + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); + return; + } - rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg); + mgr_tidl_info->connected = false; + mgr_tidl_info->connection_requesting = false; - return VCD_ERROR_NONE; + SLOG(LOG_INFO, TAG_VCD, "Disonnected to manager"); } -int vcdc_send_manager_pid(int manager_pid) +static void __mgr_on_rejected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data) { - // send signal to all pid + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - // get all pids - int* client_list = NULL; - int client_count = 0; - int ret = -1; - ret = vcd_client_get_tidl_list(&client_list, &client_count); - if (0 != ret || 0 == client_count) { - SLOG(LOG_WARN, TAG_VCD, "[WARNING] There is no client"); - return VCD_ERROR_NONE; + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); + return; } - client_tidl_info_s* info; - int pid = -1; - bundle* msg; - char pid_char[10] = {0}; - char mgrpid_char[10] = {0}; - for (int i = 0 ; i < client_count ; i++) { - pid = client_list[i]; - - info = vcd_client_get_tidl_info(pid); - if (NULL == info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid); - continue; - } + mgr_tidl_info->connection_requesting = false; - msg = bundle_create(); - if (NULL == msg) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); - continue; - } + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from manager"); +} - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send manager pid(%d) to app(%d)", manager_pid, pid); +static rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h __mgr_create_rpc_port(const char* engine_app_id) +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_create_rpc_port"); + rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_callback_s rpc_callback = { + .connected = __mgr_on_connected, + .disconnected = __mgr_on_disconnected, + .rejected = __mgr_on_rejected + }; - snprintf(pid_char, 10, "%d", pid); - snprintf(mgrpid_char, 10, "%d", manager_pid); + rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h handle = NULL; + if (0 != rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_create(engine_app_id, &rpc_callback, NULL, &handle)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy"); + return NULL; + } - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SEND_MANAGER_PID); - bundle_add_str(msg, VC_BUNDLE_PID, pid_char); - bundle_add_str(msg, VC_BUNDLE_MANAGER_PID, mgrpid_char); + return handle; +} - rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg); +static void __vc_mgr_create_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data) +{ + char *sender = NULL; - bundle_free(msg); + rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender); + if (!sender){ + SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); + return; } - return VCD_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ Manager connect. appid(%s)", sender); + + free(sender); } -int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len) +static void __vc_mgr_terminate_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data) { - if (NULL == buffer || 0 >= len) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter"); - return VCD_ERROR_INVALID_PARAMETER; + pthread_mutex_lock(&g_mgr_tidl_info_mutex); + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info."); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + return; } - client_tidl_info_s* info = vcd_client_get_tidl_info(pid); - if (NULL == info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid); - return VCD_ERROR_INVALID_PARAMETER; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC MANAGER FINALIZE. pid(%u)", mgr_tidl_info->pid); + + if (0 != vcd_client_manager_unset_tidl_notify_cb()) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback"); } - bundle* msg = bundle_create(); - if (NULL == msg) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); - return VCD_ERROR_OUT_OF_MEMORY; + if (0 != vcd_client_manager_unset_tidl_send_buffer_cb()) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset send buffer callback"); } - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send feedback streaming to app(%d), utt_id(%d), event(%d), length(%d)", pid, utt_id, event, len); + if (0 != vcd_client_manager_delete_tidl_info()) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete manager tidl info"); + } + mgr_tidl_info = NULL; - rpc_port_stub_vcd_stub_array_char_h arr_char = NULL; - rpc_port_stub_vcd_stub_array_char_create(&arr_char); - rpc_port_stub_vcd_stub_array_char_set(arr_char, buffer, len); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - rpc_port_stub_vcd_stub_vc_feedback_cb_invoke(info->feedback_cb, utt_id, event, arr_char, len); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - rpc_port_stub_vcd_stub_array_char_destroy(arr_char); - bundle_free(msg); + char *sender = NULL; + rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender); + if (!sender) + return; - return VCD_ERROR_NONE; + SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender); + + free(sender); } -int vcdc_send_hello(int pid, vcd_client_type_e type) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send hello"); - - char tmp_pid[10] = {0, }; + pthread_mutex_lock(&g_mgr_tidl_info_mutex); + SLOG(LOG_INFO, TAG_VCD, "@@@ VC MANAGER REGISTER CALLBACK"); - bundle* msg = bundle_create(); - snprintf(tmp_pid, 10, "%d", pid); + int ret = -1; + ret = vcd_client_manager_create_tidl_info(pid); - if (VCD_CLIENT_TYPE_NORMAL == type) { - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_HELLO); - bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid); - } else if (VCD_CLIENT_TYPE_MANAGER == type) { - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_HELLO); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); - } else if (VCD_CLIENT_TYPE_WIDGET == type) { - bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_HELLO); - bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid); - } else { - SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Client type is NOT valid"); - bundle_free(msg); - return VCD_ERROR_INVALID_PARAMETER; + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create manager tidl info."); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + return; } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] VCD SEND MESSAGE"); - - // TODO: VCD_CLIENT_TYPE_MANAGER?? type?? - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid); - bundle_free(msg); + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - return VCD_ERROR_NONE; -} + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + return; + } -int vcd_tidl_open_connection() -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_open_connection"); + char *sender = NULL; + rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender); - if (0 != vcd_mgr_tidl_open_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to manager"); - return VCD_ERROR_OPERATION_FAILED; + if (!sender){ + SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + return; } - if (0 != vcd_client_tidl_open_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to client"); - return VCD_ERROR_OPERATION_FAILED; + mgr_tidl_info->rpc_h = __mgr_create_rpc_port(sender); + + if (NULL == mgr_tidl_info->rpc_h) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy"); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", mgr_tidl_info->rpc_h, sender); } - if (0 != vcd_widget_tidl_open_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to widget"); - return VCD_ERROR_OPERATION_FAILED; + free(sender); + + if (0 != vcd_client_manager_set_tidl_notify_cb(notify_callback, user_data)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback"); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); } - if (0 != vcd_setting_tidl_open_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to setting"); - return VCD_ERROR_OPERATION_FAILED; + if (0 != vcd_client_manager_set_tidl_send_buffer_cb(send_buffer_callback, user_data)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set send buffer callback"); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set send buffer callback."); } - return VCD_ERROR_NONE; + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + + __request_tidl_connect(VCD_CLIENT_TYPE_MANAGER, pid); + + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); } -int vcd_tidl_close_connection() +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_close_connection"); + SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Initialize"); - if (0 != vcd_mgr_tidl_close_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to manager"); - return VCD_ERROR_OPERATION_FAILED; - } + int ret = -1; - if (0 != vcd_client_tidl_close_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to client"); - return VCD_ERROR_OPERATION_FAILED; - } - - if (0 != vcd_widget_tidl_close_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to widget"); - return VCD_ERROR_OPERATION_FAILED; - } - - if (0 != vcd_setting_tidl_close_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to setting"); - return VCD_ERROR_OPERATION_FAILED; + vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)audio_streaming_mode); + ret = vcd_server_mgr_initialize(pid, audio_streaming_mode); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } + *service_state = vcd_server_get_service_state(); + *foreground = vcd_server_get_foreground(); + *daemon_pid = getpid(); - return VCD_ERROR_NONE; + 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); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return ret; } -int vcdc_send_set_volume(int manager_pid, float volume) +static int __vc_mgr_finalize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set volume"); - - char tmp_volume[20] = {0, }; - - bundle* msg = bundle_create(); - - snprintf(tmp_volume, 20, "%.6f", volume); - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_VOLUME); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_volume); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Finalize"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr finalize : pid(%d)", pid); + int ret = -1; - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - if (20 == g_volume_count) { - SLOG(LOG_INFO, TAG_VCD, "@@ Send set volume : pid(%d), volume(%f)", manager_pid, volume); - g_volume_count = 0; + ret = vcd_server_mgr_finalize(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); } - g_volume_count++; - bundle_free(msg); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return VCD_ERROR_NONE; + return ret; } -int vcdc_send_show_tooltip(int pid, bool show) +static int __vc_mgr_set_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager"); - - char tmp_pid[10] = {0, }; - char tmp_show[10] = {0, }; - - bundle* msg = bundle_create(); - - snprintf(tmp_pid, 10, "%d", pid); - snprintf(tmp_show, 10, "%d", (int)show); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set command"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set command : pid(%d)", pid); - bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SHOW_TOOLTIP); - bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid); - bundle_add_str(msg, VC_WIDGET_BUNDLE_SHOW, tmp_show); + int ret = -1; - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + ret = vcd_server_mgr_set_command(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } - __send_msg(msg, VCD_CLIENT_TYPE_WIDGET, pid); - bundle_free(msg); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return VCD_ERROR_NONE; + return ret; } -int vcdc_send_result(int pid, int manager_pid, int cmd_type) +static int __vc_mgr_unset_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result"); - - vcd_client_type_e type; - bundle* msg = bundle_create(); - if (NULL == msg) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); - return VCD_ERROR_OUT_OF_MEMORY; - } - - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Result command type(%d)", cmd_type); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager unset command"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr unset command : pid(%d)", pid); - switch (cmd_type) { - case VC_COMMAND_TYPE_FOREGROUND: - case VC_COMMAND_TYPE_BACKGROUND: - if (pid == manager_pid) { - type = VCD_CLIENT_TYPE_MANAGER; - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT); - } else { - type = VCD_CLIENT_TYPE_NORMAL; - char pid_char[10] = {0}; - snprintf(pid_char, 10, "%d", pid); - bundle_add_str(msg, VC_BUNDLE_PID, pid_char); - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_RESULT); - } - break; - case VC_COMMAND_TYPE_WIDGET: - type = VCD_CLIENT_TYPE_WIDGET; - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_RESULT); - break; - case VC_COMMAND_TYPE_SYSTEM: - case VC_COMMAND_TYPE_SYSTEM_BACKGROUND: - case VC_COMMAND_TYPE_EXCLUSIVE: - type = VCD_CLIENT_TYPE_MANAGER; - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT); - break; + int ret = -1; - default: - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Command type is NOT valid(%d)", cmd_type); - bundle_free(msg); - return VCD_ERROR_INVALID_PARAMETER; + ret = vcd_server_mgr_unset_command(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - - __send_msg(msg, type, pid); - bundle_free(msg); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return VCD_ERROR_NONE; + return ret; } -int vcdc_send_pre_result_to_manager(int manager_pid, int event, const char* pre_result) +static int __vc_mgr_set_demandable_client_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager"); - - char tmp_event[10] = {0, }; - - bundle* msg = bundle_create(); - snprintf(tmp_event, 10, "%d", event); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set demandable client"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set demandable client : pid(%d)", pid); - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_PRE_RESULT); - bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event); - bundle_add_str(msg, VC_MANAGER_BUNDLE_PRE_RESULT, pre_result); + int ret = -1; - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + ret = vcd_server_mgr_set_demandable_client(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return VCD_ERROR_NONE; + return ret; } -int vcdc_send_specific_engine_result_to_manager(int manager_pid, const char* engine_app_id, const char* event, const char* result) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send specific engine result to manager"); - - bundle* msg = bundle_create(); - - gchar *gEncodedResult = g_base64_encode((const guchar*)result, strlen(result)); - - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT); - bundle_add_str(msg, VC_MANAGER_BUNDLE_ENGINE_APP_ID, engine_app_id); - bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, event); - bundle_add_str(msg, VC_MANAGER_BUNDLE_RESULT, gEncodedResult); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio type"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d), audio type(%s)", pid, audio_type); - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + int ret = -1; - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); + ret = vcd_server_mgr_set_audio_type(pid, audio_type); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } - if (gEncodedResult) - g_free(gEncodedResult); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return VCD_ERROR_NONE; + return ret; } -int vcdc_send_result_to_manager(int manager_pid, int result_type) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result to manager"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get audio type"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d)", pid); - char tmp_result[10] = {0, }; + int ret = -1; + char* tmp_audio_type = NULL; - bundle* msg = bundle_create(); - snprintf(tmp_result, 10, "%d", result_type); + ret = vcd_server_mgr_get_audio_type(pid, &tmp_audio_type); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + free(tmp_audio_type); + return ret; + } - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ALL_RESULT); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_result); + *audio_type = strdup(tmp_audio_type); + free(tmp_audio_type); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + return ret; +} - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); +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) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set private data"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), key(%s), data(%s)", pid, key, data); - return VCD_ERROR_NONE; + int ret = -1; + + ret = vcd_server_mgr_set_private_data(pid, key, data); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set private data"); + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + } + + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); } -int vcdc_send_speech_detected(int manager_pid) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send speech detected"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get private data"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr get private data : pid(%d), key(%s)", pid, key); - bundle* msg = bundle_create(); + int ret = -1; + char *temp_data = NULL; - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPEECH_DETECTED); + ret = vcd_server_mgr_get_private_data(pid, key, &temp_data); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } + if (NULL == temp_data) { + SLOG(LOG_INFO, TAG_VCD, "data parameter is NULL"); + temp_data = strdup("#NULL"); + } - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + *data = strdup(temp_data); + free(temp_data); - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return VCD_ERROR_NONE; + return ret; } -int vcdc_send_service_state(vcd_state_e state) +static int __vc_mgr_set_client_info_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send service state"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set client info"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set client info : pid(%d)", pid); - char tmp_state[10] = {0, }; + int ret = -1; - bundle* msg = bundle_create(); - snprintf(tmp_state, 10, "%d", (int)state); + ret = vcd_server_mgr_set_client_info(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_SERVICE_STATE); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_state); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SET_SERVICE_STATE); - bundle_add_str(msg, VC_BUNDLE_SERVICE_STATE, tmp_state); + return ret; +} - bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SET_SERVICE_STATE); - bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_state); +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) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set domain type"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), domain(%s)", pid, domain); - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL"); - __send_signal(msg); - bundle_free(msg); + int ret = -1; - return VCD_ERROR_NONE; + ret = vcd_server_mgr_set_domain(pid, domain); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } + + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + + return ret; } -int vcdc_send_dialog(int manager_pid, int pid, const char* disp_text, const char* utt_text, int continuous) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send dialog"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager request to do action"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr request to do action : pid(%d), type(%d) send_event(%s)", pid, type, send_event); - char tmp_pid[10] = {0, }; - char tmp_continuous[10] = {0, }; - char* tmp_disp_text = NULL; - char* tmp_utt_text = NULL; - bundle* msg = bundle_create(); - snprintf(tmp_pid, 10, "%d", pid); - snprintf(tmp_continuous, 10, "%d", continuous); + int ret = -1; - if (NULL == disp_text) { - tmp_disp_text = strdup("#NULL"); - } else { - tmp_disp_text = strdup(disp_text); + ret = vcd_server_mgr_do_action(pid, type, send_event); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); } - if (NULL == utt_text) { - tmp_utt_text = strdup("#NULL"); - } else { - tmp_utt_text = strdup(utt_text); - } + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); +} - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_DIALOG); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); - bundle_add_str(msg, VC_MANAGER_BUNDLE_DISP_TEXT, tmp_disp_text); - bundle_add_str(msg, VC_MANAGER_BUNDLE_UTT_TEXT, tmp_utt_text); - bundle_add_str(msg, VC_MANAGER_BUNDLE_CONTINUOUS, tmp_continuous); +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) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager start"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd check enabled or disabled command types. disabled cmd type(%d)", disabled_cmd_type); - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + int ret = -1; - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); - free(tmp_disp_text); - free(tmp_utt_text); + vcd_server_mgr_set_disabled_command_type(pid, disabled_cmd_type); - return VCD_ERROR_NONE; + 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); + ret = vcd_server_mgr_start((vcd_recognition_mode_e)recognition_mode, exclusive_command_option, start_by_client); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } + + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + + return ret; } -int vcdc_tidl_send_error_to_manager(int manager_pid, int reason, char *err_msg) +static int __vc_mgr_stop_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal to manager"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager stop"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr stop : pid(%d)", pid); - char tmp_reason[10] = {0, }; - char tmp_daemon_pid[10] = {0, }; - char *temp_msg = NULL; + int ret = -1; - if (NULL == err_msg) { - SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL"); - temp_msg = strdup("#NULL"); - } else { - temp_msg = strdup(err_msg); + ret = vcd_server_mgr_stop(); + + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - bundle* msg = bundle_create(); - snprintf(tmp_reason, 10, "%d", reason); - snprintf(tmp_daemon_pid, 10, "%d", getpid()); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR); - bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason); - bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid); - bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg); + return ret; +} - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); +static int __vc_mgr_cancel_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager cancel"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr cancel : pid(%d)", pid); - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); + int ret = -1; - free(temp_msg); - temp_msg = NULL; + ret = vcd_server_mgr_cancel(); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; + } - return VCD_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + + return ret; } -/* -// TODO: remove _tidl after remove dbus -// TODO: make client, widget error signal -// But... it seems there is no call of this function.. Need to check. -int vcdc_tidl_send_error(int reason, char *err_msg) +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) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio streaming mode"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio streaming mode : pid(%d) mode(%d)", pid, mode); - char tmp_reason[10] = {0, }; - char tmp_daemon_pid[10] = {0, }; - char *temp_msg = NULL; + vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)mode); - if (NULL == err_msg) { - SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL"); - temp_msg = strdup("#NULL"); - } else { - temp_msg = strdup(err_msg); - } + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); +} - bundle* msg = bundle_create(); - snprintf(tmp_reason, 10, "%d", reason); - snprintf(tmp_daemon_pid, 10, "%d", getpid()); +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) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager specific engine request"); - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR); - bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason); - bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid); - bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg); + int ret = -1; + gsize decodingSize = 0; + gchar *gDecodedRequest = (gchar *)g_base64_decode((const gchar *)request, &decodingSize); - bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR); - bundle_add_str(msg, VC_WIDGET_BUNDLE_REASON, tmp_reason); - bundle_add_str(msg, VC_WIDGET_BUNDLE_DAEMON_PID, tmp_daemon_pid); - bundle_add_str(msg, VC_WIDGET_BUNDLE_ERROR_MESSAGE, temp_msg); + if (gDecodedRequest) { + ret = vcd_server_mgr_send_specific_engine_request(pid, engine_app_id, event, gDecodedRequest); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + } - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL"); + 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); + g_free(gDecodedRequest); + } - __send_signal(msg); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); +} - bundle_free(msg); +static void __vc_mgr_send_result_selection_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager result selection"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr result selection : pid(%d)", pid); - free(temp_msg); - temp_msg = NULL; + vcd_server_mgr_result_select(); - return VCD_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); } -*/ -int vcdc_send_request_set_private_data(int pid, const char* key, const char* data) + +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set private data"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send utterance status"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send utterance status : pid(%d), utt_id(%d), utt_status(%d)", pid, utt_id, utt_status); - char tmp_pid[10] = { 0, }; + pthread_mutex_lock(&g_client_tidl_info_mutex); + + SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to client"); + client_tidl_info_s* client_tidl_info = vcd_client_get_tidl_info(pid); + if (NULL == client_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); + pthread_mutex_unlock(&g_client_tidl_info_mutex); + return; + } + + rpc_port_stub_vcd_stub_vc_notify_cb_h handle = client_tidl_info->notify_cb; + if (NULL == handle) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null"); + pthread_mutex_unlock(&g_client_tidl_info_mutex); + return; + } bundle* msg = bundle_create(); - snprintf(tmp_pid, 10, "%d", pid); + if (NULL == msg) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); + pthread_mutex_unlock(&g_client_tidl_info_mutex); + return; + } - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_PRIVATE_DATA); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); - bundle_add_str(msg, VC_MANAGER_BUNDLE_KEY, key); - bundle_add_str(msg, VC_MANAGER_BUNDLE_PRIVATE_DATA, data); + char pid_char[10] = {0}; + char uttid_char[10] = {0}; + char uttstatus_char[10] = {0}; + snprintf(pid_char, 10, "%d", pid); + snprintf(uttid_char, 10, "%d", utt_id); + snprintf(uttstatus_char, 10, "%d", utt_status); - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + bundle_add_str(msg, VC_BUNDLE_METHOD, VC_MANAGER_METHOD_UTTERANCE_STATUS); + bundle_add_str(msg, VC_BUNDLE_PID, pid_char); + bundle_add_str(msg, VC_BUNDLE_REASON, uttid_char); + bundle_add_str(msg, VC_BUNDLE_ERR_MSG, uttstatus_char); + + if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(handle, pid, msg)) { + SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg"); + bundle_free(msg); + pthread_mutex_unlock(&g_client_tidl_info_mutex); + return; + } - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid); bundle_free(msg); + pthread_mutex_unlock(&g_client_tidl_info_mutex); - return VCD_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); } -int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback audio format to manager"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send audio streaming"); - char tmp_rate[10] = {0, }; - char tmp_channel[10] = {0, }; - char tmp_audio_type[10] = {0, }; - - bundle* msg = bundle_create(); - snprintf(tmp_rate, 10, "%d", rate); - snprintf(tmp_channel, 10, "%d", (int)channel); - snprintf(tmp_audio_type, 10, "%d", (int)audio_type); - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT); - bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_RATE, tmp_rate); - bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_CHANNEL, tmp_channel); - bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_TYPE, tmp_audio_type); + char* buffer = NULL; + int len = 0; + int ret = -1; + rpc_port_stub_vcd_mgr_stub_array_char_get(data, &buffer, &len); - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send audio streaming : pid(%d), event(%d), buffer(%p), len(%d)", pid, event, buffer, len); - __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); - bundle_free(msg); + ret = vcd_server_mgr_send_audio_streaming(pid, event, buffer, (unsigned int)len); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + } - return VCD_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); } -int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len) +int __mgr_tidl_open_connection() { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback streaming to manager"); - - char tmp_pid[10] = {0, }; - char tmp_utt_id[10] = {0, }; - char tmp_event[10] = {0, }; - - bundle* msg = bundle_create(); - snprintf(tmp_pid, 10, "%d", pid); - snprintf(tmp_utt_id, 10, "%d", utt_id); - snprintf(tmp_event, 10, "%d", (int)event); - bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_STREAMING); - bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); - bundle_add_str(msg, VC_MANAGER_BUNDLE_UTTID, tmp_utt_id); - bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_tidl_open_connection"); - rpc_port_stub_vcd_mgr_stub_array_char_h streaming_data = NULL; - rpc_port_stub_vcd_mgr_stub_array_char_create(&streaming_data); - if (NULL == streaming_data) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to create data handle"); - return VCD_ERROR_OUT_OF_MEMORY; - } - - if (NULL != buffer && 0 < len) { - rpc_port_stub_vcd_mgr_stub_array_char_set(streaming_data, (char*)buffer, len); - } else { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] buffer is empty"); - } - - SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - - pthread_mutex_lock(&g_mgr_tidl_info_mutex); - SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to manager"); - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + g_mgr_callback.create = __vc_mgr_create_cb; + g_mgr_callback.terminate = __vc_mgr_terminate_cb; + g_mgr_callback.register_cb = __vc_mgr_register_cb_cb; + g_mgr_callback.initialize = __vc_mgr_initialize_cb; + g_mgr_callback.finalize = __vc_mgr_finalize_cb; + g_mgr_callback.set_command = __vc_mgr_set_command_cb; + g_mgr_callback.unset_command = __vc_mgr_unset_command_cb; + g_mgr_callback.demandable_client = __vc_mgr_set_demandable_client_cb; + g_mgr_callback.set_audio_type = __vc_mgr_set_audio_type_cb; + g_mgr_callback.get_audio_type = __vc_mgr_get_audio_type_cb; + g_mgr_callback.set_private_data = __vc_mgr_set_private_data_cb; + g_mgr_callback.get_private_data = __vc_mgr_get_private_data_cb; + g_mgr_callback.set_client_info = __vc_mgr_set_client_info_cb; + g_mgr_callback.set_domain = __vc_mgr_set_domain_cb; + g_mgr_callback.do_action = __vc_mgr_do_action_cb; + g_mgr_callback.start = __vc_mgr_start_cb; + g_mgr_callback.stop = __vc_mgr_stop_cb; + g_mgr_callback.cancel = __vc_mgr_cancel_cb; + g_mgr_callback.set_audio_streaming_mode = __vc_mgr_set_audio_streaming_mode_cb; + g_mgr_callback.send_specific_engine_request = __vc_mgr_send_specific_engine_request_cb; + g_mgr_callback.send_result_selection = __vc_mgr_send_result_selection_cb; + g_mgr_callback.send_utterance_status = __vc_mgr_send_utterance_status_cb; + g_mgr_callback.send_audio_streaming = __vc_mgr_send_audio_streaming_cb; - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); - bundle_free(msg); - return VCD_ERROR_OPERATION_FAILED; + int ret = -1; + int count = 0; + while (VC_RETRY_MIN_COUNT >= count) { + ret = rpc_port_stub_vcd_mgr_stub_vc_mgr_register(&g_mgr_callback, NULL); + if (0 == ret) { + SLOG(LOG_DEBUG, TAG_VCD, "register callback"); + return VCD_ERROR_NONE; + } + usleep(100000); + count++; } - rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h handle = mgr_tidl_info->send_buffer_cb; - if (NULL == handle) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null"); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); - bundle_free(msg); - return VCD_ERROR_OPERATION_FAILED; - } + SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; +} - if (0 != rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_invoke(handle, streaming_data, msg)) { - SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg"); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); - bundle_free(msg); - return VCD_ERROR_OPERATION_FAILED; - } - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); - bundle_free(msg); +int __mgr_tidl_close_connection() +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection"); + rpc_port_stub_vcd_mgr_stub_vc_mgr_unregister(); return VCD_ERROR_NONE; } -void vcdc_send_request_set_foreground(int pid, int value) +/** + * TIDL callback functions for VC widget + */ +static void __widget_on_connected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set foreground"); + widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data); - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + widget_tidl_info->connected = true; + widget_tidl_info->connection_requesting = false; - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return; - } + SLOG(LOG_INFO, TAG_VCD, "Connected to widget"); +} - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return; - } +static void __widget_on_disconnected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data) +{ + widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data); - rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_set_foreground(mgr_tidl_info->rpc_h, pid, value); + widget_tidl_info->connected = false; + widget_tidl_info->connection_requesting = false; - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request set foreground"); + SLOG(LOG_INFO, TAG_VCD, "Disonnected to widget"); } -int vcdc_send_request_get_private_data(int pid, const char* key, char** data) +static void __widget_on_rejected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Get private data"); + widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data); - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + widget_tidl_info->connection_requesting = false; - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; - } + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from widget"); +} - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; - } +static rpc_port_proxy_vcd_widget_proxy_vcd_widget_h __widget_create_rpc_port(const char* engine_app_id, int pid) +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_create_rpc_port"); + rpc_port_proxy_vcd_widget_proxy_vcd_widget_callback_s rpc_callback = { + .connected = __widget_on_connected, + .disconnected = __widget_on_disconnected, + .rejected = __widget_on_rejected + }; - char *tmp = NULL; - int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_get_private_data(mgr_tidl_info->rpc_h, pid, key, &tmp); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd manager get private data : Fail to invoke message, error(%d)", ret); - return ret; + rpc_port_proxy_vcd_widget_proxy_vcd_widget_h handle = NULL; + if (0 != rpc_port_proxy_vcd_widget_proxy_vcd_widget_create(engine_app_id, &rpc_callback, (void *)pid, &handle)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy"); + return NULL; } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd manager get private data : Success"); - *data = tmp; - - return VC_ERROR_NONE; + return handle; } -int vcdc_send_request_auth_enable(int pid) +static void __vc_widget_create_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth enable"); - - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; - } - - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; - } + char *sender = NULL; - int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_enable(mgr_tidl_info->rpc_h, pid); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth enable : Fail to invoke message, error(%d)", ret); - return ret; + rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender); + if (!sender) { + SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); + return; } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth enable : Success"); - return VC_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ Widget connect. appid(%s)", sender); + free(sender); } -int vcdc_send_request_auth_disable(int pid) +static void __vc_widget_terminate_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth disable"); - - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + void* tag = NULL; + rpc_port_stub_vcd_widget_stub_vc_widget_context_get_tag(context, &tag); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; - } + if (NULL != tag) { + int pid = (intptr_t)tag; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC WIDGET FINALIZE. pid(%u)", pid); - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; - } + pthread_mutex_lock(&g_widget_tidl_info_mutex); + widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid); + if (NULL == widget_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info."); + pthread_mutex_unlock(&g_widget_tidl_info_mutex); + return; + } - int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_disable(mgr_tidl_info->rpc_h, pid); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth disable : Fail to invoke message, error(%d)", ret); - return ret; - } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth disable : Success"); + if (0 != vcd_client_widget_unset_tidl_notify_cb(pid)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback"); + } - return VC_ERROR_NONE; -} + if (0 != vcd_client_widget_delete_tidl_info(pid)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete widget tidl info"); + } + widget_tidl_info = NULL; -int vcdc_send_request_auth_start(int pid) -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth start"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + pthread_mutex_unlock(&g_widget_tidl_info_mutex); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; - } + char *sender = NULL; + rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender); + if (!sender) + return; - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; - } + SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender); - int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_start(mgr_tidl_info->rpc_h, pid); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth start : Fail to invoke message, error(%d)", ret); - return ret; + free(sender); } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth start : Success"); - - return VC_ERROR_NONE; + rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, NULL); } -int vcdc_send_request_auth_stop(int pid) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth stop"); + pthread_mutex_lock(&g_widget_tidl_info_mutex); + SLOG(LOG_INFO, TAG_VCD, "@@@ VC WIDGET REGISTER CALLBACK"); - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + int ret = -1; + ret = vcd_client_widget_add_tidl_info(pid); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add widget tidl info."); + pthread_mutex_unlock(&g_widget_tidl_info_mutex); + return; } + widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid); - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; + if (NULL == widget_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info. pid(%d)", pid); + pthread_mutex_unlock(&g_widget_tidl_info_mutex); + return; } - int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_stop(mgr_tidl_info->rpc_h, pid); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth stop : Fail to invoke message, error(%d)", ret); - return ret; + char *sender = NULL; + rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender); + + if (!sender){ + SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); + pthread_mutex_unlock(&g_widget_tidl_info_mutex); + return; } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth stop : Success"); - return VC_ERROR_NONE; -} + widget_tidl_info->rpc_h = __widget_create_rpc_port(sender, pid); -int vcdc_send_request_auth_cancel(int pid) -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth cancel"); + if (NULL == widget_tidl_info->rpc_h) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy"); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", widget_tidl_info->rpc_h, sender); + } - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + free(sender); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; + if (0 != vcd_client_widget_set_tidl_notify_cb(pid, notify_callback, user_data)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback"); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); } - if (!mgr_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; - } + pthread_mutex_unlock(&g_widget_tidl_info_mutex); - int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_cancel(mgr_tidl_info->rpc_h, pid); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth cancel : Fail to invoke message, error(%d)", ret); - return ret; - } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth cancel : Success"); + __request_tidl_connect(VCD_CLIENT_TYPE_WIDGET, pid); - return VC_ERROR_NONE; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); } -int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_type, bool* is_consumed) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send asr result"); - - widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid); + SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Initialize"); - if (NULL == widget_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); - return VC_ERROR_OPERATION_FAILED; - } + uintptr_t ptr_pid = pid; + int ret = -1; - if (!widget_tidl_info->connected) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); - return VC_ERROR_OPERATION_FAILED; - } + rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, (void*)ptr_pid); - bool temp; - int ret = rpc_port_proxy_vcd_widget_proxy_vcd_widget_invoke_send_asr_result(widget_tidl_info->rpc_h, pid, event, asr_result, &temp); - if (RPC_PORT_ERROR_NONE != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd widget send asr result : Fail to invoke message, error(%d)", ret); + ret = vcd_server_widget_initialize(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); return ret; } - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd widget send asr result : Success"); - - *is_consumed = temp; + *service_state = vcd_server_get_service_state(); + *daemon_pid = getpid(); - return VC_ERROR_NONE; + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget initialize : pid(%d) service state(%d) daemon_pid(%d)", pid, *service_state, *daemon_pid); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return ret; } -/* -* Tidl for manager -*/ -static void __mgr_on_connected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data) +static int __vc_widget_finalize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data) { - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); - return; - } - - mgr_tidl_info->connected = true; - mgr_tidl_info->connection_requesting = false; - - SLOG(LOG_INFO, TAG_VCD, "Connected to manager"); -} + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Finalize"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget finalize : pid(%d)", pid); -static void __mgr_on_disconnected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data) -{ - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + int ret = -1; - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); - return; + ret = vcd_server_widget_finalize(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - mgr_tidl_info->connected = false; - mgr_tidl_info->connection_requesting = false; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - SLOG(LOG_INFO, TAG_VCD, "Disonnected to manager"); + return ret; } -static void __mgr_on_rejected(rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h h, void *user_data) +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) { - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start Recording"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start recording : pid(%d) command(%d)", pid, command); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); - return; + int ret = -1; + + ret = vcd_server_widget_start_recording(pid, command); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - mgr_tidl_info->connection_requesting = false; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from manager"); + return ret; } -static rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h __mgr_create_rpc_port(const char* engine_app_id) +static int __vc_widget_start_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int silence, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __mgr_create_rpc_port"); - rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_callback_s rpc_callback = { - .connected = __mgr_on_connected, - .disconnected = __mgr_on_disconnected, - .rejected = __mgr_on_rejected - }; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start : pid(%d) silence(%d)", pid, silence); - rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_h handle = NULL; - if (0 != rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_create(engine_app_id, &rpc_callback, NULL, &handle)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy"); - return NULL; + int ret = -1; + + ret = vcd_server_widget_start(pid, (bool)silence); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - return handle; + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + + return ret; } -static void __vc_mgr_create_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data) +static int __vc_widget_stop_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data) { - char *sender = NULL; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Stop"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget stop : pid(%d)", pid); - rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender); - if (!sender){ - SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); - return; + int ret = -1; + + ret = vcd_server_widget_stop(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@ Manager connect. appid(%s)", sender); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - free(sender); + return ret; } -static void __vc_mgr_terminate_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, void *user_data) +static int __vc_widget_cancel_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data) { - pthread_mutex_lock(&g_mgr_tidl_info_mutex); - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info."); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - return; - } - - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC MANAGER FINALIZE. pid(%u)", mgr_tidl_info->pid); - - if (0 != vcd_client_manager_unset_tidl_notify_cb()) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback"); - } + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Cancel"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget cancel : pid(%d)", pid); - if (0 != vcd_client_manager_unset_tidl_send_buffer_cb()) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset send buffer callback"); - } + int ret = -1; - if (0 != vcd_client_manager_delete_tidl_info()) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete manager tidl info"); + ret = vcd_server_widget_cancel(pid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - mgr_tidl_info = NULL; SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - - - char *sender = NULL; - rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender); - if (!sender) - return; - - SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender); - - free(sender); + return ret; } -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) +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) { - pthread_mutex_lock(&g_mgr_tidl_info_mutex); - SLOG(LOG_INFO, TAG_VCD, "@@@ VC MANAGER REGISTER CALLBACK"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Enable Asr Result"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget enable asr result : pid(%d) enable(%d)", pid, enable); int ret = -1; - ret = vcd_client_manager_create_tidl_info(pid); + ret = vcd_server_widget_enable_asr_result(pid, enable); if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create manager tidl info."); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - return; + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + return ret; } - manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - if (NULL == mgr_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); - return; - } + return ret; +} - char *sender = NULL; - rpc_port_stub_vcd_mgr_stub_vc_mgr_context_get_sender(context, &sender); +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) +{ + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Set Foreground"); + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget set foreground : pid(%d) value(%d)", pid, value); - if (!sender){ - SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + int ret = -1; + + ret = vcd_server_set_foreground(pid, value); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); return; } - mgr_tidl_info->rpc_h = __mgr_create_rpc_port(sender); + SLOG(LOG_DEBUG, TAG_VCD, "@@@ send request set foreground to manager"); + vcdc_send_request_set_foreground(pid, value); - if (NULL == mgr_tidl_info->rpc_h) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy"); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", mgr_tidl_info->rpc_h, sender); - } + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - free(sender); + return; +} - if (0 != vcd_client_manager_set_tidl_notify_cb(notify_callback, user_data)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback"); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); - } +int __widget_tidl_open_connection() +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_tidl_open_connection"); - if (0 != vcd_client_manager_set_tidl_send_buffer_cb(send_buffer_callback, user_data)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set send buffer callback"); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set send buffer callback."); + g_widget_callback.create = __vc_widget_create_cb; + g_widget_callback.terminate = __vc_widget_terminate_cb; + g_widget_callback.register_cb = __vc_widget_register_cb_cb; + g_widget_callback.initialize = __vc_widget_initialize_cb; + g_widget_callback.finalize = __vc_widget_finalize_cb; + g_widget_callback.start_recording = __vc_widget_start_recording_cb; + g_widget_callback.start = __vc_widget_start_cb; + g_widget_callback.stop = __vc_widget_stop_cb; + g_widget_callback.cancel = __vc_widget_cancel_cb; + g_widget_callback.enable_asr_result = __vc_widget_enable_asr_result_cb; + g_widget_callback.set_foreground = __vc_widget_set_foreground_cb; + + int ret = -1; + int count = 0; + while (VC_RETRY_MIN_COUNT >= count) { + ret = rpc_port_stub_vcd_widget_stub_vc_widget_register(&g_widget_callback, NULL); + if (0 == ret) { + SLOG(LOG_DEBUG, TAG_VCD, "register callback"); + return VCD_ERROR_NONE; + } + usleep(100000); + count++; } - pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; +} - __request_tidl_connect(VCD_CLIENT_TYPE_MANAGER, pid); +int __widget_tidl_close_connection() +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection"); + rpc_port_stub_vcd_widget_stub_vc_widget_unregister(); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return VCD_ERROR_NONE; } -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) +/** + * TIDL callback functions for VC setting client + */ +static void __vc_setting_create_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data) { - SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Manager Initialize"); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_create_cb"); - int ret = -1; + char *sender = NULL; - vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)audio_streaming_mode); - ret = vcd_server_mgr_initialize(pid, audio_streaming_mode); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + rpc_port_stub_vcd_setting_stub_vc_setting_context_get_sender(context, &sender); + if (!sender) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Sender is NULL"); + return; } - *service_state = vcd_server_get_service_state(); - *foreground = vcd_server_get_foreground(); - *daemon_pid = getpid(); - 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); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return ret; + SLOG(LOG_INFO, TAG_VCD, "[TIDL] sender(%s)", sender); // sender (app_id) + free(sender); } -static int __vc_mgr_finalize_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +static void __vc_setting_terminate_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Finalize"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr finalize : pid(%d)", pid); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_terminate_cb"); + void* tag = NULL; + rpc_port_stub_vcd_setting_stub_vc_setting_context_get_tag(context, &tag); - int ret = -1; + if (NULL != tag) { + int pid = (intptr_t)tag; + SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC SETTING FINALIZE. pid(%u)", pid); - ret = vcd_server_mgr_finalize(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - } + pthread_mutex_lock(&g_setting_tidl_info_mutex); + setting_tidl_info_s* setting_tidl_info = vcd_client_setting_get_tidl_info(pid); + if (NULL == setting_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get setting tidl info."); + pthread_mutex_unlock(&g_setting_tidl_info_mutex); + return; + } + + if (0 != vcd_client_setting_unset_tidl_notify_cb(pid)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback"); + } + + if (0 != vcd_client_setting_delete_tidl_info(pid)) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete setting tidl info"); + } + setting_tidl_info = NULL; - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return ret; + pthread_mutex_unlock(&g_setting_tidl_info_mutex); + } + rpc_port_stub_vcd_setting_stub_vc_setting_context_set_tag(context, NULL); } -static int __vc_mgr_set_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set command"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set command : pid(%d)", pid); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_cb. pid(%d)", pid); - int ret = -1; + if (NULL == callback) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null."); + return; + } - ret = vcd_server_mgr_set_command(pid); + int ret = -1; + ret = vcd_client_setting_add_tidl_info(pid); if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info."); + return; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - - return ret; + ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback."); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); + } } -static int __vc_mgr_unset_command_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager unset command"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr unset command : pid(%d)", pid); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_sync_cb. pid(%d)", pid); - int ret = -1; + if (NULL == callback) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null."); + return VCD_ERROR_INVALID_PARAMETER; + } - ret = vcd_server_mgr_unset_command(pid); + int ret = -1; + ret = vcd_client_setting_add_tidl_info(pid); if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info."); return ret; } - - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + + ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback."); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); + } return ret; } -static int __vc_mgr_set_demandable_client_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +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) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager Set demandable client"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set demandable client : pid(%d)", pid); + if (NULL == language) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter"); + return VCD_ERROR_INVALID_PARAMETER; + } - int ret = -1; + SLOG(LOG_INFO, TAG_VCD, "[IN] vcd server set language : language(%s)", language); - ret = vcd_server_mgr_set_demandable_client(pid); + int ret = vcd_server_set_language(language); if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set language(%d).", ret); + } else { + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set language."); } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return ret; } -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) +int __setting_tidl_open_connection() { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio type"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d), audio type(%s)", pid, audio_type); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __setting_tidl_open_connection"); - int ret = -1; + g_setting_callback.create = __vc_setting_create_cb; + g_setting_callback.terminate = __vc_setting_terminate_cb; + g_setting_callback.register_notify_cb = __vc_setting_register_notify_cb_cb; + g_setting_callback.register_notify_cb_sync = __vc_setting_register_notify_cb_sync_cb; + g_setting_callback.set_language = __vc_setting_set_language_cb; - ret = vcd_server_mgr_set_audio_type(pid, audio_type); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + int ret = -1; + int count = 0; + while (VC_RETRY_MIN_COUNT >= count) { + ret = rpc_port_stub_vcd_setting_stub_vc_setting_register(&g_setting_callback, NULL); + if (0 == ret) { + SLOG(LOG_DEBUG, TAG_VCD, "register callback"); + return VCD_ERROR_NONE; + } + usleep(100000); + count++; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - - return ret; + SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; } -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) +int __setting_tidl_close_connection() { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get audio type"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio type : pid(%d)", pid); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection"); + rpc_port_stub_vcd_setting_stub_vc_setting_unregister(); - int ret = -1; - char* tmp_audio_type = NULL; + return VCD_ERROR_NONE; +} - ret = vcd_server_mgr_get_audio_type(pid, &tmp_audio_type); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - free(tmp_audio_type); - return ret; + + +int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg) +{ + if (NULL == err_msg) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Input parameter is NULL"); + return VCD_ERROR_INVALID_PARAMETER; } - *audio_type = strdup(tmp_audio_type); - free(tmp_audio_type); + client_tidl_info_s* info = vcd_client_get_tidl_info(pid); + if (NULL == info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid); + return VCD_ERROR_INVALID_PARAMETER; + } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + bundle* msg = bundle_create(); + if (NULL == msg) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); + return VCD_ERROR_OUT_OF_MEMORY; + } - return ret; -} + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send error signal to app(%d)", pid); -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) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set private data"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), key(%s), data(%s)", pid, key, data); + char pid_char[10] = {0}; + char reason_char[10] = {0}; + snprintf(pid_char, 10, "%d", pid); + snprintf(reason_char, 10, "%d", reason); - int ret = -1; + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_ERROR_TO_APP); + bundle_add_str(msg, VC_BUNDLE_PID, pid_char); + bundle_add_str(msg, VC_BUNDLE_REASON, reason_char); + bundle_add_str(msg, VC_BUNDLE_ERR_MSG, err_msg); - ret = vcd_server_mgr_set_private_data(pid, key, data); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set private data"); - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - } + rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return VCD_ERROR_NONE; } -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) +int vcdc_send_manager_pid(int manager_pid) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager get private data"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr get private data : pid(%d), key(%s)", pid, key); + // send signal to all pid + // get all pids + int* client_list = NULL; + int client_count = 0; int ret = -1; - char *temp_data = NULL; - - ret = vcd_server_mgr_get_private_data(pid, key, &temp_data); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; - } - if (NULL == temp_data) { - SLOG(LOG_INFO, TAG_VCD, "data parameter is NULL"); - temp_data = strdup("#NULL"); + ret = vcd_client_get_tidl_list(&client_list, &client_count); + if (0 != ret || 0 == client_count) { + SLOG(LOG_WARN, TAG_VCD, "[WARNING] There is no client"); + return VCD_ERROR_NONE; } - *data = strdup(temp_data); - free(temp_data); + client_tidl_info_s* info; + int pid = -1; + bundle* msg; + char pid_char[10] = {0}; + char mgrpid_char[10] = {0}; + for (int i = 0 ; i < client_count ; i++) { + pid = client_list[i]; - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + info = vcd_client_get_tidl_info(pid); + if (NULL == info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid); + continue; + } - return ret; -} + msg = bundle_create(); + if (NULL == msg) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); + continue; + } -static int __vc_mgr_set_client_info_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set client info"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set client info : pid(%d)", pid); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send manager pid(%d) to app(%d)", manager_pid, pid); - int ret = -1; + snprintf(pid_char, 10, "%d", pid); + snprintf(mgrpid_char, 10, "%d", manager_pid); - ret = vcd_server_mgr_set_client_info(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; - } + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SEND_MANAGER_PID); + bundle_add_str(msg, VC_BUNDLE_PID, pid_char); + bundle_add_str(msg, VC_BUNDLE_MANAGER_PID, mgrpid_char); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + rpc_port_stub_vcd_stub_vc_notify_cb_invoke(info->notify_cb, pid, msg); - return ret; + bundle_free(msg); + } + + return VCD_ERROR_NONE; } -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) +int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set domain type"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set domain : pid(%d), domain(%s)", pid, domain); + if (NULL == buffer || 0 >= len) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter"); + return VCD_ERROR_INVALID_PARAMETER; + } - int ret = -1; + client_tidl_info_s* info = vcd_client_get_tidl_info(pid); + if (NULL == info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get tidl info. pid(%d)", pid); + return VCD_ERROR_INVALID_PARAMETER; + } - ret = vcd_server_mgr_set_domain(pid, domain); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + bundle* msg = bundle_create(); + if (NULL == msg) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); + return VCD_ERROR_OUT_OF_MEMORY; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Send feedback streaming to app(%d), utt_id(%d), event(%d), length(%d)", pid, utt_id, event, len); - return ret; -} + rpc_port_stub_vcd_stub_array_char_h arr_char = NULL; + rpc_port_stub_vcd_stub_array_char_create(&arr_char); + rpc_port_stub_vcd_stub_array_char_set(arr_char, buffer, len); -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) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager request to do action"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr request to do action : pid(%d), type(%d) send_event(%s)", pid, type, send_event); + rpc_port_stub_vcd_stub_vc_feedback_cb_invoke(info->feedback_cb, utt_id, event, arr_char, len); - int ret = -1; + rpc_port_stub_vcd_stub_array_char_destroy(arr_char); - ret = vcd_server_mgr_do_action(pid, type, send_event); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - } + bundle_free(msg); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return VCD_ERROR_NONE; } -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) +int vcdc_send_hello(int pid, vcd_client_type_e type) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager start"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd check enabled or disabled command types. disabled cmd type(%d)", disabled_cmd_type); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send hello"); - int ret = -1; + char tmp_pid[10] = {0, }; - vcd_server_mgr_set_disabled_command_type(pid, disabled_cmd_type); + bundle* msg = bundle_create(); + snprintf(tmp_pid, 10, "%d", pid); - 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); - ret = vcd_server_mgr_start((vcd_recognition_mode_e)recognition_mode, exclusive_command_option, start_by_client); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + if (VCD_CLIENT_TYPE_NORMAL == type) { + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_HELLO); + bundle_add_str(msg, VC_BUNDLE_PID, tmp_pid); + } else if (VCD_CLIENT_TYPE_MANAGER == type) { + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_HELLO); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); + } else if (VCD_CLIENT_TYPE_WIDGET == type) { + bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_HELLO); + bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid); + } else { + SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Client type is NOT valid"); + bundle_free(msg); + return VCD_ERROR_INVALID_PARAMETER; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] VCD SEND MESSAGE"); - return ret; + // TODO: VCD_CLIENT_TYPE_MANAGER?? type?? + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid); + bundle_free(msg); + + return VCD_ERROR_NONE; } -static int __vc_mgr_stop_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +int vcd_tidl_open_connection() { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager stop"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr stop : pid(%d)", pid); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_open_connection"); - int ret = -1; + if (0 != __mgr_tidl_open_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to manager"); + return VCD_ERROR_OPERATION_FAILED; + } - ret = vcd_server_mgr_stop(); + if (0 != __client_tidl_open_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to client"); + return VCD_ERROR_OPERATION_FAILED; + } - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + if (0 != __widget_tidl_open_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to widget"); + return VCD_ERROR_OPERATION_FAILED; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + if (0 != __setting_tidl_open_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to open connection to setting"); + return VCD_ERROR_OPERATION_FAILED; + } - return ret; + return VCD_ERROR_NONE; } -static int __vc_mgr_cancel_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) +int vcd_tidl_close_connection() { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager cancel"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr cancel : pid(%d)", pid); - - int ret = -1; + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_tidl_close_connection"); - ret = vcd_server_mgr_cancel(); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + if (0 != __mgr_tidl_close_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to manager"); + return VCD_ERROR_OPERATION_FAILED; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - - return ret; -} + if (0 != __client_tidl_close_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to client"); + return VCD_ERROR_OPERATION_FAILED; + } -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) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager set audio streaming mode"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr set audio streaming mode : pid(%d) mode(%d)", pid, mode); + if (0 != __widget_tidl_close_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to widget"); + return VCD_ERROR_OPERATION_FAILED; + } - vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)mode); + if (0 != __setting_tidl_close_connection()) { + SLOG(LOG_ERROR, TAG_VCD, "Fail to close connection to setting"); + return VCD_ERROR_OPERATION_FAILED; + } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return VCD_ERROR_NONE; } -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) +int vcdc_send_set_volume(int manager_pid, float volume) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager specific engine request"); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set volume"); - int ret = -1; - gsize decodingSize = 0; - gchar *gDecodedRequest = (gchar *)g_base64_decode((const gchar *)request, &decodingSize); + char tmp_volume[20] = {0, }; - if (gDecodedRequest) { - ret = vcd_server_mgr_send_specific_engine_request(pid, engine_app_id, event, gDecodedRequest); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - } + bundle* msg = bundle_create(); - 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); - g_free(gDecodedRequest); - } + snprintf(tmp_volume, 20, "%.6f", volume); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_VOLUME); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_volume); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); -} -static void __vc_mgr_send_result_selection_cb(rpc_port_stub_vcd_mgr_stub_vc_mgr_context_h context, int pid, void *user_data) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager result selection"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr result selection : pid(%d)", pid); + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + if (20 == g_volume_count) { + SLOG(LOG_INFO, TAG_VCD, "@@ Send set volume : pid(%d), volume(%f)", manager_pid, volume); + g_volume_count = 0; + } + g_volume_count++; - vcd_server_mgr_result_select(); + bundle_free(msg); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return VCD_ERROR_NONE; } -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) +int vcdc_send_show_tooltip(int pid, bool show) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send utterance status"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send utterance status : pid(%d), utt_id(%d), utt_status(%d)", pid, utt_id, utt_status); - - pthread_mutex_lock(&g_client_tidl_info_mutex); - - SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to client"); - client_tidl_info_s* client_tidl_info = vcd_client_get_tidl_info(pid); - if (NULL == client_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] tidl proxy info not allocated"); - pthread_mutex_unlock(&g_client_tidl_info_mutex); - return; - } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager"); - rpc_port_stub_vcd_stub_vc_notify_cb_h handle = client_tidl_info->notify_cb; - if (NULL == handle) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null"); - pthread_mutex_unlock(&g_client_tidl_info_mutex); - return; - } + char tmp_pid[10] = {0, }; + char tmp_show[10] = {0, }; bundle* msg = bundle_create(); - if (NULL == msg) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); - pthread_mutex_unlock(&g_client_tidl_info_mutex); - return; - } - char pid_char[10] = {0}; - char uttid_char[10] = {0}; - char uttstatus_char[10] = {0}; - snprintf(pid_char, 10, "%d", pid); - snprintf(uttid_char, 10, "%d", utt_id); - snprintf(uttstatus_char, 10, "%d", utt_status); + snprintf(tmp_pid, 10, "%d", pid); + snprintf(tmp_show, 10, "%d", (int)show); - bundle_add_str(msg, VC_BUNDLE_METHOD, VC_MANAGER_METHOD_UTTERANCE_STATUS); - bundle_add_str(msg, VC_BUNDLE_PID, pid_char); - bundle_add_str(msg, VC_BUNDLE_REASON, uttid_char); - bundle_add_str(msg, VC_BUNDLE_ERR_MSG, uttstatus_char); + bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SHOW_TOOLTIP); + bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_pid); + bundle_add_str(msg, VC_WIDGET_BUNDLE_SHOW, tmp_show); - if (0 != rpc_port_stub_vcd_stub_vc_notify_cb_invoke(handle, pid, msg)) { - SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg"); - bundle_free(msg); - pthread_mutex_unlock(&g_client_tidl_info_mutex); - return; - } + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + __send_msg(msg, VCD_CLIENT_TYPE_WIDGET, pid); bundle_free(msg); - pthread_mutex_unlock(&g_client_tidl_info_mutex); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + return VCD_ERROR_NONE; } -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) +int vcdc_send_result(int pid, int manager_pid, int cmd_type) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Manager send audio streaming"); - - char* buffer = NULL; - int len = 0; - int ret = -1; - rpc_port_stub_vcd_mgr_stub_array_char_get(data, &buffer, &len); - - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd mgr send audio streaming : pid(%d), event(%d), buffer(%p), len(%d)", pid, event, buffer, len); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result"); - ret = vcd_server_mgr_send_audio_streaming(pid, event, buffer, (unsigned int)len); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); + vcd_client_type_e type; + bundle* msg = bundle_create(); + if (NULL == msg) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create bundle data"); + return VCD_ERROR_OUT_OF_MEMORY; } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); -} - -int vcd_mgr_tidl_open_connection() -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_mgr_tidl_open_connection"); - - g_mgr_callback.create = __vc_mgr_create_cb; - g_mgr_callback.terminate = __vc_mgr_terminate_cb; - g_mgr_callback.register_cb = __vc_mgr_register_cb_cb; - g_mgr_callback.initialize = __vc_mgr_initialize_cb; - g_mgr_callback.finalize = __vc_mgr_finalize_cb; - g_mgr_callback.set_command = __vc_mgr_set_command_cb; - g_mgr_callback.unset_command = __vc_mgr_unset_command_cb; - g_mgr_callback.demandable_client = __vc_mgr_set_demandable_client_cb; - g_mgr_callback.set_audio_type = __vc_mgr_set_audio_type_cb; - g_mgr_callback.get_audio_type = __vc_mgr_get_audio_type_cb; - g_mgr_callback.set_private_data = __vc_mgr_set_private_data_cb; - g_mgr_callback.get_private_data = __vc_mgr_get_private_data_cb; - g_mgr_callback.set_client_info = __vc_mgr_set_client_info_cb; - g_mgr_callback.set_domain = __vc_mgr_set_domain_cb; - g_mgr_callback.do_action = __vc_mgr_do_action_cb; - g_mgr_callback.start = __vc_mgr_start_cb; - g_mgr_callback.stop = __vc_mgr_stop_cb; - g_mgr_callback.cancel = __vc_mgr_cancel_cb; - g_mgr_callback.set_audio_streaming_mode = __vc_mgr_set_audio_streaming_mode_cb; - g_mgr_callback.send_specific_engine_request = __vc_mgr_send_specific_engine_request_cb; - g_mgr_callback.send_result_selection = __vc_mgr_send_result_selection_cb; - g_mgr_callback.send_utterance_status = __vc_mgr_send_utterance_status_cb; - g_mgr_callback.send_audio_streaming = __vc_mgr_send_audio_streaming_cb; + SLOG(LOG_INFO, TAG_VCD, "[TIDL] Result command type(%d)", cmd_type); - int ret = -1; - int count = 0; - while (VC_RETRY_MIN_COUNT >= count) { - ret = rpc_port_stub_vcd_mgr_stub_vc_mgr_register(&g_mgr_callback, NULL); - if (0 == ret) { - SLOG(LOG_DEBUG, TAG_VCD, "register callback"); - return VCD_ERROR_NONE; + switch (cmd_type) { + case VC_COMMAND_TYPE_FOREGROUND: + case VC_COMMAND_TYPE_BACKGROUND: + if (pid == manager_pid) { + type = VCD_CLIENT_TYPE_MANAGER; + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT); + } else { + type = VCD_CLIENT_TYPE_NORMAL; + char pid_char[10] = {0}; + snprintf(pid_char, 10, "%d", pid); + bundle_add_str(msg, VC_BUNDLE_PID, pid_char); + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_RESULT); } - usleep(100000); - count++; + break; + case VC_COMMAND_TYPE_WIDGET: + type = VCD_CLIENT_TYPE_WIDGET; + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_WIDGET_METHOD_RESULT); + break; + case VC_COMMAND_TYPE_SYSTEM: + case VC_COMMAND_TYPE_SYSTEM_BACKGROUND: + case VC_COMMAND_TYPE_EXCLUSIVE: + type = VCD_CLIENT_TYPE_MANAGER; + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_MANAGER_METHOD_RESULT); + break; + + default: + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Command type is NOT valid(%d)", cmd_type); + bundle_free(msg); + return VCD_ERROR_INVALID_PARAMETER; } - SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; -} + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); -int vcd_mgr_tidl_close_connection() -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection"); - rpc_port_stub_vcd_mgr_stub_vc_mgr_unregister(); + __send_msg(msg, type, pid); + bundle_free(msg); return VCD_ERROR_NONE; } -/* -* Tidl for widget -*/ -static void __widget_on_connected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data) +int vcdc_send_pre_result_to_manager(int manager_pid, int event, const char* pre_result) { - widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send pre result to manager"); - widget_tidl_info->connected = true; - widget_tidl_info->connection_requesting = false; + char tmp_event[10] = {0, }; - SLOG(LOG_INFO, TAG_VCD, "Connected to widget"); -} + bundle* msg = bundle_create(); + snprintf(tmp_event, 10, "%d", event); -static void __widget_on_disconnected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data) -{ - widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_PRE_RESULT); + bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event); + bundle_add_str(msg, VC_MANAGER_BUNDLE_PRE_RESULT, pre_result); - widget_tidl_info->connected = false; - widget_tidl_info->connection_requesting = false; + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - SLOG(LOG_INFO, TAG_VCD, "Disonnected to widget"); + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); + + return VCD_ERROR_NONE; } -static void __widget_on_rejected(rpc_port_proxy_vcd_widget_proxy_vcd_widget_h h, void *user_data) +int vcdc_send_specific_engine_result_to_manager(int manager_pid, const char* engine_app_id, const char* event, const char* result) { - widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info((int)user_data); - - widget_tidl_info->connection_requesting = false; + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send specific engine result to manager"); - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Rejected from widget"); -} + bundle* msg = bundle_create(); -static rpc_port_proxy_vcd_widget_proxy_vcd_widget_h __widget_create_rpc_port(const char* engine_app_id, int pid) -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] __widget_create_rpc_port"); - rpc_port_proxy_vcd_widget_proxy_vcd_widget_callback_s rpc_callback = { - .connected = __widget_on_connected, - .disconnected = __widget_on_disconnected, - .rejected = __widget_on_rejected - }; + gchar *gEncodedResult = g_base64_encode((const guchar*)result, strlen(result)); - rpc_port_proxy_vcd_widget_proxy_vcd_widget_h handle = NULL; - if (0 != rpc_port_proxy_vcd_widget_proxy_vcd_widget_create(engine_app_id, &rpc_callback, (void *)pid, &handle)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create proxy"); - return NULL; - } + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPECIFIC_ENGINE_RESULT); + bundle_add_str(msg, VC_MANAGER_BUNDLE_ENGINE_APP_ID, engine_app_id); + bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, event); + bundle_add_str(msg, VC_MANAGER_BUNDLE_RESULT, gEncodedResult); - return handle; -} + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); -static void __vc_widget_create_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data) -{ - char *sender = NULL; + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); - rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender); - if (!sender) { - SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); - return; - } + if (gEncodedResult) + g_free(gEncodedResult); - SLOG(LOG_DEBUG, TAG_VCD, "@@@ Widget connect. appid(%s)", sender); - free(sender); + return VCD_ERROR_NONE; } -static void __vc_widget_terminate_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, void *user_data) +int vcdc_send_result_to_manager(int manager_pid, int result_type) { - void* tag = NULL; - rpc_port_stub_vcd_widget_stub_vc_widget_context_get_tag(context, &tag); - - if (NULL != tag) { - int pid = (intptr_t)tag; - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC WIDGET FINALIZE. pid(%u)", pid); - - pthread_mutex_lock(&g_widget_tidl_info_mutex); - widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid); - if (NULL == widget_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info."); - pthread_mutex_unlock(&g_widget_tidl_info_mutex); - return; - } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send result to manager"); - if (0 != vcd_client_widget_unset_tidl_notify_cb(pid)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback"); - } + char tmp_result[10] = {0, }; - if (0 != vcd_client_widget_delete_tidl_info(pid)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete widget tidl info"); - } - widget_tidl_info = NULL; + bundle* msg = bundle_create(); + snprintf(tmp_result, 10, "%d", result_type); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ALL_RESULT); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_result); - pthread_mutex_unlock(&g_widget_tidl_info_mutex); - char *sender = NULL; - rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender); - if (!sender) - return; + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - SLOG(LOG_INFO, TAG_VCD, "@@@ Manager disconnect. appid(%s)", sender); + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); - free(sender); - } - rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, NULL); + return VCD_ERROR_NONE; } -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) +int vcdc_send_speech_detected(int manager_pid) { - pthread_mutex_lock(&g_widget_tidl_info_mutex); - SLOG(LOG_INFO, TAG_VCD, "@@@ VC WIDGET REGISTER CALLBACK"); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send speech detected"); - int ret = -1; - ret = vcd_client_widget_add_tidl_info(pid); + bundle* msg = bundle_create(); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add widget tidl info."); - pthread_mutex_unlock(&g_widget_tidl_info_mutex); - return; - } - widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SPEECH_DETECTED); - if (NULL == widget_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get widget tidl info. pid(%d)", pid); - pthread_mutex_unlock(&g_widget_tidl_info_mutex); - return; - } + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - char *sender = NULL; - rpc_port_stub_vcd_widget_stub_vc_widget_context_get_sender(context, &sender); + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); - if (!sender){ - SLOG(LOG_ERROR, TAG_VCD, "Sender is NULL"); - pthread_mutex_unlock(&g_widget_tidl_info_mutex); - return; - } + return VCD_ERROR_NONE; +} - widget_tidl_info->rpc_h = __widget_create_rpc_port(sender, pid); +int vcdc_send_service_state(vcd_state_e state) +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send service state"); - if (NULL == widget_tidl_info->rpc_h) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to create server proxy"); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] rpc_h(%p), engine_app_id(%s)", widget_tidl_info->rpc_h, sender); - } + char tmp_state[10] = {0, }; - free(sender); + bundle* msg = bundle_create(); + snprintf(tmp_state, 10, "%d", (int)state); - if (0 != vcd_client_widget_set_tidl_notify_cb(pid, notify_callback, user_data)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback"); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); - } + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_SERVICE_STATE); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_state); - pthread_mutex_unlock(&g_widget_tidl_info_mutex); + bundle_add_str(msg, VC_BUNDLE_METHOD, VCD_METHOD_SET_SERVICE_STATE); + bundle_add_str(msg, VC_BUNDLE_SERVICE_STATE, tmp_state); - __request_tidl_connect(VCD_CLIENT_TYPE_WIDGET, pid); + bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_WIDGET_METHOD_SET_SERVICE_STATE); + bundle_add_str(msg, VC_WIDGET_BUNDLE_MESSAGE, tmp_state); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL"); + __send_signal(msg); + bundle_free(msg); + + return VCD_ERROR_NONE; } -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) +int vcdc_send_dialog(int manager_pid, int pid, const char* disp_text, const char* utt_text, int continuous) { - SLOG(LOG_INFO, TAG_VCD, "@@@ VCD Widget Initialize"); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send dialog"); - uintptr_t ptr_pid = pid; - int ret = -1; + char tmp_pid[10] = {0, }; + char tmp_continuous[10] = {0, }; + char* tmp_disp_text = NULL; + char* tmp_utt_text = NULL; + bundle* msg = bundle_create(); + snprintf(tmp_pid, 10, "%d", pid); + snprintf(tmp_continuous, 10, "%d", continuous); - rpc_port_stub_vcd_widget_stub_vc_widget_context_set_tag(context, (void*)ptr_pid); + if (NULL == disp_text) { + tmp_disp_text = strdup("#NULL"); + } else { + tmp_disp_text = strdup(disp_text); + } - ret = vcd_server_widget_initialize(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + if (NULL == utt_text) { + tmp_utt_text = strdup("#NULL"); + } else { + tmp_utt_text = strdup(utt_text); } - *service_state = vcd_server_get_service_state(); - *daemon_pid = getpid(); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget initialize : pid(%d) service state(%d) daemon_pid(%d)", pid, *service_state, *daemon_pid); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - return ret; + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_DIALOG); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); + bundle_add_str(msg, VC_MANAGER_BUNDLE_DISP_TEXT, tmp_disp_text); + bundle_add_str(msg, VC_MANAGER_BUNDLE_UTT_TEXT, tmp_utt_text); + bundle_add_str(msg, VC_MANAGER_BUNDLE_CONTINUOUS, tmp_continuous); + + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); + free(tmp_disp_text); + free(tmp_utt_text); + + return VCD_ERROR_NONE; } -static int __vc_widget_finalize_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data) +int vcdc_tidl_send_error_to_manager(int manager_pid, int reason, char *err_msg) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Finalize"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget finalize : pid(%d)", pid); + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal to manager"); - int ret = -1; + char tmp_reason[10] = {0, }; + char tmp_daemon_pid[10] = {0, }; + char *temp_msg = NULL; - ret = vcd_server_widget_finalize(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + if (NULL == err_msg) { + SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL"); + temp_msg = strdup("#NULL"); + } else { + temp_msg = strdup(err_msg); } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); - - return ret; -} + bundle* msg = bundle_create(); + snprintf(tmp_reason, 10, "%d", reason); + snprintf(tmp_daemon_pid, 10, "%d", getpid()); -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) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start Recording"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start recording : pid(%d) command(%d)", pid, command); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR); + bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason); + bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid); + bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg); - int ret = -1; + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - ret = vcd_server_widget_start_recording(pid, command); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; - } + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + free(temp_msg); + temp_msg = NULL; - return ret; + return VCD_ERROR_NONE; } -static int __vc_widget_start_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, int silence, void *user_data) +/* +// TODO: remove _tidl after remove dbus +// TODO: make client, widget error signal +// But... it seems there is no call of this function.. Need to check. +int vcdc_tidl_send_error(int reason, char *err_msg) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Start"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget start : pid(%d) silence(%d)", pid, silence); + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] Send error signal"); - int ret = -1; + char tmp_reason[10] = {0, }; + char tmp_daemon_pid[10] = {0, }; + char *temp_msg = NULL; - ret = vcd_server_widget_start(pid, (bool)silence); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; + if (NULL == err_msg) { + SLOG(LOG_WARN, TAG_VCD, "[TIDL ERROR] Input parameter is NULL"); + temp_msg = strdup("#NULL"); + } else { + temp_msg = strdup(err_msg); } - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + bundle* msg = bundle_create(); + snprintf(tmp_reason, 10, "%d", reason); + snprintf(tmp_daemon_pid, 10, "%d", getpid()); - return ret; -} + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR); + bundle_add_str(msg, VC_MANAGER_BUNDLE_REASON, tmp_reason); + bundle_add_str(msg, VC_MANAGER_BUNDLE_DAEMON_PID, tmp_daemon_pid); + bundle_add_str(msg, VC_MANAGER_BUNDLE_ERROR_MESSAGE, temp_msg); -static int __vc_widget_stop_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data) -{ - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Stop"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget stop : pid(%d)", pid); + bundle_add_str(msg, VC_WIDGET_BUNDLE_METHOD, VCD_MANAGER_METHOD_ERROR); + bundle_add_str(msg, VC_WIDGET_BUNDLE_REASON, tmp_reason); + bundle_add_str(msg, VC_WIDGET_BUNDLE_DAEMON_PID, tmp_daemon_pid); + bundle_add_str(msg, VC_WIDGET_BUNDLE_ERROR_MESSAGE, temp_msg); - int ret = -1; + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND SIGNAL"); - ret = vcd_server_widget_stop(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; - } + __send_signal(msg); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + bundle_free(msg); - return ret; -} + free(temp_msg); + temp_msg = NULL; -static int __vc_widget_cancel_cb(rpc_port_stub_vcd_widget_stub_vc_widget_context_h context, int pid, void *user_data) + return VCD_ERROR_NONE; +} +*/ +int vcdc_send_request_set_private_data(int pid, const char* key, const char* data) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Cancel"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget cancel : pid(%d)", pid); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set private data"); - int ret = -1; + char tmp_pid[10] = { 0, }; - ret = vcd_server_widget_cancel(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; - } + bundle* msg = bundle_create(); + snprintf(tmp_pid, 10, "%d", pid); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_SET_PRIVATE_DATA); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); + bundle_add_str(msg, VC_MANAGER_BUNDLE_KEY, key); + bundle_add_str(msg, VC_MANAGER_BUNDLE_PRIVATE_DATA, data); - return ret; + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); + + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, pid); + bundle_free(msg); + + return VCD_ERROR_NONE; } -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) +int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Enable Asr Result"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget enable asr result : pid(%d) enable(%d)", pid, enable); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback audio format to manager"); - int ret = -1; + char tmp_rate[10] = {0, }; + char tmp_channel[10] = {0, }; + char tmp_audio_type[10] = {0, }; - ret = vcd_server_widget_enable_asr_result(pid, enable); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return ret; - } + bundle* msg = bundle_create(); + snprintf(tmp_rate, 10, "%d", rate); + snprintf(tmp_channel, 10, "%d", (int)channel); + snprintf(tmp_audio_type, 10, "%d", (int)audio_type); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_AUDIO_FORMAT); + bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_RATE, tmp_rate); + bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_CHANNEL, tmp_channel); + bundle_add_str(msg, VC_MANAGER_BUNDLE_AUDIO_TYPE, tmp_audio_type); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - return ret; + __send_msg(msg, VCD_CLIENT_TYPE_MANAGER, manager_pid); + bundle_free(msg); + + return VCD_ERROR_NONE; } -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) +int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len) { - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VCD Widget Set Foreground"); - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd widget set foreground : pid(%d) value(%d)", pid, value); - - int ret = -1; + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send feedback streaming to manager"); - ret = vcd_server_set_foreground(pid, value); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[OUT ERROR] Result(%d)", ret); - return; - } + char tmp_pid[10] = {0, }; + char tmp_utt_id[10] = {0, }; + char tmp_event[10] = {0, }; - SLOG(LOG_DEBUG, TAG_VCD, "@@@ send request set foreground to manager"); - vcdc_send_request_set_foreground(pid, value); + bundle* msg = bundle_create(); + snprintf(tmp_pid, 10, "%d", pid); + snprintf(tmp_utt_id, 10, "%d", utt_id); + snprintf(tmp_event, 10, "%d", (int)event); + bundle_add_str(msg, VC_MANAGER_BUNDLE_METHOD, VCD_MANAGER_METHOD_FEEDBACK_STREAMING); + bundle_add_str(msg, VC_MANAGER_BUNDLE_MESSAGE, tmp_pid); + bundle_add_str(msg, VC_MANAGER_BUNDLE_UTTID, tmp_utt_id); + bundle_add_str(msg, VC_MANAGER_BUNDLE_EVENT, tmp_event); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + rpc_port_stub_vcd_mgr_stub_array_char_h streaming_data = NULL; + rpc_port_stub_vcd_mgr_stub_array_char_create(&streaming_data); + if (NULL == streaming_data) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to create data handle"); + return VCD_ERROR_OUT_OF_MEMORY; + } - return; -} + if (NULL != buffer && 0 < len) { + rpc_port_stub_vcd_mgr_stub_array_char_set(streaming_data, (char*)buffer, len); + } else { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] buffer is empty"); + } -int vcd_widget_tidl_open_connection() -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_widget_tidl_open_connection"); + SLOG(LOG_DEBUG, TAG_VCD, ">>>> VCD SEND MESSAGE"); - g_widget_callback.create = __vc_widget_create_cb; - g_widget_callback.terminate = __vc_widget_terminate_cb; - g_widget_callback.register_cb = __vc_widget_register_cb_cb; - g_widget_callback.initialize = __vc_widget_initialize_cb; - g_widget_callback.finalize = __vc_widget_finalize_cb; - g_widget_callback.start_recording = __vc_widget_start_recording_cb; - g_widget_callback.start = __vc_widget_start_cb; - g_widget_callback.stop = __vc_widget_stop_cb; - g_widget_callback.cancel = __vc_widget_cancel_cb; - g_widget_callback.enable_asr_result = __vc_widget_enable_asr_result_cb; - g_widget_callback.set_foreground = __vc_widget_set_foreground_cb; + pthread_mutex_lock(&g_mgr_tidl_info_mutex); + SLOG(LOG_INFO, TAG_VCD, "[TIDL] message to manager"); + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - int ret = -1; - int count = 0; - while (VC_RETRY_MIN_COUNT >= count) { - ret = rpc_port_stub_vcd_widget_stub_vc_widget_register(&g_widget_callback, NULL); - if (0 == ret) { - SLOG(LOG_DEBUG, TAG_VCD, "register callback"); - return VCD_ERROR_NONE; - } - usleep(100000); - count++; + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get manager tidl info. pid(%d)", pid); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); + bundle_free(msg); + return VCD_ERROR_OPERATION_FAILED; } - SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; -} + rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_h handle = mgr_tidl_info->send_buffer_cb; + if (NULL == handle) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL] notify callback handle is null"); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); + bundle_free(msg); + return VCD_ERROR_OPERATION_FAILED; + } -int vcd_widget_tidl_close_connection() -{ - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection"); - rpc_port_stub_vcd_widget_stub_vc_widget_unregister(); + if (0 != rpc_port_stub_vcd_mgr_stub_vc_mgr_send_buffer_cb_invoke(handle, streaming_data, msg)) { + SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send msg"); + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); + bundle_free(msg); + return VCD_ERROR_OPERATION_FAILED; + } + pthread_mutex_unlock(&g_mgr_tidl_info_mutex); + rpc_port_stub_vcd_mgr_stub_array_char_destroy(streaming_data); + bundle_free(msg); return VCD_ERROR_NONE; } -/** - * TIDL functions for VC setting client - */ -static void __vc_setting_create_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data) +void vcdc_send_request_set_foreground(int pid, int value) { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_create_cb"); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Set foreground"); - char *sender = NULL; + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - rpc_port_stub_vcd_setting_stub_vc_setting_context_get_sender(context, &sender); - if (!sender) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Sender is NULL"); + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); return; } - SLOG(LOG_INFO, TAG_VCD, "[TIDL] sender(%s)", sender); // sender (app_id) - free(sender); + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return; + } + + rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_set_foreground(mgr_tidl_info->rpc_h, pid, value); + + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request set foreground"); } -static void __vc_setting_terminate_cb(rpc_port_stub_vcd_setting_stub_vc_setting_context_h context, void *user_data) +int vcdc_send_request_get_private_data(int pid, const char* key, char** data) { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_terminate_cb"); - void* tag = NULL; - rpc_port_stub_vcd_setting_stub_vc_setting_context_get_tag(context, &tag); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Get private data"); - if (NULL != tag) { - int pid = (intptr_t)tag; - SLOG(LOG_DEBUG, TAG_VCD, "@@@ VC SETTING FINALIZE. pid(%u)", pid); + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - pthread_mutex_lock(&g_setting_tidl_info_mutex); - setting_tidl_info_s* setting_tidl_info = vcd_client_setting_get_tidl_info(pid); - if (NULL == setting_tidl_info) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to get setting tidl info."); - pthread_mutex_unlock(&g_setting_tidl_info_mutex); - return; - } + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; + } - if (0 != vcd_client_setting_unset_tidl_notify_cb(pid)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to unset notify callback"); - } + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; + } - if (0 != vcd_client_setting_delete_tidl_info(pid)) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to delete setting tidl info"); - } - setting_tidl_info = NULL; + char *tmp = NULL; + int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_get_private_data(mgr_tidl_info->rpc_h, pid, key, &tmp); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd manager get private data : Fail to invoke message, error(%d)", ret); + return ret; + } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd manager get private data : Success"); - SLOG(LOG_DEBUG, TAG_VCD, "@@@"); + *data = tmp; - pthread_mutex_unlock(&g_setting_tidl_info_mutex); - } - rpc_port_stub_vcd_setting_stub_vc_setting_context_set_tag(context, NULL); + return VC_ERROR_NONE; } -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) +int vcdc_send_request_auth_enable(int pid) { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_cb. pid(%d)", pid); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth enable"); - if (NULL == callback) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null."); - return; + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; } - int ret = -1; - ret = vcd_client_setting_add_tidl_info(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info."); - return; + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; } - ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback."); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); + int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_enable(mgr_tidl_info->rpc_h, pid); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth enable : Fail to invoke message, error(%d)", ret); + return ret; } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth enable : Success"); + + return VC_ERROR_NONE; } -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) +int vcdc_send_request_auth_disable(int pid) { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] __vc_setting_register_notify_cb_sync_cb. pid(%d)", pid); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth disable"); - if (NULL == callback) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] callback is null."); - return VCD_ERROR_INVALID_PARAMETER; + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; } - int ret = -1; - ret = vcd_client_setting_add_tidl_info(pid); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to add tidl info."); + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; + } + + int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_disable(mgr_tidl_info->rpc_h, pid); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth disable : Fail to invoke message, error(%d)", ret); return ret; } - - ret = vcd_client_setting_set_tidl_notify_cb(pid, callback, user_data); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set notify callback."); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set notify callback."); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth disable : Success"); + + return VC_ERROR_NONE; +} + +int vcdc_send_request_auth_start(int pid) +{ + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth start"); + + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; } - return ret; + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; + } + + int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_start(mgr_tidl_info->rpc_h, pid); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth start : Fail to invoke message, error(%d)", ret); + return ret; + } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth start : Success"); + + return VC_ERROR_NONE; } -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) +int vcdc_send_request_auth_stop(int pid) { - if (NULL == language) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Invalid parameter"); - return VCD_ERROR_INVALID_PARAMETER; + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth stop"); + + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); + + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; } - SLOG(LOG_INFO, TAG_VCD, "[IN] vcd server set language : language(%s)", language); + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; + } - int ret = vcd_server_set_language(language); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Fail to set language(%d).", ret); - } else { - SLOG(LOG_INFO, TAG_VCD, "[TIDL] Succeed to set language."); + int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_stop(mgr_tidl_info->rpc_h, pid); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth stop : Fail to invoke message, error(%d)", ret); + return ret; } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth stop : Success"); - return ret; + return VC_ERROR_NONE; } -int vcd_setting_tidl_open_connection() +int vcdc_send_request_auth_cancel(int pid) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] vcd_setting_tidl_open_connection"); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] auth cancel"); - g_setting_callback.create = __vc_setting_create_cb; - g_setting_callback.terminate = __vc_setting_terminate_cb; - g_setting_callback.register_notify_cb = __vc_setting_register_notify_cb_cb; - g_setting_callback.register_notify_cb_sync = __vc_setting_register_notify_cb_sync_cb; - g_setting_callback.set_language = __vc_setting_set_language_cb; + manager_tidl_info_s* mgr_tidl_info = vcd_client_manager_get_tidl_info(); - int ret = -1; - int count = 0; - while (VC_RETRY_MIN_COUNT >= count) { - ret = rpc_port_stub_vcd_setting_stub_vc_setting_register(&g_setting_callback, NULL); - if (0 == ret) { - SLOG(LOG_DEBUG, TAG_VCD, "register callback"); - return VCD_ERROR_NONE; - } - usleep(100000); - count++; + if (NULL == mgr_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; } - SLOG(LOG_ERROR, TAG_VCD, "Fail to register callback(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; + if (!mgr_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; + } + + int ret = rpc_port_proxy_vcd_mgr_proxy_vcd_mgr_invoke_auth_cancel(mgr_tidl_info->rpc_h, pid); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request auth cancel : Fail to invoke message, error(%d)", ret); + return ret; + } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request auth cancel : Success"); + + return VC_ERROR_NONE; } -int vcd_setting_tidl_close_connection() +int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_type, bool* is_consumed) { - SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Close connection"); - rpc_port_stub_vcd_setting_stub_vc_setting_unregister(); + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Send asr result"); - return VCD_ERROR_NONE; + widget_tidl_info_s* widget_tidl_info = vcd_client_widget_get_tidl_info(pid); + + if (NULL == widget_tidl_info) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to get tidl info"); + return VC_ERROR_OPERATION_FAILED; + } + + if (!widget_tidl_info->connected) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Not Connected"); + return VC_ERROR_OPERATION_FAILED; + } + + bool temp; + int ret = rpc_port_proxy_vcd_widget_proxy_vcd_widget_invoke_send_asr_result(widget_tidl_info->rpc_h, pid, event, asr_result, &temp); + if (RPC_PORT_ERROR_NONE != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[TIDL ERROR] Request vcd widget send asr result : Fail to invoke message, error(%d)", ret); + return ret; + } + SLOG(LOG_DEBUG, TAG_VCD, "[TIDL] Request vcd widget send asr result : Success"); + + *is_consumed = temp; + + return VC_ERROR_NONE; } + diff --git a/server/vcd_tidl.h b/server/vcd_tidl.h index e62c242..839258b 100644 --- a/server/vcd_tidl.h +++ b/server/vcd_tidl.h @@ -30,7 +30,6 @@ typedef enum { VCD_CLIENT_TYPE_MANAGER } vcd_client_type_e; - int vcd_tidl_open_connection(); int vcd_tidl_close_connection(); @@ -55,6 +54,10 @@ int vcdc_send_speech_detected(int manger_pid); int vcdc_tidl_send_error_to_manager(int manager_pid, int reason, char *err_msg); +int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg); + +int vcdc_send_manager_pid(int manager_pid); + int vcdc_send_service_state(vcd_state_e state); int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char* utt_text, int continuous); @@ -67,7 +70,6 @@ int vcdc_send_asr_result(int pid, int event, const char* asr_result, int cmd_typ void vcdc_send_request_set_foreground(int pid, int value); - /* for auth */ int vcdc_send_request_auth_enable(int pid); @@ -82,15 +84,10 @@ int vcdc_send_request_auth_cancel(int pid); /* for TTS feedback */ int vcdc_send_feedback_audio_format_to_manager(int manager_pid, int rate, vc_audio_channel_e channel, vce_audio_type_e audio_type); -int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len); - -int vcdc_send_result(int pid, int manager_pid, int cmd_type); - -int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg); +int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len); -int vcdc_send_manager_pid(int manager_pid); +int vcdc_send_feedback_streaming_to_manager(int manager_pid, int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len); -int vcdc_send_feedback_streaming(int pid, int utt_id, vc_feedback_event_e event, char* buffer, int len); #ifdef __cplusplus } -- 2.7.4