簡體   English   中英

Android&libusb提交ISOC傳輸錯誤

[英]Android & libusb submit ISOC transfer error

我使用libusb-1.0.9和NDK(Android 4.0.4+)編寫了Android應用程序,該程序必須從USB聲卡中讀取音頻數據。 libusb的USB設備已成功打開,因此可以接收所有接口/端點列表。 但是在進行ISOC傳輸時,我面臨以下不清楚的錯誤:

調試傳遞的C代碼:

static uint8_t buf[12];

static void cb_xfr(struct libusb_transfer *xfr)
{
     LOGD("USB callback\n");
     libusb_free_transfer(xfr);
}

JNIEXPORT jlong JNICALL
Java_com_usbtest_libusb_Libusb_makeISOCTransfer(JNIEnv *env, jobject this, jlong ms) 
{
      static struct libusb_transfer *xfr;
      int num_iso_pack = 1;
      unsigned char ep = 0x84;

       xfr = libusb_alloc_transfer(num_iso_pack);
       if (!xfr)  {
               LOGD("libusb_alloc_transfer: errno=%d\n", errno);
               return -1000;
       }

       LOGD("libusb_fill_iso_transfer: ep=%x, buf=%d, num iso=%d\n", ep, sizeof(buf), num_iso_pack);
       libusb_fill_iso_transfer(xfr, handle, ep, buf, sizeof(buf), num_iso_pack, cb_xfr, NULL, 0);
       libusb_set_iso_packet_lengths(xfr, sizeof(buf)/num_iso_pack);
       int res = libusb_submit_transfer(xfr);
       LOGD("libusb_submit_transfer: %d, errno=%d\n", res, errno);
       struct timeval tv;
       tv.tv_sec = 1;
       tv.tv_usec = 0;
       libusb_handle_events_timeout(NULL, &tv);
       return res;
}

調用libusb_submit_transfer后,我收到一個錯誤:libusb_submit_transfer:-1,errno -2和短信:

 need 1 32k URBs for transfer
 first URB failed, easy peasy

EndPoint 0x84適用於音頻輸入。 buf [] size = 12-對應於此EndPoint的字段wMaxPacketSize。 我要求1次轉帳。 xfr-> status = 0的字段,但不會引起回調。 我認為有必要將buf緩沖區增加到32K-我增加了,但沒有幫助。 我試圖增加轉賬數量。 同樣的錯誤。 請提示我有什么錯誤?

我找到了解決這個問題的方法。 在本主題http://en.it-usenet.org/thread/14995/14985/中,有一個類似的問題,該決定似乎使設備HID USB接口脫離了。

我已經使用libusb_detach_kernel分離了2個隱藏驅動程序並提交了傳輸返回0!

打開設備后,我為設備(0..3)的所有接口制作了libusb_detach_kernel_driver(句柄,接口) ,並且由於libusb_submit_transfer返回了SUCCESS傳輸的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM