【发布时间】:2020-06-07 21:14:09
【问题描述】:
无法定义要发送到我的串行设备(通过 USB 连接)的数据。
我如何获得设备:
function callTransfer(temp1) {
temp1.controlTransferOut({
requestType: 'standard',
recipient: 'device',
request: 0x07,
value: 0x08,
index: 0x04
})
.then(() => {
console.log('sent req'); device.transferIn(1, 32)
}) // Waiting for 32 bytes of data from endpoint #1.
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error);
});
}
navigator.usb.requestDevice({
filters: [{}]
}).then((selectedDevice) => {
device = selectedDevice;
return device.open()
.then(() => device.reset())
.then(() => device.selectConfiguration(1))
.then(() => device.claimInterface(device.configuration.interfaces[0].interfaceNumber))
.then(() => {
callTransfer(device);
})
});
之后我可以进入wireshark 并读取值:
recipient = usb.bmRequestType (but not freely definable it is an enum - link see below)
request = usb.setup.bRequest
value = usb.setup.wValue
index = usb.setup.wIndex
但对于我的设备,我还需要设置 usb.LanguageId、usb.DescriptorIndex 等。 收件人也不属于这 4 个enums
有没有办法发送原始数据或设置更多属性?
知道有 transferOut 函数,但是当我尝试它时,它只是在最后转储它,这对我的问题不起作用。
试图更改接收者或请求参数,但它不起作用,或者更糟糕的是,向 controlTransferOut 对象添加更多参数似乎并没有改变任何东西。
资源:
【问题讨论】:
-
如果你想在控制台运行。在某些情况下似乎受到限制。
标签: google-chrome serial-port driver webapi webusb