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
驱动程序的设备。任何建议将不胜感激。
这是由于我的设备固件代码配置错误(没有初始化或对端点进行任何设置!)
问题已经解决,我可以正确发送数据了。
我正在开发将通过 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
驱动程序的设备。任何建议将不胜感激。
这是由于我的设备固件代码配置错误(没有初始化或对端点进行任何设置!)
问题已经解决,我可以正确发送数据了。