Google Chrome WebUSB API error while trying to declare an interface

I am trying to use Google Chrome webUSB api to access a card reader connected to a computer via USB.

Following the instructions here , everything is fine until I try to request an interface that gives me an error:

"Failed to request interface 0: device or resource busy

It seems that my OS (linux mint) gained access to this device and does not allow the operator to have access.

Any suggestions on how to overcome this?

EDIT:

When I disconnect the driver, I get the following error:

"Failed to request interface 0: no such file or directory"

Here is also the output of lsusb -v for this device:

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 
+8
javascript google-chrome webusb
source share
1 answer

“There is no such file or directory” (ENOENT error code) usually indicates that the provided interface number does not exist, but this is clearly not the case with the descriptors, and Chrome rejected the promise returned by the Interface request with “The interface number provided is not supported by the device in its current configuration " if he considered that the interface number was invalid before sending the request to the kernel.

However, I noticed that for one configuration supported by this device, bConfigurationValue of 2 is provided. It is possible that when the driver was not connected, the system did not configure the device, and now Chrome’s knowledge of the current device configuration is not synchronized with the system. If you find the device in /sys/bus/usb/devices and print the bConfigurationValue file, it will tell you the true current device configuration, which I assume will be 0.

Unfortunately, there is currently no way to fix this discrepancy through the WebUSB API, however restarting Chrome after untying the kernel driver will allow it to read this file at the right time and not be out of sync.

If this works for you, write a bug at crbug.com/new and we can work out the best way to avoid this problem in the future.

+2
source share

All Articles