add NLG result callback 82/128482/1
authorWonnam Jang <wn.jang@samsung.com>
Wed, 10 May 2017 07:29:44 +0000 (16:29 +0900)
committerWonnam Jang <wn.jang@samsung.com>
Wed, 10 May 2017 07:29:44 +0000 (16:29 +0900)
Change-Id: I3248d4bb092007f78c9916bf2e7b33763f9b202a

client/vc_mgr.c
client/vc_mgr_dbus.c
include/voice_control_plugin_engine.h
server/vcd_dbus.c
server/vcd_engine_agent.c
server/vcd_engine_agent.h
server/vcd_server.c [changed mode: 0755->0644]

index cad7905..c626f34 100644 (file)
@@ -2728,7 +2728,7 @@ int __vc_mgr_cb_dialog(int pid, const char* disp_text, const char* utt_text, boo
                vc_mgr_client_use_callback(g_vc_m);
                callback(pid, disp_text, utt_text, continuous, user_data);
                vc_mgr_client_not_use_callback(g_vc_m);
-               SLOG(LOG_DEBUG, TAG_VCM, "Dialog callback is called");
+               SLOG(LOG_DEBUG, TAG_VCM, "Dialog callback is called, disp_text(%s), utt)text(%s), continous(%d)", disp_text, utt_text, continuous);
        } else {
                SLOG(LOG_WARN, TAG_VCM, "[WARNING] Error callback is null");
        }
index 3087a04..06175e3 100644 (file)
@@ -245,6 +245,11 @@ static Eina_Bool vc_mgr_listener_event_callback(void* data, Ecore_Fd_Handler *fd
                                                DBUS_TYPE_INT32, &tmp_continue,
                                                DBUS_TYPE_INVALID);
 
+                       if (!strcmp(disp_text, "#NULL"))
+                               disp_text = NULL;
+                       if (!strcmp(utt_text, "#NULL"))
+                               utt_text = NULL;
+
                        __vc_mgr_cb_dialog(pid, disp_text, utt_text, (bool)tmp_continue);
 
                        SLOG(LOG_DEBUG, TAG_VCM, "=====");
