From 49344121d2107f17dab64d78cbb33b60a5945e02 Mon Sep 17 00:00:00 2001 From: Wonnam Jang Date: Fri, 28 Sep 2018 21:01:21 +0900 Subject: [PATCH] Add updating logic Change-Id: Ic01f22d43e21c4f1f534492a5d24ae051f7331e3 Signed-off-by: Wonnam Jang --- client/vc_mgr.c | 11 +++++++++++ include/vce.h | 1 - include/vce_internal.h | 12 ++++++++++++ include/voice_control_common.h | 2 +- include/voice_control_internal.h | 1 + include/voice_control_manager_internal.h | 2 ++ server/vcd_main.h | 3 ++- server/vcd_server.c | 28 ++++++++++++++++++++++++++++ server/vcd_server.h | 3 +++ server/vce.c | 28 ++++++++++++++++++++++++++++ 10 files changed, 88 insertions(+), 3 deletions(-) diff --git a/client/vc_mgr.c b/client/vc_mgr.c index a1e4ea0..d97a038 100644 --- a/client/vc_mgr.c +++ b/client/vc_mgr.c @@ -2917,6 +2917,13 @@ int __vc_mgr_cb_error(int reason, int daemon_pid, char* msg) if (VC_ERROR_SERVICE_RESET == reason) { SLOG(LOG_ERROR, TAG_VCM, "[ERROR] VC daemon reset"); + vc_service_state_e service_state = -1; + vc_mgr_client_get_service_state(g_vc_m, &service_state); + if (service_state != VC_SERVICE_STATE_UPDATING) { + SLOG(LOG_INFO, TAG_VCM, "[INFO] VC daemon is terminated by update manager"); + return 0; + } + vc_mgr_client_set_client_state(g_vc_m, VC_STATE_INITIALIZED); __vc_mgr_notify_state_changed(g_vc_m); @@ -3035,6 +3042,10 @@ int __vc_mgr_cb_service_state(int state) SLOG(LOG_DEBUG, TAG_VCM, "Internal state is changed to NONE"); vc_mgr_client_set_internal_state(g_vc_m, VC_INTERNAL_STATE_NONE); } + if (VC_SERVICE_STATE_UPDATING == current_state) { + SLOG(LOG_DEBUG, TAG_VCM, "Internal state is changed to NONE by updating"); + vc_mgr_client_set_internal_state(g_vc_m, VC_INTERNAL_STATE_NONE); + } if (current_state == before_state) { SLOG(LOG_WARN, TAG_VCM, "Service State NOT changed : Before(%d) Current(%d)", diff --git a/include/vce.h b/include/vce.h index af6f5ce..b73fabd 100644 --- a/include/vce.h +++ b/include/vce.h @@ -121,7 +121,6 @@ typedef enum { VCE_FEEDBACK_EVENT_FINISH = 3 /**< Finish event */ } vce_feedback_event_e; - /** * @brief A structure of handle for VC command. * @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif diff --git a/include/vce_internal.h b/include/vce_internal.h index c7439bb..19c51f6 100644 --- a/include/vce_internal.h +++ b/include/vce_internal.h @@ -41,6 +41,18 @@ typedef struct { void* get_tts_audio_format_user_data; } vce_internal_request_callback_s; +/** + * @brief Enumeration for TTS feedback events. + * @since_tizen 5.0 + */ +typedef enum { + VCE_UPDATE_EVENT_FAIL = -1, /**< Failed */ + VCE_UPDATE_EVENT_START = 1, /**< Start event */ + VCE_UPDATE_EVENT_FINISH = 2 /**< Finish event */ +} vce_update_event_e; + +int vce_send_update_status(vce_update_event_e update_event, const char* msg); + #ifdef __cplusplus } diff --git a/include/voice_control_common.h b/include/voice_control_common.h index 5ae1ffa..4bf4ba1 100644 --- a/include/voice_control_common.h +++ b/include/voice_control_common.h @@ -79,7 +79,7 @@ typedef enum { VC_SERVICE_STATE_NONE = 0, /**< 'None' state */ VC_SERVICE_STATE_READY = 1, /**< 'Ready' state */ VC_SERVICE_STATE_RECORDING = 2, /**< 'Recording' state */ - VC_SERVICE_STATE_PROCESSING = 3 /**< 'Processing' state */ + VC_SERVICE_STATE_PROCESSING = 3 /**< 'Processing' state */ } vc_service_state_e; diff --git a/include/voice_control_internal.h b/include/voice_control_internal.h index dc26186..8bc1961 100644 --- a/include/voice_control_internal.h +++ b/include/voice_control_internal.h @@ -40,6 +40,7 @@ typedef enum { VC_TTS_UTTERANCE_CANCELED = 3 } vc_tts_utterance_status_e; + /** * @brief Called when client gets the asr recognition result from vc-daemon. * diff --git a/include/voice_control_manager_internal.h b/include/voice_control_manager_internal.h index 4b58230..91778b2 100644 --- a/include/voice_control_manager_internal.h +++ b/include/voice_control_manager_internal.h @@ -40,6 +40,8 @@ typedef enum { VC_AUDIO_STREAMING_MODE_OUTSIDE = 2, /**< Use audio streaming from outside */ } vc_audio_streaming_mode_e; +#define VC_SERVICE_STATE_UPDATING 4 /**< 'Updating' state */ + /** * @brief Sets demandable client list. * diff --git a/server/vcd_main.h b/server/vcd_main.h index 46b9fd8..782f501 100644 --- a/server/vcd_main.h +++ b/server/vcd_main.h @@ -71,7 +71,8 @@ typedef enum { VCD_STATE_NONE = 0, VCD_STATE_READY = 1, VCD_STATE_RECORDING = 2, - VCD_STATE_PROCESSING = 3 + VCD_STATE_PROCESSING = 3, + VCD_STATE_UPDATING = 4 } vcd_state_e; typedef enum { diff --git a/server/vcd_server.c b/server/vcd_server.c index 8de4a88..3839763 100644 --- a/server/vcd_server.c +++ b/server/vcd_server.c @@ -30,6 +30,7 @@ #include "vcd_config.h" #include "vcd_recorder.h" #include "vcd_dbus.h" +#include "vce_internal.h" #include "voice_control_command_expand.h" #include "voice_control_common.h" @@ -3074,6 +3075,33 @@ int vcd_stop_recording() return ret; } +int vcd_send_update_status(vce_update_event_e update_event, const char* msg) +{ + SLOG(LOG_DEBUG, TAG_VCD, "[Server] update status, update event(%d), msg(%s)", update_event, msg); + + int ret = 0; + if (VCE_UPDATE_EVENT_START == update_event) { + if (VCD_STATE_RECORDING == vcd_config_get_service_state() || VCD_STATE_PROCESSING == vcd_config_get_service_state()) { + ret = vcd_server_mgr_cancel(); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[Server Error] Fail to cancel, ret(%d)", ret); + return ret; + } + } + vcd_config_set_service_state(VCD_STATE_UPDATING); + vcdc_send_service_state(VCD_STATE_UPDATING); + + } else if (VCE_UPDATE_EVENT_FINISH == update_event) { + vcd_config_set_service_state(VCD_STATE_READY); + vcdc_send_service_state(VCD_STATE_READY); + + } else if (VCE_UPDATE_EVENT_FAIL == update_event) { + SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Update event : Fail - msg(%s)", msg); + } + + return 0; +} + int vcd_set_private_data_set_cb(vce_private_data_set_cb callback_func) { SLOG(LOG_DEBUG, TAG_VCD, "[Server] Set private data set cb"); diff --git a/server/vcd_server.h b/server/vcd_server.h index d6270f1..739e6ec 100644 --- a/server/vcd_server.h +++ b/server/vcd_server.h @@ -22,6 +22,7 @@ #include "vcd_client_data.h" #include "vce.h" +#include "vce_internal.h" #ifdef __cplusplus extern "C" { @@ -172,6 +173,8 @@ int vcd_start_recording(); int vcd_stop_recording(); +int vcd_send_update_status(vce_update_event_e update_event, const char* msg); + int vcd_set_private_data_set_cb(vce_private_data_set_cb callback_func); int vcd_set_private_data_requested_cb(vce_private_data_requested_cb callback_func); diff --git a/server/vce.c b/server/vce.c index cfc93a8..cc9f73f 100644 --- a/server/vce.c +++ b/server/vce.c @@ -372,6 +372,17 @@ int vce_set_private_data(const char* key, const char* data) return VCE_ERROR_INVALID_PARAMETER; } + if (!strncmp(key, "UpdateEventStart", strlen(key))) + ret = vce_send_update_status(VCE_UPDATE_EVENT_START, NULL); + else if (!strncmp(data, "UpdateEventComplete", strlen(key))) + ret = vce_send_update_status(VCE_UPDATE_EVENT_FINISH, NULL); + else if (!strncmp(data, "UpdateEventFail", strlen(key))) + ret = vce_send_update_status(VCE_UPDATE_EVENT_FAIL, data); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send update status, event(%s), msg(%s): ret(%d)", key, data, ret); + return ret; + } + ret = vcd_set_private_data(key, data); if (0 != ret) { SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to set private data to vc manager"); @@ -442,6 +453,23 @@ int vce_stop_recording() return ret; } +int vce_send_update_status(vce_update_event_e update_event, const char* msg) +{ + if (0 != __vce_get_feature_enabled()) { + return VCE_ERROR_NOT_SUPPORTED; + } + if (0 != __vce_check_privilege()) { + return VCE_ERROR_PERMISSION_DENIED; + } + + int ret = vcd_send_update_status(update_event, msg); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_VCD, "[ERROR] Fail to send update status"); + } + + return ret; +} + int vce_set_private_data_set_cb(vce_private_data_set_cb callback_func) { if (0 != __vce_get_feature_enabled()) { -- 2.7.4