DOMException:无法设置设备配置 Chrome 86

DOMException: Unable to set device configuration Chrome 86

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 I am following echoes the Mozilla docs:

await usbDevice.selectConfiguration(1)

(ReceiverParcer is here)

通过 Web 访问 USB 上的 Web.dev article 我的方法,同时希望有一些 SO Magic。

我不是什么seeing/doing?

谢谢。

更新

正在检查 chrome://设备日志(调试级别)returns:

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数据线
  • 正在 DEBUG 级别检查 chrome://device-log
  • 使用 Serial App
  • 的演示
  • 使用 kexstat 检查状态,使用 kextunload“取消声明”
  • 查看内核日志 dmesg

我很乐意接受比这更可靠的“答案”,但我终于看到了一些数据:

let rawStream = new Uint8Array(data.buffer)
console.log(rawstream)

Uint8Array(69) [51, 48, 49, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 13, 10]

let segments = String.fromCharCode.apply(null, rawStream).split(' ')
console.log(segments)

 ["300", "V1.06", "585AEEDD", "00000000", "00000000", "00000000", "00000000", "00000000", "00000000", "
↵"]