Add updating logic 55/190255/1
authorWonnam Jang <wn.jang@samsung.com>
Fri, 28 Sep 2018 12:01:21 +0000 (21:01 +0900)
committerWonnam Jang <wn.jang@samsung.com>
Fri, 28 Sep 2018 12:01:21 +0000 (21:01 +0900)
Change-Id: Ic01f22d43e21c4f1f534492a5d24ae051f7331e3
Signed-off-by: Wonnam Jang <wn.jang@samsung.com>
client/vc_mgr.c
include/vce.h
include/vce_internal.h
include/voice_control_common.h
include/voice_control_internal.h
include/voice_control_manager_internal.h
server/vcd_main.h
server/vcd_server.c
server/vcd_server.h
server/vce.c

index a1e4ea0..d97a038 100644 (file)
@@ -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)",
index af6f5ce..b73fabd 100644 (file)
@@ -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
index c7439bb..19c51f6 100644 (file)
@@ -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
 }
index 5ae1ffa..4bf4ba1 100644 (file)
@@ -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;
 
 
index dc26186..8bc1961 100644 (file)
@@ -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.
 *
index 4b58230..91778b2 100644 (file)
@@ -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.
  *
index 46b9fd8..782f501 100644 (file)
@@ -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 {
index 8de4a88..3839763 100644 (file)
@@ -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");
index d6270f1..739e6ec 100644 (file)
@@ -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);
index cfc93a8..cc9f73f 100644 (file)
@@ -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()) {