WebUSB限制controlTransferOut?

时间:2018-01-18 06:06:40

标签: google-chrome endpoint webusb

我使用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

谢谢

1 个答案:

答案 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

这正是我所需要的。