0

我正在尝试通过 WEBUSB 将 USB 热敏打印机连接到我的 Android 平板电脑(Samsung Galaxy Tab S4、Android 9),但在尝试声明接口时出现此错误:“未能声明接口 0:设备或资源忙(16)"

我正在发布代码,但我认为问题不在这里,因为它在 Windows 10 上运行良好(在使用 Zadig 将默认驱动程序更改为 WinUSB 之后):

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 本身已经声明了这个接口。我还尝试启用开发人员选项以查看那里是否有有用的东西,但我没有找到任何东西。

非常感谢任何帮助。

4

2 回答 2

0

接口描述符显示这是一个 USB 打印机类设备(协议 2 表示双向)。据我所知,Android 没有为内核中内置的这个 USB 接口类提供驱动程序。可能发生的情况是设备上的另一个应用程序(例如打印机服务)已声明此接口。检查系统设置中的“打印”部分,看看您是否安装了任何东西。

于 2019-08-07T17:15:03.390 回答
0

lsusb -v插入打印机时会说什么?ls /sys/bus/usb/devices还应列出实际配置。也许尝试将 USB 端口模式设置为“仅充电”(因为那时不应该加载任何特定的内核驱动程序)......或者尝试演示

于 2019-07-29T21:39:47.727 回答