问题标签 [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.
java - hid4java HidServices.getHidDevice( ... ) 返回 NULL
我已经构建了 hid4java Maven 项目并成功地将库放入类库中。
这是我试图打开我正在使用的设备的代码:
这发生在 Windows 10 中(搜索显示 Windows 10 可能是问题:https ://github.com/signal11/hidapi/issues/231 ),在 Netbeans 上运行 32 位 JVM...
我在这里做错了吗?有没有办法解决这个问题?是否有可用于简单 HID 设备的 hid4java 替代方案?
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 中它的实际使用方式。
有关如何进行此映射的任何帮助?
谢谢 !!!
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)还是可能是设备?
我的应用程序的伪代码只是:
初始化 HIDAPI 和设备相关
使用 HIDAPI 连接到设备
写 USB 命令
读取 USB 命令(如果写入需要多个数据,则执行多次)
解析数据
重复 3 和 4 直到所有命令都执行完毕
释放内存并关闭 HIDAPI。
我尝试过的事情:
确保读取和写入之间没有延迟
在写入之前添加读取数据的刷新(有时会捕获杂散数据)
在刷新读取数据时添加一个非常长的超时(五秒) - 以巨大的成本显着减少问题。
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):
python - 尝试在 OSX 上打开与 hidapi/hid 的连接时出现“ValueError:未打开”
我正在使用 python 在 OSX El Capitan 上打开一个 hid/hidapi(错误是相同的)连接。但是,它给了我以下错误堆栈跟踪:
我在这方面找不到任何东西,而且通常不使用 OSX 或 python,所以我有点茫然
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_WRITE
为 STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE
-- 现在它愉快地创建了一个句柄。但随后hid_read
的 -s 无法收集任何数据。
烤面包机和萤火虫都可以在 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 设备。
PPS 也许一个想法是尝试替代 HID库 在 Windows 上与 USB HID 设备通信的最佳 USB 库是什么?
PPPS 也许我需要以管理员身份运行我的代码。但这不是一个好的解决方案。
usb - 人机界面设备共享 [HIDAPI]
我有一个人机接口设备 (HID),我正在尝试与HIDAPI对话,当另一个程序在设备上有句柄时,我很难与它对话;即设备供应商的开发软件。
有问题的设备是一个 RFID 阅读器,其行为类似于 HID(不要与制造 RFID 产品的 HID Corporation 混淆)。
hid_open()
仅当供应商的软件打开时,从 HIDAPI调用时,我无法处理设备。否则,我与设备交谈没有明显问题。通常我会认为该设备一次只能由一个程序打开。然而,考虑到键盘和鼠标也被认为是 HID(它们一直在多个程序之间共享),我觉得我应该能够从我的软件和供应商的软件中访问阅读器。
我对 HID 和 USB 了解不多,所以我敢肯定这是一个新问题,但我相信将来有人会发现这很有用。
python - 使用Python hidapi打开具有多种用途的设备
我是 Python hidapi 的新手,尽管我之前使用过它基于的 C 版本。Python 库确实不同,我无法从提供的一个示例中弄清楚如何使用它。有谁知道这个库有什么好的文档吗?
如果您正在寻找特定问题,我正在尝试打开具有多种用途的 HID 设备。我的设备具有以下相关特性:
我尝试使用 hid_enumerate 来选择我想要的字典,但是在实例化设备对象后,即使我知道它在那里,设备也不会打开(因为它在枚举中列出)。
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,它确实有效!但它不适用于条码扫描枪。