如何从 webusb 响应状态恢复:"babble"

How to recover from webusb response status: "babble"

我正在 Chrome 上测试新的 webusb api (https://wicg.github.io/webusb/) 并且正在测试从 USB 设备发送 (transferOut) 和接收 (transferIn)。

它工作正常,但我尝试读取的数据比预期少(2 个字节而不是 3 个字节,消息的长度实际上用前两个字节表示)。

问题是当我读取的字节数少于预期时,USB api returns 状态 "babble"。之后如何保证正常通信?我仍然可以发送数据,但接收数据总是 returns 错误 "DOMException: A transfer error has occured."

我尝试了 运行 device.clearHalt("in", 1)(方向 "in" 和端点 1)但它也不起作用(抛出 "DOMException: Unable to clear endpoint.").

有人遇到过这个问题吗?

(我在 OSX 上使用 Chrome 65.0.3325.181)

如上所述,我仍在研究从 babble 错误中恢复的最佳方法,但不管解决此问题的最简单方法是避免调用 transferIn() 的长度是't 端点最大数据包大小的倍数。在软件中处理额外数据比尝试从硬件协议错误中恢复要容易得多。