编辑:此处报告的问题:https://github.com/signal11/hidapi/issues/276
Inkling是Wacom的笔设备.(InklingReader)是一个开源项目,可以从中获取实时数据.
我正在尝试整理InklingReader以使用HIDAPI而不是libusb (因为它在更高级别工作:HID而不是原始USB,所以更紧凑和更合适.此外,libusb在最近的OSX上失败).
HID API是一个小型lib:一个.h,一个(每个平台).c.
我的代码看起来像这样:
unsigned short inklingVendorId = 0x056a, inklingProductId = 0x0221;
if (hid_init() == FAIL) return;
handle = hid_open(inklingVendorId, inklingProductId, nullptr);
Run Code Online (Sandbox Code Playgroud)
在Windows上hid_open
失败.单步执行揭示了这里的失败点:
// path = "\\\\?\\hid#vid_056a&pid_0221&mi_00&col01#8&1ea90857&0&0000#"
// "{4d1e55b2-f16f-11cf-88cb-001111000030}"
//
static HANDLE open_device(const char *path, BOOL enumerate)
{
HANDLE handle;
DWORD desired_access = (enumerate)? 0: (GENERIC_WRITE | GENERIC_READ);
DWORD share_mode = FILE_SHARE_READ|FILE_SHARE_WRITE;
// enumerate = 0
handle = CreateFileA(path,
desired_access,
share_mode,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,/*FILE_ATTRIBUTE_NORMAL,*/
0); …
Run Code Online (Sandbox Code Playgroud) 我想解构从hid_read
函数中收到的原始报告hidapi
.
据我了解,这可以使用设备报告描述符中的信息来实现.但是当试图查询这些描述符时,我迷失在HID规范之间并使用可用的方法hidapi
.
我希望看到一个具体的C或基于node-hidapi的示例,它可以查询和枚举设备的所有报告描述符 - 也许是鼠标来保持简单?
我正在尝试在Windows 7上运行node-hid(https://github.com/node-hid/node-hid)模块.我可以打开一个设备并写入它,但没有数据到达.
我已经验证设备正在发送数据.我已经挖掘了节点隐藏代码(HID.cc)并尝试了几个方法来使其工作:
在Windows 8上,通过hid_read_timeout调用更改,这一切都正常.我不确定这两个系统之间可能有什么变化,但我也计划在Windows XP上使用它,所以我不能称之为好.
我正在努力想出更多有关如何调试此问题的想法.有没有人成功地做过这件事?有没有更好的选择将Node.js与HID设备一起使用?
我是 Python hidapi 的新手,尽管我之前使用过它基于的 C 版本。Python 库确实不同,我无法从提供的一个示例中弄清楚如何使用它。有谁知道这个库有什么好的文档吗?
如果您正在寻找特定问题,我正在尝试打开具有多种用途的 HID 设备。我的设备具有以下相关特征:
vendor_id: 10618
product_id: 4
usage: 8
usage_page: 1
interface_number: 1
Run Code Online (Sandbox Code Playgroud)
我曾尝试使用 hid_enumerate 来选择我想要的字典,但在实例化设备对象后,即使我知道它在那里,设备也不会打开(因为它列在枚举中)。
为 USB 鼠标编写一些 C 代码。
更具体地说,将配置和信息写入鼠标,如轮询、灵敏度、按钮操作、颜色(光)、触觉改变、OLED 等。
与开始了这个古老的文章,其中libhid
建议了libusb
。
看着libhid它似乎已经死了。该项目的最后一次提交是从 2012 年开始的,它是 C++。但我发现一些链接说应该转到hidapi
.
然而,hidapi似乎也已经死了。2016 年的最后一次提交。或者它可能只是稳定的?
libusb
毕竟,它看起来像一个更好的使用。从一篇 15 年前的文章开始 - 这并没有那么夸张。
问题是我是否遗漏了什么?是libusb
要走的路吗?
已经做了一些快速测试 libusb-1.0.0-dev
#include <libusb-1.0/libusb.h>
Run Code Online (Sandbox Code Playgroud)
并且效果很好 - 至少对于我所做的快速测试而言是这样。但是 HID 库也许会更好?
从本机包选项我至少有:
libhidapi-dev
libhidapi-libusb0
libhidrd0-dbg
libhidapi-hidraw0
libhidrd0
libhidrd0-dev
Run Code Online (Sandbox Code Playgroud)
和
libusb-0.1-4 libusbmuxd4
libusb-1.0-0 libusbmuxd-dev
libusb-1.0-0-dev libusbmuxd-tools
libusb-1.0-doc libusb-ocaml
libusbauth-configparser1 libusb-ocaml-dev
libusbauth-configparser-dev libusbprog0v5
libusb-dev libusbprog-dev
libusbguard0 libusbredirhost1
libusbhid-common libusbredirhost-dev
libusb-java libusbredirparser1
libusb-java-dbg libusbredirparser-dev
libusb-java-doc libusbtc08-1
libusb-java-lib libusbtc08-dev
Run Code Online (Sandbox Code Playgroud) 我是 USB HID 新手,我正在尝试在我的应用程序中使用 HIDAPI 。
我有一个关于使用 HIDAPI(在 Visual Studio 中)有关报告 ID 的问题。
当我尝试使用 HIDAPI 并连接到 Microchip 自定义演示时,我对这方面感到困惑:65 字节的报告对我来说没有意义!
即使我不想设置报告ID,我也需要将第一个字节设置为0并将65字节缓冲区发送到设备,但我只从Microchip设备接收64字节数据(因为报告是64 字节长)。
看起来像:
**Host** **Device**
*write_hid*
65 byte --------------->
*read_hid*
<------------------ 64byte
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说似乎很奇怪。
发送或接收的报告不是总是 64 字节吗?因为规范规定报告的最大长度应为 64 字节,并且每 1 毫秒发送一次。
如果答案是肯定的,为什么 API 为 1 字节的报告 ID 保留 65 字节?
报告ID是否包含在64字节中?
65 字节的数据长度对我来说没有意义。
我正在寻找一个简单的无线HID接口设备的Linux/Windows/Mac Java HID控制器.我对USB4Java LibUsb库进行了修改无济于事,而且我已经朝着JavaHIDAPI的方向发展.
对我来说不幸的是,我真的不知道我正在做什么,除了一个相当不错的高级编程技能集(C#/ VB.Net),并切换到这是杀了我.
我发现的方向说我首先需要编译这里找到的HIDAPI库.它说它会构建一个名为hidapi-jni.dll的东西(它没有).
无论如何,我认为这是我需要去的地方,因为HID什么都不做,只是简单地向无线控制器发送信号和从无线控制器接收信号(并响应接收到的信号).
有没有为此使用JavaHIDAPI的分步教程?还是有更好的图书馆?(我注意到这有点......过时了).
我尝试了以下内容:
static{ System.loadLibrary("hidapi"); }
.
.
.
public static void main(string[] Args) throws . . . {
ClassPathLibraryLoader.loadNativeHIDLibrary();
HIDDevice dev = HIDManager.getInstance().openById(VEND_ID, PROD_ID, null);
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我正在运行的问题是(除了HIDAPI似乎没有构建到HIDAPI-jni.dll中这一事实)HIDManager.openById(...)总是返回null.另外,我移动了内置在C:...\Java ...\bin目录中的hidapi.dll ......或者其他东西,我确定它是正确的,因为没有任何不满意的链接错误.这真的令人沮丧,因为似乎没有任何关于Java和HID的新手指南.
我在这做错了什么?