2017-08-05 38 views
8

我正尝试使用谷歌浏览器webUSB api访问通过USB连接到我的计算机的读卡器。谷歌浏览器在尝试声明界面时出现USBUSB API错误

依照指示操作,here,一切正常,直到我尝试声称这给了我一个错误的接口:

“无法要求接口0:设备或资源忙”

看来,我OS(linux mint)已经访问过这个设备,并且不允许操作员访问。

任何建议如何克服这一点?

编辑:

当我解除绑定的司机,我收到以下错误:

“无法要求接口0:没有这样的文件或目录”

另外这里的lsusb的输出-v此设备:

Bus 001 Device 012: ID 0ca6:a050 Castles Technology Co., Ltd 
Device Descriptor: 
    bLength    18 
    bDescriptorType   1 
    bcdUSB    2.00 
    bDeviceClass   2 Communications 
    bDeviceSubClass   0 
    bDeviceProtocol   0 
    bMaxPacketSize0  64 
    idVendor   0x0ca6 Castles Technology Co., Ltd 
    idProduct   0xa050 
    bcdDevice   0.00 
    iManufacturer   1 Linux 2.6.32.9 with dwc_otg_pcd 
    iProduct    2 EFT-POS Terminal 
    iSerial     0 
    bNumConfigurations  1 
    Configuration Descriptor: 
    bLength     9 
    bDescriptorType   2 
    wTotalLength   67 
    bNumInterfaces   2 
    bConfigurationValue  2 
    iConfiguration   3 EFT-POS Terminal 
    bmAttributes   0xc0 
     Self Powered 
    MaxPower    2mA 
    Interface Descriptor: 
     bLength     9 
     bDescriptorType   4 
     bInterfaceNumber  0 
     bAlternateSetting  0 
     bNumEndpoints   1 
     bInterfaceClass   2 Communications 
     bInterfaceSubClass  2 Abstract (modem) 
     bInterfaceProtocol  1 AT-commands (v.25ter) 
     iInterface    4 CDC Abstract Control Model (ACM) 
     CDC Header: 
     bcdCDC    1.10 
     CDC Call Management: 
     bmCapabilities  0x00 
     bDataInterface   1 
     CDC ACM: 
     bmCapabilities  0x02 
      line coding and serial state 
     CDC Union: 
     bMasterInterface  0 
     bSlaveInterface   1 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x82 EP 2 IN 
     bmAttributes   3 
      Transfer Type   Interrupt 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x000a 1x 10 bytes 
     bInterval    32 
    Interface Descriptor: 
     bLength     9 
     bDescriptorType   4 
     bInterfaceNumber  1 
     bAlternateSetting  0 
     bNumEndpoints   2 
     bInterfaceClass  10 CDC Data 
     bInterfaceSubClass  0 Unused 
     bInterfaceProtocol  0 
     iInterface    5 CDC ACM Data 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x81 EP 1 IN 
     bmAttributes   2 
      Transfer Type   Bulk 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x0040 1x 64 bytes 
     bInterval    0 
     Endpoint Descriptor: 
     bLength     7 
     bDescriptorType   5 
     bEndpointAddress  0x01 EP 1 OUT 
     bmAttributes   2 
      Transfer Type   Bulk 
      Synch Type    None 
      Usage Type    Data 
     wMaxPacketSize  0x0040 1x 64 bytes 
     bInterval    0 
Device Qualifier (for other device speed): 
    bLength    10 
    bDescriptorType   6 
    bcdUSB    2.00 
    bDeviceClass   2 Communications 
    bDeviceSubClass   0 
    bDeviceProtocol   0 
    bMaxPacketSize0  64 
    bNumConfigurations  1 
Device Status:  0x0001 
    Self Powered 
+0

由于内核驱动程序被绑定,第一个错误是预期的。第二,我需要更多地了解该设备。你能从'lsusb -v'发布完整的描述符吗? –

+0

@ReillyGrant很长,我把我的问题的编辑部分。 – JDrake

回答

2

“没有这样的文件或目录”(出错代码ENOENT)通常表示提供的接口数量不从然而存在描述符显然不是这种情况,Chrome会拒绝claimInterface返回的承诺,“提供的接口号在当前配置中不受设备支持”。如果它在将请求提交给内核之前认为接口号是无效的。

但我注意到,该设备支持的单个配置的bConfigurationValue为2.有可能当驱动程序被解除绑定时,系统取消配置该设备,现在Chrome已知该设备的当前配置与系统不同步。如果您发现该设备在/sys/bus/usb/devices和打印文件bConfigurationValue它会告诉你的设备,这是我猜的真实当前配置将是0

有不幸的是目前没有办法解决通过WebUSB API这种不匹配但是在解除绑定内核驱动程序后重新启动Chrome将允许它在正确的时间读取该文件,而不会失去同步。

如果这适用于您,请在crbug.com/new提交错误,我们可以制定出避免此问题的最佳方法。

+0

'/ sys/bus/usb/devices'下的'bConfigurationValue'仍然是2。 我重新启动Chrome并再次尝试,除了配置2之外的任何内容都会给我配置超出范围的错误。但是这一次,错误被改回:'无法声明接口0:设备或资源忙碌',尽管设备已经被绑定。 – JDrake

相关问题