【问题标题】:Unable to Claim WebUSB Interface(device or resource busy 16) from Android Tablet. Windows works fine无法从 Android 平板电脑中声明 WebUSB 接口(设备或资源繁忙 16)。 Windows 工作正常
【发布时间】:2019-07-29 21:01:48
【问题描述】:

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

非常感谢任何帮助。

垫子

【问题讨论】:

  • 您要声明的接口的接口类是什么?您说您必须更改 Windows 10 上的默认驱动程序,Windows 加载的是什么驱动程序?
  • 您好,感谢您的回答,这是我从 chrome://usb-internals 得到的:配置 1 -- 接口 0 ---- 备用 0 ------ 类代码 7 - ----- 子类代码 1 ------ 协议代码 2 ------ 端点 1 (IN) ------ 端点 3 (OUT) --------Usb 传输类型:BULK --------Packet Size: 64 ``` 老实说,我不记得 windows 正在加载的默认驱动程序。

标签: android progressive-web-apps webusb


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 2022-12-03
      • 2017-09-02
      • 1970-01-01
      • 2016-08-29
      • 2015-09-24
      相关资源
      最近更新 更多