Add version information interface for wakeup engines
authorJi-hoon Lee <dalton.lee@samsung.com>
Fri, 23 Aug 2019 07:33:01 +0000 (16:33 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Fri, 23 Aug 2019 07:33:49 +0000 (16:33 +0900)
Change-Id: I4b53dff321db4190aea8921b1a8fd8033f5e255b

plugins/wakeup-manager/inc/wakeup_engine_manager.h
plugins/wakeup-manager/src/wakeup_engine_manager.cpp

index 27fd175..3b262df 100644 (file)
@@ -39,6 +39,7 @@ using namespace std;
 /* Need to check whether this dedicated engine path also needs to be configurable */
 #define MA_WAKEUP_DEDICATED_ENGINE_PATH                        "shared/lib/libwakeup-engine.so"
 
+/* Interfaces without version information */
 #define MA_WAKEUP_ENGINE_FUNC_INITIALIZE "wakeup_engine_initialize"
 typedef int (*wakeup_engine_initialize)(void);
 #define MA_WAKEUP_ENGINE_FUNC_DEINITIALIZE "wakeup_engine_deinitialize"
@@ -78,6 +79,10 @@ typedef int (*wakeup_engine_set_error_callback)(wakeup_service_error_cb callback
 #define MA_WAKEUP_ENGINE_FUNC_SET_AUDIO_DATA_REQUIRE_STATUS_CALLBACK "wakeup_engine_set_audio_data_require_status_callback"
 typedef int (*wakeup_engine_set_audio_data_require_status_callback)(wakeup_service_audio_data_require_status_cb callback, void* user_data);
 
+/* Interfaces after version 1 */
+#define MA_WAKEUP_ENGINE_FUNC_GET_VERSION "wakeup_engine_get_version"
+typedef int (*wakeup_engine_get_version)(int* version);
+
 typedef struct {
        wakeup_engine_initialize                                                                initialize;
        wakeup_engine_deinitialize                                                              deinitialize;
@@ -93,6 +98,7 @@ typedef struct {
        wakeup_engine_feed_audio_data                                                   feed_audio_data;
        wakeup_engine_get_utterance_data_count                                  get_utterance_data_count;
        wakeup_engine_get_utterance_data                                                get_utterance_data;
+       wakeup_engine_get_version                                                               get_version;
        wakeup_engine_set_assistant_specific_command                    set_assistant_specific_command;
        wakeup_engine_set_wakeup_event_callback                                 set_wakeup_event_callback;
        wakeup_engine_set_speech_status_callback                                set_speech_status_callback;
@@ -152,6 +158,7 @@ public:
        bool on_audio_data_require_status(string engine_name, bool require);
 private:
        typedef struct {
+               int version;
                string engine_name;
                bool activated{false};
                bool audio_data_require_status{false};
index 75baf6b..266d216 100644 (file)
@@ -455,6 +455,7 @@ void CWakeupEngineManager::add_engine(string name, string path)
                return;
        }
 
+       /* Interfaces without version information */
        info.interface.initialize =
                (wakeup_engine_initialize)dlsym(info.engine_handle,
                MA_WAKEUP_ENGINE_FUNC_INITIALIZE);
@@ -513,6 +514,12 @@ void CWakeupEngineManager::add_engine(string name, string path)
                (wakeup_engine_set_audio_data_require_status_callback)dlsym(info.engine_handle,
                MA_WAKEUP_ENGINE_FUNC_SET_AUDIO_DATA_REQUIRE_STATUS_CALLBACK);
 
+       /* Interfaces after version 1 */
+       info.interface.get_version =
+               (wakeup_engine_get_version)dlsym(info.engine_handle,
+               MA_WAKEUP_ENGINE_FUNC_GET_VERSION);
+
+       info.version = 0;
        info.engine_path = path;
        info.engine_name = name;
 
@@ -563,6 +570,12 @@ void CWakeupEngineManager::add_engine(string name, string path)
        if (info.interface.initialize) {
                info.interface.initialize();
        }
+       if (info.interface.get_version) {
+               int version;
+               if (0 == info.interface.get_version(&version)) {
+                       info.version = version;
+               }
+       }
 }
 
 void CWakeupEngineManager::add_engine_directory(string name, string path)