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