2

我正在寻找为简单的无线 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);
    .
    .
    .
}

我正在运行的问题是(除了 HIDAPI 似乎没有构建到 HIDAPI-jni.dll 中的事实之外)是 HIDManager.openById(...) 总是返回 null。另外,我把内置的 hidapi.dll 移到了 C:...\Java...\bin 目录...什么的,我确定它是对的,因为没有任何不满意的链接错误。这真的很令人沮丧,因为在任何地方似乎都没有任何 Java 和 HID 新手指南。

我在这里做错了什么?

4

2 回答 2

7

我回答这个问题有点晚了,但我写了一个名为hid4java的库,它可能会解决你的问题。

它基于 Java Native Access (JNA),这比使用复杂的 JNI 咒语要简单得多。

我不得不写它,因为 javahidapi 已经过时并且底层的signal11/hidapi代码已经有了很大的发展。旧版本的 hidapi 库在 OS X 上存在附加/分离事件问题,现已修复,因此需要升级。

此外,我发现在 OS X 上通过 usb4java 声明 USB HID 设备是不可能的,所以我最终编写了这个库来解决这个问题。

希望能帮助到你。

于 2014-10-12T15:56:05.170 回答
1

因此,我发现问题在于本机库。我能够通过从 .jar 文件中复制 .dll 并引用它来使应用程序工作,但更重要的是,我将重建负责加载库的 .java 类文件并添加

System.loadLibrary();

称呼。调用该JavaHidApi ClassPathLibraryLoader.loadNativeHIDLibrary();方法时,它不会在成功将库写入临时文件后加载库,这有点烦人。这样做将消除从静态位置手动加载库的必要性......

感谢您为我指明正确的方向。

于 2014-05-22T04:55:55.800 回答