Не могу претендовать на единственный интерфейс, который я вижу через device.configuration.interfaces

Попытка прочитать USB-сканер штрих-кода на MacOS 10.14.1 в версии Google Chrome 71.0.3578.98 через WebUSB.

С помощью сканера штрих-кода: https://www.ebay.co.uk/itm/Barcode-Scanner-USB-Handheld-Wired-Portable-Laser-Scan-Bar-Code-Reader-Scan-POS/282865082953

Устройство отображается в диалоговом окне requestDevice как Usb211 и успешно открывается, код, который я использовал для этого здесь:

const VENDOR_ID = 0x8888

navigator.usb.requestDevice({ filters: [{ vendorId: VENDOR_ID }] })
.then(selectedDevice => {
  device = selectedDevice;
  return device.open();
})
.then(() => device.selectConfiguration(1))
.then(() => device.claimInterface(device.configuration.interfaces[0].interfaceNumber)) # interfaceNumber is 0 
.catch(error => { console.log(error); });

Когда я пытался claimInterface(0) (единственный интерфейс, доступный в объекте device, он терпит неудачу с ошибкой An attempt to claim a USB device interface has been blocked because it implements a protected interface class. (или SecurityError DOMException The requested interface implements a protected class.) - это ожидается из-за недавних изменений: https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/LZXocaeCwDw/GLfAffGLAAAJ

Есть ли способ как-то «отладить глубже», потому что я не вижу способа использовать только доступный интерфейс.

Спасибо!


person Alex Filatov    schedule 29.12.2018    source источник


Ответы (2)


Если единственный доступный интерфейс заблокирован, то использовать его через API WebUSB невозможно. В разработке находится отдельный API, WebHID, который предназначен для удовлетворения особых требований, когда предоставление доступа к устройствам, которые предоставляют интерфейс HID.

person Reilly Grant    schedule 31.12.2018
comment
Большое спасибо за ответ, решение было проще, опубликую его в ответе - person Alex Filatov; 02.01.2019

Решили это переключением сканера на другой интерфейс - есть 4 режима интерфейса, и один из них («USB VCOM») позволяет иметь 2 доступных интерфейса, поэтому claimInterface(1) был успешным.

person Alex Filatov    schedule 01.01.2019