WebUSB 是否支持超时?

问题描述

USB 库始终支持设置设备操作超时。这是与 USB 设备配合使用的 soft 的重要功能,因为这就是您了解该设备不响应​​您的命令的方式。我查看了 WebUSB Api,目前看起来它不支持超时。

是真的吗?唯一的办法是每次usb操作前手动启动超时,操作成功后停止超时吗?

解决方法

WebUSB 目前不支持传输超时或中止传输,因为在调查了 USB 的各种平台 API 后,似乎无法以一致的方式实现它们。理想情况下,可以通过从 USB 控制器的传输计划中删除传输来取消传输。这在 Linux 上使用 USBDEVFS_DISCARDURB ioctl 是可能的,并且在 macOS 上使用 ReadPipeAsyncTO() 和类似函数支持超时。然而,在 Windows 上取消传输的唯一方法是调用 WinUsb_AbortPipe(),这会影响管道上的所有挂起传输,而不仅仅是超时的传输。

如果您需要对未及时回复 USB 请求的设备做出反应,那么使用 setTimeout()clearTimeout() 手动执行此操作是最佳选择。请记住,USB 传输本身将保持活动状态,并可能在稍后完成。