From ed1d7a013d3f69c71715aea2745aaa2c3e2da68e Mon Sep 17 00:00:00 2001 From: Ji-hoon Lee Date: Fri, 26 Jul 2019 11:26:28 +0900 Subject: [PATCH] Add get_audio_source_type message handlers Change-Id: I10a70b74181e771be259722162da2778bb4fe26e --- inc/multi_assistant_main.h | 1 + inc/multi_assistant_service.h | 2 + inc/multi_assistant_service_plugin.h | 5 ++ .../inc/dependency_default.h | 1 + .../inc/dependency_default_audio.h | 2 + .../src/dependency_default.cpp | 6 ++ .../src/dependency_default_audio.cpp | 9 +++ .../wakeup-manager/inc/dependency_resolver.h | 4 ++ plugins/wakeup-manager/inc/wakeup_manager.h | 1 + .../inc/wakeup_manager_wrapper.h | 2 + .../src/dependency_resolver.cpp | 22 +++++++ plugins/wakeup-manager/src/wakeup_manager.cpp | 15 +++++ .../src/wakeup_manager_wrapper.cpp | 15 +++++ src/multi_assistant_dbus.c | 3 + src/multi_assistant_dbus_server.c | 62 +++++++++++++++++++ src/multi_assistant_dbus_server.h | 2 + src/multi_assistant_service.c | 12 ++++ src/multi_assistant_service_plugin.c | 22 +++++++ 18 files changed, 186 insertions(+) diff --git a/inc/multi_assistant_main.h b/inc/multi_assistant_main.h index d4e572a..5c2e7eb 100644 --- a/inc/multi_assistant_main.h +++ b/inc/multi_assistant_main.h @@ -54,6 +54,7 @@ #define MA_METHOD_INITIALIZE "ma_method_initialize" #define MA_METHOD_DEINITIALIZE "ma_method_deinitialize" #define MA_METHOD_GET_RECORDING_AUDIO_FORMAT "ma_method_get_recording_audio_format" +#define MA_METHOD_GET_RECORDING_AUDIO_SOURCE_TYPE "ma_method_get_recording_audio_source_type" #define MA_METHOD_SEND_ASR_RESULT "ma_method_send_asr_result" #define MA_METHOD_SEND_RESULT "ma_method_send_result" #define MA_METHOD_SEND_RECOGNITION_RESULT "ma_method_send_recognition_result" diff --git a/inc/multi_assistant_service.h b/inc/multi_assistant_service.h index 3ac83ad..90e45dc 100644 --- a/inc/multi_assistant_service.h +++ b/inc/multi_assistant_service.h @@ -33,6 +33,8 @@ int mas_client_deinitialize(int pid); int mas_client_get_audio_format(int pid, int* rate, int* channel, int* audio_type); +int mas_client_get_audio_source_type(int pid, char** type); + int mas_client_request_speech_data(int pid); int mas_client_send_asr_result(int pid, int event, char* asr_result); diff --git a/inc/multi_assistant_service_plugin.h b/inc/multi_assistant_service_plugin.h index 06f58b5..c68eead 100644 --- a/inc/multi_assistant_service_plugin.h +++ b/inc/multi_assistant_service_plugin.h @@ -83,6 +83,8 @@ int multi_assistant_service_plugin_stop_streaming_follow_up_data(void); int multi_assistant_service_plugin_get_recording_audio_format(int* rate, int* channel, int* audio_type); +int multi_assistant_service_plugin_get_recording_audio_source_type(char **type); + int multi_assistant_service_plugin_set_callbacks(void); int multi_assistant_service_plugin_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data); @@ -146,6 +148,8 @@ typedef int (*wakeup_manager_start_streaming_follow_up_data)(void); typedef int (*wakeup_manager_stop_streaming_follow_up_data)(void); #define MA_WAKEUP_MANAGER_FUNC_GET_AUDIO_FORMAT "wakeup_manager_get_audio_format" typedef int (*wakeup_manager_get_audio_format)(int* rate, int* channel, int* audio_type); +#define MA_WAKEUP_MANAGER_FUNC_GET_AUDIO_SOURCE_TYPE "wakeup_manager_get_audio_source_type" +typedef int (*wakeup_manager_get_audio_source_type)(char** type); #define MA_WAKEUP_MANAGER_FUNC_SET_WAKEUP_EVENT_CALLBACK "wakeup_manager_set_wakeup_event_callback" typedef int (*wakeup_manager_set_wakeup_event_callback)(wakeup_service_wakeup_event_cb callback, void* user_data); #define MA_WAKEUP_MANAGER_FUNC_SET_UTTERANCE_STREAMING_CALLBACK "wakeup_manager_set_utterance_streaming_callback" @@ -182,6 +186,7 @@ typedef struct { wakeup_manager_start_streaming_follow_up_data start_streaming_follow_up_data; wakeup_manager_stop_streaming_follow_up_data stop_streaming_follow_up_data; wakeup_manager_get_audio_format get_audio_format; + wakeup_manager_get_audio_source_type get_audio_source_type; wakeup_manager_set_wakeup_event_callback set_wakeup_event_callback; wakeup_manager_set_utterance_streaming_callback set_utterance_streaming_callback; wakeup_manager_set_previous_utterance_streaming_callback set_previous_utterance_streaming_callback; diff --git a/plugins/wakeup-manager/dependency-default/inc/dependency_default.h b/plugins/wakeup-manager/dependency-default/inc/dependency_default.h index 274f7c2..3484fd5 100644 --- a/plugins/wakeup-manager/dependency-default/inc/dependency_default.h +++ b/plugins/wakeup-manager/dependency-default/inc/dependency_default.h @@ -56,6 +56,7 @@ EXPORT_API int mas_dependency_stop_recording(void); EXPORT_API int mas_dependency_change_system_volume(void); EXPORT_API int mas_dependency_recover_system_volume(void); EXPORT_API int mas_dependency_get_audio_format(int* rate, int* channel, int* audio_type); +EXPORT_API int mas_dependency_get_audio_source_type(char** type); #ifdef __cplusplus } diff --git a/plugins/wakeup-manager/dependency-default/inc/dependency_default_audio.h b/plugins/wakeup-manager/dependency-default/inc/dependency_default_audio.h index 6a603c1..9ba14a0 100644 --- a/plugins/wakeup-manager/dependency-default/inc/dependency_default_audio.h +++ b/plugins/wakeup-manager/dependency-default/inc/dependency_default_audio.h @@ -29,4 +29,6 @@ void dependency_default_audio_change_system_volume(); void dependency_default_audio_recover_system_volume(); void dependency_default_audio_get_audio_format(int* rate, int* channel, int* audio_type); +void dependency_default_audio_get_audio_source_type(char** type); + #endif //_DEPENDENCY_DEFAULT_AUDIO_H_ diff --git a/plugins/wakeup-manager/dependency-default/src/dependency_default.cpp b/plugins/wakeup-manager/dependency-default/src/dependency_default.cpp index 171f24f..d705b00 100644 --- a/plugins/wakeup-manager/dependency-default/src/dependency_default.cpp +++ b/plugins/wakeup-manager/dependency-default/src/dependency_default.cpp @@ -62,3 +62,9 @@ int mas_dependency_get_audio_format(int* rate, int* channel, int* audio_type) dependency_default_audio_get_audio_format(rate, channel, audio_type); return 0; } + +int mas_dependency_get_audio_source_type(char** type) +{ + dependency_default_audio_get_audio_source_type(type); + return 0; +} diff --git a/plugins/wakeup-manager/dependency-default/src/dependency_default_audio.cpp b/plugins/wakeup-manager/dependency-default/src/dependency_default_audio.cpp index 570b44c..afb3e99 100644 --- a/plugins/wakeup-manager/dependency-default/src/dependency_default_audio.cpp +++ b/plugins/wakeup-manager/dependency-default/src/dependency_default_audio.cpp @@ -361,4 +361,13 @@ void dependency_default_audio_get_audio_format(int* rate, int* channel, int* aud *rate = 16000; *channel = 0; *audio_type = 0; +} + +void dependency_default_audio_get_audio_source_type(char** type) +{ + static char source_type[] = "default_audio"; + if (!type) { + return; + } + *type = source_type; } \ No newline at end of file diff --git a/plugins/wakeup-manager/inc/dependency_resolver.h b/plugins/wakeup-manager/inc/dependency_resolver.h index e4fcdf7..6d224f8 100644 --- a/plugins/wakeup-manager/inc/dependency_resolver.h +++ b/plugins/wakeup-manager/inc/dependency_resolver.h @@ -42,6 +42,7 @@ int dependency_resolver_stop_recording(); int dependency_resolver_change_system_volume(); int dependency_resolver_recover_system_volume(); int dependency_resolver_get_audio_format(int* rate, int* channel, int* audio_type); +int dependency_resolver_get_audio_source_type(char** type); /************************************************************************************** *** Definitions for dependencies @@ -66,6 +67,8 @@ typedef int (*mas_dependency_change_system_volume)(void); typedef int (*mas_dependency_recover_system_volume)(void); #define MAS_DEPENDENCY_FUNC_GET_AUDIO_FORMAT "mas_dependency_get_audio_format" typedef int (*mas_dependency_get_audio_format)(int* rate, int* channel, int* audio_type); +#define MAS_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE "mas_dependency_get_audio_source_type" +typedef int (*mas_dependency_get_audio_source_type)(char** type); typedef struct { mas_dependency_initialize initialize; @@ -76,6 +79,7 @@ typedef struct { mas_dependency_change_system_volume change_system_volume; mas_dependency_recover_system_volume recover_system_volume; mas_dependency_get_audio_format get_audio_format; + mas_dependency_get_audio_source_type get_audio_source_type; } mas_dependency; #ifdef __cplusplus diff --git a/plugins/wakeup-manager/inc/wakeup_manager.h b/plugins/wakeup-manager/inc/wakeup_manager.h index c76e3a0..a129f9d 100644 --- a/plugins/wakeup-manager/inc/wakeup_manager.h +++ b/plugins/wakeup-manager/inc/wakeup_manager.h @@ -81,6 +81,7 @@ public: bool update_result_state(string appid, int state); bool process_event(ma_plugin_event_e event, void* data, int len); bool get_audio_format(int* rate, int* channel, int* audio_type); + bool get_audio_source_type(char** type); bool set_language(string language); bool get_voice_key_pressed(); diff --git a/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h b/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h index e3ba274..93d71f5 100644 --- a/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h +++ b/plugins/wakeup-manager/inc/wakeup_manager_wrapper.h @@ -114,6 +114,8 @@ EXPORT_API int wakeup_manager_stop_streaming_follow_up_data(void); EXPORT_API int wakeup_manager_get_audio_format(int *rate, int *channel, int *audio_type); +EXPORT_API int wakeup_manager_get_audio_source_type(char** type); + EXPORT_API int wakeup_manager_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data); EXPORT_API int wakeup_manager_set_utterance_streaming_callback(wakeup_service_speech_streaming_cb callback, void* user_data); diff --git a/plugins/wakeup-manager/src/dependency_resolver.cpp b/plugins/wakeup-manager/src/dependency_resolver.cpp index eda0f3b..7b541a6 100644 --- a/plugins/wakeup-manager/src/dependency_resolver.cpp +++ b/plugins/wakeup-manager/src/dependency_resolver.cpp @@ -81,6 +81,9 @@ int dependency_resolver_initialize(mas_proxy_interface interface) g_mas_dependency.get_audio_format = (mas_dependency_get_audio_format)dlsym(g_handle, MAS_DEPENDENCY_FUNC_GET_AUDIO_FORMAT); + g_mas_dependency.get_audio_source_type = + (mas_dependency_get_audio_source_type)dlsym(g_handle, + MAS_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE); int ret = -1; int dependency_version = 0; @@ -246,3 +249,22 @@ int dependency_resolver_get_audio_format(int* rate, int* channel, int* audio_typ return ret; } +int dependency_resolver_get_audio_source_type(char** type) +{ + int ret = -1; + if (NULL != g_handle) { + mas_dependency_get_audio_source_type func = g_mas_dependency.get_audio_source_type; + if (NULL == func) { + MAS_LOGE("[ERROR] symbol lookup failed : %s", MAS_DEPENDENCY_FUNC_GET_AUDIO_SOURCE_TYPE); + } else { + ret = func(type); + if (0 != ret) { + MAS_LOGE("[ERROR] Fail to get audio source type, ret(%d)", ret); + } + } + } else { + MAS_LOGE("[ERROR] g_handle is not valid"); + } + + return ret; +} diff --git a/plugins/wakeup-manager/src/wakeup_manager.cpp b/plugins/wakeup-manager/src/wakeup_manager.cpp index 565ca1d..83c7320 100644 --- a/plugins/wakeup-manager/src/wakeup_manager.cpp +++ b/plugins/wakeup-manager/src/wakeup_manager.cpp @@ -571,6 +571,21 @@ bool CWakeupManager::get_audio_format(int* rate, int* channel, int* audio_type) return true; } +bool CWakeupManager::get_audio_source_type(char** type) +{ + MWR_LOGD("[ENTER]"); + + if (!type) { + MWR_LOGE("[ERROR] Invalid parameter"); + return false; + } + + dependency_resolver_get_audio_source_type(type); + + MWR_LOGD("[END] type(%s)", *type); + return true; +} + CWakeupPolicy* CWakeupManager::get_wakeup_policy() { return mWakeupPolicy.get(); diff --git a/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp b/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp index 89e9af5..6424077 100644 --- a/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp +++ b/plugins/wakeup-manager/src/wakeup_manager_wrapper.cpp @@ -359,6 +359,21 @@ int wakeup_manager_get_audio_format(int* rate, int* channel, int* audio_type) return 0; } +int wakeup_manager_get_audio_source_type(char** type) +{ + MWR_LOGD("[ENTER]"); + + if (!type) { + MWR_LOGE("[ERROR] Invalid parameter"); + return -1; + } + + g_wakeup_manager.get_audio_source_type(type); + + MWR_LOGD("[END] type(%s)", *type); + return 0; +} + int wakeup_manager_set_wakeup_event_callback(wakeup_service_wakeup_event_cb callback, void* user_data) { MWR_LOGD("[ENTER]"); diff --git a/src/multi_assistant_dbus.c b/src/multi_assistant_dbus.c index c17d21b..6130846 100644 --- a/src/multi_assistant_dbus.c +++ b/src/multi_assistant_dbus.c @@ -668,6 +668,9 @@ static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handle } else if (dbus_message_is_method_call(msg, MA_SERVER_SERVICE_INTERFACE, MA_METHOD_GET_RECORDING_AUDIO_FORMAT)) { ma_service_dbus_get_audio_format(g_conn_listener, msg); + } else if (dbus_message_is_method_call(msg, MA_SERVER_SERVICE_INTERFACE, MA_METHOD_GET_RECORDING_AUDIO_SOURCE_TYPE)) { + ma_service_dbus_get_audio_source_type(g_conn_listener, msg); + } else if (dbus_message_is_method_call(msg, MA_SERVER_SERVICE_INTERFACE, MA_METHOD_SEND_ASR_RESULT)) { ma_service_dbus_send_asr_result(g_conn_listener, msg); diff --git a/src/multi_assistant_dbus_server.c b/src/multi_assistant_dbus_server.c index a1daa33..1c70b09 100644 --- a/src/multi_assistant_dbus_server.c +++ b/src/multi_assistant_dbus_server.c @@ -199,6 +199,68 @@ int ma_service_dbus_get_audio_format(DBusConnection* conn, DBusMessage* msg) return 0; } +int ma_service_dbus_get_audio_source_type(DBusConnection* conn, DBusMessage* msg) +{ + DBusError err; + dbus_error_init(&err); + + int pid = -1; + char *type = NULL; + int ret; + + dbus_message_get_args(msg, &err, + DBUS_TYPE_INT32, &pid, + DBUS_TYPE_INVALID); + + MAS_LOGD("[DEBUG] MAS GET AUDIO SOURCE TYPE"); + + if (dbus_error_is_set(&err)) { + MAS_LOGE("[IN ERROR] mas get audio source type : Get arguments error (%s)", err.message); + dbus_error_free(&err); + ret = -1; //MAS_ERROR_OPERATION_FAILED; + } else { + MAS_LOGD("[IN] mas get default voice"); + ret = mas_client_get_audio_source_type(pid, &type); + } + + DBusMessage* reply; + reply = dbus_message_new_method_return(msg); + + char* temp_type = NULL; + + if (type) + temp_type = strdup(type); + else + temp_type = strdup("#NULL"); + + if (NULL != reply) { + /* Append result and voice */ + dbus_message_append_args(reply, + DBUS_TYPE_INT32, &ret, + DBUS_TYPE_STRING, &temp_type, + DBUS_TYPE_INVALID); + if (0 == ret) { + MAS_LOGD("[OUT] mas get audio source type : type(%s)", temp_type); + } else { + MAS_LOGE("[OUT ERROR] mas get audio source type : result(%d)", ret); + } + + if (!dbus_connection_send(conn, reply, NULL)) { + MAS_LOGE("[OUT ERROR] mas get audio source type : Out Of Memory!"); + } + + dbus_connection_flush(conn); + dbus_message_unref(reply); + } else { + MAS_LOGE("[OUT ERROR] mas get audio source type : Fail to create reply message!!"); + } + + if (temp_type) + free(temp_type); + + return 0; +} + int ma_service_dbus_send_asr_result(DBusConnection* conn, DBusMessage* msg) { DBusError err; diff --git a/src/multi_assistant_dbus_server.h b/src/multi_assistant_dbus_server.h index a626d11..0738f40 100644 --- a/src/multi_assistant_dbus_server.h +++ b/src/multi_assistant_dbus_server.h @@ -31,6 +31,8 @@ int ma_service_dbus_deinitialize(DBusConnection* conn, DBusMessage* msg); int ma_service_dbus_get_audio_format(DBusConnection* conn, DBusMessage* msg); +int ma_service_dbus_get_audio_source_type(DBusConnection* conn, DBusMessage* msg); + int ma_service_dbus_send_asr_result(DBusConnection* conn, DBusMessage* msg); int ma_service_dbus_send_result(DBusConnection* conn, DBusMessage* msg); diff --git a/src/multi_assistant_service.c b/src/multi_assistant_service.c index d7fe03a..e73a723 100644 --- a/src/multi_assistant_service.c +++ b/src/multi_assistant_service.c @@ -228,6 +228,18 @@ int mas_client_get_audio_format(int pid, int* rate, int* channel, int* audio_typ return ret; } +int mas_client_get_audio_source_type(int pid, char** type) +{ + MAS_LOGD("[Enter] pid(%d)", pid); + + int ret = multi_assistant_service_plugin_get_recording_audio_source_type(type); + if (0 != ret){ + MAS_LOGE("[ERROR] Fail to get recording audio source type, ret(%d)", ret); + } + + return ret; +} + int mas_client_activate(int pid) { int ret = -1; diff --git a/src/multi_assistant_service_plugin.c b/src/multi_assistant_service_plugin.c index 819ab1d..4b40351 100644 --- a/src/multi_assistant_service_plugin.c +++ b/src/multi_assistant_service_plugin.c @@ -408,6 +408,9 @@ int multi_assistant_service_plugin_initialize(void) _wakeup_manager_interface.get_audio_format = (wakeup_manager_get_audio_format)dlsym(g_handle, MA_WAKEUP_MANAGER_FUNC_GET_AUDIO_FORMAT); + _wakeup_manager_interface.get_audio_source_type = + (wakeup_manager_get_audio_source_type)dlsym(g_handle, + MA_WAKEUP_MANAGER_FUNC_GET_AUDIO_SOURCE_TYPE); _wakeup_manager_interface.set_wakeup_event_callback = (wakeup_manager_set_wakeup_event_callback)dlsym(g_handle, MA_WAKEUP_MANAGER_FUNC_SET_WAKEUP_EVENT_CALLBACK); @@ -831,6 +834,25 @@ int multi_assistant_service_plugin_get_recording_audio_format(int *rate, int *ch return ret; } +int multi_assistant_service_plugin_get_recording_audio_source_type(char** type) +{ + int ret = -1; + if (NULL != g_handle) { + wakeup_manager_get_audio_source_type func = _wakeup_manager_interface.get_audio_source_type; + if (NULL == func) { + MAS_LOGE("[ERROR] symbol lookup failed : %s", MA_WAKEUP_MANAGER_FUNC_GET_AUDIO_SOURCE_TYPE); + } else { + ret = func(type); + if (0 != ret) { + MAS_LOGE("[ERROR] Fail to get recording audio source type, ret(%d)", ret); + } + } + } else { + MAS_LOGE("[ERROR] g_handle is not valid"); + } + return ret; +} + int multi_assistant_service_plugin_set_callbacks(void) { int ret = multi_assistant_service_plugin_set_wakeup_event_callback(__wakeup_event_cb, NULL); -- 2.34.1