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);
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)",
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
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
}
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;
VC_TTS_UTTERANCE_CANCELED = 3
} vc_tts_utterance_status_e;
+
/**
* @brief Called when client gets the asr recognition result from vc-daemon.
*
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.
*
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 {
#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"
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");
#include "vcd_client_data.h"
#include "vce.h"
+#include "vce_internal.h"
#ifdef __cplusplus
extern "C" {
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);
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");
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()) {