ioctl возвращает -1 в массовой передаче USB для Android

У меня есть приложение для Android, которое создает соединение с USB-устройством и должно получать данные через определенную конечную точку. Я обрабатываю часть передачи данных в собственном коде. Приложение может найти устройство, открыть соединение и найти нужную конечную точку. Часть чтения данных находится в нативном коде, где вызов ioctl выполняется внутри цикла while.

int bytesTransferred = ioctl(g_fileDescriptor, USBDEVFS_BULK, &ctrl);

Этот g_fileDescriptor является дескриптором USB-подключения.

Второй параметр указывает, что это групповая передача.

Третий параметр имеет структуру usbdevfs_bulktransfer (имеет адрес конечной точки, длина буфера — 16 КБ, заполнитель данных, время ожидания — 1000 мс)

Я пробовал это с помощью двух USB-устройств. Первое устройство работает хорошо. Данные успешно считываются.

Второе устройство, кажется, вызывает некоторые проблемы. Мое приложение находит устройство, подключается к нему, находит нужную конечную точку. Но вызов ioctl всегда возвращает -1. И я заметил, что временной интервал между двумя последовательными вызовами ioctl составляет в среднем 0,99 секунды (что примерно равно установленному мной значению тайм-аута).

Итак, у меня есть три вопроса.

  1. Могу ли я сделать вывод, что тайм-аут является причиной возврата ioctl -1?

  2. Может ли strerror(errorno) определить, в чем именно проблема? (Потому что я читал, что ioctl возвращает -1 при ошибке и устанавливает соответствующий код ошибки в системной переменной 'errno')

  3. Каковы ситуации, в которых происходит тайм-аут при массовой передаче?


person Sampath Kumar    schedule 05.12.2014    source источник


Ответы (1)


1. Могу ли я сделать вывод, что тайм-аут является причиной возврата ioctl -1? => Если вы установите для ctrl.timeout значение «0» (ноль), вы можете ждать бесконечное время. Этим вы можете доказать свой вывод.

person Sean    schedule 12.01.2015