如何防止在 USB 传输中丢失数据?

How do I prevent losing data in USB transfers?

我正在编写一个程序,通过 libusb 直接与 USB 外围设备交互。有问题的设备(除其他外)有一个按钮,上面有一个 LED。我通过异步中断传输读取按钮的状态,然后一旦检测到按下,我将按钮的 LED 设置为亮起,直到我检测到按钮已被释放。每次收到更多数据时,我都会进行新的异步中断传输以从设备读取,因此我可以循环读取设备中的多个事件。

这个问题是我无法从设备获取数据,除非在生成数据时我在设备上有一个挂起的读取操作。也就是说,如果在按下或释放按钮时我没有主动等待读取,那么该数据就会丢失。因为在接收数据和发出另一个异步中断读取请求之间有一个window,所以有时数据会丢失,例如。我会收到 "button pressed" 事件,但不会收到 "button released" 事件,并且即使在我停止按下按钮后 LED 仍然亮着。

是否有其他方式与设备交互(循环中的中断传输除外)可以保证没有数据丢失,即使我在设备生成时没有挂起的读取操作数据?或者,有没有办法确保没有 window 我没有从设备读取数据,并以这种方式防止数据丢失?

我通过简单地一次安排多个中断传输来解决这个问题,所以当一个返回时,仍然会有另一个在等待数据。我担心如果第二个 returns 在第一个安排另一个中断传输之前会发生什么,但实际上,这个设备似乎不会发生这种情况。