Я использую Wireshark на usbmon3 для анализа пакетов, входящих и исходящих от 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)
является причиной того, что я ничего не получил обратно. Я не знаю, где я делаю неправильно, и я полностью потерян.
Спасибо !!