问题描述
我有一个专有的 USB 设备,它具有通过 USB 闪烁的功能。我想从浏览器中复制此闪烁功能,但我不确定要使用什么 API。
访问 chrome://usb-internals/
检查我的设备给了我以下信息:
设备用类代码 8 宣传自己:大容量存储。该设备没有出现在我的文件系统中,例如它不是普通的 USB 随身碟。根据{{3}},出于安全原因,WebUSB 无法访问大容量存储设备,我应该改用 WebHID。
但是,使用 WebHID 仍然无法连接到我的设备。这是我使用的示例代码:
const filter = [
{
vendorId: 0xabcd,// correct VID:PID obtained via lsusb
productId: 0x1234
}
];
const [device] = await navigator.hid.requestDevice({ filter });
此外,访问 chrome://device-log/
对 USB 和 HID 设备有明显的区别。例如,当我插入鼠标时,Chrome 设备日志显示已连接 USB HID 设备。当我插入 U 盘时,我在调试日志中看到两行:一个 HID 设备,一个大容量存储设备。当我插入我的专有驱动器时,我得到一行:USB 大容量存储设备。
我如何说服 WebHID 连接到我的专有大容量存储设备?
解决方法
没有重大变化是不可能的:
USB mss 存储使用批量端点,HID 通过控制和中断端点传输。
您可以在单个 USB 设备(带有 IAD)上同时实现大容量存储和 HID,但 HID 的引导加载程序代码看起来与大容量存储明显不同。
USB 随身碟通常不支持 HID,除非有 LED 或按钮。
,您可以为该设备安装一个 WinUSB 驱动程序(Zadig 非常简单),然后使用 WebUSB 连接到该设备。
如果您需要编写自己的 SCSI 层,here's how we did it 用于血糖仪,该血糖仪还可安装为大容量存储设备以传输数据。