问题标签 [hidapi]

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 回答
971 浏览

java - hid4java HidServices.getHidDevice( ... ) 返回 NULL

我已经构建了 hid4java Maven 项目并成功地将库放入类库中。

这是我试图打开我正在使用的设备的代码:

这发生在 Windows 10 中(搜索显示 Windows 10 可能是问题:https ://github.com/signal11/hidapi/issues/231 ),在 Netbeans 上运行 32 位 JVM...

我在这里做错了吗?有没有办法解决这个问题?是否有可用于简单 HID 设备的 hid4java 替代方案?

0 投票
1 回答
4117 浏览

python - Python PyUSB HID 功能报告

我正在使用 Mac OSX 10.10.5 中的 python hidapi 访问 USB HID 设备:

HID 功能报告运行良好,没有问题。但是,我正在尝试将此代码移植到 PyUSB 并尝试做同样的事情(在 RaspberryPi 上)

但是当使用 root 权限执行时,我得到了一个 Broken Pipe。目前还不清楚如何将我在 Hidapi 的 send_feature_report 中使用的参数映射到 PyUSB 中的 ctrl_transfer 中它的实际使用方式。

有关如何进行此映射的任何帮助?

谢谢 !!!

0 投票
0 回答
132 浏览

java - hid4java 设置和拆卸操作是否昂贵?

我已经开始使用Gary Rowehid4java库对解决方案进行原型设计,并取得了很好的成功。该项目的测试包中提供的示例是一个好的开始,但我有一个关于该库的正确使用模式的更一般的问题。

具体来说,我想知道以下设置操作是否很昂贵,应该只完成一次,还是设计为作为与 HID 设备的每次交互(命令/响应)的一部分执行?

这同样适用于拆卸操作:

0 投票
0 回答
1146 浏览

linux - 在 Linux 上通过 HIDAPI 从 USB 设备读取有时会导致数据丢失

我目前正在将使用 USB 设备的代码从 Windows 移植到 Linux。

我已经彻底测试了原始应用程序,我很确定该设备运行良好。我使用 hidapi-libusb 在 Linux 上实现了 USB 接口,有时从设备返回的数据至少缺少一个字节。

一旦发生,所有返回的值都会丢失那么多数据。为了使 USB 设备正确读取数据,我或多或少必须断开并重新连接 USB 设备。我开始认为也许第一个字节有时会返回为 00 而 Linux 会忽略它。它通常发生在连续读取上。

例如:我发送获取寄存器状态,我希望有 10 个数据可用于 USB 读取。字节 5 是数据的编号。

预期的:

00 00 01 02 00 08 42(数据 8)

00 00 01 02 00 09 42(数据 9)

实际的:

00 00 01 02 00 08 42(数据 8)

00 00 02 00 09 42 ab(数据 9)

数据 9 的数据包编号出错,因为它缺少一个字节。我已经尝试更改为 hidapi-hidraw,并且发生的次数要少得多。我检查了设备的 hidraw (/dev/hidraw0) 的 hexdump,它与我在应用程序中获取的数据一致。我试过使用内存泄漏检测工具,没有检测到泄漏/损坏。

这是 Linux 问题(3.2.0-4-amd64)还是可能是设备?

我的应用程序的伪代码只是:

  1. 初始化 HIDAPI 和设备相关

  2. 使用 HIDAPI 连接到设备

  3. 写 USB 命令

  4. 读取 USB 命令(如果写入需要多个数据,则执行多次)

  5. 解析数据

  6. 重复 3 和 4 直到所有命令都执行完毕

  7. 释放内存并关闭 HIDAPI。

我尝试过的事情:

  1. 确保读取和写入之间没有延迟

  2. 在写入之前添加读取数据的刷新(有时会捕获杂散数据)

  3. 在刷新读取数据时添加一个非常长的超时(五秒) - 以巨大的成本显着减少问题。

0 投票
2 回答
1320 浏览

usb - 通过检查 USB 上的字节对 HID 握手进行逆向工程

我正在尝试从Wacom Inkling中提取实时数据

Roel Janssen 已经检查了这里的数据包:

我正在尝试使用HID API重写此代码,该 API具有非常小的 API(此处

我现在打算尝试使用hid_write,但这次握手可能会发送功能报告......?

有没有人可以查看该字节流并了解发生了什么?

编辑:似乎 Inkling 公开了 FlashDrive 和 HID 接口,所以我猜这个字节码一定是选择了 HID 接口并告诉它开始发送数据。但是我可以用更优雅/人类可读的形式对其进行编码吗?

编辑:我有它的工作!和hid_write工作hid_send_feature_report

...但是我仍然想了解发生了什么。这是相当hacky。

编辑: lsusb 的输出(来自 Roel,我手头没有 Linux):

0 投票
1 回答
406 浏览

python - 尝试在 OSX 上打开与 hidapi/hid 的连接时出现“ValueError:未打开”

我正在使用 python 在 OSX El Capitan 上打开一个 hid/hidapi(错误是相同的)连接。但是,它给了我以下错误堆栈跟踪:

我在这方面找不到任何东西,而且通常不使用 OSX 或 python,所以我有点茫然

0 投票
2 回答
3773 浏览

windows - CreateFileA 无法在 Windows 中打开 HID 设备

编辑:这里报告的问题:https ://github.com/signal11/hidapi/issues/276

Inkling 是来自 Wacom 的笔设备。( InklingReader ) 是一个开源项目,可以从中获取实时数据。

我正在尝试整理 InklingReader 以使用HIDAPI而不是libusb (因为它在更高级别上工作:HID 而不是原始 USB,所以更紧凑和更合适。libusb 在最近的 OSX 上也失败了)。

HID API 一个小库:一个 .h,一个(每个平台).c。

我的代码如下所示:

在 Windows 上hid_open失败。单步执行在这里揭示了故障点:

现在,HIDAPI 作者说“HIDAPI 不适用于 Windows 上的键盘和鼠标。Windows 作为安全措施不允许打开鼠标和键盘 HID。” (这里

如果我枚举 HID 设备:

...我得到的不是一个而是两个条目:

(注意:OSX 只报告 SECOND 条目!在 OSX 上没有问题!)

比较path
路径: \?\hid#vid_056a&pid_0221&mi_00& col01 #8&1ea90857&0& 0000 #...
路径: \?\hid#vid_056a&pid_0221&mi_00& col02 #8&1ea90857&0& 0001 #...

根据http://www.usb.org/developers/hidpage/Hut1_12v2.pdf

UsagePage/Usage = 1/2 = {通用桌面控件}/{鼠标}。
UsagePage/Usage = 13/2 = {Digitizers}/{Pen}。

(编辑:有时第一个路径是 1/2,第二个是 13/2,其他时候它被交换)。

而 HIDAPI只采用它找到的第一个

所以看起来这应该是解决方案。Inkling 暴露了 2 个“设备”,而 hidapi 使用了错误的(鼠标)设备,并且 Windows 不允许访问鼠标或键盘设备。

所以我调整了代码...

...要获得正确的条目,它应该可以正常工作吗?

不, CreateFileA 只是引发了一个不同的错误:

usage_page== 1 => 错误代码 5 (ERROR_ACCESS_DENIED)
usage_page==13 => 错误代码 32 (ERROR_SHARING_VIOLATION)

嗯。这是相当令人不安的。我好像走投无路了!

我试过摆弄 CreateFileA 的参数,例如替换GENERIC_READ | GENERIC_WRITESTANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE-- 现在它愉快地创建了一个句柄。但随后hid_read的 -s 无法收集任何数据。

谷歌搜索,https: //social.msdn.microsoft.com/Forums/windowsdesktop/en-US/af869f90-7bda-483d-ba2d-51680073fe9f/createfile-returns-invalid-handle-while-trying-to-access-hid- device-on-windows-8-desktop-app?forum=wdk似乎包含一些建议的解决方法:

烤面包机萤火虫都可以在 HID 堆栈中工作。toaster 展示了如何通过原始 PDO 处理过滤器,firefly 展示了如何使用 WMI 访问它。从 C 的角度来看,我认为原始 PDO 的编码要简单得多,WMI 有点讨厌和复杂。

萤火虫
烤面包机

作者推荐的是烤面包机,但它是一个很大的代码库,我没有 Windows 驱动程序编程的经验。

看起来我将不得不挖掘很多非常陌生的领域才能让任何事情发挥作用,所以在开始之前我在这里问。如果没有人回答并且我弄清楚了,我将回答我自己的问题。

我唯一能想到的另一件事是,也许另一个过程已经在参与这条路径。也许如果我可以终止这个过程, CreateFileA 可能会成功?Roel 的 libusb 方法涉及分离内核驱动程序:https ://github.com/roelj/inklingreader/blob/master/src/usb/online-mode.c#L98

PS 我在某处读到,如果另一个进程已经打开了这个设备,我们的打开必须与之前打开的权限相匹配。而且我还读到 Windows 在检测到时会自动打开所有 HID 设备。

找出哪个进程在 USB 设备句柄上有独占锁

PPS 也许一个想法是尝试替代 HID库 在 Windows 上与 USB HID 设备通信的最佳 USB 库是什么?

PPPS 也许我需要以管理员身份运行我的代码。但这不是一个好的解决方案。

0 投票
0 回答
284 浏览

usb - 人机界面设备共享 [HIDAPI]

我有一个人机接口设备 (HID),我正在尝试与HIDAPI对话,当另一个程序在设备上有句柄时,我很难与它对话;即设备供应商的开发软件。

有问题的设备是一个 RFID 阅读器,其行为类似于 HID(不要与制造 RFID 产品的 HID Corporation 混淆)。

hid_open()仅当供应商的软件打开时,从 HIDAPI调用时,我无法处理设备。否则,我与设备交谈没有明显问题。通常我会认为该设备一次只能由一个程序打开。然而,考虑到键盘和鼠标也被认为是 HID(它们一直在多个程序之间共享),我觉得我应该能够从我的软件和供应商的软件中访问阅读器。

我对 HID 和 USB 了解不多,所以我敢肯定这是一个新问题,但我相信将来有人会发现这很有用。

0 投票
1 回答
6825 浏览

python - 使用Python hidapi打开具有多种用途的设备

我是 Python hidapi 的新手,尽管我之前使用过它基于的 C 版本。Python 库确实不同,我无法从提供的一个示例中弄清楚如何使用它。有谁知道这个库有什么好的文档吗?

如果您正在寻找特定问题,我正在尝试打开具有多种用途的 HID 设备。我的设备具有以下相关特性:

我尝试使用 hid_enumerate 来选择我想要的字典,但是在实例化设备对象后,即使我知道它在那里,设备也不会打开(因为它在枚举中列出)。

0 投票
1 回答
1779 浏览

qt - HIDAPI hid_open_path() 如何确定使用哪个路径

  • HIDAPI+Qt5.4+ubuntu14.04LTS+条码扫描枪
  • 我从这里使用 HIDAPI https://github.com/signal11/hidapi

  • 这是 HIDAPI API http://www.signal11.us/oss/hidapi/hidapi/doxygen/html/group__API.html#ga1e87518670f88540c920dc451df608ee

  • 问题 1:我可以将 hid_open() 方法与我的条码扫描枪的 VID 和 PID 一起使用,但是这样我的应用程序不能使用其他条码扫描枪。我还找到了 hid_open_path() 方法,但我无法确定使用哪个路径/dev/hidraw0 ?或 /dev/hidraw1?还是会在不同的电脑上改变?

  • 问题2:是读取权限吗。当我将条码扫描枪与PC连接时,它无法读取和写入,我的解决方案是使用udev定义我自己的规则来使用VID和PID,它确实有效!但它不适用于条码扫描枪。