#define MAS_UI_METHOD_SEND_ASR_RESULT "mas_ui_method_send_asr_result"
#define MAS_UI_METHOD_SEND_RESULT "mas_ui_method_send_result"
+#define MAS_UI_METHOD_CHANGE_ASSISTANT "mas_ui_method_change_assistant"
#define MAS_UI_METHOD_ERROR "mas_ui_method_error"
int mas_get_client_pid_by_appid(const char *appid);
+const char* mas_get_client_appid_by_pid(int pid);
+
int mas_set_current_client_by_wakeup_word(const char *wakeup_word);
int mas_set_current_client_by_appid(const char *appid);
return 0;
}
+int masc_ui_dbus_change_assistant(char* app_id)
+{
+ if (0 != __dbus_check()) {
+ return -1; //MAS_ERROR_OPERATION_FAILED;
+ }
+
+ if (NULL == app_id) {
+ MAS_LOGE("@@ Request multi-assistant send change assistant request : Fail to make message");
+ return -1; //MA_ERROR_OPERATION_FAILED;
+ } else {
+ MAS_LOGD("[DEBUG] multi-assistant send change assistant request app_id(%s)", app_id);
+ }
+
+ DBusMessage* msg;
+
+ msg = dbus_message_new_method_call(
+ MA_UI_CLIENT_SERVICE_NAME,
+ MA_UI_CLIENT_SERVICE_OBJECT_PATH,
+ MA_UI_CLIENT_SERVICE_INTERFACE,
+ MAS_UI_METHOD_CHANGE_ASSISTANT);
+
+ dbus_message_append_args(msg,
+ DBUS_TYPE_STRING, &app_id,
+ DBUS_TYPE_INVALID);
+
+ dbus_message_set_no_reply(msg, TRUE);
+
+ if (1 != dbus_connection_send(g_conn_sender, msg, NULL)) {
+ MAS_LOGE("[Dbus ERROR] Fail to Send");
+ return -1; // MAS_ERROR_OPERATION_FAILED;
+ } else {
+ MAS_LOGD("[Dbus DEBUG] Success to Send change assistant request");
+ dbus_connection_flush(g_conn_sender);
+ }
+
+ dbus_message_unref(msg);
+
+ return 0;
+}
+
int masc_ui_dbus_send_error_message(int reason, const char* err_msg)
{
if (NULL == g_conn_sender) {
int masc_ui_dbus_send_result(int pid, const char* display_text, const char* utterance_text, const char* result_json);
+int masc_ui_dbus_change_assistant(char* app_id);
+
int masc_ui_dbus_send_error_message(int reason, const char* err_msg);
if (NULL == wakeup_word) return NULL;
- for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && appid == NULL; loop++) {
+ for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && NULL == appid; loop++) {
if (g_maclient_info[loop].used &&
strlen(g_maclient_info[loop].appid) > 0) {
for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
/* Perform extended search, by eliminating blank characters */
if (NULL == appid) {
- for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && appid == NULL; loop++) {
+ for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && NULL == appid; loop++) {
if (g_maclient_info[loop].used &&
strlen(g_maclient_info[loop].appid) > 0) {
for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
return ret;
}
+const char* mas_get_client_appid_by_pid(int pid)
+{
+ const char *ret = NULL;
+ ma_client_s *client = NULL;
+ client = ma_client_find_by_pid(pid);
+ if (client) {
+ ret = client->appid;
+ }
+ return ret;
+}
+
int mas_get_client_pid_by_wakeup_word(const char *wakeup_word)
{
const char *appid = __get_client_appid_by_wakeup_word(wakeup_word);
int mas_set_current_client_by_wakeup_word(const char *wakeup_word)
{
+ int loop;
int ret = -1;
- for (int loop = 0; loop < MAX_MACLIENT_INFO_NUM; loop++) {
+ for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && -1 == ret; loop++) {
if (g_maclient_info[loop].used &&
strlen(g_maclient_info[loop].appid) > 0) {
for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
if (strlen(g_maclient_info[loop].wakeup_word[inner_loop]) > 0) {
if (0 == strncmp(wakeup_word, g_maclient_info[loop].wakeup_word[inner_loop], MAX_WAKEUP_WORD_LEN)) {
g_current_maclient_info = loop;
+ ret = 0;
+ }
+ }
+ }
+ }
+ }
+ /* Perform extended search, by eliminating blank characters */
+ if (ret == -1) {
+ for (loop = 0; loop < MAX_MACLIENT_INFO_NUM && -1 == ret; loop++) {
+ if (g_maclient_info[loop].used &&
+ strlen(g_maclient_info[loop].appid) > 0) {
+ for (int inner_loop = 0; inner_loop < MAX_WAKEUP_WORDS_NUM; inner_loop++) {
+ if (strlen(g_maclient_info[loop].wakeup_word[inner_loop]) > 0) {
+ char comparand[MAX_WAKEUP_WORD_LEN];
+ int comparand_index = 0;
+ for (int index = 0; index < MAX_WAKEUP_WORD_LEN; index++) {
+ if (' ' != g_maclient_info[loop].wakeup_word[inner_loop][index]) {
+ comparand[comparand_index++] = g_maclient_info[loop].wakeup_word[inner_loop][index];
+ }
+ }
+ if (0 == strncmp(wakeup_word, comparand, MAX_WAKEUP_WORD_LEN)) {
+ g_current_maclient_info = loop;
+ ret = 0;
+ }
}
}
}
}
}
+
return ret;
}
{
MAS_LOGD("[ENTER]");
+ int pid = -1;
char *wakeup_word = (char*)data;
+ if (!wakeup_word) return EINA_FALSE;
mas_set_current_client_by_wakeup_word(wakeup_word);
- if (mas_get_client_pid_by_wakeup_word(wakeup_word) != -1) {
+ if ((pid = mas_get_client_pid_by_wakeup_word(wakeup_word)) != -1) {
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();
if (0 != ret) {