问题标签 [webhid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
302 浏览

javascript - WebHID API:断开连接事件未触发

我正在尝试使用 WebHID API 从 USB HID 设备获取断开连接事件。

编码:

设备连接成功,但在关闭或与计算机断开连接后,disconnect不会触发事件。

我做错了什么还是一个错误?

0 投票
1 回答
299 浏览

javascript - WebHID API:重新连接设备

是否可以在断开连接并再次与 USB 电缆连接后“静默”(不调用navigator.hid.requestDevice)重新连接隐藏设备?

navigator.hid.getDevices不是一个选项,它在断开连接后不会返回设备。

0 投票
2 回答
371 浏览

javascript - 在 Chrome 上使用 WebHID 未找到兼容设备

我正在尝试将ACR122U NFC 阅读器WebHID API一起使用,但我似乎无法让 Chrome 91 Desktop 在 Linux 和 Windows 上找到它。

我知道浏览器正在通过chrome://usb-internals向我显示此屏幕来看到读者:

chrome://usb-internals

到目前为止,我尝试过的两段代码可以通过 script 标签中的 Inspect Element 工具看到脚本中的 VendorID 和 ProductID 与 Chrome 可以识别的内容相匹配,所以我不确定它为什么不适用。

我让读者出现的唯一弹出对话框Chrome NFC WebUSB,但我不能使用该 API,因为它实现了一个受保护的类,这就是为什么我使用 WebHID 作为替代方案,希望它可以工作。

如何更正我的代码以允许 Chrome 识别此设备;我错过了什么?

0 投票
1 回答
243 浏览

google-chrome - 如何使用 WebHID 将 USB 秤归零?

我在 Chrome 中使用 WebHID 与支持 USB 的数字秤进行通信。我能够连接到体重秤并订阅体重数据流,如下所示:

我现在收到格式的常规输入Uint8Array(5) [2, 12, 255, 0, 0],其中第四个位置是重量数据。如果我把东西放在秤上,它会变成Uint8Array(5) [2, 12, 255, 48, 0]4.8 磅。

我想将秤归零(去皮),使其当前的受阻状态成为新的零点。成功归零后,我希望秤Uint8Array(5) [2, 12, 255, 0, 0]再次开始返回。我目前对此的最佳猜测是:

这是基于HID 销售点使用表中的下表文本

第一个字节是报告 ID,根据表格为 2。对于第二个字节,我希望将 ZS 操作设置为 1,因此设置为 00000010,因此也设置为 2。sendReport将 Report Id 作为第一个参数,并将所有后续数据的数组作为第二个参数。当我将它发送到设备时,它不会被拒绝,但它不会将比例归零,并且response是未定义的。

如何使用 WebHID 将此比例归零?

0 投票
1 回答
230 浏览

javascript - WebHID API:如何解析来自 inputReport 事件的数据?

我正在尝试使用 WebHID API 从我的数字化仪(X Tilt、Y Tilt、Tip Pressure、Tip Switch、Eraser、Pen、Puck 等)获取传感器输入。这是我到目前为止所得到的:

index.js:

控制台输出:

如何找出每个数字对应的传感器?

我已经尝试阅读WebHID 规范HID 使用表,但到目前为止我一直无法找到解密输出所需的信息。


更新:

安装 Wacom 的官方驱动程序后,我在 Windows 中进行了测试,我从 InputReport 中获得了更多数据。

输出:(带有 wacom 驱动程序的 Windows)

注意:我已经记录了reportId这次,因为我现在得到了 2 个不同的。

我还注意到HIDDevice.collections对象中的不同数据: devtools 截图窗口 这次我在我的一个outputReports.

输出:(Linux用于比较)

另外HIDDevice.collections我在linux上: 在此处输入图像描述

所以我仍然不明白如何使用featureReports,InputReportsOutputReports. 所以我发现我从 Windows 上的 Wacom 驱动程序中获得的 HID 数据比 Linux 上的要多。


更新 2:

我一直在查看HIDDevice.collectionWindows 输出上的对象,并将其与Report Descriptors我在 Linux 上运行(以使它们可读)得到的usbhid-dump进行hidrd-convert比较。这是我到目前为止所发现的。

  • 看起来我只需要查看inputReports适当的元素,reportID因为我只是想读取发送到主机的传感器数据。

  • 我查看数组items以查看报告发送了哪些数据。

    • 我查看项目的索引号以了解从 DataView(我的变量)items中提取数据的顺序。data
    • 我查看reportCountreportSize了解 DataView 中该项目的数据形状。
    • 我查看每个项目的“使用情况”以了解数据的用途。
      • 不幸的是,WebHID 似乎并没有在每个项目的基础上公开“使用情况” (就像我在节目中的“报告描述符”usbhid-dump一样)。相反,它仅在每个集合的基础上公开它。
      • 可以在HID 使用表中查找“使用情况”(如果可用),方法是通过 的十六进制值查找“使用页面” ,然后对给定的十六进制值执行相同usagePage操作。collectionusage

例子:

这是我在 Windows 版本上拆分我进入的数据和数组时所做的事情。第一个items[1-6]是 1 位,items[7]是2 位,items[7-10]是 16 位,依此类推。

同样,由于 WebHID 不会针对每个项目公开“使用情况”,因此每个项目映射到的传感器/按钮仍然未知。至少在单独测试每个简单的测试之外,这在如此复杂的设备上很难做到。

更新 3:

事实证明,我的用例并不需要WebHID API(从我的数字化仪获取传感器输入)。看起来PointerEventMouseEvent属性可以满足我的需求。(真的,实际上应该先看看那个(;一_一))至少,我学会了一些如何使用WebHID API。

0 投票
2 回答
527 浏览

javascript - 使用 WebUSB API 从条形码扫描仪读取数据

我正在尝试使用 WebUSB API 从 USB 条码设备读取数据。

(具体来说,我使用的是 Datalogic QuickScan Lite qw2100。我已将扫描仪配置为使用 USB-COM-STD 接口。)

使用下面的代码,我实际上可以从设备中读取数据。但只能逐个字符。即transferIn调用只返回 1 个字符。所以要读取整个条形码,我需要循环。

我的问题:

  1. 这是 transferIn 的预期行为吗?还是我使用了错误的界面?或者可以使用 controlTransferOut 配置传输模式吗?

  2. 此外,其他 USB 接口设置均基于 interfaceClass 10 (HID)。但是我没有运气在这个设备上使用 WebHID。NotAllowedError: Failed to open the device.当我尝试调用open()HIDDevice 对象时出现错误。

  3. 最后但同样重要的是,使用 WebUSB(或 WebHID)是构建条形码应用程序的实用途径。我见过很多使用 WebUSB 的 USB 设备示例,但很少有条码阅读器的示例。这让我觉得我走错了路。

亲切的问候!

0 投票
1 回答
240 浏览

javascript - WEBHID API:Inputreport 不使用条码扫描器触发

我几乎在使用 Nintendo Switch Joy-Con 控制器演示,我已经对其进行了一些修改,以使其与我的条形码扫描仪一起使用。而且它只是不起作用,如果它确实起作用,它会在 100 次站点刷新中起作用。

每次我用条形码扫描仪扫描某些东西时都会触发 openButton.onclick 事件。正因为如此,每次我扫描某些东西时,它都会尝试再次执行 device.open() 。并且 inputreport 事件根本不会触发。

有谁知道是什么原因造成的?

0 投票
2 回答
519 浏览

javascript - 什么时候应该使用 WebHID 而不是 WebUSB?

我有一个专有的 USB 设备,它通过 USB 具有闪烁功能。我想从浏览器中复制这个闪烁功能,但我不确定要使用什么 API。

访问chrome://usb-internals/检查我的设备给了我以下信息:

USB 设备说明:类代码 8,大容量存储设备

该设备使用类别代码 8:大容量存储来宣传自己。该设备没有出现在我的文件系统中,例如它不是普通的 USB 随身碟。根据这个 StackOverflow 答案,由于安全原因,WebUSB 被阻止访问大容量存储设备,我应该改用 WebHID。

但是,使用 WebHID 仍然不允许我连接到我的设备。这是我使用的示例代码:

此外,访问chrome://device-log/在 USB 和 HID 设备之间存在明显差异。例如,当我插入鼠标时,Chrome 设备日志显示连接了 USB HID 设备。当我插入 USB pendrive 时,调试日志中有两行:一个 HID 设备,一个大容量存储设备。当我插入我的专有驱动器时,我得到一条线:USB 大容量存储设备。

如何说服 WebHID 连接到我的专有大容量存储设备?

0 投票
1 回答
124 浏览

google-chrome - 有没有办法绕过 Chrome 浏览器上的 WebHid USB 限制?

Chrome 89 推出了具有安全限制的 WebHid API。

限制包括:

  1. 切换浏览器选项卡时,Javascript 无法接收 USB Hid 数据。

  2. 当用户打开选择 html 元素时,Javascript 无法接收 USB Hid 数据

.....更多在链接

Chromium 项目中有一个提交The blocklist may be bypassed by passing allow_protected_reports=true when connecting to the devic

有没有办法设置allow_protected_reports=true绕过 UI 上的这些限制,例如chrome://flags

相关链接: https ://web.dev/hid/#security-privacy

2021.10.28更新

MacOS BigSur 11.2.3

Chrome 版本 95.0.4638.54(官方构建)(x86_64)

为了重现限制:

  1. Javascript cannot receive USB Hid data when user is opening select html element

当用户单击“测试”选择元素将其打开时,它将停止接收数据。

代码沙盒上的工作示例

  1. Javascript cannot receive USB Hid data when browser tab switched.

我现在无法每次在Mac+Chrome上重现它,device.addEventListener("inputreport",...)当Tab切换时,我确实在简单的测试环境中通过API接收了HID设备数据。但我发现它在我的实际生产 React.js 应用程序中停止了,该应用程序运行更多的 javascript 和计时器 ( setInterval )。

0 投票
1 回答
96 浏览

ios - iOS 上 WebHID/WebUSB API 的可用性

我知道 WebHID/WebUSB 通常在 Google Chrome ( https://caniuse.com/webhidhttps://caniuse.com/?search=webusb ) 中可用,但是这些 API 在 iOS 版本的 Google Chrome 上是否也可用?我收到了来自用户的报告,他们无法在 iOS (iPad) 上连接他们的设备,但不幸的是,我没有可以测试它的设备,也没有在网上找到任何提及它的内容。谁能确认这些 API 在 iOS 版 Chrome 中是否可用?