Я пишу программу для Linux (используя Qt 4.8 и libusb 1.0), которая будет взаимодействовать с пользовательским USB-устройством (в настоящее время программируется коллегой).
Шаг 1 заключается в том, чтобы через регулярные промежутки времени «пульс» переходил туда и обратно через USB. В настоящее время я использую асинхронную массовую передачу.
Для тестирования я поместил свой «Send_Heartbeat()» на нажатие кнопки. Если я нажимаю на кнопку МНОГО и ставлю в очередь несколько сообщений для отправки, пока я держу свою очередь занятой, сообщения продолжают отправляться, а мое USB-устройство продолжает их получать.
Если я остановлюсь на несколько секунд, а затем возобновлю и добавлю новые сообщения в очередь, USB-устройство перестанет их получать.
НО, обратный вызов передачи моей программы ДЕЙСТВИТЕЛЬНО возвращает с кодом состояния передачи 0, что указывает на успех, даже если мое USB-устройство не получает их.
Мои вопросы:
- Почему статус передачи обратного вызова указывает на успех, если мое USB-устройство перестало их получать?
- Кто-нибудь слышал о таком поведении?
Стоит отметить, что если я отключу USB-устройство, я получу правильные коды состояния, возвращаемые в моем обратном вызове, указывающие на то, что устройство исчезло.
Если USB-устройство остается подключенным и работающим, а я «Отсоединяю», а затем снова «Присоединяю», чтобы принудительно восстановить соединение и попытаться отправить больше тестовых импульсов, это работает! USB-устройство снова начинает получать сообщения.
Моя "Отвязка" - это следующие вызовы:
libusb_release_interface()
libusb_reset_device()
libusb_close()
Тогда мой «Прикрепить»:
libusb_get_device_list()
libusb_get_device_descriptor()
libusb_open()
libusb_set_configuration()
libusb_claim_interface()
Мой следующий шаг — определить, какая из команд libusb восстанавливает связь.
Между тем, я надеюсь, что кто-то распознает эти симптомы и предложит. Поскольку я впервые программирую USB-связь, мне интересно, есть ли какой-то фундамент, который я пропустил.
Спасибо!
attach_kernel_driver()
в вызовах отсоединения? - person   schedule 15.07.2013detach_kernel_driver()
в ваших вызовах присоединения? - person   schedule 15.07.2013