Как предотвратить потерю данных при передаче через USB? - PullRequest
1 голос
/ 21 сентября 2019

Я пишу программу, которая напрямую взаимодействует с периферийным устройством USB через libusb.У рассматриваемого устройства есть (среди прочего) кнопка со светодиодом на нем.Я читаю состояние кнопки с помощью асинхронной передачи прерывания, а затем, как только обнаруживается нажатие, я включаю светодиод кнопки, пока не обнаружу, что кнопка была отпущена.Я выполняю новую асинхронную передачу прерываний для чтения с устройства каждый раз, когда получаю больше данных, поэтому я могу читать несколько событий с устройства в цикле.

Проблема в том, что я не получаю данныес устройства, если у меня нет ожидающей операции чтения на устройстве при генерации данных.То есть, если я не жду активного чтения при нажатии или отпускании кнопки, эти данные просто теряются.Поскольку существует окно между получением данных и выполнением другого запроса на чтение асинхронного прерывания, иногда данные теряются, и, например, я получаю событие «кнопка нажата», но не событие «кнопка отпущена», и светодиод остается включенным даже после того, как у меняперестал нажимать кнопку.

Есть ли другой способ взаимодействия с устройством (кроме передачи прерываний в цикле), который может гарантировать, что данные не будут потеряны, даже если у меня нет ожидающей операции чтения ввремя, когда устройство генерирует данные?Или есть способ обеспечить отсутствие окна, в котором я не читаю с устройства, и предотвратить таким образом потерю данных?

1 Ответ

0 голосов
/ 21 сентября 2019

Я устранил проблему, просто запланировав несколько передач прерываний одновременно, поэтому, когда один из них вернется, все равно будет другое ожидание данных.Я беспокоился о том, что произойдет, если второй вернется до того, как первый запланирует другую передачу прерывания, но на практике этого, похоже, не происходит для этого устройства.

...