我在 usbmon3 上使用 Wireshark 来分析进出 USB 的数据包。因此,当我插入设备时,Wireshark 会向我显示发送的内容和接收的内容。
我正在尝试做同样的事情,但使用 Webusb。这是我在javascript中的代码:
navigator.usb.requestDevice({ filters: [{ vendorId: 0x0403 }] })
.then(selectedDevice => {
device = selectedDevice;
return device.open(); // Begin a session.
})
.then(() => device.selectConfiguration(1)) // Select configuration #1 for the device.
.then(() => device.claimInterface(0)) // Request exclusive control over interface #0.
.then(() => device.controlTransferOut({
requestType: 'standard',
recipient: 'device',
request: 0x06,
value: 0x00,
index: 0x00}))
.then(() => device.transferIn(1, 64))
.then(result => {
let decoder = new TextDecoder();
console.log('Received: ' + decoder.decode(result.data));
})
.catch(error => {
console.log(error);
});
当然,我知道如果我只是console.log(device)
在我的控制台中收到设备描述。但我试图了解函数本身,主要是requestType, recipient, request, value, index
通过发送相同的GET DESCRIPTOR (0x06)
命令(如第一张图片)并接收该console.log('Received: ' + decoder.decode(result.data));
部分中的设备描述来了解应该进入字段的内容。我尝试做这么简单的事情的原因是因为我将沿着连接到此 USB 设备的其他设备进行更多传输,所以我需要了解在这些参数中发送什么。
使用该功能后,我再次查看 Wireshark 以了解为什么我没有得到任何东西,然后我得到了这个:
我假设这Broken pipe (-EPIPE) (-32)
是我没有收到任何回复的原因。我不知道我在哪里做错了,我完全迷失了。
谢谢 !!