问题描述
WebUSB的coverage非常有限,但这对这个项目是可以的。
navigator.usb.requestDevice
方法成功:
navigator.usb.requestDevice({
filters: [{
vendorId: RECEIVER_vendOR_ID,productId: RECEIVER_PRODUCT_ID
}]
})
Chrome会(通过模式交互)获得访问设备的许可。
对于浏览器,该设备存在:
console.log(device)
USBDevice {usbVersionMajor: 2,usbVersionMinor: 0,usbVersionSubminor: 0,deviceClass: 2,deviceSubclass: 2,…}
configuration: null
configurations: [USBConfiguration]
deviceClass: 2
deviceProtocol: 0
deviceSubclass: 2
deviceVersionMajor: 2
deviceVersionMinor: 0
deviceVersionSubminor: 0
manufacturerName: "STMicroelectronics"
opened: true
productId: 22336
productName: "STM32 Virtual ComPort"
serialNumber: "355837673037"
usbVersionMajor: 2
usbVersionMinor: 0
usbVersionSubminor: 0
vendorId: 1155
__proto__: etc...
我所关注的示例receiver与Mozilla docs相呼应:
await usbDevice.selectConfiguration(1)
通过Web.dev article引导我通过网络访问USB,同时希望有一些SO Magic。
我看不到/在做什么?
谢谢。
更新
检查chrome:// device-log(级别Debug)返回:
USBUser[14:51:38] USB device added: vendor=1155 "STMicroelectronics",product=22336 "STM32 Virtual ComPort",serial="355837673037",guid=2bd99a9a-75bf-4782-8a0d-2f9e13b06e86
USBUser[14:51:30] USB device removed: guid=1b763328-45db-4152-9c56-9b592d614c3e
USBEvent[14:51:30] Failed to clear halt: Pipe error
解决方法
由于USB(甚至是WebUSB)似乎比我使用的http连接更脆弱,所以与使用Javascript界面并行的同时,我还使用PyUSB提取数据。目标是将设备中的数据写入CSV文件,以便两者均可工作。
在此related post中,我概述了该过程中的一些其他步骤,包括:
- 重新启动计算机
- 已连接设备
- 一条好 USB电缆
- 在调试级别检查
chrome://device-log
- 使用Serial App的演示
- 使用
kexstat
检查状态,使用kextunload
“取消声明” - 使用
dmesg
查看内核日志
我想接受一个比此更健壮的“答案”,但我终于看到了一些数据:
let rawStream = new Uint8Array(data.buffer)
console.log(rawstream)
Uint8Array(69) [51,48,49,32,13,10]
和
let segments = String.fromCharCode.apply(null,rawStream).split(' ')
console.log(segments)
["300","V1.06","585AEEDD","00000000","
↵"]