Chrome WebUSB controlTransferOut 结果 "Transfer failed: A device attached to the system is not functioning. (0x1F)"

Chrome WebUSB controlTransferOut Results in "Transfer failed: A device attached to the system is not functioning. (0x1F)"

我正在开发将通过 Web 界面配置的消费类 USB 设备。

第一个界面是HID Gamepad。第二个是将处理配置的供应商接口。

运行 这个 WebUSB 代码,我得到以下错误:

async () => {
  try {
    let device = await navigator.usb.requestDevice();

    await device.open();
    await device.selectConfiguration(1);
    await device.claimInterface(1);
    await device.controlTransferOut({ // ERROR OCCURS AT THIS LINE!
      requestType: "vendor",
      recipient: "interface",
      request: 0x01,
      value: 0x01,
      index: 0x01,
    });
    const dataToSend = new ArrayBuffer(8);
    dataToSend[0] = 2;
    let result = await device.transferOut(4, dataToSend);

    const decoder = new TextDecoder();
    console.log("Received: " + decoder.decode(result.data));
  } catch (error) {
    console.error(error);
  }

输出DOMException: A transfer error has occurred.

检查 Chrome 设备日志,我在 chrome://device-log/ 中看到了这个:

[22:21:07] Transfer failed: A device attached to the system is not functioning. (0x1F)

旁注:我几乎可以肯定这段代码在 6 个月前就可以工作了,我依稀记得它可能与下一部分有关(特别是“驱动程序”:)

[22:15:57] USB device added: path=\?\usb#vid_0f0d&pid_00cc#a&33dbaa40&1&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed} vendor=3853 "keyboard.gg", product=204 "Edgeguard", serial="", driver="usbccgp", guid=c240342b-ed28-41aa-a8c9-bc505467059e

我的第一个危险信号是设备正在使用 driver="usbccgp" - 我期待看到 WinUsb。使用名为 Zadig 的工具,我可以看到第一个接口不是 WCID,但第二个是(请注意:我没有手动更改其中任何一个,这是 Windows 检测到的。)

我记不清了,但我认为这次传输可能会失败,因为 Chrome 正在添加带有 usbccgp 驱动程序的设备。任何建议将不胜感激。

这是由于我的设备固件代码配置错误(没有初始化或对端点进行任何设置!)

问题已经解决,我可以正确发送数据了。