index 04a1cf0..82ce330 100644 (file)
@@ -182,6 +182,14 @@ typedef void (*vcpe_result_cb)(vcp_result_event_e event, int* result_id, int cou
 typedef void (*vcpe_asr_result_cb)(vcp_asr_result_event_e event, const char* asr_result, void *user_data);
 
 /**
+* @brief Called when the daemon gets nlg result.
+*
+* @param[in] nlg_result Nlg result
+* @param[in] user_data The user data passed from the start
+*/
+typedef void (*vcpe_nlg_result_cb)(const char* nlg_result, void *user_data);
+
+/**
 * @brief Called when the daemon gets error.
 *
 * @param[in] error Error type
@@ -260,6 +268,17 @@ typedef int (*vcpe_set_result_cb)(vcpe_result_cb callback, void* user_data);
 */
 typedef int (*vcpe_set_asr_result_cb)(vcpe_asr_result_cb callback, void* user_data);
 
+/**
+* @brief Registers a callback function for getting nlg result.
+*
+* @param[in] callback Callback function to register
+* @param[in] user_data The user data to be passed to the callback function
+*
+* @return 0 on success, otherwise a negative error value
+*
+*/
+typedef int (*vcpe_set_nlg_result_cb)(vcpe_nlg_result_cb, void* user_data);
+
 #if 0
 /**
 * @brief Registers a callback function for getting partial recognition result.
@@ -648,6 +667,7 @@ typedef struct {
 
        //vcpe_set_pre_result_cb                set_pre_result_cb;      /**< Set pre result callback */
        vcpe_set_asr_result_cb          set_asr_result_cb;      /**< Set asr result callback */
+       vcpe_set_nlg_result_cb          set_nlg_result_cb;      /**< Set nlg result callback */
        vcpe_set_error_cb               set_error_cb;           /**< Set error callback */
        vcpe_set_domain                 set_domain;             /**< Set domain */
        vcpe_get_nlu_base_info          get_nlu_base_info;      /**< Get essential info */
index 05a66a1..75a8c63 100644 (file)
@@ -613,6 +613,11 @@ int vcdc_send_dialog(int manger_pid, int pid, const char* disp_text, const char*
 
        SLOG(LOG_DEBUG, TAG_VCD, "[Dbus] send dialog : pid(%d), disp_text(%s), utt_text(%s), continue(%d)", pid, disp_text, utt_text, continuous);
 
+       if (NULL == disp_text)
+               disp_text = strdup("#NULL");
+       if (NULL == utt_text)
+               utt_text = strdup("#NULL");
+
        dbus_message_append_args(msg,
                                DBUS_TYPE_INT32, &pid,
                                DBUS_TYPE_STRING, &disp_text,
index 1e52a70..1e457b5 100644 (file)
@@ -73,6 +73,7 @@ static char* g_default_lang;
 static result_callback g_result_cb = NULL;
 
 static asr_result_callback g_asr_result_cb = NULL;
+static nlg_result_callback g_nlg_result_cb = NULL;
 
 #if 0
 static pre_result_callback g_pre_result_cb = NULL;
@@ -111,7 +112,7 @@ int __log_enginelist();
 * VCS Engine Agent Interfaces
 */
 //int vcd_engine_agent_init(pre_result_callback pre_result_cb, result_callback result_cb, nlu_result_callback nlu_result_cb, error_callback error_cb)
-int vcd_engine_agent_init(asr_result_callback asr_result_cb, result_callback result_cb, error_callback error_cb)
+int vcd_engine_agent_init(asr_result_callback asr_result_cb, result_callback result_cb, nlg_result_callback nlg_result_cb, error_callback error_cb)
 {
        if (/*NULL == pre_result_cb*/ NULL == asr_result_cb || NULL == result_cb /*|| NULL == nlu_result_cb*/ || NULL == error_cb) {
                SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Input parameter is NULL");
@@ -134,6 +135,7 @@ int vcd_engine_agent_init(asr_result_callback asr_result_cb, result_callback res
 
        //g_pre_result_cb = pre_result_cb;
        g_asr_result_cb = asr_result_cb;
+       g_nlg_result_cb = nlg_result_cb;
        g_result_cb = result_cb;
        //g_nlu_result_cb = nlu_result_cb;
        g_error_cb = error_cb;
@@ -209,6 +211,7 @@ int vcd_engine_agent_release()
 
        //g_pre_result_cb = NULL;
        g_asr_result_cb = NULL;
+       g_nlg_result_cb = NULL;
        g_result_cb = NULL;
        //g_nlu_result_cb = NULL;
        g_error_cb = NULL;
@@ -553,6 +556,19 @@ void __asr_result_cb(vcp_asr_result_event_e event, const char* asr_result, void
        return;
 }
 
+void __nlg_result_cb(const char* nlg_result, void *user_data)
+{
+       SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] NLG result -  Result(%s)", nlg_result);
+
+       if (NULL != g_nlg_result_cb) {
+               g_nlg_result_cb(nlg_result, user_data);
+       } else {
+               SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent ERROR] NLG result callback function is NOT valid");
+       }
+
+       return;
+}
+
 void __error_cb(vcp_error_e error, const char* msg, void *user_data)
 {
        SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent] ERROR(%d)", error);
@@ -616,7 +632,7 @@ int __load_engine(vcengine_s* engine)
                return VCD_ERROR_OPERATION_FAILED;
        }
 
-       SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] engine info : version(%d), size(%d)", engine->pefuncs->version, engine->pefuncs->size);
+       SLOG(LOG_DEBUG, TAG_VCD, "[Engine Agent] engine info : version(%d), size(%d)(%d)", engine->pefuncs->version, engine->pefuncs->size, sizeof(vcpe_funcs_s));
 
        /* engine error check */
        if (engine->pefuncs->size != sizeof(vcpe_funcs_s)) {
@@ -639,6 +655,7 @@ int __load_engine(vcengine_s* engine)
                NULL == engine->pefuncs->stop ||
                NULL == engine->pefuncs->cancel ||
                NULL == engine->pefuncs->set_asr_result_cb ||
+               NULL == engine->pefuncs->set_nlg_result_cb ||
                //NULL == engine->pefuncs->set_pre_result_cb ||
                NULL == engine->pefuncs->set_error_cb ||
                NULL == engine->pefuncs->set_domain ||
@@ -669,6 +686,11 @@ int __load_engine(vcengine_s* engine)
                return VCD_ERROR_OPERATION_FAILED;
        }
 
+       if (0 != engine->pefuncs->set_nlg_result_cb(__nlg_result_cb, NULL)) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set nlg result callback of vc-engine");
+               return VCD_ERROR_OPERATION_FAILED;
+       }
+
        if (0 != engine->pefuncs->set_error_cb(__error_cb, NULL)) {
                SLOG(LOG_ERROR, TAG_VCD, "[Engine Agent ERROR] Fail to set error callback of vc-engine");
                return VCD_ERROR_OPERATION_FAILED;
index 8e50ff9..4b4a21e 100644 (file)
@@ -36,6 +36,8 @@ typedef void (*result_callback)(vcp_result_event_e event, int* result_id, int co
 
 typedef void (*asr_result_callback)(vcp_asr_result_event_e event, const char* asr_result, void *user_data);
 
+typedef void (*nlg_result_callback)(const char* nlg_result, void *user_data);
+
 #if 0
 typedef void (*pre_result_callback)(vcp_pre_result_event_e event, const char* pre_result, void *user_data);
 
@@ -50,7 +52,7 @@ typedef void (*silence_dectection_callback)(void *user_data);
 
 /** Init engine agent */
 //int vcd_engine_agent_init(pre_result_callback pre_result_cb, result_callback result_cb, nlu_result_callback nlu_result_cb, error_callback error_cb);
-int vcd_engine_agent_init(asr_result_callback asr_result_cb, result_callback result_cb, error_callback error_cb);
+int vcd_engine_agent_init(asr_result_callback asr_result_cb, result_callback result_cb, nlg_result_callback nlg_result_cb, error_callback error_cb);
 
 /** Release engine agent */
 int vcd_engine_agent_release();
old mode 100755 (executable)
new mode 100644 (file)
index aff998d..79bb719
@@ -51,6 +51,8 @@ typedef enum {
        VCD_SEND_EVENT_TYPE_HAPTIC_EVENT        /**< send haptic event to vc engine */
 } vcd_send_event_type_e;
 
+static int __vcd_server_launch_manager_app();
+
 /*
 * VC Server Internal Functions
 */
@@ -440,6 +442,20 @@ static void __vcd_server_asr_result_cb(vcp_asr_result_event_e event, const char*
        return;
 }
 
+static void __vcd_server_nlg_result_cb(const char* nlg_result, void *user_data)
+{
+       int ret = __vcd_server_launch_manager_app();
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send dialog : mgr_pid(%d), nlg_result(%s)", vcd_client_manager_get_pid(), nlg_result);
+               return;
+       }
+
+       ret = vcdc_send_dialog(vcd_client_manager_get_pid(), -1, nlg_result, NULL, 0); //0: VC_DIALOG_END
+       if (0 != ret)
+               SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to send dialog : mgr_pid(%d), nlg_result(%s)", vcd_client_manager_get_pid(), nlg_result);
+       return;
+}
+
 static void* __recorder_stop(void *data)
 {
        vcd_recorder_stop();
@@ -972,7 +988,7 @@ int vcd_initialize()
        vcd_config_set_service_state(VCD_STATE_NONE);
 
        //ret = vcd_engine_agent_init(__vcd_server_pre_result_cb, __vcd_server_result_cb, __vcd_server_nlu_result_cb, __vcd_server_error_cb);
-       ret = vcd_engine_agent_init(__vcd_server_asr_result_cb, __vcd_server_result_cb, __vcd_server_error_cb);
+       ret = vcd_engine_agent_init(__vcd_server_asr_result_cb, __vcd_server_result_cb, __vcd_server_nlg_result_cb, __vcd_server_error_cb);
        if (0 != ret) {
                SLOG(LOG_ERROR, TAG_VCD, "[Server ERROR] Fail to engine agent initialize : result(%d)", ret);
                return ret;