解决YX Audio 卡死的问题

Change-Id: I3b26fd9f8b7bf0200ba1fcf41e4dcf9a46145b6e
diff --git a/mbtk/mbtk_lib/src/mbtk_audio.c b/mbtk/mbtk_lib/src/mbtk_audio.c
index 382bef3..1858fa1 100755
--- a/mbtk/mbtk_lib/src/mbtk_audio.c
+++ b/mbtk/mbtk_lib/src/mbtk_audio.c
@@ -322,7 +322,7 @@
 void mbtk_audio_mode_set(int mode)
 {
     int rc = 0;
-
+#ifndef MBTK_YX_SUPPORT
     if(NULL == mbtk_audio_ubus_db)
     {
         printf("mbtk_dtmf_ubus not init!\n");
@@ -333,7 +333,7 @@
     if ((rc = ubus_invoke(mbtk_audio_ubus_db->ctx,
                                 mbtk_audio_ubus_db->audioif_request_id,
                                 AUDIO_UBUS_MODE_SET,
-                                audio_cm_b.head, NULL, NULL, 0)) != UBUS_STATUS_OK)
+                                audio_cm_b.head, NULL, NULL, 2 * 1000)) != UBUS_STATUS_OK)
     {
         printf("%s, ubus_invoke_async %s failed %s\n", __FUNCTION__, AUDIO_UBUS_MODE_SET, ubus_strerror(rc));
     }
@@ -341,13 +341,38 @@
     {
         printf("%s: ubus_invoke_async success\n", __FUNCTION__);
     }
