From 33e3ca166a54031f2081eb1b75ff87c856a22b33 Mon Sep 17 00:00:00 2001 From: sungrae jo Date: Wed, 24 Oct 2018 18:56:44 +0900 Subject: [PATCH 01/16] Add init code for STT user_data Change-Id: I7d9285046c6b46cd7443cc420112c59fa4e7e466 Signed-off-by: sungrae jo --- server/vcd_engine_agent.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/vcd_engine_agent.c b/server/vcd_engine_agent.c index 68b8f83..7b1dde8 100644 --- a/server/vcd_engine_agent.c +++ b/server/vcd_engine_agent.c @@ -236,8 +236,11 @@ int __internal_get_engine_info(vce_request_callback_s* callback) g_dynamic_engine.callbacks->nlu_base_info_request = NULL; g_dynamic_engine.callbacks->specific_engine_request = NULL; g_dynamic_engine.internal_callbacks->request_tts = NULL; + g_dynamic_engine.internal_callbacks->request_tts_user_data = NULL; g_dynamic_engine.internal_callbacks->cancel_tts = NULL; + g_dynamic_engine.internal_callbacks->cancel_tts_user_data = NULL; g_dynamic_engine.internal_callbacks->get_tts_audio_format = NULL; + g_dynamic_engine.internal_callbacks->get_tts_audio_format_user_data = NULL; SLOG(LOG_DEBUG, TAG_VCD, "@@@ Valid Engine"); SLOG(LOG_DEBUG, TAG_VCD, "Engine uuid : %s", g_dynamic_engine.engine_uuid); -- 2.7.4 From 743e25a7735d0bc67aae2dc66dcae86c944b4c3a Mon Sep 17 00:00:00 2001 From: sungrae jo Date: Mon, 5 Nov 2018 19:31:59 +0900 Subject: [PATCH 02/16] Fixed system volume code Change-Id: I45f881d10ae13fd6c0e19a6772d66f5376c7a1fb Signed-off-by: sungrae jo --- server/vcd_recorder.c | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index a024942..8151e00 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -902,33 +902,39 @@ int vcd_recorder_stop_streaming() int vcd_recorder_change_system_volume() { + int ret = VCD_ERROR_NONE; + if (!g_stream_for_volume_h) { - int ret = sound_manager_create_stream_information_internal(SOUND_STREAM_TYPE_VOICE_RECOGNITION_SERVICE, NULL, NULL, &g_stream_for_volume_h); + ret = sound_manager_create_stream_information_internal(SOUND_STREAM_TYPE_VOICE_RECOGNITION_SERVICE, NULL, NULL, &g_stream_for_volume_h); if (0 != ret) { SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] Fail to create stream information, ret(%d)", ret); return VCD_ERROR_OPERATION_FAILED; } - if (!g_virtual_sound_stream_h) { - ret = sound_manager_create_virtual_stream(g_stream_for_volume_h, &g_virtual_sound_stream_h); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to create virtual stream, ret(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; - } - ret = sound_manager_start_virtual_stream(g_virtual_sound_stream_h); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to start virtual stream, ret(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; - } + } + + if (!g_virtual_sound_stream_h) { + ret = sound_manager_create_virtual_stream(g_stream_for_volume_h, &g_virtual_sound_stream_h); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to create virtual stream, ret(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; } } + ret = sound_manager_start_virtual_stream(g_virtual_sound_stream_h); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to start virtual stream, ret(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; + } + return 0; } int vcd_recorder_recover_system_volume() { + int ret = VCD_ERROR_NONE; + if (g_virtual_sound_stream_h) { - int ret = sound_manager_stop_virtual_stream(g_virtual_sound_stream_h); + ret = sound_manager_stop_virtual_stream(g_virtual_sound_stream_h); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to stop virtual stream, ret(%d)", ret); return VCD_ERROR_OPERATION_FAILED; @@ -939,15 +945,15 @@ int vcd_recorder_recover_system_volume() return VCD_ERROR_OPERATION_FAILED; } g_virtual_sound_stream_h = NULL; + } - if (g_stream_for_volume_h) { - ret = sound_manager_destroy_stream_information(g_stream_for_volume_h); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to destroy stream information, ret(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; - } - g_stream_for_volume_h = NULL; + if (g_stream_for_volume_h) { + ret = sound_manager_destroy_stream_information(g_stream_for_volume_h); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to destroy stream information, ret(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; } + g_stream_for_volume_h = NULL; } return 0; -- 2.7.4 From 21dbcba34abd3e5c96a59ee5dfbf818a2950a315 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Wed, 7 Nov 2018 14:52:28 +0900 Subject: [PATCH 03/16] Fix setting vc mgr pid Change-Id: I520abf1debc3d20c66752b8ce94251c3705cfbb1 Signed-off-by: sooyeon.kim --- server/vcd_client_data.c | 20 +++++++++++--------- server/vcd_server.c | 3 ++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/server/vcd_client_data.c b/server/vcd_client_data.c index 8639155..2944216 100644 --- a/server/vcd_client_data.c +++ b/server/vcd_client_data.c @@ -52,15 +52,6 @@ vc_client_info_s* __client_get_element(int pid); int vcd_client_manager_set(int pid) { - if (-1 != g_manager.pid && NULL != g_manager.appid) { - SLOG(LOG_DEBUG, TAG_VCD, "Manager has already registered"); - return -1; - } - g_manager.pid = pid; - g_manager.manager_cmd = false; - g_manager.exclusive_cmd_option = false; - g_manager.appid = NULL; - // Get appid by pid using app control char* appid = NULL; int ret = app_manager_get_app_id(pid, &appid); @@ -68,6 +59,17 @@ int vcd_client_manager_set(int pid) SLOG(LOG_ERROR, TAG_VCD, "[ERROR] fail to get app id, ret(%d), pid(%d)", ret, pid); return -1; } + + if (-1 != g_manager.pid && NULL != g_manager.appid && 0 == strncmp(g_manager.appid, appid, strlen(g_manager.appid))) { + SLOG(LOG_WARN, TAG_VCD, "Same manager has already registered. It doesn't need to set manager again."); + return 0; + } + + g_manager.pid = pid; + g_manager.manager_cmd = false; + g_manager.exclusive_cmd_option = false; + g_manager.appid = NULL; + g_manager.appid = strdup(appid); free(appid); diff --git a/server/vcd_server.c b/server/vcd_server.c index f2e34f1..0a109ca 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1568,7 +1568,8 @@ int vcd_server_mgr_initialize(int pid) } /* Add client information to client manager */ - if (0 != vcd_client_manager_set(pid)) { + int ret = vcd_client_manager_set(pid); + if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to add manager"); return VCD_ERROR_OPERATION_FAILED; } -- 2.7.4 From 68e7335ae5aced5b0622f2cc7a5f756cef6941bb Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 7 Dec 2018 17:01:57 +0900 Subject: [PATCH 04/16] Fix mismatch between log format and actual parameter Change-Id: I7df022dc33db89c28acc3d5b97b8074b07cfa7ca Signed-off-by: Jihoon Kim --- common/vc_info_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/vc_info_parser.c b/common/vc_info_parser.c index 864f470..d4b48ac 100644 --- a/common/vc_info_parser.c +++ b/common/vc_info_parser.c @@ -401,7 +401,7 @@ int vc_info_parser_set_nlu_result(const char* nlu_result) SLOG(LOG_ERROR, vc_info_tag(), "[ERROR] Fail to set file mode - %s", VC_RUNTIME_INFO_NLU_RESULT); } - SLOG(LOG_DEBUG, vc_info_tag(), "[SUCCESS] Write file (%s) size (%d)", VC_RUNTIME_INFO_NLU_RESULT, strlen(nlu_result)); + SLOG(LOG_DEBUG, vc_info_tag(), "[SUCCESS] Write file (%s) size (%zu)", VC_RUNTIME_INFO_NLU_RESULT, strlen(nlu_result)); return 0; } -- 2.7.4 From 5286cbd4525ab72f93db9ede18890341c475c726 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Fri, 14 Dec 2018 16:07:45 +0900 Subject: [PATCH 05/16] Update error msg Change-Id: I79ae3bbb21ed954334277a88df1daa770bc0dc27 Signed-off-by: Wonnam Jang --- server/vcd_engine_agent.c | 2 +- server/vcd_server.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/server/vcd_engine_agent.c b/server/vcd_engine_agent.c index 7b1dde8..c1c7c77 100644 --- a/server/vcd_engine_agent.c +++ b/server/vcd_engine_agent.c @@ -916,7 +916,7 @@ int vcd_engine_agent_start_recording() SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to start recorder : result(%d)", ret); vcd_engine_recognize_cancel(); /* Send error cb to manager */ - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_engine.error.proc_fail"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_framework.error.vcfw.send_rc_fail"); return ret; } diff --git a/server/vcd_server.c b/server/vcd_server.c index 0a109ca..fe5f960 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -141,9 +141,9 @@ static int __server_recorder_callback(const void* data, const unsigned int lengt ecore_timer_add(0, __cancel_by_interrupt, NULL); /* Send error cb to manager */ if (VCE_ERROR_OUT_OF_NETWORK == ret) { - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_TIMED_OUT, "Engine connection failed"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_TIMED_OUT, "voice_framework.error.engine.set_recording_fail"); } else { - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "Engine recognition failed"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_framework.error.engine.set_recording_fail"); } return 0; } @@ -1778,7 +1778,7 @@ static int __start_internal_recognition() /* Send error cb to manager */ int pid = vcd_client_widget_get_foreground_pid(); if (-1 != pid) - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_engine.error.proc_fail"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_framework.error.vcfw.collect_command_fail"); return VCD_ERROR_OPERATION_FAILED; } @@ -1789,7 +1789,7 @@ static int __start_internal_recognition() /* Send error cb to manager */ int pid = vcd_client_widget_get_foreground_pid(); if (-1 != pid) - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_engine.error.proc_fail"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_framework.error.engine.set_commands_fail"); return VCD_ERROR_OPERATION_FAILED; } @@ -1809,7 +1809,7 @@ static int __start_internal_recognition() /* Send error cb to manager */ int pid = vcd_client_widget_get_foreground_pid(); if (-1 != pid) - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_engine.error.proc_fail"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_framework.error.engine.start_fail"); return VCD_ERROR_OPERATION_FAILED; } @@ -1824,7 +1824,7 @@ static int __start_internal_recognition() /* Send error cb to manager */ int pid = vcd_client_widget_get_foreground_pid(); if (-1 != pid) - vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_engine.error.proc_fail"); + vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), VCD_ERROR_OPERATION_FAILED, "voice_framework.error.vcfw.send_rc_fail"); return ret; } #endif -- 2.7.4 From e760840b9673e63b763adee87f61cf84a2cdaa88 Mon Sep 17 00:00:00 2001 From: sungrae jo Date: Wed, 9 Jan 2019 20:08:21 +0900 Subject: [PATCH 06/16] Dbus usage Memory Leak fix Change-Id: I811c33c2a2dff8545a1e42169c82e770c9ae50d5 Signed-off-by: sungrae jo --- client/vc_setting_dbus.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/client/vc_setting_dbus.c b/client/vc_setting_dbus.c index d82c436..c249d40 100755 --- a/client/vc_setting_dbus.c +++ b/client/vc_setting_dbus.c @@ -103,10 +103,12 @@ static void __vc_setting_dbus_connection_free() { if (NULL != g_s_conn_listener) { dbus_connection_close(g_s_conn_listener); + dbus_connection_unref(g_s_conn_listener); g_s_conn_listener = NULL; } if (NULL != g_s_conn_sender) { dbus_connection_close(g_s_conn_sender); + dbus_connection_unref(g_s_conn_sender); g_s_conn_sender = NULL; } } @@ -226,6 +228,10 @@ int vc_setting_dbus_close_connection() memset(service_name, '\0', 64); snprintf(service_name, 64, "%s%d", VC_SETTING_SERVICE_NAME, pid); + char rule[128] = {0, }; + snprintf(rule, 128, "type='signal',interface='%s'", VC_SETTING_SERVICE_INTERFACE); + dbus_bus_remove_match(g_s_conn_listener, rule, NULL); + dbus_bus_release_name(g_s_conn_listener, service_name, &err); if (dbus_error_is_set(&err)) { -- 2.7.4 From c4c7d83bfdc1bde6fe13b67b83f8f3dfbdccde97 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Fri, 7 Dec 2018 10:54:54 +0900 Subject: [PATCH 07/16] Fix to check widget prepare thread Change-Id: Ia45698e372651bddf592c0e76e5c6172e90fc387 Signed-off-by: sooyeon.kim (cherry picked from commit 8b665df6bc3f11a889593006b2c8687eb16d8ccb) --- client/vc_widget.c | 49 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/client/vc_widget.c b/client/vc_widget.c index eb54aa7..efb64b6 100644 --- a/client/vc_widget.c +++ b/client/vc_widget.c @@ -39,6 +39,9 @@ static Ecore_Timer* g_w_start_timer = NULL; static Ecore_Timer* g_w_notify_state_timer = NULL; static Ecore_Timer* g_w_notify_result_timer = NULL; +static Ecore_Thread* g_w_prepare_thread = NULL; +static int g_w_prepare_canceled = 0; + static int g_daemon_pid = 0; static int g_feature_enabled = -1; @@ -463,6 +466,11 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) /* Send hello */ while (0 != ret) { + if (g_w_prepare_canceled) { + SLOG(LOG_WARN, TAG_VCW, "[WARNING] Thread is canceled."); + return; + } + if (retry_count == 30) { SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to request hello !!"); ecore_main_loop_thread_safe_call_async(__vc_widget_delete_focus_event_handler, NULL); @@ -481,6 +489,11 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) ret = -1; retry_count = 0; while (0 != ret) { + if (g_w_prepare_canceled) { + SLOG(LOG_WARN, TAG_VCW, "[WARNING] Thread is canceled."); + return; + } + if (retry_count == 10) { SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to connect daemon !!"); ecore_main_loop_thread_safe_call_async(__vc_widget_delete_focus_event_handler, NULL); @@ -503,6 +516,13 @@ static void __end_prepare_thread(void *data, Ecore_Thread *thread) SLOG(LOG_DEBUG, TAG_VCW, "@@@ End prepare thread"); } +static void __cancel_prepare_thread(void *data, Ecore_Thread *thread) +{ + SLOG(LOG_DEBUG, TAG_VCW, "@@@ Cancel prepare thread"); + + g_w_prepare_canceled = 1; +} + int vc_widget_prepare(vc_h vc_w) { SLOG(LOG_DEBUG, TAG_VCW, "@@@ [Widget] Prepare"); @@ -536,7 +556,13 @@ int vc_widget_prepare(vc_h vc_w) // Add focus event handler before start sub thread. If connection fails, event handler will be deleted. __vc_widget_add_focus_event_handler(NULL); - ecore_thread_run(__start_prepare_thread, __end_prepare_thread, NULL, (void*)vc_w); + // Check ecore thread + if (g_w_prepare_thread && !ecore_thread_check(g_w_prepare_thread)) { + ecore_thread_cancel(g_w_prepare_thread); + g_w_prepare_thread = NULL; + } + g_w_prepare_canceled = 0; + g_w_prepare_thread = ecore_thread_run(__start_prepare_thread, __end_prepare_thread, __cancel_prepare_thread, (void*)vc_w); SLOG(LOG_DEBUG, TAG_VCW, "@@@"); @@ -552,20 +578,29 @@ int vc_widget_unprepare(vc_h vc_w) return VC_ERROR_NONE; } - int thread_count = ecore_thread_active_get(); + int prev_thread_count = ecore_thread_active_get(); + int curr_thread_count = prev_thread_count; int count = 0; - SLOG(LOG_INFO, TAG_VCW, "[Widget] Thread count(%d)", thread_count); - while (0 < thread_count) { + SLOG(LOG_INFO, TAG_VCW, "[Widget] Current thread count(%d)", curr_thread_count); + + if (g_w_prepare_thread && !ecore_thread_check(g_w_prepare_thread)) { + SLOG(LOG_WARN, TAG_VCW, "[WARNING] Thread is alive. Call cancel thread."); + ecore_thread_cancel(g_w_prepare_thread); + } + + while (0 < curr_thread_count && 1 != prev_thread_count - curr_thread_count && !ecore_thread_check(g_w_prepare_thread)) { usleep(50000); + if (100 == count) { - SLOG(LOG_WARN, TAG_VCW, "[WARNING!!] Thread is blocked, cnt(%d), thread count(%d)", count, thread_count); + SLOG(LOG_WARN, TAG_VCW, "[WARNING!!] Thread is blocked, cnt(%d), thread count(%d)", count, curr_thread_count); break; } else if (0 == count % 5) { - SLOG(LOG_WARN, TAG_VCW, "[WARNING!!] Thread is alive, cnt(%d), thread count(%d)", count, thread_count); + SLOG(LOG_WARN, TAG_VCW, "[WARNING!!] Thread is alive, cnt(%d), thread count(%d)", count, curr_thread_count); } count++; - thread_count = ecore_thread_active_get(); + curr_thread_count = ecore_thread_active_get(); } + g_w_prepare_thread = NULL; vc_state_e state; if (0 != vc_widget_client_get_state(vc_w, &state)) { -- 2.7.4 From 2a7ae05810bbdb27f337f708a2d7e23d5938fac4 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Tue, 11 Dec 2018 12:02:22 +0900 Subject: [PATCH 08/16] Add to set prepare thread as NULL Change-Id: I70ddc61cfacf1bc45f2466a2176b3b89c3021336 Signed-off-by: Wonnam Jang (cherry picked from commit fcca8ce240486c446838eff01e6104884d43e190) --- client/vc_widget.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/client/vc_widget.c b/client/vc_widget.c index efb64b6..c3e634c 100644 --- a/client/vc_widget.c +++ b/client/vc_widget.c @@ -259,6 +259,8 @@ int vc_widget_deinitialize(vc_h vc_w) return VC_ERROR_INVALID_STATE; } + g_w_prepare_canceled = 1; + vc_state_e state; vc_widget_client_get_state(vc_w, &state); vc_widget_s* widget = widget_get(vc_w); @@ -513,13 +515,14 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) static void __end_prepare_thread(void *data, Ecore_Thread *thread) { + g_w_prepare_thread = NULL; SLOG(LOG_DEBUG, TAG_VCW, "@@@ End prepare thread"); } static void __cancel_prepare_thread(void *data, Ecore_Thread *thread) { SLOG(LOG_DEBUG, TAG_VCW, "@@@ Cancel prepare thread"); - + g_w_prepare_thread = NULL; g_w_prepare_canceled = 1; } -- 2.7.4 From 3e290f816309ba40c97dd60ea9039e88786a375d Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Fri, 14 Dec 2018 15:28:10 +0900 Subject: [PATCH 09/16] Add farfield audio type Change-Id: I0ef337a100611b06ccf13d311b37fd46f12ccc71 Signed-off-by: Wonnam Jang (cherry picked from commit 1257cfae82c1f3f4c44f08f43c80ea37d65766cc) --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 1 + server/vcd_recorder.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b555f38..ffeca96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ INCLUDE(FindPkgConfig) IF("${_TV_PRODUCT}" STREQUAL "TRUE") pkg_check_modules(pkgs REQUIRED aul capi-appfw-app-control capi-appfw-app-manager capi-base-common capi-media-audio-io capi-media-sound-manager ecore-wayland - capi-network-bluetooth capi-network-bluetooth-tv capi-system-info cynara-client cynara-session dbus-1 db-util dlog ecore glib-2.0 json-glib-1.0 libgum libtzplatform-config libxml-2.0 sqlite3 vconf msfapi + capi-network-bluetooth capi-network-bluetooth-tv capi-system-info cynara-client cynara-session dbus-1 db-util dlog ecore glib-2.0 json-glib-1.0 libgum libtzplatform-config libxml-2.0 sqlite3 vconf msfapi farfield-voice-api ) ELSE() pkg_check_modules(pkgs REQUIRED diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index 06035f5..1115948 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -36,6 +36,7 @@ BuildRequires: pkgconfig(pkgmgr-installer) BuildRequires: pkgconfig(capi-network-bluetooth) BuildRequires: pkgconfig(capi-network-bluetooth-tv) BuildRequires: pkgconfig(msfapi) +BuildRequires: pkgconfig(farfield-voice-api) %endif BuildRequires: pkgconfig(vconf) BuildRequires: cmake diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index 8151e00..fdc76a2 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -17,6 +17,7 @@ #ifdef TV_PRODUCT #define TV_BT_MODE #define TV_MSF_WIFI_MODE +#define TV_FFV_MODE #endif #include @@ -30,6 +31,9 @@ #ifdef TV_MSF_WIFI_MODE #include #endif +#ifdef TV_FFV_MODE +#include +#endif #endif #include "vcd_client_data.h" @@ -45,6 +49,7 @@ #define FOCUS_SERVER_READY "/tmp/.focus_server_ready" #define VCE_AUDIO_ID_NONE "VC_AUDIO_ID_NONE" /**< None audio id */ +#define VCE_AUDIO_ID_FFV "VC_FARFIELD_VOICE_VD" static vcd_recorder_state_e g_recorder_state = VCD_RECORDER_STATE_READY; @@ -74,6 +79,10 @@ static int g_buffer_count; static int g_device_id = -1; +#ifdef TV_FFV_MODE +farfield_voice_h g_farfieldvoice_h = NULL; +#endif + static sound_stream_info_h g_stream_for_volume_h = NULL; static virtual_sound_stream_h g_virtual_sound_stream_h = NULL; @@ -212,7 +221,28 @@ static void _bt_hid_audio_data_receive_cb(bt_hid_voice_data_s *voice_data, void #endif return; } +#endif +#ifdef TV_FFV_MODE +static void _ffv_audio_function_cb(void* data, unsigned int length, void* user_data) +{ + if (0 != strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, sizeof(VCE_AUDIO_ID_FFV))) { + vcd_state_e state = vcd_config_get_service_state(); + if (VCD_STATE_READY == state) { + vcd_recorder_set(VCE_AUDIO_ID_FFV, VCE_AUDIO_TYPE_PCM_S16_LE, 16000, 1); + } else { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] current audio type is (%s)", g_current_audio_type); + return; + } + } + + if (NULL != g_audio_cb) { + if (0 != g_audio_cb(data, length)) { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to read audio"); + vcd_recorder_stop(); + } + } +} #endif #if 1 @@ -419,6 +449,19 @@ int vcd_recorder_create(vcd_recoder_audio_cb audio_cb, vcd_recorder_interrupt_cb g_interrupt_cb = interrupt_cb; g_recorder_state = VCD_RECORDER_STATE_READY; +#ifdef TV_FFV_MODE + g_farfieldvoice_h = farfield_voice_init(); + if (NULL == g_farfieldvoice_h) + { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to init farfield_voice_init"); + } + + if (g_farfieldvoice_h) + { + farfield_voice_register_audio_cb(g_farfieldvoice_h, _ffv_audio_function_cb, NULL); + } +#endif + #ifdef TV_BT_MODE bool is_bt_failed = false; @@ -490,6 +533,15 @@ int vcd_recorder_destroy() if (0 != ret) SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to audio in destroy, ret(%d)", ret); +#ifdef TV_FFV_MODE + if (NULL != g_farfieldvoice_h) + { + farfield_voice_unregister_audio_cb(g_farfieldvoice_h); + farfield_voice_final(g_farfieldvoice_h); + g_farfieldvoice_h = NULL; + } +#endif + #ifdef TV_BT_MODE bt_hid_unset_audio_data_receive_cb(); @@ -538,8 +590,10 @@ int vcd_recorder_set(const char* audio_type, vce_audio_type_e type, int rate, in if (NULL != g_current_audio_type) { if ((!strncmp(g_current_audio_type, VCE_AUDIO_ID_NONE, strlen(g_current_audio_type)) && strncmp(audio_type, VCE_AUDIO_ID_BLUETOOTH, strlen(audio_type)) && + strncmp(audio_type, VCE_AUDIO_ID_FFV, strlen(audio_type)) && strncmp(audio_type, VCE_AUDIO_ID_WIFI, strlen(audio_type))) || (strncmp(g_current_audio_type, VCE_AUDIO_ID_BLUETOOTH, strlen(g_current_audio_type)) && + strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, strlen(g_current_audio_type)) && strncmp(g_current_audio_type, VCE_AUDIO_ID_WIFI, strlen(g_current_audio_type)) && strncmp(g_current_audio_type, VCE_AUDIO_ID_NONE, strlen(g_current_audio_type)) && !strncmp(audio_type, VCE_AUDIO_ID_NONE, strlen(audio_type)))) { @@ -573,6 +627,13 @@ int vcd_recorder_set(const char* audio_type, vce_audio_type_e type, int rate, in } g_current_audio_type = strdup(audio_type); + } else if (0 == strncmp(VCE_AUDIO_ID_FFV, audio_type, strlen(VCE_AUDIO_ID_FFV))) { + if (NULL != g_current_audio_type) { + free(g_current_audio_type); + g_current_audio_type = NULL; + } + + g_current_audio_type = strdup(audio_type); } else { if (false == g_is_valid_audio_in) { SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Audio-in is NOT valid"); @@ -1005,6 +1066,9 @@ int vcd_recorder_start() g_bt_extend_count = 0; #endif + } else if (0 == strncmp(VCE_AUDIO_ID_FFV, g_current_audio_type, strlen(VCE_AUDIO_ID_FFV))) { + SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] call FARFIELD() function"); + started = true; } else if (0 == strncmp(VCE_AUDIO_ID_WIFI, g_current_audio_type, strlen(VCE_AUDIO_ID_WIFI))) { SLOG(LOG_DEBUG, TAG_VCD, "[Recorder] call RegisterMSFAudioCallback() function"); #ifdef TV_MSF_WIFI_MODE @@ -1129,6 +1193,7 @@ int vcd_recorder_stop() } if (NULL != g_current_audio_type && (!strncmp(g_current_audio_type, VCE_AUDIO_ID_BLUETOOTH, sizeof(VCE_AUDIO_ID_BLUETOOTH)) || + !strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, sizeof(VCE_AUDIO_ID_FFV)) || !strncmp(g_current_audio_type, VCE_AUDIO_ID_WIFI, sizeof(VCE_AUDIO_ID_WIFI)))) { SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] Recorder reset to NONE"); vcd_recorder_set(VCE_AUDIO_ID_NONE, g_audio_type, g_audio_rate, g_audio_channel); @@ -1139,6 +1204,17 @@ int vcd_recorder_stop() return VCD_ERROR_OPERATION_FAILED; } #endif + } else if (0 == strncmp(VCE_AUDIO_ID_FFV, g_current_audio_type, strlen(VCE_AUDIO_ID_FFV))) { + SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] FFV"); + if (NULL != g_current_audio_type && + (!strncmp(g_current_audio_type, VCE_AUDIO_ID_BLUETOOTH, sizeof(VCE_AUDIO_ID_BLUETOOTH)) || + !strncmp(g_current_audio_type, VCE_AUDIO_ID_FFV, sizeof(VCE_AUDIO_ID_FFV)) || + !strncmp(g_current_audio_type, VCE_AUDIO_ID_WIFI, sizeof(VCE_AUDIO_ID_WIFI)))) { + SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] Recorder reset to NONE"); + vcd_recorder_set(VCE_AUDIO_ID_NONE, g_audio_type, g_audio_rate, g_audio_channel); + } + stoped = true; + } else if (0 == strncmp(VCE_AUDIO_ID_WIFI, g_current_audio_type, strlen(VCE_AUDIO_ID_WIFI))) { #ifdef TV_MSF_WIFI_MODE UnRegisterMSFAudioCallback(); -- 2.7.4 From 856b338a81064118e604d4747cf7b38e4b33e149 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Thu, 27 Dec 2018 20:09:42 +0900 Subject: [PATCH 10/16] Fix ecore thread for feedback in vc_mgr Change-Id: I1b782e55b4ac1dc8c5cac16fdb92a31d276887be Signed-off-by: sooyeon.kim (cherry picked from commit 68f825984a3b179648c6936a872b43f397e0902d) --- client/vc_mgr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index 70c7190..60b2144 100644 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -67,7 +67,7 @@ static bool g_err_callback_status = false; static int g_feedback_rate = 16000; static vc_audio_channel_e g_feedback_audio_channel = 0; static vc_audio_type_e g_feedback_audio_type = 0; - +static Ecore_Thread* g_feedback_thread = NULL; static Eina_Bool __vc_mgr_notify_state_changed(void *data); static void __vc_mgr_notify_error(void *data); @@ -4153,6 +4153,7 @@ static void __tts_feedback_thread(void* data, Ecore_Thread* thread) static void __end_tts_feedback_thread(void* data, Ecore_Thread* thread) { SLOG(LOG_DEBUG, TAG_VCM, "[SUCCESS] End thread"); + g_feedback_thread = NULL; } int vc_mgr_start_feedback(void) @@ -4182,7 +4183,11 @@ int vc_mgr_start_feedback(void) } #if 1 - ecore_thread_run(__tts_feedback_thread, __end_tts_feedback_thread, NULL, NULL); + bool is_canceled = ecore_thread_check(g_feedback_thread); + if (NULL == g_feedback_thread || TRUE == is_canceled) { + SLOG(LOG_INFO, TAG_VCM, "[INFO] ecore thread run : __tts_feedback_thread"); + g_feedback_thread = ecore_thread_run(__tts_feedback_thread, __end_tts_feedback_thread, NULL, NULL); + } #else /* start playing TTS feedback */ int ret = -1; -- 2.7.4 From d408d36ea503f921c945f08c1a1ae565063c1429 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Thu, 3 Jan 2019 17:38:00 +0900 Subject: [PATCH 11/16] Fix to call sound_manager_start_virtual_stream Change-Id: I45bece01040545d45e1758ddbe868aec92792302 Signed-off-by: sooyeon.kim (cherry picked from commit 0060db645fd2cd4e7565152616d92997a91078b5) --- server/vcd_recorder.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index fdc76a2..d1c3329 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -979,12 +979,12 @@ int vcd_recorder_change_system_volume() SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to create virtual stream, ret(%d)", ret); return VCD_ERROR_OPERATION_FAILED; } - } - ret = sound_manager_start_virtual_stream(g_virtual_sound_stream_h); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to start virtual stream, ret(%d)", ret); - return VCD_ERROR_OPERATION_FAILED; + ret = sound_manager_start_virtual_stream(g_virtual_sound_stream_h); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[Recorder ERROR] Fail to start virtual stream, ret(%d)", ret); + return VCD_ERROR_OPERATION_FAILED; + } } return 0; -- 2.7.4 From cf64de46947617dacd37c8e4249a0a70376a393d Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Thu, 10 Jan 2019 16:04:01 +0900 Subject: [PATCH 12/16] Add sending error when engine connection is failed Change-Id: Icfdd36c765b6a15fdb50fc0fac5983fef7df039d Signed-off-by: sooyeon.kim (cherry picked from commit 3d20bf8a6e667a867ae9230470ac20aa8265e6f4) --- client/vc_mgr.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index 60b2144..feb034d 100644 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -73,6 +73,9 @@ static Eina_Bool __vc_mgr_notify_state_changed(void *data); static void __vc_mgr_notify_error(void *data); static Eina_Bool __vc_mgr_notify_result(void *data); +int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg); + + static const char* __vc_mgr_get_error_code(vc_error_e err) { switch (err) { @@ -472,7 +475,8 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) while (0 != ret) { if (retry_count == 10) { - SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request hello !!"); + SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Fail to request hello !! send error to manager"); + __vc_mgr_cb_error(VC_ERROR_TIMED_OUT, -1, "voice_framework.error.vcfw.connect_engine_fail"); return; } -- 2.7.4 From d4e03a43cc3ead30a88dbfb9f3ea3de21350d799 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Fri, 11 Jan 2019 10:53:27 +0900 Subject: [PATCH 13/16] Change the state condition in __vc_mgr_cb_error Change-Id: I12b7a71d44441a7544f4694871054ddbc46ed2a6 Signed-off-by: sooyeon.kim (cherry picked from commit d4c5157b65bd44fa0456f6f406c88f38aeea312f) --- client/vc_mgr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index 60b2144..f804245 100644 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -198,14 +198,14 @@ static int __vc_mgr_check_privilege() snprintf(uid, 16, "%d", getuid()); /* check 'recorder' privilege */ if (false == __check_privilege(uid, VC_PRIVILEGE)) { - SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)", VC_PRIVILEGE); + SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)(%s)", VC_PRIVILEGE, uid); g_privilege_allowed = 0; __check_privilege_deinitialize(); return VC_ERROR_PERMISSION_DENIED; } /* check 'voicecontrol.manager' privilege */ if (false == __check_privilege(uid, VC_MGR_PRIVILEGE)) { - SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)", VC_MGR_PRIVILEGE); + SLOG(LOG_ERROR, TAG_VCM, "[ERROR] Permission is denied(%s)(%s)", VC_MGR_PRIVILEGE, uid); g_privilege_allowed = 0; __check_privilege_deinitialize(); return VC_ERROR_PERMISSION_DENIED; @@ -2916,7 +2916,7 @@ int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg) } /* check state */ - if (state != VC_STATE_READY) { + if (state != VC_STATE_INITIALIZED && state != VC_STATE_READY) { SLOG(LOG_ERROR, TAG_VCM, "[WARNING] not connected client yet"); return -1; } -- 2.7.4 From ef2733c2bb36271627311b775b479a9e2a856f12 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Mon, 14 Jan 2019 11:20:47 +0900 Subject: [PATCH 14/16] Fix permission denied problem Change-Id: I4fe323760223b8ca57e0ebe90294ea6d02f49a20 Signed-off-by: sooyeon.kim (cherry picked from commit 4097d80069c56bdfff59985f97c3e5f0258892f3) --- client/vc_mgr.c | 47 +++++++++++++++++++++++++++++++++++------------ client/vc_mgr_dbus.c | 20 ++++++++++---------- 2 files changed, 45 insertions(+), 22 deletions(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index 00c2e24..1d0974f 100644 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "vc_cmd_db.h" #include "vc_config_mgr.h" @@ -60,6 +61,7 @@ static int g_feature_enabled = -1; static int g_privilege_allowed = -1; static cynara *p_cynara = NULL; +static pthread_mutex_t g_cynara_mutex = PTHREAD_MUTEX_INITIALIZER; static bool g_err_callback_status = false; @@ -141,20 +143,31 @@ static int __vc_mgr_get_feature_enabled() static int __check_privilege_initialize() { + pthread_mutex_lock(&g_cynara_mutex); + int ret = cynara_initialize(&p_cynara, NULL); - if (CYNARA_API_SUCCESS != ret) - SLOG(LOG_ERROR, TAG_VCM, "[ERROR] fail to initialize"); + if (NULL == p_cynara || CYNARA_API_SUCCESS != ret) { + SLOG(LOG_ERROR, TAG_VCM, "[ERROR] fail to initialize(%d)", ret); + pthread_mutex_unlock(&g_cynara_mutex); + return ret; + } + + SLOG(LOG_ERROR, TAG_VCM, "[DEBUG] success to initialize cynara"); + pthread_mutex_unlock(&g_cynara_mutex); return ret == CYNARA_API_SUCCESS; } static int __check_privilege(const char* uid, const char * privilege) { + pthread_mutex_lock(&g_cynara_mutex); FILE *fp = NULL; char label_path[1024] = "/proc/self/attr/current"; char smack_label[1024] = {'\0',}; if (!p_cynara) { + SLOG(LOG_ERROR, TAG_VCM, "[ERROR] p_cynara is NULL"); + pthread_mutex_unlock(&g_cynara_mutex); return false; } @@ -169,21 +182,28 @@ static int __check_privilege(const char* uid, const char * privilege) pid_t pid = getpid(); char *session = cynara_session_from_pid(pid); int ret = cynara_check(p_cynara, smack_label, session, uid, privilege); - SLOG(LOG_DEBUG, TAG_VCM, "[Client]cynara_check returned %d(%s)", ret, (CYNARA_API_ACCESS_ALLOWED == ret) ? "Allowed" : "Denied"); + SLOG(LOG_DEBUG, TAG_VCM, "[Client]cynara_check returned %d(%s), p_cynara(%p), label(%s), session(%s), uid(%s), priv(%s)", ret, (CYNARA_API_ACCESS_ALLOWED == ret) ? "Allowed" : "Denied", p_cynara, smack_label, session, uid, privilege); if (session) free(session); - if (ret != CYNARA_API_ACCESS_ALLOWED) + if (ret != CYNARA_API_ACCESS_ALLOWED) { + pthread_mutex_unlock(&g_cynara_mutex); return false; + } + pthread_mutex_unlock(&g_cynara_mutex); return true; } static void __check_privilege_deinitialize() { - if (p_cynara) + pthread_mutex_lock(&g_cynara_mutex); + if (p_cynara) { + SLOG(LOG_ERROR, TAG_VCM, "[DEBUG] cynara finish"); cynara_finish(p_cynara); + } p_cynara = NULL; + pthread_mutex_unlock(&g_cynara_mutex); } static int __vc_mgr_check_privilege() @@ -216,6 +236,7 @@ static int __vc_mgr_check_privilege() __check_privilege_deinitialize(); } + g_privilege_allowed = 1; return VC_ERROR_NONE; } @@ -225,7 +246,7 @@ int vc_mgr_initialize(void) if (0 != __vc_mgr_get_feature_enabled()) { - SLOG(LOG_DEBUG, TAG_VCM, "@@@ [Manager] not supported"); + SLOG(LOG_ERROR, TAG_VCM, "@@@ [Manager] not supported"); return VC_ERROR_NOT_SUPPORTED; } @@ -426,7 +447,7 @@ static Eina_Bool __vc_mgr_connect_daemon(void *data) vc_mgr_client_use_callback(g_vc_m); service_changed_callback(previous_service_state, service_state, user_data); vc_mgr_client_not_use_callback(g_vc_m); - SLOG(LOG_DEBUG, TAG_VCM, "Service state changed callback is called"); + SLOG(LOG_INFO, TAG_VCM, "Service state changed callback is called"); } else { SLOG(LOG_WARN, TAG_VCM, "[WARNING] Service state changed callback is null"); } @@ -451,7 +472,7 @@ static Eina_Bool __vc_mgr_connect_daemon(void *data) vc_mgr_client_use_callback(g_vc_m); changed_callback(before_state, current_state, user_data); vc_mgr_client_not_use_callback(g_vc_m); - SLOG(LOG_DEBUG, TAG_VCM, "State changed callback is called"); + SLOG(LOG_INFO, TAG_VCM, "State changed callback is called"); } else { SLOG(LOG_WARN, TAG_VCM, "[WARNING] State changed callback is null"); } @@ -460,7 +481,7 @@ static Eina_Bool __vc_mgr_connect_daemon(void *data) return EINA_FALSE; } - SLOG(LOG_DEBUG, TAG_VCM, "@@@"); + SLOG(LOG_ERROR, TAG_VCM, "@@@"); return EINA_FALSE; } @@ -482,7 +503,7 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) ret = vc_mgr_dbus_request_hello(); if (ret == 0) { - SLOG(LOG_DEBUG, TAG_VCM, "Success to request hello. retry count(%d)", retry_count); + SLOG(LOG_INFO, TAG_VCM, "Success to request hello. retry count(%d)", retry_count); break; } else { retry_count++; @@ -508,7 +529,7 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) static void __end_prepare_thread(void *data, Ecore_Thread *thread) { - SLOG(LOG_DEBUG, TAG_VCM, "@@@ End prepare thread"); + SLOG(LOG_INFO, TAG_VCM, "@@@ End prepare thread"); } int vc_mgr_prepare(void) @@ -516,7 +537,7 @@ int vc_mgr_prepare(void) SLOG(LOG_ERROR, TAG_VCM, "@@@ [Manager] Prepare"); if (0 != __vc_mgr_get_feature_enabled()) { - SLOG(LOG_DEBUG, TAG_VCM, "@@@ [Manager] not supported"); + SLOG(LOG_ERROR, TAG_VCM, "@@@ [Manager] not supported"); return VC_ERROR_NOT_SUPPORTED; } @@ -538,7 +559,9 @@ int vc_mgr_prepare(void) return VC_ERROR_INVALID_STATE; } + ecore_thread_main_loop_begin(); ecore_thread_run(__start_prepare_thread, __end_prepare_thread, NULL, NULL); + ecore_thread_main_loop_end(); SLOG(LOG_DEBUG, TAG_VCM, "@@@"); diff --git a/client/vc_mgr_dbus.c b/client/vc_mgr_dbus.c index 7b7c432..68b78f2 100644 --- a/client/vc_mgr_dbus.c +++ b/client/vc_mgr_dbus.c @@ -95,7 +95,7 @@ static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd snprintf(if_name, 64, "%s", VC_MANAGER_SERVICE_INTERFACE); if (dbus_message_is_method_call(msg, if_name, VCD_MANAGER_METHOD_HELLO)) { - SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get Hello"); + SLOG(LOG_INFO, TAG_VCM, "@@@ Get Hello"); int pid = 0; int response = -1; @@ -121,7 +121,7 @@ static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd if (!dbus_connection_send(g_m_conn_listener, reply, NULL)) SLOG(LOG_ERROR, TAG_VCM, "@@ vc get hello : fail to send reply"); else - SLOG(LOG_DEBUG, TAG_VCM, "@@ vc get hello : result(%d)", response); + SLOG(LOG_INFO, TAG_VCM, "@@ vc get hello : result(%d)", response); dbus_connection_flush(g_m_conn_listener); dbus_message_unref(reply); @@ -162,7 +162,7 @@ static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd dbus_error_free(&err); } - SLOG(LOG_DEBUG, TAG_VCM, "@@ state changed : %d", state); + SLOG(LOG_INFO, TAG_VCM, "@@ state changed : %d", state); __vc_mgr_cb_service_state(state); @@ -271,7 +271,7 @@ static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd } /* VCD_MANAGER_METHOD_ALL_RESULT */ else if (dbus_message_is_signal(msg, if_name, VCD_MANAGER_METHOD_ERROR)) { - SLOG(LOG_DEBUG, TAG_VCM, "@@@ Get Error"); + SLOG(LOG_INFO, TAG_VCM, "@@@ Get Error"); int reason; int daemon_pid; char* err_msg = NULL; @@ -636,7 +636,7 @@ static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd } /* NameOwnerChanged */ else { - SLOG(LOG_DEBUG, TAG_VCM, "Message is NOT valid"); + SLOG(LOG_INFO, TAG_VCM, "Message is NOT valid"); dbus_message_unref(msg); break; } @@ -706,7 +706,7 @@ int vc_mgr_dbus_open_connection() dbus_connection_set_exit_on_disconnect(g_m_conn_listener, false); - SLOG(LOG_DEBUG, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME); + SLOG(LOG_INFO, TAG_VCM, "service name is %s", VC_MANAGER_SERVICE_NAME); /* register our name on the bus, and check for errors */ ret = dbus_bus_request_name(g_m_conn_listener, VC_MANAGER_SERVICE_NAME, DBUS_NAME_FLAG_REPLACE_EXISTING, &err); @@ -801,14 +801,14 @@ int vc_mgr_dbus_reconnect() return -1; } - SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Reconnect"); + SLOG(LOG_INFO, TAG_VCM, "[DBUS] Reconnect"); return 0; } bool sender_connected = dbus_connection_get_is_connected(g_m_conn_sender); bool listener_connected = dbus_connection_get_is_connected(g_m_conn_listener); - SLOG(LOG_DEBUG, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)", + SLOG(LOG_INFO, TAG_VCM, "[DBUS] Sender(%s) Listener(%s)", sender_connected ? "Connected" : "Not connected", listener_connected ? "Connected" : "Not connected"); if (false == sender_connected || false == listener_connected) { @@ -941,7 +941,7 @@ int vc_mgr_dbus_request_initialize(int pid, int audio_streaming_mode, int* servi SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : Fail to make message "); return VC_ERROR_OPERATION_FAILED; } else { - SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : pid(%d)", pid); + SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr initialize : pid(%d)", pid); } dbus_message_append_args(msg, @@ -994,7 +994,7 @@ int vc_mgr_dbus_request_initialize(int pid, int audio_streaming_mode, int* servi dbus_error_free(&err); } - SLOG(LOG_DEBUG, TAG_VCM, "@@ vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d", + SLOG(LOG_INFO, TAG_VCM, "@@ vc mgr initialize : result = %d, service state = %d, foreground = %d, daemon_pid = %d", result, *service_state, *foreground, *daemon_pid); } else { SLOG(LOG_ERROR, TAG_VCM, "@@ vc mgr initialize : result = %d", result); -- 2.7.4 From 42564dcb38fd1beb1656b5b4be71b3b1a03787e5 Mon Sep 17 00:00:00 2001 From: "sooyeon.kim" Date: Fri, 18 Jan 2019 10:44:32 +0900 Subject: [PATCH 15/16] Remove vc-config in RW when xmlParseFile is failed Change-Id: Ib3c3b3d58c5bfa05936525091a3b345051f63990 Signed-off-by: sooyeon.kim (cherry picked from commit 55868619bb9c5903b61707c52a0586e604fe16aa) --- common/vc_config_parser.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/common/vc_config_parser.c b/common/vc_config_parser.c index a862549..4c991f3 100644 --- a/common/vc_config_parser.c +++ b/common/vc_config_parser.c @@ -322,6 +322,9 @@ int vc_parser_load_config(vc_config_s** config_info) if (VC_RETRY_COUNT == retry_count) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to parse file error : %s", VC_CONFIG); + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Remove the file"); + remove(VC_CONFIG); + doc = xmlParseFile(VC_DEFAULT_CONFIG); if (NULL == doc) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to parse file error : %s", VC_DEFAULT_CONFIG); -- 2.7.4 From 160074bac82b9e2d491512912f577b27f820a5ee Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Mon, 14 Jan 2019 20:47:13 +0900 Subject: [PATCH 16/16] Update description for vc_cmd_list_filter_by_type Change-Id: Ib4af0d2d469e1146e013f5aebcf31417e7ece968 Signed-off-by: Wonnam Jang (cherry picked from commit c2b7b3e92bb384fdf495f9de317c5116216c47d0) --- include/voice_control_command_expand.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/include/voice_control_command_expand.h b/include/voice_control_command_expand.h index d8d02c3..ca353e7 100755 --- a/include/voice_control_command_expand.h +++ b/include/voice_control_command_expand.h @@ -101,22 +101,19 @@ int vc_cmd_get_domain(vc_cmd_h vc_command, int* domain); int vc_cmd_list_remove_all(vc_cmd_list_h vc_cmd_list, bool free_command); /** -* @brief Retrieves all commands of command list using callback function. +* @brief Gets the commands list which consists of specific type of commands such as foreground or background. * @since_tizen 3.0 -* -* @param[in] vc_cmd_list The command list handle -* @param[in] callback Callback function to invoke -* @param[in] user_data The user data to be passed to the callback function -* -* @return 0 on success, otherwise a negative error value +* @privilege %http://tizen.org/privilege/recorder +* @param[in] original The original command list handle +* @param[in] type The command type wants to get +* @param[out] filtered The filtered command list handle +* @return @c 0 on success, +* otherwise a negative error value * @retval #VC_ERROR_NONE Successful * @retval #VC_ERROR_INVALID_PARAMETER Invalid parameter +* @retval #VC_ERROR_OPERATION_FAILED Operation failure * @retval #VC_ERROR_PERMISSION_DENIED Permission denied * @retval #VC_ERROR_NOT_SUPPORTED Not supported -* -* @post This function invokes vc_cmd_list_cb() repeatedly for getting commands. -* -* @see vc_cmd_list_cb() */ int vc_cmd_list_filter_by_type(vc_cmd_list_h original, int type, vc_cmd_list_h* filtered); -- 2.7.4