问题标签 [hid-device]

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 投票
6 回答
90650 浏览

linux - 如何在 Linux 上捕获原始 HID 输入?

我想要完成的简短版本:我有一个作为通用 HID 设备实现的脚踏板(INFINITY-IN-USB-1,如果有兴趣的话),我希望它的行为CtrlAlt按键一样Linux。我正在寻找 X 级别的东西,即不仅仅是单个程序。

更长的版本:我通过调用 DLL 函数RegisterRawInputDevicesGetRawInputData并在隐藏窗口中侦听输入,使此设置在 Windows XP 中工作。这一切都是通过一个相当简单的AutoHotkey脚本完成的(如果有人感兴趣,我可以在这里发布)。关键是,不需要任何额外的驱动程序等;只需要本机 Windows DLL 文件。

我希望这个设置可以在 Linux 上运行(更具体地说是 Ubuntu 下的GNOME,但我偶尔会使用其他发行版/窗口管理器,因此感谢 X 级别的解决方案)。此脚踏板不会将自己注册为键盘甚至操纵杆,而是使用 UsagePage 12,Usage 3 注册为 HID 设备。

我注意到最新的 Ubuntu 可以检测和使用Microsoft Natural Keyboard上最喜欢的键,这些键也注册为 HID 设备*。我使用与使用脚踏板相同的方法在 Windows 上使用这些键(即,没有捆绑软件)。所以我假设这个踏板也可以在 Linux 上运行,但问题是如何?

(我对 Linux 上的低级内容不熟悉,所以请在适用时提供介绍或教程的链接。)

* 对于不知情的人,Microsoft Natural Keyboard 注册为常规键盘和通用 HID 设备。如果某些应用程序(例如捆绑应用程序)不知道如何解释 HID 输入,则常规键将起作用,但收藏夹键和特殊功能键无用。


澄清一下,Linux没有将踏板按下视为输入。它确实可以识别 USB 设备,但xev没有为踏板按下提供任何输出。我已经看到有人在Wine下成功使用踏板进行转录软件的报告,但这必须以 Windows 方式工作,并且不能提供我想要的(这使得踏板看起来像所有本地 Linux 应用程序的键盘)。是否需要一些低级 Linux 键盘驱动程序?


这里有一些更多信息:如果我在终端发出这个

dev/usb/hiddev0是我的踏板),我得到与我的踏板压力相对应的原始代码。这是一个开始。我知道这些原始代码是什么意思:在二进制中,0001、0010、0100 分别对应于每个踏板,踏板按下的组合发送这些二进制数的组合,并释放仍然按下的任何踏板的踏板触发输入(如果全部踏板抬起,发送 0000)。

我怎样才能让 X 收听dev/usb/hiddev0原始代码并将其翻译成可能的特殊键码,以便我可以使用 xmodmap 或其他东西映射它们?

0 投票
1 回答
2710 浏览

eclipse - linux usb-hid:将 libhid 库添加到 eclipse(C++) 或 netbeans IDE 或本机 input.h 或 hiddev.h?

我对libhid有疑问。

我发现有 2 方式 4 访问linux 中的 usb-hid

1) linux 默认库,如input.hhiddev.h和 ...

2)使用libhid

我发现 libhid 有些令人困惑并尝试使用 input.h 但我对那个 2 有问题。

我不知道如何从 ubuntu 获取有关我的设备的信息

我使用 open() 打开设备

然后使用 ioctl 获取信息

但它给了我错误的供应商和产品 ID

然后我尝试使用 libhid 但知道如何在 eclipse 或 netbeans 中使用 libhid (或任何其他库)

你能告诉我你是如何编译你的代码的,比如 eclipse 或 netbeans 或者只是使用终端和 gcc?或者如何使用 ioctl() 和 open() ?

我的整个示例代码:

0 投票
0 回答
903 浏览

vb.net - 如何控制 RFID 阅读器的 HID 输出