+#else
+    static struct ubus_context *ctx;
+    ctx = ubus_connect(NULL);
+	if (!ctx) {
+		printf("Failed to connect to ubus\n");
+		return;
+	}
+
+    static struct blob_buf b;
+    uint32_t id;
+	int ret;
+    ret = ubus_lookup_id(ctx, AUDIO_UBUS_REQUEST_NAME, &id);
+	if (ret) {
+        printf("ubus_lookup_id() fail.\n");
+		return ret;
+	}
+
+    blob_buf_init(&b, 0);
+    blobmsg_add_u32(&b, "param0", mode);
+	if((ret = ubus_invoke(ctx, id, AUDIO_UBUS_MODE_SET, b.head, NULL, NULL, 0)) != UBUS_STATUS_OK) {
+        printf("ubus_invoke fail:%d.\n", ret);
+	} else {
+        printf("ubus_invoke success.\n");
+	}
+#endif
 }
 
 
 void mbtk_audio_path_enable(int mode)
 {
     int rc = 0;
-
+#ifndef MBTK_YX_SUPPORT
     if(NULL == mbtk_audio_ubus_db)
     {
         printf("mbtk_dtmf_ubus not init!\n");
@@ -367,6 +392,32 @@
     {
         printf("%s: ubus_invoke_async success\n", __FUNCTION__);
     }
+#else
+    static struct ubus_context *ctx;
+    ctx = ubus_connect(NULL);
+	if (!ctx) {
+		printf("Failed to connect to ubus\n");
+		return;
+	}
+
+    static struct blob_buf b;
+    uint32_t id;
+	int ret;
+    ret = ubus_lookup_id(ctx, AUDIO_UBUS_REQUEST_NAME, &id);
+	if (ret) {
+        printf("ubus_lookup_id() fail.\n");
+		return ret;
+	}
+
+    blob_buf_init(&b, 0);
+    blobmsg_add_u32(&b, "param0", mode);
+	if((ret = ubus_invoke(ctx, id, AUDIO_UBUS_PATH_ENABLE, b.head, NULL, NULL, 0)) != UBUS_STATUS_OK) {
+        printf("ubus_invoke fail:%d.\n", ret);
+	} else {
+        printf("ubus_invoke success.\n");
+	}
+
+#endif
 }
 
 
@@ -385,37 +436,53 @@
 void mbtk_audio_switch_pcm(int mode)
 {
     int rc = 0;
-    struct ubus_request *req = NULL;
-
+#ifndef MBTK_YX_SUPPORT
     if(NULL == mbtk_audio_ubus_db)
     {
         printf("mbtk_dtmf_ubus not init!\n");
         return;
     }
-    req = (struct ubus_request *)malloc(sizeof(struct ubus_request));
-    if (req == NULL)
-    {
-        printf("leave %s: lack of memory\n", __FUNCTION__);
-        return;
-    }
-    memset(req, 0, sizeof(struct ubus_request));
+
     blob_buf_init(&audio_cm_b, 0);
     blobmsg_add_u32(&audio_cm_b, "param0", mode);
-    if ((rc = ubus_invoke_async(mbtk_audio_ubus_db->ctx,
+    if ((rc = ubus_invoke(mbtk_audio_ubus_db->ctx,
                                 mbtk_audio_ubus_db->audioif_request_id,
                                 AUDIO_UBUS_SWITCH_PCM,
-                                audio_cm_b.head, req)) != UBUS_STATUS_OK)
+                                audio_cm_b.head, NULL, NULL, 0/*2 * 1000*/)) != UBUS_STATUS_OK)
     {
-        free(req);
-        printf("%s, ubus_invoke_async %s failed %s\n", __FUNCTION__, AUDIO_UBUS_MODE_SET, ubus_strerror(rc));
+        printf("%s, ubus_invoke %s failed %s\n", __FUNCTION__, AUDIO_UBUS_SWITCH_PCM, ubus_strerror(rc));
     }
     else
     {
-        printf("%s: ubus_invoke_async success\n", __FUNCTION__);
-        mbtk_audio_ubus_db->work_state++;
-        req->complete_cb = mbtk_ubus_complete_cb;
-        ubus_complete_request_async(mbtk_audio_ubus_db->ctx, req);
+        printf("%s: ubus_invoke success\n", __FUNCTION__);
     }
+#else
+
+    static struct ubus_context *ctx;
+    ctx = ubus_connect(NULL);
+	if (!ctx) {
+		printf("Failed to connect to ubus\n");
+		return;
+	}
+
+    static struct blob_buf b;
+    uint32_t id;
+	int ret;
+    ret = ubus_lookup_id(ctx, AUDIO_UBUS_REQUEST_NAME, &id);
+	if (ret) {
+        printf("ubus_lookup_id() fail.\n");
+		return ret;
+	}
+
+    blob_buf_init(&b, 0);
+    blobmsg_add_u32(&b, "param0", mode);
+	if((ret = ubus_invoke(ctx, id, AUDIO_UBUS_SWITCH_PCM, b.head, NULL, NULL, 0)) != UBUS_STATUS_OK) {
+        printf("ubus_invoke fail:%d.\n", ret);
+	} else {
+        printf("ubus_invoke success.\n");
+	}
+
+#endif
 }
 
 int mbtk_audio_dsp_set(int type, int gain)
@@ -826,7 +893,7 @@
 int mbtk_audio_ubus_client_init(mbtk_audio_client_handle_type *ph_audio, mbtk_dtmf_cb cb)
 {
     int id;
-
+#ifndef MBTK_YX_SUPPORT
     // Set call handle.
     if(ph_audio == NULL || mbtk_audio_ubus_db != NULL)
     {
@@ -849,13 +916,16 @@
 
     *ph_audio = mbtk_audio_ubus_db;
     LOGI("%s %d:%x", __FUNCTION__, __LINE__, mbtk_audio_ubus_db);
-
+#else
+    // Do nothong for YX.
+#endif
     return 0;
 }
 
 int mbtk_audio_ubus_client_deinit(mbtk_audio_client_handle_type h_audio)
 {
     int ret;
+#ifndef MBTK_YX_SUPPORT
     struct mbtk_audio_ubus_db_t *audio_ubus = (struct mbtk_audio_ubus_db_t *)h_audio;
 
     mbtk_audio_log("%s \n", __FUNCTION__);
@@ -889,7 +959,9 @@
     LOGI("%s %d", __FUNCTION__, __LINE__);
     free(h_audio);
     mbtk_audio_ubus_db = NULL;
-
+#else
+    // Do nothong for YX.
+#endif
     return 0;
 }