From e7e10aa04912a7409c6e780eb526b347443c90c7 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Thu, 9 Dec 2021 22:18:59 +0900 Subject: [PATCH 01/16] Update version to 1.65.5 Change-Id: Ie91a2bdc2fb1955f30e1b6f539f794b43edfed4b --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfc1247..d997670 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.4) +SET(VERSION 1.65.5) 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 6d76313..01b059c 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.4 +Version: 1.65.5 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From dc987fa0a92bba6d25ca568581482ac4e1eb5e48 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Thu, 9 Dec 2021 22:18:59 +0900 Subject: [PATCH 02/16] Update version to 1.65.5 Change-Id: Ie91a2bdc2fb1955f30e1b6f539f794b43edfed4b --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfc1247..d997670 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.4) +SET(VERSION 1.65.5) 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 6d76313..01b059c 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.4 +Version: 1.65.5 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From d002857b5037a95bc82e415b231cda87189b00ca Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Thu, 9 Dec 2021 18:32:36 +0900 Subject: [PATCH 03/16] Fix format string and variable name By changing data type of uid, many mismatchess between data of format string and variable are generated. And also, the name 'uid' is used too generally. I may cause misunderstand about the purpose of the variable. To solve this problem, this patch changes the format string to match the variables. And also, this patch changes the name of variable to make name more clear. Change-Id: Id86e57b5ce39589c7c65eeb9106abf8040f6aed6 Signed-off-by: Suyeon Hwang --- common/vc_config_mgr.c | 10 ++++----- common/vc_defs.h | 1 + engine-parser/src/vc-engine-parser.c | 20 ++++++++--------- server/vcd_server.c | 43 ++++++++++++++++++------------------ server/vcd_server_data.cpp | 14 ++++++------ server/vcd_server_data.h | 4 ++-- 6 files changed, 46 insertions(+), 46 deletions(-) diff --git a/common/vc_config_mgr.c b/common/vc_config_mgr.c index cf3bbda..5436e46 100644 --- a/common/vc_config_mgr.c +++ b/common/vc_config_mgr.c @@ -846,7 +846,7 @@ int vc_config_mgr_initialize(unsigned int uid) get_uid = iter->data; if (uid == *get_uid) { - SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] uid(%d) has already registered", uid); + SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] uid(%u) has already registered", uid); pthread_mutex_unlock(&vc_config_mgr_mutex); ecore_thread_main_loop_end(); SLOG(LOG_DEBUG, vc_config_tag(), "[WARNING] Leave critical section"); @@ -872,7 +872,7 @@ int vc_config_mgr_initialize(unsigned int uid) /* Add uid */ g_config_client_list = g_slist_append(g_config_client_list, temp_client); - SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] Add uid(%d) but config has already initialized", uid); + SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] Add uid(%u) but config has already initialized", uid); __vc_config_mgr_print_client_info(); pthread_mutex_unlock(&vc_config_mgr_mutex); @@ -1031,7 +1031,7 @@ int vc_config_mgr_initialize(unsigned int uid) temp_client->lang_cb = NULL; temp_client->enabled_cb = NULL; - SLOG(LOG_DEBUG, vc_config_tag(), "uid(%d) temp_uid(%d)", uid, temp_client->uid); + SLOG(LOG_DEBUG, vc_config_tag(), "uid(%u) temp_uid(%u)", uid, temp_client->uid); /* Add uid */ g_config_client_list = g_slist_append(g_config_client_list, temp_client); @@ -1257,7 +1257,7 @@ int vc_config_mgr_unset_lang_cb(unsigned int uid) 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); + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] enabled cb is NULL : uid(%u) ", uid); return VC_CONFIG_ERROR_INVALID_PARAMETER; } @@ -2047,7 +2047,7 @@ int __vc_config_mgr_print_client_info() while (NULL != iter) { temp_client = iter->data; - SLOG(LOG_DEBUG, vc_config_tag(), "[%dth] uid(%d)", i, temp_client->uid); + SLOG(LOG_DEBUG, vc_config_tag(), "[%dth] uid(%u)", i, temp_client->uid); iter = g_slist_next(iter); i++; diff --git a/common/vc_defs.h b/common/vc_defs.h index 21c2e58..2578ba3 100644 --- a/common/vc_defs.h +++ b/common/vc_defs.h @@ -232,6 +232,7 @@ extern "C" { #define VC_RETRY_COUNT 5 #define VC_RUNTIME_INFO_NO_FOREGROUND -1 #define VC_CONNECTION_RETRY_COUNT 10 +#define VC_INVALID_TTS_UID 0 #define VC_FEATURE_PATH "tizen.org/feature/speech.control" #define VC_MGR_FEATURE_PATH "tizen.org/feature/speech.control_manager" diff --git a/engine-parser/src/vc-engine-parser.c b/engine-parser/src/vc-engine-parser.c index 6663375..44d0f8e 100644 --- a/engine-parser/src/vc-engine-parser.c +++ b/engine-parser/src/vc-engine-parser.c @@ -118,7 +118,7 @@ static int __save_engine_info_xml(const char *pkgid, gchar *ut, uid_t uid, gid_t uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER); uid_t tmp_uid = 0; gid_t tmp_gid = 0; - LOGD("uid(%d)", uid); + LOGD("uid(%u)", uid); if (globalapp_uid == uid) { /* Global app */ @@ -281,7 +281,7 @@ static int __remove_engine_info_xml(const char *pkgid, gchar *ut, uid_t uid) uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER); - LOGD("uid(%d)", uid); + LOGD("uid(%u)", uid); if (globalapp_uid == uid) { /* Global app */ @@ -404,7 +404,7 @@ EXPORT_API int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *list) { LOGD("METADATA INSTALL"); - LOGD("pkgid(%s) appid(%s) list(%d)", pkgid, appid, g_list_length(list)); + LOGD("pkgid(%s) appid(%s) list(%u)", pkgid, appid, g_list_length(list)); int ret = -1; ret = pkgmgr_installer_info_get_target_uid(&g_uid); @@ -412,8 +412,8 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList * LOGE("[ERROR] Fail to get target uid"); return 0; } else { - LOGD("uid(%d)", g_uid); - printf("[Parser Debug][DEBUG] uid(%d)", g_uid); + LOGD("uid(%u)", g_uid); + printf("[Parser Debug][DEBUG] uid(%u)", g_uid); } uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER); @@ -545,7 +545,7 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList * LOGD("[DEBUG] user info"); if (NULL != home_dir) { - LOGD("[DEBUG] uid(%d), gid(%d), user_type(%s), home_dir(%s)", uid, gid, user_type, home_dir); + LOGD("[DEBUG] uid(%u), gid(%u), user_type(%s), home_dir(%s)", uid, gid, user_type, home_dir); FREE(g_dir_config_base) FREE(g_dir_home) @@ -672,7 +672,7 @@ EXPORT_API int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList *list) { LOGD("METADATA UNINSTALL"); - LOGD("pkgid(%s) appid(%s) list(%d)", pkgid, appid, g_list_length(list)); + LOGD("pkgid(%s) appid(%s) list(%u)", pkgid, appid, g_list_length(list)); int ret = -1; ret = pkgmgr_installer_info_get_target_uid(&g_uid); @@ -680,8 +680,8 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList LOGE("[ERROR] Fail to get target uid"); return 0; } else { - LOGD("uid(%d)", g_uid); - printf("[Parser Debug][DEBUG] uid(%d)", g_uid); + LOGD("uid(%u)", g_uid); + printf("[Parser Debug][DEBUG] uid(%u)", g_uid); } uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER); @@ -870,7 +870,7 @@ EXPORT_API int PKGMGR_MDPARSER_PLUGIN_UPGRADE(const char *pkgid, const char *appid, GList *list) { LOGD("METADATA UPGRADE"); - LOGD("pkgid(%s) appid(%s) list(%d)", pkgid, appid, g_list_length(list)); + LOGD("pkgid(%s) appid(%s) list(%u)", pkgid, appid, g_list_length(list)); PKGMGR_MDPARSER_PLUGIN_UNINSTALL(pkgid, appid, list); PKGMGR_MDPARSER_PLUGIN_INSTALL(pkgid, appid, list); diff --git a/server/vcd_server.c b/server/vcd_server.c index 853597c..aa2a347 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 unsigned int g_current_uid = 0; +static unsigned int g_current_tts_uid = VC_INVALID_TTS_UID; static int g_current_utt_id = -1; /** @@ -1132,12 +1132,12 @@ int vcd_send_error(vce_error_e error, const char* msg, void *user_data) /* for TTS feedback */ int vcd_send_feedback_audio_format(int rate, vce_audio_channel_e channel, vce_audio_type_e audio_type) { - SLOG(LOG_INFO, TAG_VCD, "[Server DEBUG] Engine - Send TTS feedback audio format, g_current_uid(%d)", g_current_uid); + SLOG(LOG_INFO, TAG_VCD, "[Server DEBUG] Engine - Send TTS feedback audio format, g_current_tts_uid(%u)", g_current_tts_uid); /* send TTS feedback audio format to VC manager */ int ret = VCD_ERROR_NONE; - int pid = g_current_uid / 1000; - if (0 == g_current_uid || vcd_client_manager_get_pid() == pid) { + int pid = g_current_tts_uid / 1000; + if (VC_INVALID_TTS_UID == g_current_tts_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,17 +1151,17 @@ 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 (0 == g_current_uid && VCE_FEEDBACK_EVENT_START == event) { + if (VC_INVALID_TTS_UID == g_current_tts_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; + g_current_tts_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()); } int ret = VCD_ERROR_NONE; - int pid = g_current_uid / 1000; - int utt_id = g_current_uid % 1000; + int pid = g_current_tts_uid / 1000; + int utt_id = g_current_tts_uid % 1000; - SLOG(LOG_INFO, TAG_VCD, "[Server DEBUG] Engine - Send TTS feedback streaming event(%d), uid(%d), is_mgr_client(%d)", event, g_current_uid, (pid == vcd_client_manager_get_pid() ? true : false)); + SLOG(LOG_INFO, TAG_VCD, "[Server DEBUG] Engine - Send TTS feedback streaming event(%d), uid(%u), is_mgr_client(%d)", event, g_current_tts_uid, (pid == vcd_client_manager_get_pid() ? true : false)); if (pid == vcd_client_manager_get_pid()) { /* send TTS feedback streaming to manager client */ @@ -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 = 0; + g_current_tts_uid = VC_INVALID_TTS_UID; /* 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 = 0; + g_current_tts_uid = VC_INVALID_TTS_UID; g_current_utt_id = -1; SLOG(LOG_ERROR, TAG_VCD, "[Server SUCCESS] initialize"); @@ -2648,19 +2648,18 @@ static void __start_tts_request_thread(void* data, Ecore_Thread* thread) vcd_config_set_service_state(VCD_STATE_SYNTHESIZING); /* Set current uid */ - g_current_uid = tts_text_data->uid; + g_current_tts_uid = tts_text_data->uid; /* Request tts to engine */ ret = vcd_engine_request_tts(tts_text_data->pid, tts_text_data->utt_id, tts_text_data->text, tts_text_data->language); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to request tts : %d", ret); } else { - SLOG(LOG_INFO, TAG_VCD, "[Server SUCCESS] request tts, uid(%d) pid(%d), text(%s), language(%s), utt_id(%d)", + SLOG(LOG_INFO, TAG_VCD, "[Server SUCCESS] request tts, uid(%u) pid(%d), text(%s), language(%s), utt_id(%d)", tts_text_data->uid, tts_text_data->pid, tts_text_data->text, tts_text_data->language, tts_text_data->utt_id); } /* clear tts text data after use */ vcd_data_clear_tts_text_data(&tts_text_data); - } } @@ -2684,16 +2683,16 @@ int vcd_server_request_tts(int pid, const char* text, const char* language, int return VCD_ERROR_INVALID_STATE; } - unsigned int uid = 0; + unsigned int tts_uid = VC_INVALID_TTS_UID; g_current_utt_id = (g_current_utt_id + 1) % 1000; *utt_id = g_current_utt_id; if (0 == to_vcm) { - uid = pid * 1000 + g_current_utt_id; + tts_uid = pid * 1000 + g_current_utt_id; } else { - uid = vcd_client_manager_get_pid() * 1000 + g_current_utt_id; + tts_uid = vcd_client_manager_get_pid() * 1000 + g_current_utt_id; } SLOG(LOG_INFO, TAG_VCD, "[Server INFO] pid(%d), text(%s), language(%s), to_vcm(%d), ", pid, text, language, to_vcm); - SLOG(LOG_INFO, TAG_VCD, "[Server INFO] current_uid(%d), current_utt_id(%d)", uid, g_current_utt_id); + SLOG(LOG_INFO, TAG_VCD, "[Server INFO] current_uid(%u), current_utt_id(%d)", tts_uid, g_current_utt_id); vc_tts_text_data_s* tts_text_data; tts_text_data = (vc_tts_text_data_s*)calloc(1, sizeof(vc_tts_text_data_s)); @@ -2701,13 +2700,13 @@ int vcd_server_request_tts(int pid, const char* text, const char* language, int SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to callocate memory "); return VCD_ERROR_OUT_OF_MEMORY; } - tts_text_data->uid = uid; + tts_text_data->uid = tts_uid; tts_text_data->pid = pid; tts_text_data->utt_id = g_current_utt_id; tts_text_data->text = strdup(text); tts_text_data->language = strdup(language); - int ret = vcd_data_add_tts_text_data(tts_text_data->uid, tts_text_data); + int ret = vcd_data_add_tts_text_data(tts_text_data); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to add tts text data : %d", ret); } @@ -2737,8 +2736,8 @@ int vcd_server_cancel_tts(int pid, int utt_id) vc_tts_text_data_s* tts_text_data = NULL; - unsigned int uid = pid * 1000 + utt_id; - int ret = vcd_data_get_tts_text_data(uid, &tts_text_data); + unsigned int tts_uid = pid * 1000 + utt_id; + int ret = vcd_data_get_tts_text_data(tts_uid, &tts_text_data); if (0 != ret) { SLOG(LOG_WARN, TAG_VCD, "[Server WARN] No data in vcd tts text queue"); } else { diff --git a/server/vcd_server_data.cpp b/server/vcd_server_data.cpp index 9cf6da5..7a238aa 100644 --- a/server/vcd_server_data.cpp +++ b/server/vcd_server_data.cpp @@ -40,7 +40,7 @@ static int __data_show_text_list(void) if (!g_tts_text_data.empty()) { std::list::iterator iter; for (iter = g_tts_text_data.begin(); (NULL != *iter && iter != g_tts_text_data.end()); ++iter) { - SLOG(LOG_DEBUG, TAG_VCD, "[%p] uid(%d), pid(%d), utt_id(%d), text(%s), language(%s)", + SLOG(LOG_DEBUG, TAG_VCD, "[%p] uid(%u), pid(%d), utt_id(%d), text(%s), language(%s)", *iter, (*iter)->uid, (*iter)->pid, (*iter)->utt_id, (*iter)->text, (*iter)->language); } } else { @@ -51,7 +51,7 @@ static int __data_show_text_list(void) return VCD_ERROR_NONE; } -int vcd_data_add_tts_text_data(unsigned int uid, vc_tts_text_data_s* data) +int vcd_data_add_tts_text_data(vc_tts_text_data_s* data) { if (NULL == data) { SLOG(LOG_ERROR, TAG_VCD, "[DATA ERROR] feedback data is NULL"); @@ -71,7 +71,7 @@ int vcd_data_add_tts_text_data(unsigned int uid, vc_tts_text_data_s* data) return VCD_ERROR_OUT_OF_MEMORY; } - SLOG(LOG_ERROR, TAG_VCD, "[DATA][%p] uid(%d), pid(%d), utt_id(%d), text(%s), language(%s)", + SLOG(LOG_ERROR, TAG_VCD, "[DATA][%p] uid(%u), pid(%d), utt_id(%d), text(%s), language(%s)", *iter, (*iter)->uid, (*iter)->pid, (*iter)->utt_id, (*iter)->text, (*iter)->language); #ifdef DATA_DEBUG @@ -88,7 +88,7 @@ int vcd_data_clear_tts_text_data(vc_tts_text_data_s** tts_text_data) if (!g_tts_text_data.empty()) { if (NULL != *tts_text_data) { - SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] uid(%d), pid(%d), utt_id(%d), text(%s), language(%s)", + SLOG(LOG_DEBUG, TAG_VCD, "[DEBUG] uid(%u), pid(%d), utt_id(%d), text(%s), language(%s)", (*tts_text_data)->uid, (*tts_text_data)->pid, (*tts_text_data)->utt_id, (*tts_text_data)->text, (*tts_text_data)->language); if (NULL != (*tts_text_data)->text) { @@ -110,9 +110,9 @@ 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(unsigned int uid, vc_tts_text_data_s** data) +int vcd_data_get_tts_text_data(unsigned int tts_uid, vc_tts_text_data_s** data) { - SLOG(LOG_INFO, TAG_VCD, "[DATA] Get tts text data : uid(%d)", uid); + SLOG(LOG_INFO, TAG_VCD, "[DATA] Get tts text data : uid(%u)", tts_uid); /* mutex is locked */ pthread_mutex_lock(&g_tts_text_data_mutex); @@ -127,7 +127,7 @@ int vcd_data_get_tts_text_data(unsigned int uid, vc_tts_text_data_s** data) std::list::iterator iter; iter = g_tts_text_data.begin(); while (iter != g_tts_text_data.end()) { - if (uid == (*iter)->uid) { + if (tts_uid == (*iter)->uid) { *data = *iter; iter = g_tts_text_data.erase(iter); } else { diff --git a/server/vcd_server_data.h b/server/vcd_server_data.h index 86e4ece..a53e3ca 100644 --- a/server/vcd_server_data.h +++ b/server/vcd_server_data.h @@ -38,11 +38,11 @@ typedef struct { } vc_tts_text_data_s; -int vcd_data_add_tts_text_data(unsigned int uid, vc_tts_text_data_s* data); +int vcd_data_add_tts_text_data(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(unsigned int uid, vc_tts_text_data_s** data); +int vcd_data_get_tts_text_data(unsigned int tts_uid, vc_tts_text_data_s** data); int vcd_data_get_first_tts_text_data(vc_tts_text_data_s** data); -- 2.7.4 From 36ab3647abca53b478802bc48f7cee882c191664 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Fri, 10 Dec 2021 16:50:10 +0900 Subject: [PATCH 04/16] Add handle type value when initialize config When client initialize the vc_config_mgr, manager and setting client send the handle with unique type value as a parameter into. This is because the uid can be used to check the type of client when vc_config_mgr needs to identify the client. However, widget client did not add unique value into the handle. Thus, this patch makes the widget client send handle with unique value for widget client. By this change, widget client also works same as other types of client. Change-Id: I3eb28c8a97621dd9809447bd63a79858f7353ef8 Signed-off-by: Suyeon Hwang --- client/vc_widget.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/client/vc_widget.c b/client/vc_widget.c index e5e7be4..92e0951 100644 --- a/client/vc_widget.c +++ b/client/vc_widget.c @@ -188,7 +188,7 @@ int vc_widget_initialize(vc_h* vc_w) } /* TODO - each handle? */ - int ret = vc_config_mgr_initialize((*vc_w)->handle); + int ret = vc_config_mgr_initialize((*vc_w)->handle + VC_WIDGET_CONFIG_HANDLE); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to init config manager : %s", __vc_widget_get_error_code(__vc_widget_convert_config_error_code(ret))); @@ -197,10 +197,10 @@ int vc_widget_initialize(vc_h* vc_w) return __vc_widget_convert_config_error_code(ret); } - ret = vc_config_mgr_set_lang_cb((*vc_w)->handle, __vc_widget_lang_changed_cb); + ret = vc_config_mgr_set_lang_cb((*vc_w)->handle + VC_WIDGET_CONFIG_HANDLE, __vc_widget_lang_changed_cb); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCW, "[ERROR] Fail to set config changed : %d", ret); - vc_config_mgr_finalize((*vc_w)->handle); + vc_config_mgr_finalize((*vc_w)->handle + VC_WIDGET_CONFIG_HANDLE); vc_widget_client_destroy((*vc_w)); pthread_mutex_unlock(&g_w_init_mutex); return __vc_widget_convert_config_error_code(ret); @@ -313,8 +313,8 @@ int vc_widget_deinitialize(vc_h vc_w) widget->conn_timer = NULL; } - vc_config_mgr_unset_lang_cb(vc_w->handle); - vc_config_mgr_finalize(vc_w->handle); + vc_config_mgr_unset_lang_cb(vc_w->handle + VC_WIDGET_CONFIG_HANDLE); + vc_config_mgr_finalize(vc_w->handle + VC_WIDGET_CONFIG_HANDLE); /* Free resources */ vc_widget_client_destroy(vc_w); -- 2.7.4 From 5b0ca4c3f51d2481992863f491be8d8f3b4c622c Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 27 Dec 2021 14:47:38 +0900 Subject: [PATCH 05/16] Change variable related with uid to unsigned integer Change-Id: Id74b98a2adc21d5e71905203ec5752c11b826abf Signed-off-by: Suyeon Hwang --- client/vc_widget_client.c | 12 ++++++------ common/vc_main.h | 2 +- server/vcd_server.c | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/client/vc_widget_client.c b/client/vc_widget_client.c index 0907406..c18036e 100644 --- a/client/vc_widget_client.c +++ b/client/vc_widget_client.c @@ -21,9 +21,9 @@ #include "voice_control_common.h" /* Max number of handle */ -static const int g_max_handle = 999; +static const unsigned int MAX_NUMBER_OF_HANDLE = 999; /* allocated handle */ -static int g_allocated_handle = 0; +static unsigned int g_allocated_handle = 0; /* widget list */ static GSList *g_widget_list = NULL; @@ -61,16 +61,16 @@ vc_widget_s* widget_get(vc_h vc) return NULL; } -static int __client_generate_uid(int pid) +static unsigned int __client_generate_uid(unsigned int pid) { g_allocated_handle++; - if (g_allocated_handle > g_max_handle) { + if (g_allocated_handle > MAX_NUMBER_OF_HANDLE) { g_allocated_handle = 1; } /* generate uid, handle number should be smaller than 1000 */ - return pid * 1000 + g_allocated_handle; + return pid * 1000u + g_allocated_handle; } int vc_widget_client_create(vc_h* vc) @@ -90,7 +90,7 @@ int vc_widget_client_create(vc_h* vc) return VC_ERROR_OUT_OF_MEMORY; } - temp->handle = __client_generate_uid(getpid()); + temp->handle = __client_generate_uid((unsigned int)getpid()); /* initialize widget data */ widget->vc = temp; diff --git a/common/vc_main.h b/common/vc_main.h index 9ed4128..15e94f9 100644 --- a/common/vc_main.h +++ b/common/vc_main.h @@ -48,7 +48,7 @@ extern "C" { * @brief A structure of handle for identification */ struct vc_s { - int handle; + unsigned int handle; }; typedef struct vc_s *vc_h; diff --git a/server/vcd_server.c b/server/vcd_server.c index aa2a347..f55f33af4 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1153,7 +1153,7 @@ int vcd_send_feedback_streaming(vce_feedback_event_e event, char* buffer, int le { if (VC_INVALID_TTS_UID == g_current_tts_uid && VCE_FEEDBACK_EVENT_START == event) { g_current_utt_id = (g_current_utt_id + 1) % 1000; - g_current_tts_uid = vcd_client_manager_get_pid() * 1000 + g_current_utt_id; + g_current_tts_uid = (unsigned int)vcd_client_manager_get_pid() * 1000u + 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()); } @@ -2687,9 +2687,9 @@ int vcd_server_request_tts(int pid, const char* text, const char* language, int g_current_utt_id = (g_current_utt_id + 1) % 1000; *utt_id = g_current_utt_id; if (0 == to_vcm) { - tts_uid = pid * 1000 + g_current_utt_id; + tts_uid = (unsigned int)pid * 1000u + (unsigned int)g_current_utt_id; } else { - tts_uid = vcd_client_manager_get_pid() * 1000 + g_current_utt_id; + tts_uid = (unsigned int)vcd_client_manager_get_pid() * 1000u + (unsigned int)g_current_utt_id; } SLOG(LOG_INFO, TAG_VCD, "[Server INFO] pid(%d), text(%s), language(%s), to_vcm(%d), ", pid, text, language, to_vcm); SLOG(LOG_INFO, TAG_VCD, "[Server INFO] current_uid(%u), current_utt_id(%d)", tts_uid, g_current_utt_id); @@ -2736,7 +2736,7 @@ int vcd_server_cancel_tts(int pid, int utt_id) vc_tts_text_data_s* tts_text_data = NULL; - unsigned int tts_uid = pid * 1000 + utt_id; + unsigned int tts_uid = (unsigned int)pid * 1000u + (unsigned int)utt_id; int ret = vcd_data_get_tts_text_data(tts_uid, &tts_text_data); if (0 != ret) { SLOG(LOG_WARN, TAG_VCD, "[Server WARN] No data in vcd tts text queue"); -- 2.7.4 From 7eefa39a5fcadd5a783e143227832cea5cb191ce Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 22 Nov 2021 19:32:57 +0900 Subject: [PATCH 06/16] Send error about tts failed to client app Change-Id: Ic7736f0f2381bc873f87da0f8d455b61ebd87d1a Signed-off-by: Suyeon Hwang --- client/vc.c | 18 ++++++++++++++++++ client/vc_client.c | 9 +++++++-- client/vc_client.h | 2 +- client/vc_dbus.c | 25 +++++++++++++++++++++++++ common/vc_defs.h | 1 + server/vcd_dbus.c | 40 ++++++++++++++++++++++++++++++++++++++++ server/vcd_dbus.h | 2 ++ server/vcd_server.c | 16 ++++++++++++---- 8 files changed, 106 insertions(+), 7 deletions(-) diff --git a/client/vc.c b/client/vc.c index 60143a2..f42cc66 100644 --- a/client/vc.c +++ b/client/vc.c @@ -1713,6 +1713,24 @@ int __vc_cb_error(int reason, int daemon_pid, char* msg) return 0; } +int __vc_cb_error_to_app(int pid, int reason, const char* msg) +{ + SLOG(LOG_INFO, TAG_VCC, "[INFO] send error to app(%d)", pid); + + vc_h vc; + if (0 != vc_client_get_handle(pid, &vc)) { + SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Fail to get vc handle"); + return VC_ERROR_INVALID_PARAMETER; + } + + SLOG(LOG_ERROR, TAG_VCC, "[ERROR] Error reason(%d), msg(%s)", reason, msg); + + vc_client_set_error(vc, reason); + ecore_main_loop_thread_safe_call_async(__vc_notify_error, (void*)vc); + + return VC_ERROR_NONE; +} + static void __vc_notify_state_changed(void *data) { vc_h vc = (vc_h)data; diff --git a/client/vc_client.c b/client/vc_client.c index 60194c0..fe116b0 100644 --- a/client/vc_client.c +++ b/client/vc_client.c @@ -164,6 +164,8 @@ int vc_client_create(vc_h* vc) client->is_foreground = false; client->invocation_name = NULL; + SLOG(LOG_INFO, TAG_VCC, "[INFO] client create. uid(%u)", client->uid); + g_client_list = g_slist_append(g_client_list, client); *vc = temp; @@ -246,18 +248,21 @@ bool vc_client_is_valid_by_uid(unsigned int uid) } //LCOV_EXCL_START -int vc_client_get_handle(unsigned int uid, vc_h* vc) +int vc_client_get_handle(int pid, vc_h* vc) { vc_client_s *data = NULL; int count = g_slist_length(g_client_list); int i; + SLOG(LOG_DEBUG, TAG_VCC, "[DEBUG] The number of VC clients(%d)", count); + for (i = 0; i < count; i++) { data = g_slist_nth_data(g_client_list, i); if (NULL != data) { - if (uid == data->vc->handle) { + SLOG(LOG_DEBUG, TAG_VCC, "[DEBUG] pid(%d), handle(%d)", pid, data->vc->handle); + if (pid == data->vc->handle) { *vc = data->vc; return 0; } diff --git a/client/vc_client.h b/client/vc_client.h index 7c22e2c..cfc8d4b 100644 --- a/client/vc_client.h +++ b/client/vc_client.h @@ -40,7 +40,7 @@ bool vc_client_is_valid(vc_h vc); bool vc_client_is_valid_by_uid(unsigned int uid); -int vc_client_get_handle(unsigned int uid, vc_h* vc); +int vc_client_get_handle(int pid, vc_h* vc); /* * set/get callback function diff --git a/client/vc_dbus.c b/client/vc_dbus.c index e41b7ef..05e5bed 100644 --- a/client/vc_dbus.c +++ b/client/vc_dbus.c @@ -31,6 +31,8 @@ static DBusConnection* g_conn_listener = NULL; extern int __vc_cb_error(int reason, int daemon_pid, char* msg); +extern int __vc_cb_error_to_app(int pid, int reason, char* msg); + extern void __vc_cb_result(); extern int __vc_cb_service_state(int state); @@ -163,6 +165,29 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle SLOG(LOG_DEBUG, TAG_VCC, "@@@"); } /* VCD_METHOD_ERROR */ + else if (dbus_message_is_signal(msg, if_name, VCD_METHOD_ERROR_TO_APP)) { + SLOG(LOG_DEBUG, TAG_VCC, "@@@ Get Error and send to client app"); + int pid; + int reason; + char* err_msg; + + dbus_message_get_args(msg, &err, + DBUS_TYPE_INT32, &pid, + DBUS_TYPE_INT32, &reason, + DBUS_TYPE_STRING, &err_msg, + DBUS_TYPE_INVALID); + + if (dbus_error_is_set(&err)) { + SLOG(LOG_ERROR, TAG_VCC, "@@ vc Get Error message : Get arguments error (%s)", err.message); + dbus_error_free(&err); + } else { + SLOG(LOG_DEBUG, TAG_VCC, "@@ vc Get Error message : reason(%d), pid(%d), msg(%s)", reason, pid, err_msg); + __vc_cb_error_to_app(pid, reason, err_msg); + } + + SLOG(LOG_DEBUG, TAG_VCC, "@@@"); + } /* VCD_METHOD_ERROR_TO_APP */ + else if (dbus_message_is_method_call(msg, if_name, VCD_METHOD_FEEDBACK_STREAMING)) { SLOG(LOG_INFO, TAG_VCC, "@@@ Get TTS feedback streaming"); int utt_id; diff --git a/common/vc_defs.h b/common/vc_defs.h index 21c2e58..121950e 100644 --- a/common/vc_defs.h +++ b/common/vc_defs.h @@ -82,6 +82,7 @@ extern "C" { #define VCD_METHOD_RESULT "vcd_method_result" #define VCD_METHOD_ERROR "vcd_method_error" +#define VCD_METHOD_ERROR_TO_APP "vcd_method_error_to_app" #define VCD_METHOD_HELLO "vcd_method_hello" #define VCD_METHOD_SET_SERVICE_STATE "vcd_method_set_service_state" #define VCD_METHOD_SEND_MANAGER_PID "vcd_method_send_manager_pid" diff --git a/server/vcd_dbus.c b/server/vcd_dbus.c index 7811988..9ac4f0c 100755 --- a/server/vcd_dbus.c +++ b/server/vcd_dbus.c @@ -864,6 +864,46 @@ int vcdc_send_error_signal(int reason, char *err_msg) return 0; } +int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg) +{ + if (NULL == err_msg) { + SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Input parameter is NULL"); + return VCD_ERROR_INVALID_PARAMETER; + } + + if (VCD_ERROR_NONE != __dbus_check()) { + return VCD_ERROR_OPERATION_FAILED; + } + + DBusError err; + dbus_error_init(&err); + + SLOG(LOG_ERROR, TAG_VCD, "@@ Send error to app(%d)", pid); + + DBusMessage* msg = __get_message(pid, VCD_METHOD_ERROR_TO_APP, VCD_CLIENT_TYPE_NORMAL); + if (NULL == msg) { + SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Message is NULL"); + return VCD_ERROR_OUT_OF_MEMORY; + } + + dbus_message_append_args(msg, DBUS_TYPE_INT32, &pid, DBUS_TYPE_INT32, &reason, DBUS_TYPE_STRING, &err_msg, DBUS_TYPE_INVALID); + + dbus_message_set_no_reply(msg, TRUE); + + if (TRUE != dbus_connection_send(g_conn_sender, msg, NULL)) { + SLOG(LOG_ERROR, TAG_VCD, "[Dbus ERROR] Fail to Send"); + dbus_message_unref(msg); + return VCD_ERROR_OPERATION_FAILED; + } else { + SLOG(LOG_DEBUG, TAG_VCD, "@@ Send error to app: pid(%d), reason(%d), Error Msg(%s)", pid, reason, err_msg); + dbus_connection_flush(g_conn_sender); + } + + dbus_message_unref(msg); + + return VCD_ERROR_NONE; +} + int vcdc_send_request_set_private_data(int pid, const char* key, const char* data) { if (0 != __dbus_check()) { diff --git a/server/vcd_dbus.h b/server/vcd_dbus.h index a6d97a5..5fd1b7b 100644 --- a/server/vcd_dbus.h +++ b/server/vcd_dbus.h @@ -58,6 +58,8 @@ int vcdc_send_error_signal(int reason, char *err_msg); int vcdc_send_error_signal_to_manager(int manager_pid, int reason, char *err_msg); +int vcdc_send_error_signal_to_app(int pid, int reason, char *err_msg); + int vcdc_send_service_state(vcd_state_e state); int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char* utt_text, int continuous); diff --git a/server/vcd_server.c b/server/vcd_server.c index 853597c..19b3950 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1114,7 +1114,14 @@ int vcd_send_error(vce_error_e error, const char* msg, void *user_data) } int ret = VCD_ERROR_NONE; - ret = vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), error, error_msg); + if (VCE_ERROR_TTS_FAILED == error) { + int pid = g_current_uid / 1000; + ret = vcdc_send_error_signal_to_app(pid, error, error_msg); + } else { + ret = vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), error, error_msg); + ecore_main_loop_thread_safe_call_async(__cancel_by_error, NULL); + } + if (VCD_ERROR_NONE != ret) { SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send error signal"); } @@ -1124,8 +1131,6 @@ int vcd_send_error(vce_error_e error, const char* msg, void *user_data) error_msg = NULL; } - ecore_main_loop_thread_safe_call_async(__cancel_by_error, NULL); - return ret; } @@ -2759,7 +2764,10 @@ int vcd_server_cancel_tts(int pid, int utt_id) SLOG(LOG_INFO, TAG_VCD, "[Server SUCCESS] request tts, pid(%d), utt_id(%d)", pid, utt_id); } - return 0; + /* Set service state */ + vcd_config_set_service_state(VCD_STATE_READY); + + return VCD_ERROR_NONE; } int vcd_server_get_tts_audio_format(int pid, int* rate, int* channel, int* audio_type) -- 2.7.4 From 898a61de2c08ba50ecd84be38be4542b6e53e90f Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 22 Nov 2021 19:50:37 +0900 Subject: [PATCH 07/16] Make function for get pid that requests tts play Change-Id: Ica6e6c058814f06a3e276dc65474d175a21f837a Signed-off-by: Suyeon Hwang --- server/vcd_server.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/server/vcd_server.c b/server/vcd_server.c index 19b3950..fbeab48 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -63,6 +63,11 @@ static int __start_internal_recognition(); /* * VC Server Internal Functions */ +static inline int __get_tts_played_pid() +{ + return g_current_uid > 0 ? g_current_uid / 1000 : 0; +} + static Eina_Bool __stop_by_silence(void *data) { SLOG(LOG_INFO, TAG_VCD, "@@@ Silence Detected "); @@ -1115,7 +1120,7 @@ int vcd_send_error(vce_error_e error, const char* msg, void *user_data) int ret = VCD_ERROR_NONE; if (VCE_ERROR_TTS_FAILED == error) { - int pid = g_current_uid / 1000; + int pid = __get_tts_played_pid(); ret = vcdc_send_error_signal_to_app(pid, error, error_msg); } else { ret = vcdc_send_error_signal_to_manager(vcd_client_manager_get_pid(), error, error_msg); @@ -1141,8 +1146,8 @@ 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 (0 == g_current_uid || vcd_client_manager_get_pid() == pid) { + int pid = __get_tts_played_pid(); + if (0 == pid || 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"); @@ -1163,7 +1168,7 @@ int vcd_send_feedback_streaming(vce_feedback_event_e event, char* buffer, int le } int ret = VCD_ERROR_NONE; - int pid = g_current_uid / 1000; + int pid = __get_tts_played_pid(); int utt_id = g_current_uid % 1000; SLOG(LOG_INFO, TAG_VCD, "[Server DEBUG] Engine - Send TTS feedback streaming event(%d), uid(%d), is_mgr_client(%d)", event, g_current_uid, (pid == vcd_client_manager_get_pid() ? true : false)); -- 2.7.4 From 0215f6e5cfd3ea859e241c7fcb585f0bf02de026 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 30 Nov 2021 11:06:53 +0900 Subject: [PATCH 08/16] Unify indentation of enums on vce.h Change-Id: I101f12cea06cfd55a5b1c75fc2cb91982a52a814 Signed-off-by: Suyeon Hwang --- include/vce.h | 70 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/include/vce.h b/include/vce.h index a504a94..e700059 100644 --- a/include/vce.h +++ b/include/vce.h @@ -34,18 +34,18 @@ extern "C" { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ - VCE_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of Memory */ - VCE_ERROR_IO_ERROR = TIZEN_ERROR_IO_ERROR, /**< I/O error */ - VCE_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER,/**< Invalid parameter */ - VCE_ERROR_OUT_OF_NETWORK = TIZEN_ERROR_NETWORK_DOWN, /**< Out of network */ - VCE_ERROR_RECORDER_BUSY = TIZEN_ERROR_RESOURCE_BUSY,/**< Busy resource */ - VCE_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< VC Engine NOT supported */ - VCE_ERROR_INVALID_STATE = TIZEN_ERROR_VOICE_CONTROL | 0x011, /**< Invalid state */ - VCE_ERROR_INVALID_LANGUAGE = TIZEN_ERROR_VOICE_CONTROL | 0x012, /**< Invalid language */ - VCE_ERROR_OPERATION_FAILED = TIZEN_ERROR_VOICE_CONTROL | 0x014, /**< Operation failed */ - VCE_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ - VCE_ERROR_NOT_SUPPORTED_FEATURE = TIZEN_ERROR_VOICE_CONTROL | 0x022, /**< Not supported feature of current engine */ + VCE_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ + VCE_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of Memory */ + VCE_ERROR_IO_ERROR = TIZEN_ERROR_IO_ERROR, /**< I/O error */ + VCE_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ + VCE_ERROR_OUT_OF_NETWORK = TIZEN_ERROR_NETWORK_DOWN, /**< Out of network */ + VCE_ERROR_RECORDER_BUSY = TIZEN_ERROR_RESOURCE_BUSY, /**< Busy resource */ + VCE_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< VC Engine NOT supported */ + VCE_ERROR_INVALID_STATE = TIZEN_ERROR_VOICE_CONTROL | 0x011, /**< Invalid state */ + VCE_ERROR_INVALID_LANGUAGE = TIZEN_ERROR_VOICE_CONTROL | 0x012, /**< Invalid language */ + VCE_ERROR_OPERATION_FAILED = TIZEN_ERROR_VOICE_CONTROL | 0x014, /**< Operation failed */ + VCE_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ + VCE_ERROR_NOT_SUPPORTED_FEATURE = TIZEN_ERROR_VOICE_CONTROL | 0x022, /**< Not supported feature of current engine */ VCE_ERROR_TTS_FAILED = TIZEN_ERROR_VOICE_CONTROL | 0x024 /**< TTS operation failed (Since 7.0) */ } vce_error_e; @@ -54,8 +54,8 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_AUDIO_TYPE_PCM_S16_LE = 0, /**< Signed 16bit audio type, Little endian */ - VCE_AUDIO_TYPE_PCM_U8 /**< Unsigned 8bit audio type */ + VCE_AUDIO_TYPE_PCM_S16_LE = 0, /**< Signed 16bit audio type, Little endian */ + VCE_AUDIO_TYPE_PCM_U8 /**< Unsigned 8bit audio type */ } vce_audio_type_e; /** @@ -63,9 +63,9 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_RESULT_EVENT_SUCCESS = 0, /**< Event when the recognition full result is ready */ - VCE_RESULT_EVENT_REJECTED, /**< Event when the recognition result is rejected */ - VCE_RESULT_EVENT_ERROR /**< Event when the recognition has failed */ + VCE_RESULT_EVENT_SUCCESS = 0, /**< Event when the recognition full result is ready */ + VCE_RESULT_EVENT_REJECTED, /**< Event when the recognition result is rejected */ + VCE_RESULT_EVENT_ERROR /**< Event when the recognition has failed */ } vce_result_event_e; /** @@ -73,13 +73,13 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_COMMAND_FORMAT_FIXED = 0, /**< Fixed command */ - VCE_COMMAND_FORMAT_FIXED_AND_VFIXED, /**< Fixed command + variable-fixed command */ - VCE_COMMAND_FORMAT_VFIXED_AND_FIXED, /**< variable-fixed command + Fixed command */ - VCE_COMMAND_FORMAT_FIXED_AND_NONFIXED, /**< Fixed command + Non-fixed command */ - VCE_COMMAND_FORMAT_NONFIXED_AND_FIXED, /**< Non-fixed command + Fixed command */ - VCE_COMMAND_FORMAT_ACTION, /**< Action command */ - VCE_COMMAND_FORMAT_PARTIAL /**< Partial matched command */ + VCE_COMMAND_FORMAT_FIXED = 0, /**< Fixed command */ + VCE_COMMAND_FORMAT_FIXED_AND_VFIXED, /**< Fixed command + variable-fixed command */ + VCE_COMMAND_FORMAT_VFIXED_AND_FIXED, /**< variable-fixed command + Fixed command */ + VCE_COMMAND_FORMAT_FIXED_AND_NONFIXED, /**< Fixed command + Non-fixed command */ + VCE_COMMAND_FORMAT_NONFIXED_AND_FIXED, /**< Non-fixed command + Fixed command */ + VCE_COMMAND_FORMAT_ACTION, /**< Action command */ + VCE_COMMAND_FORMAT_PARTIAL /**< Partial matched command */ } vce_command_format_e; /** @@ -87,9 +87,9 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_SPEECH_DETECT_NONE = 0, /**< No event */ - VCE_SPEECH_DETECT_BEGIN, /**< Begin of speech detected */ - VCE_SPEECH_DETECT_END, /**< End of speech detected */ + VCE_SPEECH_DETECT_NONE = 0, /**< No event */ + VCE_SPEECH_DETECT_BEGIN, /**< Begin of speech detected */ + VCE_SPEECH_DETECT_END, /**< End of speech detected */ } vce_speech_detect_e; /** @@ -97,9 +97,9 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_ASR_RESULT_EVENT_FINAL_RESULT = 0, /**< Event when the ASR result is last data or ASR result is only one result */ - VCE_ASR_RESULT_EVENT_PARTIAL_RESULT, /**< Event when the ASR result exist, not first and not last */ - VCE_ASR_RESULT_EVENT_ERROR /**< Event when the ASR result is failed */ + VCE_ASR_RESULT_EVENT_FINAL_RESULT = 0, /**< Event when the ASR result is last data or ASR result is only one result */ + VCE_ASR_RESULT_EVENT_PARTIAL_RESULT, /**< Event when the ASR result exist, not first and not last */ + VCE_ASR_RESULT_EVENT_ERROR /**< Event when the ASR result is failed */ } vce_asr_result_event_e; /** @@ -107,8 +107,8 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_AUDIO_CHANNEL_MONO = 0, /**< 1 channel, mono */ - VCE_AUDIO_CHANNEL_STEREO = 1 /**< 2 channels, stereo */ + VCE_AUDIO_CHANNEL_MONO = 0, /**< 1 channel, mono */ + VCE_AUDIO_CHANNEL_STEREO = 1 /**< 2 channels, stereo */ } vce_audio_channel_e; /** @@ -116,10 +116,10 @@ typedef enum { * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif */ typedef enum { - VCE_FEEDBACK_EVENT_FAIL = -1, /**< Failed */ - VCE_FEEDBACK_EVENT_START = 1, /**< Start event */ + VCE_FEEDBACK_EVENT_FAIL = -1, /**< Failed */ + VCE_FEEDBACK_EVENT_START = 1, /**< Start event */ VCE_FEEDBACK_EVENT_CONTINUE = 2, /**< Continue event */ - VCE_FEEDBACK_EVENT_FINISH = 3 /**< Finish event */ + VCE_FEEDBACK_EVENT_FINISH = 3 /**< Finish event */ } vce_feedback_event_e; /** -- 2.7.4 From 34bb1a4432861aecb23bf97615193c39a2b06629 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 27 Dec 2021 17:35:37 +0900 Subject: [PATCH 09/16] Update version (1.65.6) Change-Id: Ief5c962460cf35e3396f347ab0aab79fc61a7b2d 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 d997670..52965e2 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.5) +SET(VERSION 1.65.6) 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 01b059c..cf89a50 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.5 +Version: 1.65.6 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From 6c2ab0d3c7a3b4a430c97cb60b9a84f25182dc24 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Mon, 27 Dec 2021 18:14:39 +0900 Subject: [PATCH 10/16] Update version (1.70.0) Change-Id: I3ff2697cbbb06d9e2fc1dbaa7ab0b5bad473642a 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 d997670..fe5746f 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.5) +SET(VERSION 1.70.0) 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 01b059c..b20f88d 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.5 +Version: 1.70.0 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From 5e91052bc28849cccbd94b1e6a5dad8d966e9c57 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Thu, 6 Jan 2022 20:31:56 +0900 Subject: [PATCH 11/16] Get library name from vconf Current code tries to get full path of dependency module from vconf of system. This means that framework allows to use annonymous library which is installed on any location. However, this behavior might allow to access malicious code and this would become critical problem. To solve this issue, this patch fix that the code gets the file name of library from the vconf. By this patch, all dependency module libraries should be installed predetermined location. The location is read only directory, so malicious code can not be located. Change-Id: I5ab83609229a0fe84b152894b3935d586859c98a Signed-off-by: Suyeon Hwang --- server/dependency_audio_manager.cpp | 12 ++++++------ server/dependency_audio_manager.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/server/dependency_audio_manager.cpp b/server/dependency_audio_manager.cpp index 8e2f6b0..f10abaa 100644 --- a/server/dependency_audio_manager.cpp +++ b/server/dependency_audio_manager.cpp @@ -41,13 +41,13 @@ int dependency_audio_manager_initialize(sound_stream_info_h stream_info_h, depen const int FILEPATH_LEN = 512; char filepath[FILEPATH_LEN] = {'\0', }; - char *vconf_str = vconf_get_str(VCD_DEPENDENCY_MODULE_PATH); - if (vconf_str) { - snprintf(filepath, FILEPATH_LEN - 1, "%s", vconf_str); - free(vconf_str); + const char *module_directory_path = VCD_DEPENDENCY_MODULE_DIRECTORY_PATH; + char *module_library_name = vconf_get_str(VCD_DEPENDENCY_MODULE_NAME); + if (module_library_name) { + snprintf(filepath, FILEPATH_LEN - 1, "%s/%s", module_directory_path, module_library_name); + free(module_library_name); } else { - const char *default_path = VCD_DEPENDENCY_DEFAULT_PATH; - snprintf(filepath, FILEPATH_LEN - 1, "%s/%s", default_path, VCD_DEPENDENCY_DEFAULT_FILENAME); + snprintf(filepath, FILEPATH_LEN - 1, "%s/%s", module_directory_path, VCD_DEPENDENCY_DEFAULT_FILENAME); } filepath[FILEPATH_LEN - 1] = '\0'; diff --git a/server/dependency_audio_manager.h b/server/dependency_audio_manager.h index 9568379..073ebf4 100644 --- a/server/dependency_audio_manager.h +++ b/server/dependency_audio_manager.h @@ -30,13 +30,13 @@ 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") +#define VCD_DEPENDENCY_MODULE_DIRECTORY_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" +#define VCD_DEPENDENCY_MODULE_NAME "db/voice/vc/dependency_module_name" typedef int (*dependency_audio_manager_feed_audio_data)(const void* data, const unsigned int length); -- 2.7.4 From af4b421226b0e7ce7636b5f381dd5ea46b1503b3 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Thu, 20 Jan 2022 15:31:25 +0900 Subject: [PATCH 12/16] Coverage support for robot profile Change-Id: Ifc880b594a7183e62603ee6801c5bad6465e985b --- packaging/voice-control.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/voice-control.spec b/packaging/voice-control.spec index b20f88d..0c353c1 100644 --- a/packaging/voice-control.spec +++ b/packaging/voice-control.spec @@ -158,8 +158,8 @@ mv -f org.tizen.voice.vcserver.tv.service org.tizen.voice.vcserver.service %make_install %if 0%{?gcov:1} -mkdir -p %{buildroot}%{_datadir}/gcov/obj -install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj +mkdir -p %{buildroot}%{_datadir}/gcov/obj/%{name} +install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj/%{name} %endif %post -- 2.7.4 From e200b2403672623bd57eeb8942450df548494b16 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Thu, 20 Jan 2022 16:33:20 +0900 Subject: [PATCH 13/16] Update version to 1.70.1 Change-Id: I9d3cf3d032bdf59657fbb54729707b5b325f2743 --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe5746f..1c57109 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.70.0) +SET(VERSION 1.70.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 0c353c1..3a6a5f2 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.70.0 +Version: 1.70.1 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4 From 877a5b40910fa1a85d23585cb3ef87fbfc1e7913 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Fri, 7 Jan 2022 16:35:08 +0900 Subject: [PATCH 14/16] Call service state changed callback before state changed callback https://review.tizen.org/gerrit/c/platform/core/uifw/voice-control/+/223267 The patch of this link makes that service state changed callback is called asynchronously. This was because prepare process was handled on sub thread. In order to assure the callback calls on main thread, the patch seperated the code for calling service state changed callback and state changed callback. However, this change made client can not assure the value of service state because it was updated unknown timing. To solve this problem, this patch calls the service state changed callback before calling the state changed callback. Current code does not handle the prepare process on sub thread but on main thread. So, by this change, service state would be synchornously updated when the state changed callback is called. Change-Id: I276577fb494a93c8e4f58182c2e16a6ff88b7423 Signed-off-by: Suyeon Hwang --- client/vc_mgr.c | 20 +++++++++++++++++++- server/vcd_server.c | 12 ------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index 0c82dc8..9c07f62 100755 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -457,6 +457,24 @@ static Eina_Bool __request_initialize(void *data) /* Success to connect */ } + /* Set service state */ + vc_service_state_e previous_service_state; + vc_mgr_client_get_service_state(g_vc_m, &previous_service_state); + vc_mgr_client_set_service_state(g_vc_m, (vc_service_state_e)service_state); + + vc_service_state_changed_cb service_changed_callback = NULL; + void* user_data = NULL; + vc_mgr_client_get_service_state_changed_cb(g_vc_m, &service_changed_callback, &user_data); + + if (NULL != service_changed_callback) { + 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_INFO, TAG_VCM, "Service state changed callback is called"); + } else { + SLOG(LOG_WARN, TAG_VCM, "[WARNING] Service state changed callback is null"); + } + /* Set foreground */ vc_mgr_client_set_foreground(g_vc_m, foreground, true); @@ -466,7 +484,7 @@ static Eina_Bool __request_initialize(void *data) vc_mgr_client_set_client_state(g_vc_m, VC_STATE_READY); vc_state_changed_cb changed_callback = NULL; - void* user_data = NULL; + user_data = NULL; vc_mgr_client_get_state_changed_cb(g_vc_m, &changed_callback, &user_data); vc_state_e current_state; diff --git a/server/vcd_server.c b/server/vcd_server.c index 81cbd50..faf41e5 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -1673,16 +1673,6 @@ int vcd_server_get_foreground() return pid; } -static Eina_Bool __vcd_send_service_state(void *data) -{ - vcd_config_set_service_state(VCD_STATE_READY); - vcdc_send_service_state(VCD_STATE_READY); - - SLOG(LOG_INFO, TAG_VCD, "[Server Success] success to send service status for READY"); - - return EINA_FALSE; -} - /* * API for manager */ @@ -1707,8 +1697,6 @@ int vcd_server_mgr_initialize(int pid, vcd_audio_streaming_mode_e mode) 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); return VCD_ERROR_NONE; -- 2.7.4 From 94c46f76d577b416f2351b093e4a26047f45aed7 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Tue, 8 Feb 2022 14:24:43 +0900 Subject: [PATCH 15/16] Fix defects from static analysis tool Change-Id: I9cb797a9f2ab1ade83b2e752359fe906ede6c5f5 --- common/vc_cmd_db.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/vc_cmd_db.c b/common/vc_cmd_db.c index c5004ef..92df706 100644 --- a/common/vc_cmd_db.c +++ b/common/vc_cmd_db.c @@ -1498,8 +1498,9 @@ int __vc_db_open_db_for_daemon(char** path, sqlite3** db_handle) struct stat stat; int ret = db_util_open(*path, db_handle, DB_UTIL_REGISTER_HOOK_METHOD); if (ret != SQLITE_OK) { - SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to open db, path = %s, ret %d: %s", *path, ret, sqlite3_errmsg(*db_handle)); + SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to open db, path = %s, ret(%d)", *path, ret); if (*db_handle) { + SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Error msg (%s)", sqlite3_errmsg(*db_handle)); db_util_close(*db_handle); *db_handle = NULL; } @@ -1760,8 +1761,9 @@ int __vc_db_open_db(char** path, sqlite3** db_handle) { int ret = db_util_open(*path, db_handle, DB_UTIL_REGISTER_HOOK_METHOD); if (ret != SQLITE_OK) { - SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to open db for daemon, path = %s, ret %d: %s", *path, ret, sqlite3_errmsg(*db_handle)); + SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Fail to open db for daemon, path = %s, ret(%d)", *path, ret); if (*db_handle) { + SLOG(LOG_ERROR, vc_db_tag(), "[ERROR] Error msg (%s)", sqlite3_errmsg(*db_handle)); db_util_close(*db_handle); *db_handle = NULL; } -- 2.7.4 From 04a6827ff78dc29bb196df46f7d1fdf706697566 Mon Sep 17 00:00:00 2001 From: "wn.jang" Date: Tue, 8 Feb 2022 14:56:05 +0900 Subject: [PATCH 16/16] Update version to 1.70.2 Change-Id: I6a3f5cd4bf2065da5f832aad153ebf4eb5a7b247 --- CMakeLists.txt | 2 +- packaging/voice-control.spec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c57109..def351d 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.70.1) +SET(VERSION 1.70.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 3a6a5f2..714e679 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.70.1 +Version: 1.70.2 Release: 1 Group: Graphics & UI Framework/Voice Framework License: Apache-2.0 -- 2.7.4