Невозможно запросить интерфейс WebUSB (устройство или ресурс занят 16) с планшета Android. Винда работает нормально

Я пытаюсь подключить USB-термопринтер к своему планшету Android (Samsung Galaxy Tab S4, Android 9) через WEBUSB, но при попытке запросить интерфейс я получаю эту ошибку: «Не удалось запросить интерфейс 0: устройство или ресурс заняты. (16) "

Я публикую код, но не думаю, что проблема здесь, поскольку он отлично работает в Windows 10 (после изменения драйвера по умолчанию на WinUSB с помощью Zadig):

this.printerProvider = navigator['usb'];
        this.printerProvider.requestDevice({filters: []})
            .then(selectedDevice => {
                this.device = selectedDevice;
                return this.device.open();
            })
            .then(() => {
                return this.device.selectConfiguration(1);
            })
            .then(() => {
                return this.device.claimInterface(this.device.configuration.interfaces[0].interfaceNumber);
            })
            .then(() => {
                for (let ep of this.device.configuration.interfaces[0].alternate.endpoints) {
                    if (ep.direction == 'out') {
                        this.endpoint = ep;
                        console.log('USB PRINTER CONNECTED')
                    }
                }
            })
            .catch((err) => {
                console.log(err);
            })

и фактически я получил тот же результат, используя прекрасный инструмент, представленный в этой статье: https://labs.mwrinfosecurity.com/blog/webusb/ этот инструмент в основном пытается заявить права на все интерфейсы.

Итак, я предполагаю, что Android сам потребовал интерфейс. Я также попытался включить параметры разработчика, чтобы увидеть, есть ли там что-то полезное, но ничего не нашел.

Любая помощь очень ценится.

Мат


person Magnetizzato    schedule 29.07.2019    source источник
comment
Каков класс интерфейса для интерфейса, на который вы претендуете? Вы говорите, что вам пришлось изменить драйвер по умолчанию в Windows 10, какой драйвер вместо этого загружал Windows?   -  person Reilly Grant    schedule 30.07.2019
comment
Привет, спасибо за ответ, вот что я получаю от chrome: // usb-internals: Configuration 1 - Interface 0 ---- Alternate 0 ------ Class Code 7 ------ Subclass Code 1 ------ Код протокола 2 ------ Конечная точка 1 (IN) ------ Конечная точка 3 (OUT) -------- Тип передачи USB: BULK ------ - Размер пакета: 64 `` Честно говоря, я не помню драйвер по умолчанию, который загружал Windows.   -  person Magnetizzato    schedule 01.08.2019


Ответы (2)


что lsusb -v говорит, когда принтер подключен к розетке? ls /sys/bus/usb/devices также должен указывать фактическую конфигурацию. возможно, попробуйте установить режим USB-порта на "только зарядка" (потому что тогда не должно быть загружено никакого конкретного драйвера ядра) ... или попробуйте демо.

person Martin Zeitler    schedule 29.07.2019

Дескриптор интерфейса показывает, что это устройство класса USB Printer (протокол 2 указывает на двунаправленность). Насколько мне известно, Android не поставляется с драйвером для этого класса интерфейса USB, встроенным в ядро. Что может происходить, так это то, что на устройстве есть другое приложение (например, служба принтера), которое заявило об этом интерфейсе. Проверьте раздел «Печать» в настройках системы и посмотрите, установлено ли у вас что-нибудь.

person Reilly Grant    schedule 07.08.2019