Android& libusb提交ISOC传输错误

时间:2013-06-06 09:18:56

标签: android usb libusb

我使用libusb-1.0.9和NDK(Android 4.0.4+)编写Android应用程序,该应用程序必须从USB-audiocard中读出音频数据。 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 - 我增加了,但它没有帮助。 我试图增加转账数量。同样的错误。 请问有什么可能出错?

1 个答案:

答案 0 :(得分:1)

我找到了这个问题的解决方案。 在本主题http://en.it-usenet.org/thread/14995/14985/中有一个类似的问题,决定似乎分离设备HID USB接口。

  

我已经使用libusb_detach_kernel来分离2个hid驱动程序并提交   转移0 !!

我在设备打开后为设备的所有接口(0..3)创建了 libusb_detach_kernel_driver(句柄,接口),并且由于 libusb_submit_transfer 返回转让的成功