我有 2 个与 HID 驱动程序通信的 rfid 阅读器。和 2 个值为 0008478651 和 0008776392 的 rfid 标签。当我将一个标签交换到第一个 rfid 阅读器时,它工作得很好,结果在记事本中显示 0008478651,但是当我在 2 个 rfid 阅读器中交换其中的 2 个时,结果显示 00008700847876653921。我发现rfid 阅读器将值逐个发送到记事本,因此当第二个标签交换并且记事本尚未完成显示所有第一个标签值的字符时,记事本将在第一个值标签的未完成字符上读取第二个标签。

所以,为了处理这个问题,我想知道如何控制 HID 输出以发送每个完整字符的 rfid 值。

顺便说一句,实际上我使用 rfid 开发 vbnet 应用程序

0 投票
2 回答
810 浏览

c# - 用于读取沙特阿拉伯身份证的高级 .NET SDK

我最近开发了一个 C# 应用程序,可以读取阿联酋身份证中的 PCSC 芯片,使用阿联酋身份管理局提供的 SDK 和 HID OMNIKEY 3121 设备。但我需要阅读所有带有 PCSC 芯片的 GCC 身份证,比如阿曼,主要是沙特阿拉伯。

但是我在网上找到的所有 API 都是低级的,我必须发送字节命令来读取数据。我什至尝试遵循一些教程,但没有运气。

是否有任何高级 SDK 可用于读取任何 PCSC 芯片卡?

0 投票
0 回答
169 浏览

usb - 同时读取和 ioctl 到 USB hiddev 文件

我正在尝试通过 ioctl 访问 /dev/usb/hiddevX 文件并读取函数。首先我开始一个阻塞读取(新线程)来接收隐藏事件。只要我不通过 ioctl 访问设备,它就可以正常工作。在此之后,我不再收到任何隐藏事件(阻塞读取不会返回)。

对于所有操作,使用相同的文件处理程序(读取/ioctl)。这是正常的行为吗?有什么我做错了吗?

非常感谢你,汤姆

0 投票
0 回答
197 浏览

ios - 是否可以在 iOS 应用程序中接收 HID 鼠标输入(即原始数据,而不是屏幕上的光标)?

尝试在我们的专用 iPad 应用程序中使用鼠标作为新型输入设备。由于 iOS 具有 HID 驱动程序,而鼠标是 HID 设备,是否可以在代码中以编程方式接收鼠标移动增量?

需要明确的是,我不是在询问 iOS 的屏幕鼠标光标。我的意思是严格意义上的在我自己的特定应用程序中阅读程序化输入。

我也不是在谈论需要您开发硬件然后提交以使该硬件获得 Apple 认证的 MFI 设备。我再次提到使用标准 HID 驱动程序的标准鼠标,我相信它已经是系统的一部分(它已经识别 HID 键盘。)

那么这样的事情可能吗?

0 投票
1 回答
482 浏览

windows-10 - Windows 10,默认禁用 EnhancedPowerManagementEnabled

我们正在迁移到 Windows 10。我们在 Windows 10 系统上遇到了 USB 条形码扫描仪的问题。在我们拔下并重新插入之前,扫描仪无法工作。后来我们发现注册表EnhancedPowerManagementEnabled为HID设备设置为1,设置为0有助于避免每次系统重启后重新连接Barcode Scanner。有没有办法在连接条形码扫描仪时将 EnhancedPowerManagementEnabled 首次默认为 0?

提前致谢。

0 投票
0 回答
17 浏览

swift - DeviceMatchingCallback 永远不会退出 runloop

我想注册一个设备匹配回调,以获取有关 HID 设备连接到主机的信息。

我找到了多个代码示例,它们都非常相似,所以这是我的实际代码,它接近 USBDeviceSwift 库的源代码:

我的问题是:应用程序卡在运行循环中。第一个打印语句被记录到控制台。当我插入或拔出匹配的 USB 设备时,会记录相应的消息(连接或断开连接),因此显然回调已正确注册,但之后的代码RunLoop.current.run()不会执行。

runLoop 的概念对我来说是新的,但是我在网上找到的所有示例代码看起来都像这样。我该怎么做才能异步执行设备检查而不阻塞我的主线程?