我尝试使用Google Chrome webUSB api通过USB访问连接到计算机的读卡器。
按照说明here,一切正常,直到我尝试声明给出错误的界面:
"无法声明接口0:设备或资源繁忙"
看来我的操作系统(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 :(得分:2)
"没有这样的文件或目录" (错误代码ENOENT)通常表示提供的接口号不存在,但是从描述符中显然不是这种情况,Chrome会拒绝claimInterface返回的承诺"设备不支持提供的接口号它目前的配置。"如果在将请求提交给内核之前认为接口号无效。
但是,我注意到此设备支持的单一配置的bConfigurationValue
为2.当驱动程序未绑定时,系统可能会取消配置设备,现在知道Chrome的知识设备的当前配置与系统不同步。如果您在/sys/bus/usb/devices
中找到该设备并打印文件bConfigurationValue
,它将告诉您设备的真实当前配置,我猜测它将为0.
遗憾的是,目前无法通过WebUSB API修复此不匹配问题,但在解除内核驱动程序绑定后重新启动Chrome将允许它在正确的时间读取此文件而不会失去同步。
如果这对您有用,请在crbug.com/new提交错误,我们可以制定出最好的方法来避免此问题。