From 49fcc09cfead50dc72c2f19327cd1d3a2034cc96 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Thu, 3 Sep 2020 20:13:54 +0900 Subject: [PATCH 01/16] Implement new interface for sending streaming mode to dependency module Change-Id: I7d01effab7dae6380f3525dbbec595a041376d20 Signed-off-by: Suyeon Hwang --- audio-manager/inc/vc_audio_manager.h | 1 + audio-manager/src/vc_audio_manager.cpp | 15 +++++++++++++++ server/dependency_audio_manager.cpp | 31 +++++++++++++++++++++++++++++++ server/dependency_audio_manager.h | 5 +++++ server/vcd_dbus_server.c | 2 +- server/vcd_recorder.c | 10 ++++++++++ server/vcd_recorder.h | 2 ++ server/vcd_server.c | 4 +++- server/vcd_server.h | 2 +- 9 files changed, 69 insertions(+), 3 deletions(-) diff --git a/audio-manager/inc/vc_audio_manager.h b/audio-manager/inc/vc_audio_manager.h index 59354e2..4c41777 100644 --- a/audio-manager/inc/vc_audio_manager.h +++ b/audio-manager/inc/vc_audio_manager.h @@ -30,6 +30,7 @@ int vcd_dependency_initialize(sound_stream_info_h stream_info_h, dependency_audi int vcd_dependency_deinitialize(void); int vcd_dependency_set_audio_info(sound_stream_info_h stream_info_h, const char* audio_source_type, vce_audio_type_e type, int rate, int channel); int vcd_dependency_get_audio_source_type(char** audio_source_type); +int vcd_dependency_set_streaming_mode(vc_audio_streaming_mode_e mode); int vcd_dependency_start_recording(void); int vcd_dependency_stop_recording(void); diff --git a/audio-manager/src/vc_audio_manager.cpp b/audio-manager/src/vc_audio_manager.cpp index e1253ae..c595f01 100644 --- a/audio-manager/src/vc_audio_manager.cpp +++ b/audio-manager/src/vc_audio_manager.cpp @@ -25,6 +25,7 @@ #include #include "vce.h" +#include "voice_control_manager.h" #include "vc_audio_manager_dlog.h" #include "vc_audio_manager.h" @@ -38,6 +39,7 @@ static dependency_audio_manager_feed_audio_data g_feed_audio_data = nullptr; static audio_in_h g_audio_h = nullptr; static vce_audio_type_e g_audio_type = VCE_AUDIO_TYPE_PCM_S16_LE; +static vc_audio_streaming_mode_e g_streaming_mode = VC_AUDIO_STREAMING_MODE_VC_SERVICE; static int g_audio_rate = 0; static int g_audio_channel = 0; @@ -133,6 +135,7 @@ int vcd_dependency_initialize(sound_stream_info_h stream_info_h, dependency_audi { int ret = 0; + g_streaming_mode = VC_AUDIO_STREAMING_MODE_VC_SERVICE; g_audio_type = VCE_AUDIO_TYPE_PCM_S16_LE; g_audio_rate = 16000; g_audio_channel = 1; @@ -261,6 +264,18 @@ int vcd_dependency_get_audio_source_type(char** audio_source_type) return VCE_ERROR_NONE; } +int vcd_dependency_set_streaming_mode(vc_audio_streaming_mode_e mode) +{ + if (nullptr == g_audio_h) { + VCAM_LOGE("[ERROR] g_audio_h is not created"); + return VCE_ERROR_INVALID_STATE; + } + + g_streaming_mode = mode; + + return VCE_ERROR_NONE; +} + int vcd_dependency_start_recording(void) { VCAM_LOGI(""); diff --git a/server/dependency_audio_manager.cpp b/server/dependency_audio_manager.cpp index 762a813..8e2f6b0 100644 --- a/server/dependency_audio_manager.cpp +++ b/server/dependency_audio_manager.cpp @@ -67,6 +67,8 @@ int dependency_audio_manager_initialize(sound_stream_info_h stream_info_h, depen (vcd_dependency_set_audio_info)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_SET_AUDIO_INFO); g_interface.get_audio_source_type = (vcd_dependency_get_audio_source_type)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE); + g_interface.set_streaming_mode = + (vcd_dependency_set_streaming_mode)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE); g_interface.start_recording = (vcd_dependency_start_recording)dlsym(g_lib_handle, VCD_DEPENDENCY_FUNC_START_RECORDING); g_interface.stop_recording = @@ -188,6 +190,35 @@ int dependency_audio_manager_get_audio_source_type(char** audio_source_type) return ret; } +int dependency_audio_manager_set_streaming_mode(vc_audio_streaming_mode_e mode) +{ + SLOG(LOG_DEBUG, LOG_TAG, "@@@ Set streaming mode"); + int ret = 0; + if (NULL != g_lib_handle) { + vcd_dependency_set_streaming_mode func = g_interface.set_streaming_mode; + + if (NULL == func) { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] symbol lookup failed : %s", VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE); + } else { + try { + ret = func(mode); + } catch (const std::exception& e) { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] %s of dependency module threw exception : %s", + VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE, e.what()); + } + + if (0 != ret) { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] Fail to set streaming mode, ret(%d)", ret); + } + } + } else { + SLOG(LOG_ERROR, LOG_TAG, "[ERROR] g_lib_handle is not valid"); + } + + SLOG(LOG_DEBUG, LOG_TAG, "@@@"); + return ret; +} + int dependency_audio_manager_start_recording(void) { SLOG(LOG_DEBUG, LOG_TAG, "@@@ Start recording"); diff --git a/server/dependency_audio_manager.h b/server/dependency_audio_manager.h index 5f5ce7b..0eb5ebd 100644 --- a/server/dependency_audio_manager.h +++ b/server/dependency_audio_manager.h @@ -21,6 +21,7 @@ #include #include #include +#include #ifdef __cplusplus extern "C" { @@ -45,6 +46,8 @@ typedef int (*vcd_dependency_deinitialize)(void); typedef int (*vcd_dependency_set_audio_info)(sound_stream_info_h stream_info_h, const char* audio_source_type, vce_audio_type_e type, int rate, int channel); #define VCD_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE "vcd_dependency_get_audio_source_type" typedef int (*vcd_dependency_get_audio_source_type)(char** audio_source_type); +#define VCD_DEPENDENCY_FUNC_SET_STREAMING_MODE "vcd_dependency_set_streaming_mode" +typedef int (*vcd_dependency_set_streaming_mode)(vc_audio_streaming_mode_e mode); #define VCD_DEPENDENCY_FUNC_START_RECORDING "vcd_dependency_start_recording" typedef int (*vcd_dependency_start_recording)(void); #define VCD_DEPENDENCY_FUNC_STOP_RECORDING "vcd_dependency_stop_recording" @@ -56,6 +59,7 @@ typedef struct { vcd_dependency_deinitialize deinitialize; vcd_dependency_set_audio_info set_audio_info; vcd_dependency_get_audio_source_type get_audio_source_type; + vcd_dependency_set_streaming_mode set_streaming_mode; vcd_dependency_start_recording start_recording; vcd_dependency_stop_recording stop_recording; } vcd_dependency_module_interface; @@ -65,6 +69,7 @@ int dependency_audio_manager_initialize(sound_stream_info_h stream_info_h, depen int dependency_audio_manager_deinitialize(void); int dependency_audio_manager_set_audio_info(sound_stream_info_h stream_info_h, const char* audio_source_type, vce_audio_type_e type, int rate, int channel); int dependency_audio_manager_get_audio_source_type(char** audio_source_type); +int dependency_audio_manager_set_streaming_mode(vc_audio_streaming_mode_e mode); int dependency_audio_manager_start_recording(void); int dependency_audio_manager_stop_recording(void); diff --git a/server/vcd_dbus_server.c b/server/vcd_dbus_server.c index d7314de..d30dd2b 100755 --- a/server/vcd_dbus_server.c +++ b/server/vcd_dbus_server.c @@ -114,7 +114,7 @@ int vcd_dbus_server_mgr_initialize(DBusConnection* conn, DBusMessage* msg) ret = VCD_ERROR_OPERATION_FAILED; } else { vcd_config_set_audio_streaming_mode((vcd_audio_streaming_mode_e)streaming_mode); - ret = vcd_server_mgr_initialize(pid); + ret = vcd_server_mgr_initialize(pid, streaming_mode); service_state = vcd_server_get_service_state(); foreground = vcd_server_get_foreground(); daemon_pid = getpid(); diff --git a/server/vcd_recorder.c b/server/vcd_recorder.c index 74875e8..fc06fec 100644 --- a/server/vcd_recorder.c +++ b/server/vcd_recorder.c @@ -368,6 +368,16 @@ int vcd_recorder_get(char** audio_type) return VCD_ERROR_NONE; } +int vcd_recorder_set_audio_streaming_mode(vcd_audio_streaming_mode_e mode) +{ + if (0 != dependency_audio_manager_set_streaming_mode((vc_audio_streaming_mode_e)mode)) { + SLOG(LOG_WARN, TAG_VCD, "[Recorder] Fail to set audio mode to dependency module(%d)", mode); + return VCD_ERROR_OPERATION_FAILED; + } + + return VCD_ERROR_NONE; +} + Eina_Bool __read_test_func(void *data) { if (VCD_RECORDER_STATE_RECORDING != g_recorder_state) { diff --git a/server/vcd_recorder.h b/server/vcd_recorder.h index 8e1b015..f075cae 100644 --- a/server/vcd_recorder.h +++ b/server/vcd_recorder.h @@ -43,6 +43,8 @@ int vcd_recorder_set(const char* audio_type, vce_audio_type_e type, int rate, in int vcd_recorder_get(char** audio_type); +int vcd_recorder_set_audio_streaming_mode(vcd_audio_streaming_mode_e mode); + int vcd_recorder_start_streaming(); int vcd_recorder_send_streaming(const void* buffer, const unsigned int length); diff --git a/server/vcd_server.c b/server/vcd_server.c index 8c290cf..a89732f 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1659,7 +1659,7 @@ static Eina_Bool __vcd_send_service_state(void *data) /* * API for manager */ -int vcd_server_mgr_initialize(int pid) +int vcd_server_mgr_initialize(int pid, vcd_audio_streaming_mode_e mode) { /* check if pid is valid */ if (false == vcd_client_manager_is_valid(pid)) { @@ -1678,6 +1678,8 @@ int vcd_server_mgr_initialize(int pid) if (0 != vcdc_send_manager_pid(pid)) SLOG(LOG_WARN, TAG_VCD, "[Server WARNING] Fail to send manager pid"); + vcd_recorder_set_audio_streaming_mode(mode); + ecore_timer_add(0.05, __vcd_send_service_state, NULL); SLOG(LOG_ERROR, TAG_VCD, "[Server Success] Manager initialize : pid(%d)", pid); diff --git a/server/vcd_server.h b/server/vcd_server.h index e675b0b..7597b3d 100644 --- a/server/vcd_server.h +++ b/server/vcd_server.h @@ -45,7 +45,7 @@ int vcd_server_get_foreground(); /* * For manager */ -int vcd_server_mgr_initialize(int pid); +int vcd_server_mgr_initialize(int pid, vcd_audio_streaming_mode_e mode); int vcd_server_mgr_finalize(int pid); -- 2.7.4 From dd5ed31c1ff0d58f18bc327fc3fe6c9c5865e62d Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 7 Sep 2020 12:27:48 +0900 Subject: [PATCH 02/16] Clean up and Add temporary code for applying new architecture into TV device Change-Id: I975e49001ffb8782c6601393b42ae678ae20622f Signed-off-by: Suyeon Hwang --- audio-manager/src/vc_audio_manager.cpp | 16 ++++++++++++++++ packaging/voice-control.spec | 6 ++++++ server/dependency_audio_manager.h | 4 ++++ 3 files changed, 26 insertions(+) diff --git a/audio-manager/src/vc_audio_manager.cpp b/audio-manager/src/vc_audio_manager.cpp index c595f01..79cf981 100644 --- a/audio-manager/src/vc_audio_manager.cpp +++ b/audio-manager/src/vc_audio_manager.cpp @@ -135,6 +135,11 @@ int vcd_dependency_initialize(sound_stream_info_h stream_info_h, dependency_audi { int ret = 0; + if (nullptr != g_audio_h) { + VCAM_LOGE("Already initialized"); + return VCE_ERROR_INVALID_STATE; + } + g_streaming_mode = VC_AUDIO_STREAMING_MODE_VC_SERVICE; g_audio_type = VCE_AUDIO_TYPE_PCM_S16_LE; g_audio_rate = 16000; @@ -176,6 +181,12 @@ int vcd_dependency_deinitialize(void) { VCAM_LOGI(""); int ret = 0; + + if (nullptr == g_audio_h) { + VCAM_LOGE("Not initialized"); + return VCE_ERROR_INVALID_STATE; + } + if (g_is_recording) { ret = audio_in_unprepare(g_audio_h); if (0 != ret) { @@ -254,6 +265,11 @@ int vcd_dependency_set_audio_info(sound_stream_info_h stream_info_h, const char* int vcd_dependency_get_audio_source_type(char** audio_source_type) { + if (nullptr == g_audio_h) { + VCAM_LOGE("[ERROR] g_audio_h is not created"); + return VCE_ERROR_INVALID_STATE; + } + if (nullptr == audio_source_type) { VCAM_LOGE("audio_source_type is null"); return VCE_ERROR_INVALID_PARAMETER; diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index b4c4acc..d8e5792 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -120,9 +120,15 @@ export FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage" export LDFLAGS="$LDFLAGS -lgcov" %endif +%if "%{tizen_profile_name}" == "tv" +export CFLAGS="$CFLAGS -DTV_PRODUCT" +cmake . -DCMAKE_INSTALL_PREFIX=/usr -DLIBDIR=%{_libdir} -DBINDIR=%{_bindir} -DINCLUDEDIR=%{_includedir} \ + -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE -D_TV_PRODUCT=TRUE -DTZ_SYS_BIN=%TZ_SYS_BIN -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP +%else cmake . -DCMAKE_INSTALL_PREFIX=/usr -DLIBDIR=%{_libdir} -DBINDIR=%{_bindir} -DINCLUDEDIR=%{_includedir} \ -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE -DTZ_SYS_BIN=%TZ_SYS_BIN -DTZ_SYS_RO_PACKAGES=%TZ_SYS_RO_PACKAGES -DTZ_SYS_RO_APP=%TZ_SYS_RO_APP make %{?jobs:-j%jobs} +%endif %if 0%{?gcov:1} mkdir -p gcov-obj diff --git a/server/dependency_audio_manager.h b/server/dependency_audio_manager.h index 0eb5ebd..9568379 100644 --- a/server/dependency_audio_manager.h +++ b/server/dependency_audio_manager.h @@ -31,7 +31,11 @@ extern "C" { *** Definitions for dependencies *************************************************************************************/ #define VCD_DEPENDENCY_DEFAULT_PATH tzplatform_mkpath(tzplatform_getid("TZ_SYS_RO_SHARE"), "voice/vc/1.0/dependency-audio-manager") +#ifdef TV_PRODUCT +#define VCD_DEPENDENCY_DEFAULT_FILENAME "libaudio-manager-vd.so" +#else #define VCD_DEPENDENCY_DEFAULT_FILENAME "libvc-audio-manager.so" +#endif #define VCD_DEPENDENCY_MODULE_PATH "db/voice/vc/dependency_module_path" -- 2.7.4 From b9f532e083e790772d79e37c611954db7b137151 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 8 Jun 2021 17:06:51 +0900 Subject: [PATCH 03/16] Update version (1.65.1) Change-Id: I552088d4af3663b6525ba49c88fc6d650bab8fff Signed-off-by: Suyeon Hwang --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9fabd8..ca3789f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ PROJECT(vc) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_PREFIX "${PREFIX}") -SET(VERSION 1.65.0) +SET(VERSION 1.65.1) FIND_PROGRAM(UNAME NAMES uname) EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index d8e5792..e13906d 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -1,6 +1,6 @@ Name: voice-control Summary: Voice control client library and daemon -Version: 1.65.0 +Version: 1.65.1 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From b30077d39d5bab1e6e2f838127c35589fbe9454d Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 20 Jul 2021 11:33:41 +0900 Subject: [PATCH 04/16] Make TC for 'vc_get_system_command_list()' Change-Id: I21e3163e12f8eee92eedb1bd5c254f45674ceaea Signed-off-by: Suyeon Hwang --- tests/org.tizen.vc-unittests.xml | 2 + tests/src/vc_unittests.cpp | 109 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) diff --git a/tests/org.tizen.vc-unittests.xml b/tests/org.tizen.vc-unittests.xml index 663ba43..571a9e9 100644 --- a/tests/org.tizen.vc-unittests.xml +++ b/tests/org.tizen.vc-unittests.xml @@ -5,9 +5,11 @@ Voice Control unittests + http://tizen.org/privilege/recorder + http://tizen.org/privilege/voicecontrol.manager diff --git a/tests/src/vc_unittests.cpp b/tests/src/vc_unittests.cpp index 531f36f..0320972 100644 --- a/tests/src/vc_unittests.cpp +++ b/tests/src/vc_unittests.cpp @@ -19,13 +19,50 @@ #include #include +#include #include "system_info_mock.h" #include "cynara_mock.h" static int g_vc_init = false; static vc_state_e g_vc_state = VC_STATE_NONE; +static vc_state_e g_vc_mgr_state = VC_STATE_NONE; +static vc_service_state_e g_vc_mgr_service_state = VC_SERVICE_STATE_NONE; static bool g_vc_supported = false; +static bool __is_mgr_state_changed(vc_state_e state, int wait_delay) +{ + int max_count = wait_delay * 10; + int count = 0; + while (max_count > count && state != g_vc_mgr_state) { + ecore_main_loop_iterate(); + usleep(100000); + count++; + } + + if (state != g_vc_mgr_state) { + return false; + } + + return true; +} + +static bool __is_mgr_service_state_changed(vc_service_state_e state, int wait_delay) +{ + int max_count = wait_delay * 10; + int count = 0; + while (max_count > count && state != g_vc_mgr_service_state) { + ecore_main_loop_iterate(); + usleep(100000); + count++; + } + + if (state != g_vc_mgr_service_state) { + return false; + } + + return true; +} + static void __vc_result_cb(vc_result_event_e event, vc_cmd_list_h vc_cmd_list, const char* result, void* user_data) { } @@ -44,6 +81,16 @@ static void __vc_state_changed_cb(vc_state_e previous, vc_state_e current, void* g_vc_state = current; } +static void __vc_mgr_state_changed_cb(vc_state_e previous, vc_state_e current, void* user_data) +{ + g_vc_mgr_state = current; +} + +static void __vc_mgr_service_state_changed_cb(vc_service_state_e previous, vc_service_state_e current, void* user_data) +{ + g_vc_mgr_service_state = current; +} + static void __vc_service_state_changed_cb(vc_service_state_e previous, vc_service_state_e current, void* user_data) { } @@ -57,6 +104,27 @@ static bool __vc_cmd_list_cb(vc_cmd_h vc_command, void* user_data) return true; } +static void __vc_mgr_ready() +{ + vc_cmd_h system_command = nullptr; + EXPECT_EQ(vc_cmd_create(&system_command), VC_ERROR_NONE); + EXPECT_EQ(vc_cmd_set_command(system_command, "test"), VC_ERROR_NONE); + EXPECT_EQ(vc_cmd_set_type(system_command, VC_COMMAND_TYPE_SYSTEM), VC_ERROR_NONE); + + vc_cmd_list_h commands = nullptr; + EXPECT_EQ(vc_cmd_list_create(&commands), VC_ERROR_NONE); + EXPECT_EQ(vc_cmd_list_add(commands, system_command), VC_ERROR_NONE); + + EXPECT_EQ(vc_mgr_initialize(), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_set_state_changed_cb(__vc_mgr_state_changed_cb, nullptr), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_set_service_state_changed_cb(__vc_mgr_service_state_changed_cb, nullptr), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_prepare(), VC_ERROR_NONE); + ASSERT_EQ(true, __is_mgr_state_changed(VC_STATE_READY, 5)); + ASSERT_EQ(true, __is_mgr_service_state_changed(VC_SERVICE_STATE_READY, 5)); + + EXPECT_EQ(vc_mgr_set_command_list(commands), VC_ERROR_NONE); +} + namespace { class VCTest : public testing::Test { @@ -688,6 +756,47 @@ TEST_F(VCTest, vc_get_system_command_list_p) } /** + * @testcase utc_vc_get_system_command_list_p2 + * @since_tizen 3.0 + * @description Positive UTC for get the system command list when system command is registered + */ +TEST_F(VCTest, vc_get_system_command_list_p2) +{ + if (false == g_vc_supported) { + EXPECT_EQ(g_vc_init, false); + + int ret = VC_ERROR_NONE; + vc_cmd_list_h list = NULL; + ret = vc_get_system_command_list(&list); + EXPECT_EQ(ret, VC_ERROR_NOT_SUPPORTED); + } else { + EXPECT_EQ(g_vc_init, true); + + __vc_mgr_ready(); + + int ret = VC_ERROR_NONE; + ret = vc_prepare(); + EXPECT_EQ(ret, VC_ERROR_NONE); + + while (VC_STATE_READY != g_vc_state) { + ecore_main_loop_iterate(); + } + + vc_cmd_list_h list = NULL; + ret = vc_get_system_command_list(&list); + EXPECT_EQ(ret, VC_ERROR_NONE); + + int count = 0; + ret = vc_cmd_list_get_count(list, &count); + EXPECT_EQ(ret, VC_ERROR_NONE); + EXPECT_GT(count, 0); + + ret = vc_unprepare(); + EXPECT_EQ(ret, VC_ERROR_NONE); + } +} + +/** * @testcase utc_vc_get_system_command_list_n * @since_tizen 3.0 * @description Negative UTC for get the system command list (Invalid parameter) -- 2.7.4 From ef07b0acadbe4ff2742ee651274439071b91f1f0 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 20 Jul 2021 17:15:12 +0900 Subject: [PATCH 05/16] Fix name for better readability Change-Id: I038f749213b8aadfddc2b91a48824287a4ab2878 Signed-off-by: Suyeon Hwang --- client/vc_mgr.c | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index e9703c6..559a276 100755 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -44,9 +44,9 @@ #define VC_MANAGER_CONFIG_HANDLE 100000 -static Ecore_Timer* g_m_connect_timer = NULL; -static Ecore_Idler* g_m_connect_idler = NULL; -static int g_retry_connect_count = 0; +static Ecore_Timer* g_send_hello_timer = NULL; +static Ecore_Idler* g_request_init_timer = NULL; +static int g_send_hello_count = 0; static Ecore_Timer* g_m_set_volume_timer = NULL; @@ -361,15 +361,15 @@ int vc_mgr_deinitialize(void) __vc_mgr_internal_unprepare(); /* no break. need to next step*/ case VC_STATE_INITIALIZED: - if (NULL != g_m_connect_timer) { + if (NULL != g_send_hello_timer) { SLOG(LOG_DEBUG, TAG_VCM, "Connect Timer is deleted"); - ecore_timer_del(g_m_connect_timer); - g_m_connect_timer = NULL; + ecore_timer_del(g_send_hello_timer); + g_send_hello_timer = NULL; } - if (g_m_connect_idler) { + if (g_request_init_timer) { SLOG(LOG_DEBUG, TAG_VCM, "Connect idler is deleted"); - ecore_idler_del(g_m_connect_idler); - g_m_connect_idler = NULL; + ecore_idler_del(g_request_init_timer); + g_request_init_timer = NULL; } vc_config_mgr_unset_lang_cb(g_vc_m->handle + VC_MANAGER_CONFIG_HANDLE); @@ -412,7 +412,7 @@ int vc_mgr_deinitialize(void) return VC_ERROR_NONE; } -static Eina_Bool __vc_mgr_connect_daemon(void *data) +static Eina_Bool __request_initialize(void *data) { /* request initialization */ int ret = -1; @@ -443,7 +443,7 @@ static Eina_Bool __vc_mgr_connect_daemon(void *data) ecore_main_loop_thread_safe_call_async(__vc_mgr_notify_error, (void*)g_vc_m); SLOG(LOG_DEBUG, TAG_VCM, "@@@"); - g_m_connect_idler = NULL; + g_request_init_timer = NULL; return EINA_FALSE; } else if (0 != ret) { @@ -484,43 +484,43 @@ static Eina_Bool __vc_mgr_connect_daemon(void *data) } } else { SLOG(LOG_ERROR, TAG_VCM, "[Not ERROR] g_vc_m is not valid. It is destroyed."); //LCOV_EXCL_LINE - g_m_connect_idler = NULL; + g_request_init_timer = NULL; return EINA_FALSE; } SLOG(LOG_ERROR, TAG_VCM, "@@@"); - g_m_connect_idler = NULL; + g_request_init_timer = NULL; return EINA_FALSE; } -static Eina_Bool __vc_mgr_prepare_daemon(void *data) +static Eina_Bool __send_hello_message(void *data) { /* Send hello */ if (0 != vc_mgr_dbus_request_hello()) { - if (g_retry_connect_count == 20) { - g_retry_connect_count = 0; + if (g_send_hello_count == 20) { + g_send_hello_count = 0; 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"); - g_m_connect_timer = NULL; + g_send_hello_timer = NULL; return EINA_FALSE; } else { - g_retry_connect_count++; + g_send_hello_count++; return EINA_TRUE; } } SLOG(LOG_DEBUG, TAG_VCM, "===== [Manager] Connect daemon"); - if (NULL == g_m_connect_idler) { + if (NULL == g_request_init_timer) { SLOG(LOG_INFO, TAG_VCM, "[DEBUG] Create a new idler for preparation"); - g_m_connect_idler = ecore_idler_add(__vc_mgr_connect_daemon, NULL); + g_request_init_timer = ecore_idler_add(__request_initialize, NULL); } else { SLOG(LOG_INFO, TAG_VCM, "[INFO] idler handle is already created"); } - g_m_connect_timer = NULL; + g_send_hello_timer = NULL; return EINA_FALSE; } @@ -551,11 +551,11 @@ int vc_mgr_prepare(void) return VC_ERROR_INVALID_STATE; } - if (NULL == g_m_connect_timer) { - g_retry_connect_count = 0; + if (NULL == g_send_hello_timer) { + g_send_hello_count = 0; SLOG(LOG_INFO, TAG_VCM, "[DEBUG] Create a new timer for preparation"); ecore_thread_main_loop_begin(); - g_m_connect_timer = ecore_timer_add(0.02, __vc_mgr_prepare_daemon, NULL); + g_send_hello_timer = ecore_timer_add(0.02, __send_hello_message, NULL); ecore_thread_main_loop_end(); } else { SLOG(LOG_INFO, TAG_VCM, "[INFO] timer handle is already created"); -- 2.7.4 From 2480ccacdb0b956be2fe64dc855ed4f18b0317f9 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 20 Jul 2021 17:29:17 +0900 Subject: [PATCH 06/16] Use ecore timer to make testable Change-Id: Ib43ee0b2d1501507bc41a2b1695d323fa0d43d44 Signed-off-by: Suyeon Hwang --- 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 559a276..5c0a44f 100755 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -45,7 +45,7 @@ #define VC_MANAGER_CONFIG_HANDLE 100000 static Ecore_Timer* g_send_hello_timer = NULL; -static Ecore_Idler* g_request_init_timer = NULL; +static Ecore_Timer* g_request_init_timer = NULL; static int g_send_hello_count = 0; static Ecore_Timer* g_m_set_volume_timer = NULL; @@ -368,7 +368,7 @@ int vc_mgr_deinitialize(void) } if (g_request_init_timer) { SLOG(LOG_DEBUG, TAG_VCM, "Connect idler is deleted"); - ecore_idler_del(g_request_init_timer); + ecore_timer_del(g_request_init_timer); g_request_init_timer = NULL; } @@ -515,7 +515,7 @@ static Eina_Bool __send_hello_message(void *data) if (NULL == g_request_init_timer) { SLOG(LOG_INFO, TAG_VCM, "[DEBUG] Create a new idler for preparation"); - g_request_init_timer = ecore_idler_add(__request_initialize, NULL); + g_request_init_timer = ecore_timer_add(0.0, __request_initialize, NULL); } else { SLOG(LOG_INFO, TAG_VCM, "[INFO] idler handle is already created"); } -- 2.7.4 From e06a52a1f77dfefe9ef7b99f058cba4595ac07c3 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 20 Jul 2021 18:34:00 +0900 Subject: [PATCH 07/16] Allocate memory for output command list handle 'vc_get_system_command_list()' should return system command list with memory for handle for this list. However previous code does not allocate memory. This patch allocates new memory for output command list handle. System commands would be included this new handle. And also, this patch fixes the description of 'vc_get_system_command_list()' to deallocate memory using 'vc_cmd_list_destroy()'. Change-Id: Ie9d474d2115681b27c7f51f4da3f5487e7109eca Signed-off-by: Suyeon Hwang --- client/vc.c | 15 ++++++++++++--- include/voice_control.h | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/client/vc.c b/client/vc.c index 2cb5930..a2691c0 100644 --- a/client/vc.c +++ b/client/vc.c @@ -934,6 +934,7 @@ int vc_get_system_command_list(vc_cmd_list_h* vc_sys_cmd_list) SLOG(LOG_ERROR, TAG_VCCMD, "[ERROR] Input parameter is NULL"); return VC_ERROR_INVALID_PARAMETER; } + *vc_sys_cmd_list = NULL; vc_state_e state; if (0 != vc_client_get_client_state(g_vc, &state)) { @@ -995,23 +996,31 @@ int vc_get_system_command_list(vc_cmd_list_h* vc_sys_cmd_list) return VC_ERROR_OPERATION_FAILED; } - vc_cmd_list_s* list = NULL; - list = (vc_cmd_list_s*)(*vc_sys_cmd_list); if (true == is_sys_cmd_valid) { + vc_cmd_list_s* list = NULL; + ret = vc_cmd_list_create((vc_cmd_list_h*)&list); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to create command list"); //LCOV_EXCL_LINE + return ret; + } + ret = vc_cmd_parser_get_commands(mgr_pid, VC_COMMAND_TYPE_SYSTEM, &(list->list)); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to get parsing commands"); //LCOV_EXCL_LINE + vc_cmd_list_destroy((vc_cmd_list_h)list, true); return ret; } + ret = vc_cmd_parser_get_commands(mgr_pid, VC_COMMAND_TYPE_SYSTEM_BACKGROUND, &(list->list)); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to get parsing commands"); //LCOV_EXCL_LINE + vc_cmd_list_destroy((vc_cmd_list_h)list, true); return ret; } + *vc_sys_cmd_list = (vc_cmd_list_h)list; } else { SLOG(LOG_WARN, TAG_VCC, "[WARNING] No system commands"); //LCOV_EXCL_LINE - *vc_sys_cmd_list = NULL; return VC_ERROR_NONE; } diff --git a/include/voice_control.h b/include/voice_control.h index 69172d2..ab80ca2 100644 --- a/include/voice_control.h +++ b/include/voice_control.h @@ -245,7 +245,7 @@ int vc_get_service_state(vc_service_state_e* state); * @privilege %http://tizen.org/privilege/recorder * @remarks In the system command list, there are system commands predefined by product manufacturers. Those commands have the highest priority. * Therefore, the user can not set any commands same with the system commands. - * The @a vc_sys_cmd_list must be released using free() when it is no longer required. + * The @a vc_sys_cmd_list must be released using vc_cmd_list_destroy() when it is no longer required. * @param[out] vc_sys_cmd_list System command list handle * @return @c 0 on success, * otherwise a negative error value @@ -255,7 +255,7 @@ int vc_get_service_state(vc_service_state_e* state); * @retval #VC_ERROR_PERMISSION_DENIED Permission denied * @retval #VC_ERROR_NOT_SUPPORTED Not supported * @pre The service state should be #VC_SERVICE_STATE_READY. - * @see vc_unset_command_list() + * @see vc_cmd_list_destroy() */ int vc_get_system_command_list(vc_cmd_list_h* vc_sys_cmd_list); -- 2.7.4 From 6b513a92a6d451837c58da4573ad0e836ce93ac6 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 20 Jul 2021 20:23:02 +0900 Subject: [PATCH 08/16] Remove memory leak on new TC for vc_get_system_command_list() Change-Id: Ieeb48b4aee90a4b9bf50f0b2dc3d43bcdab90cb6 Signed-off-by: Suyeon Hwang --- tests/src/vc_unittests.cpp | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/tests/src/vc_unittests.cpp b/tests/src/vc_unittests.cpp index 0320972..780b61e 100644 --- a/tests/src/vc_unittests.cpp +++ b/tests/src/vc_unittests.cpp @@ -106,6 +106,13 @@ static bool __vc_cmd_list_cb(vc_cmd_h vc_command, void* user_data) static void __vc_mgr_ready() { + EXPECT_EQ(vc_mgr_initialize(), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_set_state_changed_cb(__vc_mgr_state_changed_cb, nullptr), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_set_service_state_changed_cb(__vc_mgr_service_state_changed_cb, nullptr), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_prepare(), VC_ERROR_NONE); + ASSERT_EQ(true, __is_mgr_state_changed(VC_STATE_READY, 5)); + ASSERT_EQ(true, __is_mgr_service_state_changed(VC_SERVICE_STATE_READY, 5)); + vc_cmd_h system_command = nullptr; EXPECT_EQ(vc_cmd_create(&system_command), VC_ERROR_NONE); EXPECT_EQ(vc_cmd_set_command(system_command, "test"), VC_ERROR_NONE); @@ -115,14 +122,17 @@ static void __vc_mgr_ready() EXPECT_EQ(vc_cmd_list_create(&commands), VC_ERROR_NONE); EXPECT_EQ(vc_cmd_list_add(commands, system_command), VC_ERROR_NONE); - EXPECT_EQ(vc_mgr_initialize(), VC_ERROR_NONE); - EXPECT_EQ(vc_mgr_set_state_changed_cb(__vc_mgr_state_changed_cb, nullptr), VC_ERROR_NONE); - EXPECT_EQ(vc_mgr_set_service_state_changed_cb(__vc_mgr_service_state_changed_cb, nullptr), VC_ERROR_NONE); - EXPECT_EQ(vc_mgr_prepare(), VC_ERROR_NONE); - ASSERT_EQ(true, __is_mgr_state_changed(VC_STATE_READY, 5)); - ASSERT_EQ(true, __is_mgr_service_state_changed(VC_SERVICE_STATE_READY, 5)); - EXPECT_EQ(vc_mgr_set_command_list(commands), VC_ERROR_NONE); + + EXPECT_EQ(vc_cmd_list_destroy(commands, true), VC_ERROR_NONE); +} + +static void __vc_mgr_finish() +{ + EXPECT_EQ(vc_mgr_unprepare(), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_unset_state_changed_cb(), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_unset_service_state_changed_cb(), VC_ERROR_NONE); + EXPECT_EQ(vc_mgr_deinitialize(), VC_ERROR_NONE); } namespace { @@ -750,6 +760,10 @@ TEST_F(VCTest, vc_get_system_command_list_p) ret = vc_get_system_command_list(&list); EXPECT_EQ(ret, VC_ERROR_NONE); + if (NULL != list) { + EXPECT_EQ(vc_cmd_list_destroy(list, true), VC_ERROR_NONE); + } + ret = vc_unprepare(); EXPECT_EQ(ret, VC_ERROR_NONE); } @@ -791,6 +805,9 @@ TEST_F(VCTest, vc_get_system_command_list_p2) EXPECT_EQ(ret, VC_ERROR_NONE); EXPECT_GT(count, 0); + EXPECT_EQ(vc_cmd_list_destroy(list, true), VC_ERROR_NONE); + + __vc_mgr_finish(); ret = vc_unprepare(); EXPECT_EQ(ret, VC_ERROR_NONE); } -- 2.7.4 From 083728aa20a379fb7ff181a5283e58ed3214aca7 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Fri, 23 Jul 2021 10:53:31 +0900 Subject: [PATCH 09/16] Update version (1.65.2) Change-Id: I40c7242de4d22b5ce2bb89c6bac462d74453edf7 Signed-off-by: Suyeon Hwang --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ca3789f..61458e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ PROJECT(vc) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_PREFIX "${PREFIX}") -SET(VERSION 1.65.1) +SET(VERSION 1.65.2) FIND_PROGRAM(UNAME NAMES uname) EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index e13906d..767318f 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -1,6 +1,6 @@ Name: voice-control Summary: Voice control client library and daemon -Version: 1.65.1 +Version: 1.65.2 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From 20d98b6e237b19d2a45d0e9bac17892540eb5bb5 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Tue, 14 Sep 2021 10:58:47 +0900 Subject: [PATCH 10/16] Extend waiting time for response from engine Previous waiting time was 2 sec, because 200 ms x 10 retry time was. But, in TW3, VC Engine was launched after almost 3 sec. Therefore, waiting time will be extended to 4 sec by this patch. Change-Id: I0aa8077663bd345e17f2bf8bf11373d3921dd470 --- client/vc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/vc.c b/client/vc.c index a2691c0..2f21d9c 100644 --- a/client/vc.c +++ b/client/vc.c @@ -609,7 +609,7 @@ static void __start_prepare_thread(void *data, Ecore_Thread *thread) /* Send hello */ while (0 != ret) { - if (retry_count == 10) { + if (retry_count == 20) { // 200 ms * 20 = 4 sec SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to request hello !!"); //LCOV_EXCL_LINE return; } -- 2.7.4 From 1d206f54a56d957cd2a5201012dd940c0014caf9 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Fri, 1 Oct 2021 17:51:29 +0900 Subject: [PATCH 11/16] Fix memory leak when remove item from g_list Change-Id: Iea82db5c35455bbf180bb160d217a7188780ec72 Signed-off-by: Suyeon Hwang --- common/vc_command.c | 4 ++-- common/vc_config_mgr.c | 3 +-- server/vcd_server.c | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/common/vc_command.c b/common/vc_command.c index 665f8d9..25eabf9 100644 --- a/common/vc_command.c +++ b/common/vc_command.c @@ -244,7 +244,7 @@ int vc_cmd_list_destroy(vc_cmd_list_h vc_cmd_list, bool release_command) return VC_ERROR_INVALID_PARAMETER; } - g_cmdlist_list = g_list_remove_link(g_cmdlist_list, iter); + g_cmdlist_list = g_list_delete_link(g_cmdlist_list, iter); vc_cmd_list_remove_all((vc_cmd_list_h)list, release_command); free(list); @@ -751,7 +751,7 @@ int vc_cmd_destroy(vc_cmd_h vc_command) return VC_ERROR_INVALID_PARAMETER; } - g_cmd_list = g_list_remove_link(g_cmd_list, iter); + g_cmd_list = g_list_delete_link(g_cmd_list, iter); if (command->command) free(command->command); diff --git a/common/vc_config_mgr.c b/common/vc_config_mgr.c index 5d5fd12..f1c351b 100644 --- a/common/vc_config_mgr.c +++ b/common/vc_config_mgr.c @@ -564,8 +564,7 @@ static int __vc_config_mgr_unregister_engine_config_updated_event() tmp = NULL; } - g_ino_list = g_list_remove_link(g_ino_list, iter); - + g_ino_list = g_list_delete_link(g_ino_list, iter); iter = g_list_first(g_ino_list); } } diff --git a/server/vcd_server.c b/server/vcd_server.c index a89732f..e80bc14 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1347,7 +1347,7 @@ bool vcd_finalize() if (0 < g_list_length(g_proc_list)) { iter = g_list_first(g_proc_list); while (NULL != iter) { - g_proc_list = g_list_remove_link(g_proc_list, iter); + g_proc_list = g_list_delete_link(g_proc_list, iter); iter = g_list_first(g_proc_list); } } @@ -1430,7 +1430,7 @@ static void __read_proc() if (0 < g_list_length(g_proc_list)) { iter = g_list_first(g_proc_list); while (NULL != iter) { - g_proc_list = g_list_remove_link(g_proc_list, iter); + g_proc_list = g_list_delete_link(g_proc_list, iter); iter = g_list_first(g_proc_list); } } -- 2.7.4 From 559da73cb540c27550965d72e3bb2a7384834a26 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Wed, 6 Oct 2021 15:13:49 +0900 Subject: [PATCH 12/16] Update version (1.65.3) Change-Id: I23bf5095f893033867694b62506acd2c3d2861b7 Signed-off-by: Suyeon Hwang --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 61458e3..7d761a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ PROJECT(vc) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_PREFIX "${PREFIX}") -SET(VERSION 1.65.2) +SET(VERSION 1.65.3) FIND_PROGRAM(UNAME NAMES uname) EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index 767318f..6eebef0 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -1,6 +1,6 @@ Name: voice-control Summary: Voice control client library and daemon -Version: 1.65.2 +Version: 1.65.3 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From 2292c36a6462296642e62e5b4cc74389029ab971 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Thu, 28 Oct 2021 17:45:49 +0900 Subject: [PATCH 13/16] Release memory when open connection is failed Change-Id: I3172ee394b75ea8a63e747f24dfc0797ee6a0fad --- server/vcd_server.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/server/vcd_server.c b/server/vcd_server.c index e80bc14..486b6cb 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1285,6 +1285,9 @@ int vcd_initialize(vce_request_callback_s *callback) ret = vc_db_initialize_for_daemon(); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to initialize DB : %d", ret); + if (TRUE != vcd_finalize()) { + SLOG(LOG_ERROR, TAG_VCD, "[Server Error] Fail to finalize"); + } return ret; } @@ -1299,17 +1302,26 @@ int vcd_initialize(vce_request_callback_s *callback) ret = vcd_engine_agent_init(); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to engine agent initialize : result(%d)", ret); + if (TRUE != vcd_finalize()) { + SLOG(LOG_ERROR, TAG_VCD, "[Server Error] Fail to finalize"); + } return ret; } if (0 != vcd_recorder_create(__server_recorder_callback, __server_recorder_interrupt_callback)) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to create recorder"); + if (TRUE != vcd_finalize()) { + SLOG(LOG_ERROR, TAG_VCD, "[Server Error] Fail to finalize"); + } return VCD_ERROR_OPERATION_FAILED; } /* Load engine */ if (0 != vcd_engine_agent_load_current_engine(callback)) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to load current engine"); + if (TRUE != vcd_finalize()) { + SLOG(LOG_ERROR, TAG_VCD, "[Server Error] Fail to finalize"); + } return VCD_ERROR_OPERATION_FAILED; } @@ -1319,7 +1331,10 @@ int vcd_initialize(vce_request_callback_s *callback) // if (TRUE == __is_default_engine()) { /* Open dbus connection */ if (0 != vcd_dbus_open_connection()) { - SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to open connection"); + SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to open connection"); + if (TRUE != vcd_finalize()) { + SLOG(LOG_ERROR, TAG_VCD, "[Server Error] Fail to finalize"); + } return VCD_ERROR_OPERATION_FAILED; } // } @@ -1363,7 +1378,7 @@ bool vcd_finalize() } vcd_state_e state = vcd_config_get_service_state(); - if (VCD_STATE_READY != state) { + if (VCD_STATE_NONE != state && VCD_STATE_READY != state) { if (VCD_STATE_RECORDING == state) { vcd_recorder_stop(); } @@ -1396,8 +1411,10 @@ bool vcd_finalize() SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to finalize DB : %d", ret); } - vcd_config_set_service_state(VCD_STATE_NONE); - vcdc_send_service_state(VCD_STATE_NONE); + if (VCD_STATE_NONE != state) { + vcd_config_set_service_state(VCD_STATE_NONE); + vcdc_send_service_state(VCD_STATE_NONE); + } /* Open dbus connection */ if (0 != vcd_dbus_close_connection()) { -- 2.7.4 From c14e207d0a49a2e3a331e17a139b4b0bb484032c Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 15 Nov 2021 16:32:23 +0900 Subject: [PATCH 14/16] Call deinitialize() if error occurs after initialize() Change-Id: I275c7f0724d6a7676d0c68ba6c5554ac822c0795 Signed-off-by: Suyeon Hwang --- server/vcd_engine_agent.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/vcd_engine_agent.c b/server/vcd_engine_agent.c index 2ebb68b..531dbdf 100644 --- a/server/vcd_engine_agent.c +++ b/server/vcd_engine_agent.c @@ -314,6 +314,7 @@ int vcd_engine_agent_load_current_engine(vce_request_callback_s* callback) ret = g_dynamic_engine.callbacks->set_language(g_default_lang); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set the supported language"); + g_dynamic_engine.callbacks->deinitialize(); return ret; } @@ -321,6 +322,7 @@ int vcd_engine_agent_load_current_engine(vce_request_callback_s* callback) g_dynamic_engine.is_loaded = true; } else { SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent WARNING] This engine do not support default language : lang(%s)", g_default_lang); + g_dynamic_engine.callbacks->deinitialize(); g_dynamic_engine.is_loaded = false; return VCD_ERROR_OPERATION_FAILED; } -- 2.7.4 From 3d7abd5f8ecba9a7a08257dc3875666d9c9e818a Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 15 Nov 2021 16:32:53 +0900 Subject: [PATCH 15/16] Update version (1.65.4) Change-Id: I2c50f8620a8dbec3067ae9e70b310e95c62d2ddd Signed-off-by: Suyeon Hwang --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7d761a2..bfc1247 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ PROJECT(vc) SET(PREFIX ${CMAKE_INSTALL_PREFIX}) SET(EXEC_PREFIX "${PREFIX}") -SET(VERSION 1.65.3) +SET(VERSION 1.65.4) FIND_PROGRAM(UNAME NAMES uname) EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index 6eebef0..6d76313 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -1,6 +1,6 @@ Name: voice-control Summary: Voice control client library and daemon -Version: 1.65.3 +Version: 1.65.4 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From ebde3d7f5d6d6802889fb3bbe868f587bc374a4b Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Thu, 9 Dec 2021 21:37:04 +0900 Subject: [PATCH 16/16] Change type of uid from signed int to unsigned int Change-Id: I4c3754d4a468afa9fa1b7091eb65a8124869ba0e --- client/vc.c | 4 ++-- client/vc_client.c | 8 ++++---- client/vc_client.h | 6 +++--- client/vc_mgr.c | 6 +++--- client/vc_mgr_client.c | 8 ++++---- client/vc_mgr_client.h | 6 +++--- client/vc_setting.c | 2 +- client/vc_widget.c | 2 +- client/vc_widget_client.c | 6 +++--- client/vc_widget_client.h | 8 ++++---- common/vc_command.c | 4 ++-- common/vc_config_mgr.c | 20 ++++++++++---------- common/vc_config_mgr.h | 16 ++++++++-------- server/vcd_server.c | 14 +++++++------- server/vcd_server_data.cpp | 4 ++-- server/vcd_server_data.h | 6 +++--- server/vce.c | 4 ++-- 17 files changed, 62 insertions(+), 62 deletions(-) diff --git a/client/vc.c b/client/vc.c index 2f21d9c..60143a2 100644 --- a/client/vc.c +++ b/client/vc.c @@ -164,8 +164,8 @@ static int __vc_check_privilege() //LCOV_EXCL_STOP } - char uid[16]; - snprintf(uid, 16, "%d", getuid()); + char uid[32]; + snprintf(uid, 32, "%d", getuid()); ret = true; ret = __check_privilege(uid, VC_PRIVILEGE); __check_privilege_deinitialize(); diff --git a/client/vc_client.c b/client/vc_client.c index c7db4cc..60194c0 100644 --- a/client/vc_client.c +++ b/client/vc_client.c @@ -21,7 +21,7 @@ typedef struct { /* base info */ vc_h vc; int pid; - int uid; /*<< unique id = pid + handle */ + unsigned int uid; /*<< unique id = pid + handle */ int xid; /*<< main X window id */ vc_result_cb result_cb; @@ -224,7 +224,7 @@ bool vc_client_is_valid(vc_h vc) return true; } -bool vc_client_is_valid_by_uid(int uid) +bool vc_client_is_valid_by_uid(unsigned int uid) { vc_client_s *data = NULL; @@ -246,7 +246,7 @@ bool vc_client_is_valid_by_uid(int uid) } //LCOV_EXCL_START -int vc_client_get_handle(int uid, vc_h* vc) +int vc_client_get_handle(unsigned int uid, vc_h* vc) { vc_client_s *data = NULL; @@ -473,7 +473,7 @@ int vc_client_get_client_state(vc_h vc, vc_state_e* state) return 0; } -int vc_client_get_client_state_by_uid(int uid, vc_state_e* state) +int vc_client_get_client_state_by_uid(unsigned int uid, vc_state_e* state) { vc_client_s *data = NULL; diff --git a/client/vc_client.h b/client/vc_client.h index e084fe7..7c22e2c 100644 --- a/client/vc_client.h +++ b/client/vc_client.h @@ -38,9 +38,9 @@ int vc_client_destroy(vc_h vc); bool vc_client_is_valid(vc_h vc); -bool vc_client_is_valid_by_uid(int uid); +bool vc_client_is_valid_by_uid(unsigned int uid); -int vc_client_get_handle(int uid, vc_h* vc); +int vc_client_get_handle(unsigned int uid, vc_h* vc); /* * set/get callback function @@ -77,7 +77,7 @@ int vc_client_set_client_state(vc_h vc, vc_state_e state); int vc_client_get_client_state(vc_h vc, vc_state_e* state); -int vc_client_get_client_state_by_uid(int uid, vc_state_e* state); +int vc_client_get_client_state_by_uid(unsigned int uid, vc_state_e* state); int vc_client_get_before_state(vc_h vc, vc_state_e* state, vc_state_e* before_state); diff --git a/client/vc_mgr.c b/client/vc_mgr.c index 5c0a44f..0c82dc8 100755 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -42,7 +42,7 @@ #include "voice_control_manager_internal.h" -#define VC_MANAGER_CONFIG_HANDLE 100000 +#define VC_MANAGER_CONFIG_HANDLE 10000000 static Ecore_Timer* g_send_hello_timer = NULL; static Ecore_Timer* g_request_init_timer = NULL; @@ -226,8 +226,8 @@ static int __vc_mgr_check_privilege() return VC_ERROR_PERMISSION_DENIED; } - char uid[16]; - snprintf(uid, 16, "%d", getuid()); + char uid[32]; + snprintf(uid, 32, "%d", getuid()); ret = true; ret = __check_privilege(uid, VC_PRIVILEGE); if (false == ret) { diff --git a/client/vc_mgr_client.c b/client/vc_mgr_client.c index 4ccb0c3..f463c48 100644 --- a/client/vc_mgr_client.c +++ b/client/vc_mgr_client.c @@ -22,7 +22,7 @@ typedef struct { /* base info */ vc_h vc; int pid; - int uid; /*<< unique id = pid + handle */ + unsigned int uid; /*<< unique id = pid + handle */ vc_mgr_all_result_cb all_result_cb; void* all_result_user_data; @@ -308,7 +308,7 @@ bool vc_mgr_client_is_valid(vc_h vc) return true; } -bool vc_mgr_client_is_valid_by_uid(int uid) +bool vc_mgr_client_is_valid_by_uid(unsigned int uid) { vc_mgr_client_s *data = NULL; @@ -329,7 +329,7 @@ bool vc_mgr_client_is_valid_by_uid(int uid) return false; } -int vc_mgr_client_get_handle(int uid, vc_h* vc) +int vc_mgr_client_get_handle(unsigned int uid, vc_h* vc) { vc_mgr_client_s *data = NULL; @@ -838,7 +838,7 @@ int vc_mgr_client_get_client_state(vc_h vc, vc_state_e* state) return 0; } -int vc_mgr_client_get_client_state_by_uid(int uid, vc_state_e* state) +int vc_mgr_client_get_client_state_by_uid(unsigned int uid, vc_state_e* state) { vc_mgr_client_s *data = NULL; diff --git a/client/vc_mgr_client.h b/client/vc_mgr_client.h index 800ba0f..dfcfde1 100644 --- a/client/vc_mgr_client.h +++ b/client/vc_mgr_client.h @@ -43,9 +43,9 @@ int vc_mgr_client_destroy(vc_h vc); bool vc_mgr_client_is_valid(vc_h vc); -bool vc_mgr_client_is_valid_by_uid(int uid); +bool vc_mgr_client_is_valid_by_uid(unsigned int uid); -int vc_mgr_client_get_handle(int uid, vc_h* vc); +int vc_mgr_client_get_handle(unsigned int uid, vc_h* vc); int vc_mgr_client_get_pid(vc_h vc, int* pid); @@ -127,7 +127,7 @@ int vc_mgr_client_set_client_state(vc_h vc, vc_state_e state); int vc_mgr_client_get_client_state(vc_h vc, vc_state_e* state); -int vc_mgr_client_get_client_state_by_uid(int uid, vc_state_e* state); +int vc_mgr_client_get_client_state_by_uid(unsigned int uid, vc_state_e* state); int vc_mgr_client_get_before_state(vc_h vc, vc_state_e* state, vc_state_e* before_state); diff --git a/client/vc_setting.c b/client/vc_setting.c index 4a8ca0e..238480f 100644 --- a/client/vc_setting.c +++ b/client/vc_setting.c @@ -29,7 +29,7 @@ typedef enum { VC_SETTING_STATE_READY } vc_setting_state_e; -#define VC_SETTING_CONFIG_HANDLE 300000 +#define VC_SETTING_CONFIG_HANDLE 30000000 static vc_setting_state_e g_state = VC_SETTING_STATE_NONE; diff --git a/client/vc_widget.c b/client/vc_widget.c index c6dcd8a..e5e7be4 100644 --- a/client/vc_widget.c +++ b/client/vc_widget.c @@ -30,7 +30,7 @@ #include "voice_control_widget.h" -#define VC_WIDGET_CONFIG_HANDLE 200000 +#define VC_WIDGET_CONFIG_HANDLE 20000000 static Ecore_Event_Handler* g_focus_in_handler = NULL; static Ecore_Event_Handler* g_focus_out_handler = NULL; diff --git a/client/vc_widget_client.c b/client/vc_widget_client.c index 5c13f16..0907406 100644 --- a/client/vc_widget_client.c +++ b/client/vc_widget_client.c @@ -190,7 +190,7 @@ bool vc_widget_client_is_valid(vc_h vc) return true; } -bool vc_widget_client_is_valid_by_uid(int uid) +bool vc_widget_client_is_valid_by_uid(unsigned int uid) { vc_widget_s *data = NULL; @@ -215,7 +215,7 @@ bool vc_widget_client_is_valid_by_uid(int uid) return false; } -int vc_widget_client_get_handle(int uid, vc_h* vc) +int vc_widget_client_get_handle(unsigned int uid, vc_h* vc) { vc_widget_s *data = NULL; @@ -546,7 +546,7 @@ int vc_widget_client_get_state(vc_h vc, vc_state_e* state) return 0; } -int vc_widget_client_get_state_by_uid(int uid, vc_state_e* state) +int vc_widget_client_get_state_by_uid(unsigned int uid, vc_state_e* state) { vc_widget_s *data = NULL; diff --git a/client/vc_widget_client.h b/client/vc_widget_client.h index 55a44e3..5ef3a55 100644 --- a/client/vc_widget_client.h +++ b/client/vc_widget_client.h @@ -30,7 +30,7 @@ typedef struct { /* base info */ vc_h vc; int pid; - int uid; /*<< unique id = pid + handle */ + unsigned int uid; /*<< unique id = pid + handle */ int xid; /*<< main Wayland window id */ vc_result_cb result_cb; @@ -80,9 +80,9 @@ int vc_widget_client_destroy(vc_h vc); bool vc_widget_client_is_valid(vc_h vc); -bool vc_widget_client_is_valid_by_uid(int uid); +bool vc_widget_client_is_valid_by_uid(unsigned int uid); -int vc_widget_client_get_handle(int uid, vc_h* vc); +int vc_widget_client_get_handle(unsigned int uid, vc_h* vc); vc_widget_s* widget_get(vc_h vc); @@ -136,7 +136,7 @@ int vc_widget_client_set_state(vc_h vc, vc_state_e state); int vc_widget_client_get_state(vc_h vc, vc_state_e* state); -int vc_widget_client_get_state_by_uid(int uid, vc_state_e* state); +int vc_widget_client_get_state_by_uid(unsigned int uid, vc_state_e* state); int vc_widget_client_get_before_state(vc_h vc, vc_state_e* state, vc_state_e* before_state); diff --git a/common/vc_command.c b/common/vc_command.c index 25eabf9..9d7f9d6 100644 --- a/common/vc_command.c +++ b/common/vc_command.c @@ -157,8 +157,8 @@ static int __vc_cmd_check_privilege() return VC_ERROR_PERMISSION_DENIED; } - char uid[16]; - snprintf(uid, 16, "%d", getuid()); + char uid[32]; + snprintf(uid, 32, "%d", getuid()); ret = true; ret = __check_privilege(uid, VC_PRIVILEGE); __check_privilege_deinitialize(); diff --git a/common/vc_config_mgr.c b/common/vc_config_mgr.c index f1c351b..cf3bbda 100644 --- a/common/vc_config_mgr.c +++ b/common/vc_config_mgr.c @@ -37,7 +37,7 @@ #define BUF_LEN (EVENT_SIZE + 16) typedef struct { - int uid; + unsigned int uid; vc_config_engine_changed_cb engine_cb; vc_config_lang_changed_cb lang_cb; vc_config_enabled_cb enabled_cb; @@ -274,7 +274,7 @@ int __vc_config_mgr_select_lang(const char* engine_id, char** language) return VC_ERROR_OPERATION_FAILED; } -int __vc_config_release_client(int uid) +int __vc_config_release_client(unsigned int uid) { GSList *iter = NULL; vc_config_client_s* temp_client = NULL; @@ -828,7 +828,7 @@ void __vc_config_language_changed_cb(keynode_t *key, void *data) return; } -int vc_config_mgr_initialize(int uid) +int vc_config_mgr_initialize(unsigned int uid) { GSList *iter = NULL; int* get_uid; @@ -1044,7 +1044,7 @@ int vc_config_mgr_initialize(int uid) return 0; } -int vc_config_mgr_finalize(int uid) +int vc_config_mgr_finalize(unsigned int uid) { SLOG(LOG_INFO, vc_config_tag(), "[WARNING] Enter critical section"); @@ -1133,7 +1133,7 @@ int __vc_config_mgr_unregister_config_event() return 0; } -int vc_config_mgr_set_engine_cb(int uid, vc_config_engine_changed_cb engine_cb) +int vc_config_mgr_set_engine_cb(unsigned int uid, vc_config_engine_changed_cb engine_cb) { GSList *iter = NULL; vc_config_client_s* temp_client = NULL; @@ -1165,7 +1165,7 @@ int vc_config_mgr_set_engine_cb(int uid, vc_config_engine_changed_cb engine_cb) return 0; } -int vc_config_mgr_unset_engine_cb(int uid) +int vc_config_mgr_unset_engine_cb(unsigned int uid) { GSList *iter = NULL; vc_config_client_s* temp_client = NULL; @@ -1194,7 +1194,7 @@ int vc_config_mgr_unset_engine_cb(int uid) } -int vc_config_mgr_set_lang_cb(int uid, vc_config_lang_changed_cb lang_cb) +int vc_config_mgr_set_lang_cb(unsigned int uid, vc_config_lang_changed_cb lang_cb) { GSList *iter = NULL; vc_config_client_s* temp_client = NULL; @@ -1226,7 +1226,7 @@ int vc_config_mgr_set_lang_cb(int uid, vc_config_lang_changed_cb lang_cb) return 0; } -int vc_config_mgr_unset_lang_cb(int uid) +int vc_config_mgr_unset_lang_cb(unsigned int uid) { GSList *iter = NULL; vc_config_client_s* temp_client = NULL; @@ -1254,7 +1254,7 @@ int vc_config_mgr_unset_lang_cb(int uid) return 0; } -int vc_config_mgr_set_enabled_cb(int uid, vc_config_enabled_cb enabled_cb) +int vc_config_mgr_set_enabled_cb(unsigned int uid, vc_config_enabled_cb enabled_cb) { if (NULL == enabled_cb) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] enabled cb is NULL : uid(%d) ", uid); @@ -1286,7 +1286,7 @@ int vc_config_mgr_set_enabled_cb(int uid, vc_config_enabled_cb enabled_cb) return VC_CONFIG_ERROR_INVALID_PARAMETER; } -int vc_config_mgr_unset_enabled_cb(int uid) +int vc_config_mgr_unset_enabled_cb(unsigned int uid) { GSList *iter = NULL; vc_config_client_s* temp_client = NULL; diff --git a/common/vc_config_mgr.h b/common/vc_config_mgr.h index 647da0f..ce623d1 100644 --- a/common/vc_config_mgr.h +++ b/common/vc_config_mgr.h @@ -45,25 +45,25 @@ typedef void (*vc_config_enabled_cb)(bool enable); typedef bool (*vc_config_supported_engine_cb)(const char *engine_name, const char *engine_appid, const char *setting, const char *default_lang, bool non_fixed_support, void *user_data); -int vc_config_mgr_initialize(int uid); +int vc_config_mgr_initialize(unsigned int uid); -int vc_config_mgr_finalize(int uid); +int vc_config_mgr_finalize(unsigned int uid); /* Set / Unset callback */ -int vc_config_mgr_set_engine_cb(int uid, vc_config_engine_changed_cb engine_cb); +int vc_config_mgr_set_engine_cb(unsigned int uid, vc_config_engine_changed_cb engine_cb); -int vc_config_mgr_unset_engine_cb(int uid); +int vc_config_mgr_unset_engine_cb(unsigned int uid); -int vc_config_mgr_set_lang_cb(int uid, vc_config_lang_changed_cb lang_cb); +int vc_config_mgr_set_lang_cb(unsigned int uid, vc_config_lang_changed_cb lang_cb); -int vc_config_mgr_unset_lang_cb(int uid); +int vc_config_mgr_unset_lang_cb(unsigned int uid); -int vc_config_mgr_set_enabled_cb(int uid, vc_config_enabled_cb enabled_cb); +int vc_config_mgr_set_enabled_cb(unsigned int uid, vc_config_enabled_cb enabled_cb); -int vc_config_mgr_unset_enabled_cb(int uid); +int vc_config_mgr_unset_enabled_cb(unsigned int uid); int vc_config_mgr_get_auto_language(bool* value); diff --git a/server/vcd_server.c b/server/vcd_server.c index 486b6cb..853597c 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -45,7 +45,7 @@ static Ecore_Timer *g_check_widget_client_timer = NULL; static Ecore_Timer *g_check_client_timer = NULL; static Ecore_Thread* g_tts_thread = NULL; -static int g_current_uid = -1; +static unsigned int g_current_uid = 0; static int g_current_utt_id = -1; /** @@ -1137,7 +1137,7 @@ int vcd_send_feedback_audio_format(int rate, vce_audio_channel_e channel, vce_au /* send TTS feedback audio format to VC manager */ int ret = VCD_ERROR_NONE; int pid = g_current_uid / 1000; - if (-1 == g_current_uid || vcd_client_manager_get_pid() == pid) { + if (0 == g_current_uid || vcd_client_manager_get_pid() == pid) { ret = vcdc_send_feedback_audio_format_to_manager(vcd_client_manager_get_pid(), rate, channel, audio_type); if (VCD_ERROR_NONE != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send TTS feedback audio format to VC manager"); @@ -1151,7 +1151,7 @@ int vcd_send_feedback_audio_format(int rate, vce_audio_channel_e channel, vce_au int vcd_send_feedback_streaming(vce_feedback_event_e event, char* buffer, int len) { - if (-1 == g_current_uid && VCE_FEEDBACK_EVENT_START == event) { + if (0 == g_current_uid && VCE_FEEDBACK_EVENT_START == event) { g_current_utt_id = (g_current_utt_id + 1) % 1000; g_current_uid = vcd_client_manager_get_pid() * 1000 + g_current_utt_id; SLOG(LOG_INFO, TAG_VCD, "[Server info] set current uid and utt_id as manager pid(%d)", vcd_client_manager_get_pid()); @@ -1179,7 +1179,7 @@ int vcd_send_feedback_streaming(vce_feedback_event_e event, char* buffer, int le if (VCE_FEEDBACK_EVENT_FINISH == event) { /* reset current uid */ - g_current_uid = -1; + g_current_uid = 0; /* Set service state to ready if state is synthesizing */ vcd_state_e state = vcd_config_get_service_state(); @@ -1348,7 +1348,7 @@ int vcd_initialize(vce_request_callback_s *callback) SLOG(LOG_WARN, TAG_VCD, "[Server Warning] Fail to create timer of client check"); } - g_current_uid = -1; + g_current_uid = 0; g_current_utt_id = -1; SLOG(LOG_ERROR, TAG_VCD, "[Server SUCCESS] initialize"); @@ -2684,7 +2684,7 @@ int vcd_server_request_tts(int pid, const char* text, const char* language, int return VCD_ERROR_INVALID_STATE; } - int uid = -1; + unsigned int uid = 0; g_current_utt_id = (g_current_utt_id + 1) % 1000; *utt_id = g_current_utt_id; if (0 == to_vcm) { @@ -2737,7 +2737,7 @@ int vcd_server_cancel_tts(int pid, int utt_id) vc_tts_text_data_s* tts_text_data = NULL; - int uid = pid * 1000 + utt_id; + unsigned int uid = pid * 1000 + utt_id; int ret = vcd_data_get_tts_text_data(uid, &tts_text_data); if (0 != ret) { SLOG(LOG_WARN, TAG_VCD, "[Server WARN] No data in vcd tts text queue"); diff --git a/server/vcd_server_data.cpp b/server/vcd_server_data.cpp index 6f5906e..9cf6da5 100644 --- a/server/vcd_server_data.cpp +++ b/server/vcd_server_data.cpp @@ -51,7 +51,7 @@ static int __data_show_text_list(void) return VCD_ERROR_NONE; } -int vcd_data_add_tts_text_data(int uid, vc_tts_text_data_s* data) +int vcd_data_add_tts_text_data(unsigned int uid, vc_tts_text_data_s* data) { if (NULL == data) { SLOG(LOG_ERROR, TAG_VCD, "[DATA ERROR] feedback data is NULL"); @@ -110,7 +110,7 @@ int vcd_data_clear_tts_text_data(vc_tts_text_data_s** tts_text_data) return VCD_ERROR_NONE; } -int vcd_data_get_tts_text_data(int uid, vc_tts_text_data_s** data) +int vcd_data_get_tts_text_data(unsigned int uid, vc_tts_text_data_s** data) { SLOG(LOG_INFO, TAG_VCD, "[DATA] Get tts text data : uid(%d)", uid); diff --git a/server/vcd_server_data.h b/server/vcd_server_data.h index af2f055..86e4ece 100644 --- a/server/vcd_server_data.h +++ b/server/vcd_server_data.h @@ -30,7 +30,7 @@ extern "C" { typedef struct { - int uid; + unsigned int uid; int pid; int utt_id; char* text; @@ -38,11 +38,11 @@ typedef struct { } vc_tts_text_data_s; -int vcd_data_add_tts_text_data(int uid, vc_tts_text_data_s* data); +int vcd_data_add_tts_text_data(unsigned int uid, vc_tts_text_data_s* data); int vcd_data_clear_tts_text_data(vc_tts_text_data_s** tts_text_data); -int vcd_data_get_tts_text_data(int uid, vc_tts_text_data_s** data); +int vcd_data_get_tts_text_data(unsigned int uid, vc_tts_text_data_s** data); int vcd_data_get_first_tts_text_data(vc_tts_text_data_s** data); diff --git a/server/vce.c b/server/vce.c index 970f521..5d71383 100644 --- a/server/vce.c +++ b/server/vce.c @@ -127,8 +127,8 @@ static int __vce_check_privilege() return VCE_ERROR_PERMISSION_DENIED; } - char uid[16]; - snprintf(uid, 16, "%d", getuid()); + char uid[32]; + snprintf(uid, 32, "%d", getuid()); ret = true; ret = __check_privilege(uid, VC_PRIVILEGE); __check_privilege_deinitialize(); -- 2.7.4