【发布时间】:2018-06-30 06:57:52
【问题描述】:
我正在 Chrome 上测试新的 webusb api (https://wicg.github.io/webusb/),并正在测试从 USB 设备发送 (transferOut) 和接收 (transferIn)。
它工作得很好,但我尝试读取的数据比预期的要少(2 个字节而不是 3 个字节,其中消息的长度实际上用前两个字节表示)。
问题是当我读取的字节数少于预期时,USB api 返回状态“babble”。之后如何保证正常通信?我仍然可以发送数据,但接收数据总是返回错误“DOMException:发生传输错误。”
我尝试运行 device.clearHalt("in", 1)(方向“in”和端点 1),但它也不起作用(抛出“DOMException: Unable to clear endpoint.”)。
有人遇到过这个问题吗?
(我在 OSX 上使用 Chrome 65.0.3325.181)
【问题讨论】:
-
我目前正在调查这种行为。您可以在 crbug.com 上提交问题来描述问题吗?
-
作为记录,我遇到了完全相同的问题,但在我的情况下,我需要始终一次读取 1 个字节,所以我总是在做
transferIn(1, 1)... @ReillyGrant您能否向我们提供有关此问题的最新信息,或者至少将我们与正在处理的问题联系起来?谢谢 -
@gutemberg-ribeiro 检查下面 ReillyGrant 的答案。显然,解决这个问题的最好方法是调用 transferIn ,其长度是端点最大数据包大小的倍数。没试过。
-
@olivervbk 我试过了,但是在实践中我们不能这样做......例如,我们的设备总是报告 max==64。因此,如果我尝试 2 或 64,我很有可能永远不会完成该调用,因为没有数据(发生在这里)。 API 没有解决承诺并说“嘿,我们没有更多数据了”。因此,按字节读取使我的情况更安全。否则,我将不得不继续管理我请求的数量和收到的数量,以停止调用 transferIn()... 非常糟糕的体验...
-
@GutembergRibeiro 是的,我尝试按字节传递数据,但我放弃了,最终用预定义的消息格式将所有内容包装在 Protobuf 中。 AFAICT USB 不是为单字节通信而设计的。
标签: javascript google-chrome usb webusb