我使用usbmon来分析usb数据包,并在webusb中实现它但是我无法找到解决方案。这是Sane发送给usb的信息:
S Co:1:074:0 s 02 01 0000 0081 0000 0
C Co:1:074:0 0 0
S Co:1:074:0 s 02 01 0000 0002 0000 0
C Co:1:074:0 0 0
类似于controlTransferOut()命令,requestType = Standard,recipient:'endpoint',request:1,index:0x00,value:129
这里的'值'非常棘手,因为所有其他参数都应该根据文档正确,但是发送值:129应该发送如下内容:
S Co:1:074:0 s 02 01 0081 0000 0000 0
然而,我得到的是:
Uncaught (in promise) DOMException: The specified endpoint number is out of range.
虽然value是unsigned short,但是max 0xffff!所以显然值应为0,然后下一个半字节0x0081。我的问题是如何在第二个半字节中触发控制输出(Co)值?
代码是这样的:
navigator.usb.requestDevice({ filters: [{ vendorId: 0x1083}] })
.then(selectedDevice => {
device = selectedDevice;
return device.open(); // Begin a session.
})
.then(() => device.selectConfiguration(1))
.then(() => device.claimInterface(0))
.then(() => device.controlTransferOut({
requestType: 'standard',
recipient: 'endpoint',
request: 0x00,
value: 129,
index: 0x00}))
所有其他组合都以响应“Stall”发送(例如,类,接口:21 - 供应商,设备:40 ......等)。
设备描述和端点描述符可用here
谢谢
答案 0 :(得分:1)
刚刚找到它,请求应该是:
device.controlTransferOut({
requestType: 'standard',
recipient: 'endpoint',
request: 1,
value: 0,
index: 129})
这给:
S Co:1:075:0 s 02 01 0000 0081 0000 0 C Co:1:075:0 0 0
这正是我所需要的。