Пишу приложенеи под Qt. Приложение общается с USB-устройством через драйвер и с++библиотеку-оболочку. Основная операция это запрос данных от устройства. Используется обычный вызов read(). За один раз считывается от 10 до 100 кб. Обычно после первого считывания, происходит зависание USB-подсистемы. Иногда очень редко это происходит после 2-3 считывания данных.
Для любопытствующих могу сказать, что ошибка проявляется таким образом: После считывания данных из драйвера, при завершении URB происходит вызов completion handler. Это стандартное поведение любого USB-драйвера. Так вот, при заходе в него обнаруживается, что urb->status = -104.
В "linux device drivers 3th" дается описание этой ошибки:
-ECONNRESET
The urb was unlinked by a call to usb_unlink_urb, and the transfer_flags variable of the urb was set to URB_ASYNC_UNLINK.
Получается, что кто-то командует отключить URB.
Но я эту команду не даю.
Можно конечно предположить, что виновата железка-драйвер-библиотека, но аналогичное(по функционалу) консольное приложение работает безупречно.
Отсюда я допускаю мысль, что Qt на каком то этапе вмешивается в работу USB-подсистемы. Кто что думает по этому поводу?
Что имеется:
slackware 10.2
kernel 2.4.31
Qt 3.3.4
Устройство работает через usb 1.0 (Внешний модкль вводы вывода E14-140, производство L-Card,
www.lcard.ru)