У меня есть приложение для 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 секунды (что примерно равно установленному мной значению тайм-аута).
Итак, у меня есть три вопроса.
Могу ли я сделать вывод, что тайм-аут является причиной возврата ioctl -1?
Может ли strerror(errorno) определить, в чем именно проблема? (Потому что я читал, что ioctl возвращает -1 при ошибке и устанавливает соответствующий код ошибки в системной переменной 'errno')
Каковы ситуации, в которых происходит тайм-аут при массовой передаче?