问题标签 [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.
javascript - WebHID API:断开连接事件未触发
我正在尝试使用 WebHID API 从 USB HID 设备获取断开连接事件。
编码:
设备连接成功,但在关闭或与计算机断开连接后,disconnect
不会触发事件。
我做错了什么还是一个错误?
javascript - WebHID API:重新连接设备
是否可以在断开连接并再次与 USB 电缆连接后“静默”(不调用navigator.hid.requestDevice
)重新连接隐藏设备?
navigator.hid.getDevices
不是一个选项,它在断开连接后不会返回设备。
javascript - 在 Chrome 上使用 WebHID 未找到兼容设备
我正在尝试将ACR122U NFC 阅读器与WebHID API一起使用,但我似乎无法让 Chrome 91 Desktop 在 Linux 和 Windows 上找到它。
我知道浏览器正在通过chrome://usb-internals
向我显示此屏幕来看到读者:
到目前为止,我尝试过的两段代码可以通过 script 标签中的 Inspect Element 工具看到。脚本中的 VendorID 和 ProductID 与 Chrome 可以识别的内容相匹配,所以我不确定它为什么不适用。
我让读者出现的唯一弹出对话框是Chrome NFC WebUSB,但我不能使用该 API,因为它实现了一个受保护的类,这就是为什么我使用 WebHID 作为替代方案,希望它可以工作。
如何更正我的代码以允许 Chrome 识别此设备;我错过了什么?
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 将此比例归零?
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
对象中的不同数据:
这次我在我的一个outputReports
.
输出:(Linux用于比较)
另外HIDDevice.collections
我在linux上:
所以我仍然不明白如何使用featureReports
,InputReports
或OutputReports
. 所以我发现我从 Windows 上的 Wacom 驱动程序中获得的 HID 数据比 Linux 上的要多。
更新 2:
我一直在查看HIDDevice.collection
Windows 输出上的对象,并将其与Report Descriptors
我在 Linux 上运行(以使它们可读)得到的usbhid-dump
进行hidrd-convert
比较。这是我到目前为止所发现的。
看起来我只需要查看
inputReports
适当的元素,reportID
因为我只是想读取发送到主机的传感器数据。我查看数组
items
以查看报告发送了哪些数据。- 我查看项目的索引号以了解从 DataView(我的变量)
items
中提取数据的顺序。data
- 我查看
reportCount
并reportSize
了解 DataView 中该项目的数据形状。 - 我查看每个项目的“使用情况”以了解数据的用途。
- 不幸的是,WebHID 似乎并没有在每个项目的基础上公开“使用情况” (就像我在节目中的“报告描述符”
usbhid-dump
一样)。相反,它仅在每个集合的基础上公开它。 - 可以在HID 使用表中查找“使用情况”(如果可用),方法是通过 的十六进制值查找“使用页面” ,然后对给定的十六进制值执行相同
usagePage
操作。collection
usage
- 不幸的是,WebHID 似乎并没有在每个项目的基础上公开“使用情况” (就像我在节目中的“报告描述符”
- 我查看项目的索引号以了解从 DataView(我的变量)
例子:
这是我在 Windows 版本上拆分我进入的数据和数组时所做的事情。第一个items[1-6]是 1 位,items[7]是2 位,items[7-10]是 16 位,依此类推。
同样,由于 WebHID 不会针对每个项目公开“使用情况”,因此每个项目映射到的传感器/按钮仍然未知。至少在单独测试每个简单的测试之外,这在如此复杂的设备上很难做到。
更新 3:
事实证明,我的用例并不需要WebHID API
(从我的数字化仪获取传感器输入)。看起来PointerEvent
和MouseEvent
属性可以满足我的需求。(真的,实际上应该先看看那个(;一_一))至少,我学会了一些如何使用WebHID API。
javascript - 使用 WebUSB API 从条形码扫描仪读取数据
我正在尝试使用 WebUSB API 从 USB 条码设备读取数据。
(具体来说,我使用的是 Datalogic QuickScan Lite qw2100。我已将扫描仪配置为使用 USB-COM-STD 接口。)
使用下面的代码,我实际上可以从设备中读取数据。但只能逐个字符。即transferIn
调用只返回 1 个字符。所以要读取整个条形码,我需要循环。
我的问题:
这是 transferIn 的预期行为吗?还是我使用了错误的界面?或者可以使用 controlTransferOut 配置传输模式吗?
此外,其他 USB 接口设置均基于 interfaceClass 10 (HID)。但是我没有运气在这个设备上使用 WebHID。
NotAllowedError: Failed to open the device.
当我尝试调用open()
HIDDevice 对象时出现错误。最后但同样重要的是,使用 WebUSB(或 WebHID)是构建条形码应用程序的实用途径。我见过很多使用 WebUSB 的 USB 设备示例,但很少有条码阅读器的示例。这让我觉得我走错了路。
亲切的问候!
javascript - WEBHID API:Inputreport 不使用条码扫描器触发
我几乎在使用 Nintendo Switch Joy-Con 控制器演示,我已经对其进行了一些修改,以使其与我的条形码扫描仪一起使用。而且它只是不起作用,如果它确实起作用,它会在 100 次站点刷新中起作用。
每次我用条形码扫描仪扫描某些东西时都会触发 openButton.onclick 事件。正因为如此,每次我扫描某些东西时,它都会尝试再次执行 device.open() 。并且 inputreport 事件根本不会触发。
有谁知道是什么原因造成的?
javascript - 什么时候应该使用 WebHID 而不是 WebUSB?
我有一个专有的 USB 设备,它通过 USB 具有闪烁功能。我想从浏览器中复制这个闪烁功能,但我不确定要使用什么 API。
访问chrome://usb-internals/
检查我的设备给了我以下信息:
该设备使用类别代码 8:大容量存储来宣传自己。该设备没有出现在我的文件系统中,例如它不是普通的 USB 随身碟。根据这个 StackOverflow 答案,由于安全原因,WebUSB 被阻止访问大容量存储设备,我应该改用 WebHID。
但是,使用 WebHID 仍然不允许我连接到我的设备。这是我使用的示例代码:
此外,访问chrome://device-log/
在 USB 和 HID 设备之间存在明显差异。例如,当我插入鼠标时,Chrome 设备日志显示连接了 USB HID 设备。当我插入 USB pendrive 时,调试日志中有两行:一个 HID 设备,一个大容量存储设备。当我插入我的专有驱动器时,我得到一条线:USB 大容量存储设备。
如何说服 WebHID 连接到我的专有大容量存储设备?
google-chrome - 有没有办法绕过 Chrome 浏览器上的 WebHid USB 限制?
Chrome 89 推出了具有安全限制的 WebHid API。
限制包括:
切换浏览器选项卡时,Javascript 无法接收 USB Hid 数据。
当用户打开选择 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)
为了重现限制:
Javascript cannot receive USB Hid data when user is opening select html element
当用户单击“测试”选择元素将其打开时,它将停止接收数据。
Javascript cannot receive USB Hid data when browser tab switched
.
我现在无法每次在Mac+Chrome上重现它,device.addEventListener("inputreport",...)
当Tab切换时,我确实在简单的测试环境中通过API接收了HID设备数据。但我发现它在我的实际生产 React.js 应用程序中停止了,该应用程序运行更多的 javascript 和计时器 ( setInterval )。
ios - iOS 上 WebHID/WebUSB API 的可用性
我知道 WebHID/WebUSB 通常在 Google Chrome ( https://caniuse.com/webhid和https://caniuse.com/?search=webusb ) 中可用,但是这些 API 在 iOS 版本的 Google Chrome 上是否也可用?我收到了来自用户的报告,他们无法在 iOS (iPad) 上连接他们的设备,但不幸的是,我没有可以测试它的设备,也没有在网上找到任何提及它的内容。谁能确认这些 API 在 iOS 版 Chrome 中是否可用?