/* 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"
#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;
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;
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};
return;
}
+ /* Interfaces without version information */
info.interface.initialize =
(wakeup_engine_initialize)dlsym(info.engine_handle,
MA_WAKEUP_ENGINE_FUNC_INITIALIZE);
(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;
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)