如何在 WebUSB 中找到正确的 USB 设备配置和接口?

How to find correct USB device configuration and interface for use in WebUSB?

在 WebUSB 中,要连接到设备,我们必须 select configurationinterface
还可以选择使用备用界面。

我怎么知道要使用哪些?
我是否需要事先知道这一点,或者我可以尝试检测每个设备?

if (!device.configuration)    await device.selectConfiguration(0);

await device.claimInterface(device.configuration.interfaces[0].interfaceNumber)

假设我可以使用热敏打印机和相机,我能检测到每一个吗?

此外,如何检查设备是否已被认领?我必须检查每个接口吗?

How can I know which ones to use? Do I need to know this beforehand or can I try to detect for each device?

正如https://web.dev/devices-introduction/#:~:text=human-readable%20protocol.-,With,-WebUSB%2C%20without%20clear所说,没有关于此设备的明确文档以及此设备支持的USB命令,这很难,但幸运的猜测仍然是可能的。

使用外部工具(如 Wireshark)和内置浏览器工具(如基于 Chromium 的浏览器中的内部页面 about://usb-internals)观看 Exploring WebUSB and its exciting potential from Suz Hinton. You can also reverse-engineer this device by capturing raw USB traffic and inspecting USB descriptors

Lets say I can have thermal printers and cameras for example, would I be able to detect for each one?

相机可能会被挡住。在 about://usb-internals/ 中检查您的设备会告诉您应该看到的 "Blocked by WebUSB" 情况。

Also, how can I check if a device is already claimed? Do I have to check every interface?

一般来说,我建议https://web.dev/usb/ and https://www.beyondlogic.org/usbnutshell/usb1.shtml分别从WebUSB和USB入手。

对于您的具体问题,如果无法执行这些操作,device.open()device.claimInterface() 承诺将失败。