Я пишу приложение Android, используя libusb-1.0.9 и NDK (Android 4.0.4+), которые должны считывать аудиоданные с USB-аудиокарты. Устройство USB из libusb открывается успешно, и для него можно получить все интерфейсы/список EndPoint. Но, делая передачу ISOC я столкнулся со следующей неясную ошибку мне:Android и libusb отправить Ошибка передачи ISOC
Debugging 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, -2 ERRNO И текстовые сообщения:
need 1 32k URBs for transfer
first URB failed, easy peasy
EndPoint 0x84 подходит для аудио-входа. Размер buf [] = 12 - соответствует полю wMaxPacketSize этого EndPoint. Я прошу 1 передачу. Поле xfr-> status = 0, но обратный вызов не вызван. Я думал, что нужно увеличить буфер буфера до 32K - я увеличился, но это не помогло. Я пытался увеличить количество переводов. Такая же ошибка. Подскажите, пожалуйста, в чем может быть ошибка?