Fixed function call to dlopen 47/191447/6
authorsungrae jo <seongrae.jo@samsung.com>
Wed, 17 Oct 2018 07:48:50 +0000 (16:48 +0900)
committersungrae jo <seongrae.jo@samsung.com>
Wed, 24 Oct 2018 09:49:50 +0000 (18:49 +0900)
Change-Id: I053f9554d066a579f27b60a9d06cd90d70a8df6a
Signed-off-by: sungrae jo <seongrae.jo@samsung.com>
CMakeLists.txt
inc/multi_assistant_main.h
inc/multi_wakeup_recognizer.h
packaging/org.tizen.multi-assistant-service.spec
src/multi_assistant_service_plugin.c

index 7c750024dfebdb5bb3850ddc603950a8b35a9cd1..fb7bbc7e067e4f4da697813cd47a073eff4d14ca 100644 (file)
@@ -83,8 +83,8 @@ EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
 
 # Install libraries
 IF("${ARCH}" MATCHES "^arm.*")
-TARGET_LINK_LIBRARIES(${BINNAME} -Llib/armv7l -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libmulti-wakeup-recognizer.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
+TARGET_LINK_LIBRARIES(${BINNAME} -Llib/armv7l -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer -ldl ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libmulti-wakeup-recognizer.so DESTINATION ${TZ_SYS_RO_SHARE}/multiassistant/ma/1.0/engine/ COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libopus.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libboost_iostreams.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libn66asrdll.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
@@ -92,8 +92,8 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libspeex.so DESTINATION ${PREFIX}/l
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libvoiceactivity.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/armv7l/libvoice-transport.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 ELSEIF("${ARCH}" MATCHES "^i586.*")
-TARGET_LINK_LIBRARIES(${BINNAME} -Llib/i586 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libmulti-wakeup-recognizer.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
+TARGET_LINK_LIBRARIES(${BINNAME} -Llib/i586 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer -ldl ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libmulti-wakeup-recognizer.so DESTINATION ${TZ_SYS_RO_SHARE}/multiassistant/ma/1.0/engine/ COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libopus.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libboost_iostreams.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libn66asrdll.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
@@ -101,8 +101,8 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libspeex.so DESTINATION ${PREFIX}/lib
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libvoiceactivity.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libvoice-transport.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 ELSEIF("${ARCH}" MATCHES "^i686.*")
-TARGET_LINK_LIBRARIES(${BINNAME} -Llib/i586 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libmulti-wakeup-recognizer.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
+TARGET_LINK_LIBRARIES(${BINNAME} -Llib/i586 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer -ldl ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libmulti-wakeup-recognizer.so DESTINATION ${TZ_SYS_RO_SHARE}/multiassistant/ma/1.0/engine/ COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libopus.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libboost_iostreams.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libn66asrdll.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
@@ -110,8 +110,8 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libspeex.so DESTINATION ${PREFIX}/lib
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libvoiceactivity.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/i586/libvoice-transport.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 ELSEIF("${ARCH}" MATCHES "^aarch64.*")
-TARGET_LINK_LIBRARIES(${BINNAME} -Llib/aarch64 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libmulti-wakeup-recognizer.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
+TARGET_LINK_LIBRARIES(${BINNAME} -Llib/aarch64 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer -ldl ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libmulti-wakeup-recognizer.so DESTINATION ${TZ_SYS_RO_SHARE}/multiassistant/ma/1.0/engine/ COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libopus.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libboost_iostreams.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libn66asrdll.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
@@ -120,7 +120,7 @@ INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libvoiceactivity.so DESTINATION ${
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/aarch64/libvoice-transport.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 ELSEIF("${ARCH}" MATCHES "^x86_64.*")
 TARGET_LINK_LIBRARIES(${BINNAME} -Llib/x86_64 -lopus -lboost_iostreams -ln66asrdll -lspeex -lvoiceactivity -lvoice-transport -lmulti-wakeup-recognizer ${pkgs_LDFLAGS} ${EXTRA_LDFLAGS})
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/x86_64/libmulti-wakeup-recognizer.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/x86_64/libmulti-wakeup-recognizer.so DESTINATION ${TZ_SYS_RO_SHARE}/multiassistant/ma/1.0/engine/ COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/x86_64/libopus.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/x86_64/libboost_iostreams.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/lib/x86_64/libn66asrdll.so DESTINATION ${PREFIX}/lib COMPONENT RuntimeLibraries)
index 7ba7fcb8ebd6a36611b962944ab86486668a7e03..7d3237b348128a84e85a7d68578d0f5d767498f9 100644 (file)
 #define MAS_UI_METHOD_CHANGE_ASSISTANT                 "mas_ui_method_change_assistant"
 #define MAS_UI_METHOD_ERROR                                            "mas_ui_method_error"
 
+/**************************************************************************************
+ *** Definitions for configuration
+ *************************************************************************************/
+#define MA_DEFAULT_ENGINE              tzplatform_mkpath(tzplatform_getid("TZ_SYS_RO_SHARE"), "multiassistant/ma/1.0/engine")
+
 
 #endif /* __MULTI_ASSISTANT_SERVICE_H__ */
index 862deb4e0bedd3b9575214cc128c1ddc1f63e936..58a6b6cd275c233c23c03ca659da95551eb3abad 100644 (file)
@@ -59,34 +59,6 @@ typedef void (*wakeup_service_speech_status_cb)(wakeup_service_speech_status_e s
 
 typedef void (*wakeup_service_error_cb)(int error, const char* err_msg, void* user_data);
 
-
-int wakeup_service_initialize(void);
-
-int wakeup_service_deinitialize(void);
-
-int wakeup_service_set_language(const char* language);
-
-int wakeup_service_set_wakeup_word(const char* language, const char* wakeup_word);
-
-int wakeup_service_start_recording(void);
-
-int wakeup_service_stop_recording(void);
-
-int wakeup_service_cancel_recording(void);
-
-int wakeup_service_request_speech_data(void);
-
-int wakeup_service_get_recording_audio_format(int *rate, int *channel, int *audio_type);
-
-int wakeup_service_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data);
-
-int wakeup_service_set_speech_streaming_callback(wakeup_service_speech_streaming_cb callback, void* user_data);
-
-int wakeup_service_set_speech_status_callback(wakeup_service_speech_status_cb callback, void* user_data);
-
-int wakeup_service_set_error_callback(wakeup_service_error_cb callback, void* user_data);
-
-
 #ifdef __cplusplus
 }
 #endif
index d3599575eb6d56a60b2153c815fce15f7d5019b3..e9c2bf4ea7ccfaf7a68e1c6e1b4c2f6a792c9a9e 100644 (file)
@@ -52,6 +52,7 @@ LDFLAGS="$LDFLAGS -Wl,-z -Wl,nodelete"
 export LDFLAGS
 cmake \
       -DCMAKE_INSTALL_PREFIX=%{_appdir} \
+      -DTZ_SYS_RO_SHARE=%TZ_SYS_RO_SHARE \
 
 make %{?jobs:-j%jobs}
 
@@ -69,6 +70,7 @@ cp LICENSE.Flora %{buildroot}%{TZ_SYS_RO_SHARE}/license/%{name}
 
 %post
 mkdir -p %{_bindir}
+mkdir -p %{_libdir}/multiassistant/ma/1.0/engine
 #/usr/bin/signing-client/hash-signer-client.sh -a -d -p platform /usr/apps/org.tizen.multi-assistant-service
 mv %{_appdir}/lib/libboost_iostreams.so %{_appdir}/lib/libboost_iostreams.so.1.58.0
 ln -s %{_appdir}/lib/libboost_iostreams.so.1.58.0 %{_appdir}/lib/libboost_iostreams.so
@@ -87,6 +89,7 @@ exit 0
 %defattr(-,root,root,-)
 /usr/share/license/*
 /usr/share/packages/org.tizen.multi-assistant-service.xml
+%{TZ_SYS_RO_SHARE}/multiassistant/ma/1.0/engine/libmulti-wakeup-recognizer.so
 %{_appdir}/author-signature.xml
 %{_appdir}/signature1.xml
 %{_appdir}/lib/*
index 1e4a7f71dd7ccf0f601589a2489858d77d7934b0..25f8104cab8313c7d415f51c2c5238a3051039de 100644 (file)
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
+#include <dlfcn.h>
 
 #include "multi_wakeup_recognizer.h"
 #include "multi_assistant_main.h"
@@ -45,6 +46,7 @@ static FILE* g_pFile = NULL;
 static int g_count = 1;
 #endif
 
+static void *g_handle = NULL;
 
 #if 0 /* + TEST_CODE */
 Eina_Bool __send_asr_result(void *data)
@@ -90,7 +92,9 @@ Eina_Bool __request_speech_data(void *data)
                MAS_LOGD("MA Client with wakeup word %s exists, requesting speech data", (wakeup_word ? wakeup_word : "NULL"));
                masc_ui_dbus_change_assistant(mas_get_client_appid_by_pid(pid));
                ma_client_set_temp_speech_data_requested(1);
-               int ret = wakeup_service_request_speech_data();
+               int (*ws_request_speech_data)(void);
+               ws_request_speech_data = (int (*)(void))dlsym(g_handle, "wakeup_service_request_speech_data");
+               int ret = ws_request_speech_data();
                if (0 != ret) {
                        MAS_LOGE("[ERROR] Fail to request speech data(%d)", ret);
                }
@@ -243,7 +247,9 @@ static void __speech_status_cb(wakeup_service_speech_status_e status, void *user
        MAS_LOGD( "[SUCCESS] __speech_status_cb is called, status(%d)", status);
 
        if (WAKEUP_SPEECH_STATUS_END_POINT_DETECTED == status) {
-               int ret = wakeup_service_stop_recording();
+               int (*ws_stop_recording)(void);
+               ws_stop_recording = (int (*)(void))dlsym(g_handle, "wakeup_service_stop_recording");
+               int ret = ws_stop_recording();
                if (0 != ret) {
                        MAS_LOGE("[ERROR] Fail to stop recording, ret(%d)", ret);
                }
@@ -254,9 +260,11 @@ static Eina_Bool __wakeup_start_recording(void* data)
 {
        MAS_LOGD( "[SUCCESS] __wakeup_start_recording is called.");
 
-       int ret;
+       (void*)data;
 
-       ret = wakeup_service_start_recording();
+       int (*ws_start_recording)(void);
+       ws_start_recording = (int (*)(void))dlsym(g_handle, "wakeup_service_start_recording");
+       int ret = ws_start_recording();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to start recording, ret(%d)", ret);
        }
@@ -267,7 +275,10 @@ static Eina_Bool __wakeup_start_recording(void* data)
 static void __error_cb(int error, const char* err_msg, void* user_data)
 {
        MAS_LOGD( "[SUCCESS] __error_cb is called, error(%d), err_msg(%d)", error, err_msg);
-       int ret = wakeup_service_cancel_recording();
+
+       int (*ws_cancel_recording)(void);
+       ws_cancel_recording = (int (*)(void))dlsym(g_handle, "wakeup_service_cancel_recording");
+       int ret = ws_cancel_recording();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to cancel recording, ret(%d)", ret);
        }
@@ -282,7 +293,19 @@ static void __error_cb(int error, const char* err_msg, void* user_data)
 
 int multi_assistant_service_plugin_initialize(void)
 {
-       int ret = wakeup_service_initialize();
+       char filepath[512] = {'\0',};
+       snprintf(filepath, 512, "%s/%s", MA_DEFAULT_ENGINE, "libmulti-wakeup-recognizer.so");
+
+       g_handle = NULL;
+       g_handle = dlopen(filepath, RTLD_LAZY);
+       if (NULL != dlerror()) {
+               MAS_LOGE("[ERROR] Fail to dlopen");
+               return -1; //MAS_ERROR_OPERATION_FAILED;
+       }
+
+       int (*ws_initialize)(void);
+       ws_initialize = (int (*)(void))dlsym(g_handle, "wakeup_service_initialize");
+       int ret = ws_initialize();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to initialize, ret(%d)", ret);
        }
@@ -300,16 +323,26 @@ int multi_assistant_service_plugin_deinitialize(void)
        }
 #endif
 
-       int ret = wakeup_service_deinitialize();
+       int (*ws_deinitialize)(void);
+       ws_deinitialize = (int (*)(void))dlsym(g_handle, "wakeup_service_deinitialize");
+       int ret = ws_deinitialize();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to deinitialize, ret(%d)", ret);
        }
+
+       if (g_handle) {
+               dlclose(g_handle);
+               g_handle = NULL;
+       }
+
        return ret;
 }
 
 int multi_assistant_service_plugin_set_language(const char* language)
 {
-       int ret = wakeup_service_set_language(language);
+       int (*ws_set_language)(const char* language);
+       ws_set_language = (int (*)(const char* language))dlsym(g_handle, "wakeup_service_set_language");
+       int ret = ws_set_language(language);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to set langauge(%s), ret(%d)", language, ret);
        }
@@ -318,7 +351,9 @@ int multi_assistant_service_plugin_set_language(const char* language)
 
 int multi_assistant_service_plugin_set_wakeup_word(const char* language, const char* wakeup_word)
 {
-       int ret = wakeup_service_set_wakeup_word(language, wakeup_word);
+       int (*ws_set_wakeup_word)(const char* language, const char* wakeup_word);
+       ws_set_wakeup_word = (int (*)(const char* language, const char* wakeup_word))dlsym(g_handle, "wakeup_service_set_wakeup_word");
+       int ret = ws_set_wakeup_word(language, wakeup_word);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to set wakeup word(%s)(%s), ret(%d)", language, wakeup_word, ret);
        }
@@ -327,7 +362,9 @@ int multi_assistant_service_plugin_set_wakeup_word(const char* language, const c
 
 int multi_assistant_service_plugin_start_recording(void)
 {
-       int ret = wakeup_service_start_recording();
+       int (*ws_start_recording)(void);
+       ws_start_recording = (int (*)(void))dlsym(g_handle, "wakeup_service_start_recording");
+       int ret = ws_start_recording();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to start recording, ret(%d)", ret);
        }
@@ -336,7 +373,9 @@ int multi_assistant_service_plugin_start_recording(void)
 
 int multi_assistant_service_plugin_stop_recording(void)
 {
-       int ret = wakeup_service_stop_recording();
+       int (*ws_stop_recording)(void);
+       ws_stop_recording = (int (*)(void))dlsym(g_handle, "wakeup_service_stop_recording");
+       int ret = ws_stop_recording();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to stop recording, ret(%d)", ret);
        }
@@ -345,7 +384,9 @@ int multi_assistant_service_plugin_stop_recording(void)
 
 int multi_assistant_service_plugin_cancel_recording(void)
 {
-       int ret = wakeup_service_cancel_recording();
+       int (*ws_cancel_recording)(void);
+       ws_cancel_recording = (int (*)(void))dlsym(g_handle, "wakeup_service_cancel_recording");
+       int ret = ws_cancel_recording();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to cancel recording, ret(%d)", ret);
        }
@@ -354,7 +395,9 @@ int multi_assistant_service_plugin_cancel_recording(void)
 
 int multi_assistant_service_plugin_request_speech_data(void)
 {
-       int ret = wakeup_service_request_speech_data();
+       int (*ws_request_speech_data)(void);
+       ws_request_speech_data = (int (*)(void))dlsym(g_handle, "wakeup_service_request_speech_data");
+       int ret = ws_request_speech_data();
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to request speech data, ret(%d)", ret);
        }
@@ -391,7 +434,9 @@ int multi_assistant_service_plugin_set_callbacks(void)
 
 int multi_assistant_service_plugin_get_recording_audio_format(int *rate, int *channel, int *audio_type)
 {
-       int ret = wakeup_service_get_recording_audio_format(rate, channel, audio_type);
+       int (*ws_get_recording_audio_format)(int *rate, int *channel, int *audio_type);
+       ws_get_recording_audio_format = (int (*)(int *rate, int *channel, int *audio_type))dlsym(g_handle, "wakeup_service_get_recording_audio_format");
+       int ret = ws_get_recording_audio_format(rate, channel, audio_type);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to get recording audio format, ret(%d)", ret);
        }
@@ -400,7 +445,9 @@ int multi_assistant_service_plugin_get_recording_audio_format(int *rate, int *ch
 
 int multi_assistant_service_plugin_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data)
 {
-       int ret = wakeup_service_set_wakeup_event_callback(callback, user_data);
+       int (*ws_set_wakeup_event_callback)(wakeup_service_wakeup_event_cb callback, void* user_data);
+       ws_set_wakeup_event_callback = (int (*)(wakeup_service_wakeup_event_cb callback, void* user_data))dlsym(g_handle, "wakeup_service_set_wakeup_event_callback");
+       int ret = ws_set_wakeup_event_callback(callback, user_data);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to set wakeup event callback, ret(%d)", ret);
        }
@@ -409,7 +456,9 @@ int multi_assistant_service_plugin_set_wakeup_event_callback(wakeup_service_wake
 
 int multi_assistant_service_plugin_set_speech_streaming_callback(wakeup_service_speech_streaming_cb callback, void* user_data)
 {
-       int ret = wakeup_service_set_speech_streaming_callback(callback, user_data);
+       int (*ws_set_speech_streaming_callback)(wakeup_service_speech_streaming_cb callback, void* user_data);
+       ws_set_speech_streaming_callback = (int (*)(wakeup_service_speech_streaming_cb callback, void* user_data))dlsym(g_handle, "wakeup_service_set_speech_streaming_callback");
+       int ret = ws_set_speech_streaming_callback(callback, user_data);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to speech streaming callback, ret(%d)", ret);
        }
@@ -418,7 +467,9 @@ int multi_assistant_service_plugin_set_speech_streaming_callback(wakeup_service_
 
 int multi_assistant_service_plugin_set_speech_status_callback(wakeup_service_speech_status_cb callback, void* user_data)
 {
-       int ret = wakeup_service_set_speech_status_callback(callback, user_data);
+       int (*ws_set_speech_status_callback)(wakeup_service_speech_status_cb callback, void* user_data);
+       ws_set_speech_status_callback = (int (*)(wakeup_service_speech_status_cb callback, void* user_data))dlsym(g_handle, "wakeup_service_set_speech_status_callback");
+       int ret = ws_set_speech_status_callback(callback, user_data);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to set speech status callback, ret(%d)", ret);
        }
@@ -427,7 +478,9 @@ int multi_assistant_service_plugin_set_speech_status_callback(wakeup_service_spe
 
 int multi_assistant_service_plugin_set_error_callback(wakeup_service_error_cb callback, void* user_data)
 {
-       int ret = wakeup_service_set_error_callback(callback, user_data);
+       int (*ws_set_error_callback)(wakeup_service_error_cb callback, void* user_data);
+       ws_set_error_callback = (int (*)(wakeup_service_error_cb callback, void* user_data))dlsym(g_handle, "wakeup_service_set_error_callback");
+       int ret = ws_set_error_callback(callback, user_data);
        if (0 != ret) {
                MAS_LOGE("[ERROR] Fail to set error callback, ret(%d)", ret);
        }