Java和HID通信

时间:2014-05-22 01:19:19

标签: java hid hidapi

我正在为简单的无线HID接口设备编写Linux / Windows / Mac Java HID控制器。我对USB4Java LibUsb库进行了修改无济于事,而且我已经朝着JavaHIDAPI的方向发展。

不幸的是,对于我来说,我真的不知道除了一个相当不错的高级编程技能集(C#/ VB.Net)之外我做了什么,切换到这个就是杀了我。

我发现的directions说我首先需要编译找到here的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。另外,我移动了内置在C:... \ Java ... \ bin目录中的hidapi.dll ......或者其他什么,我确定它是正确的,因为没有'任何不满意的链接错误。它真的令人沮丧,因为似乎没有任何新手指南可以在任何地方使用Java和HID。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

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

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

我必须编写它,因为javahidapi已过期,而基础signal11/hidapi代码已大大改进。较旧版本的hidapi库在OS X上出现了带有附加/分离事件的问题,这些事件现已修复,因此需要进行升级。

此外,我发现无法通过OS X上的usb4java声称USB HID设备,所以我最终编写了这个库来解决这个问题。

希望它有所帮助。

答案 1 :(得分:1)

因此,我发现这个问题与本地库有关。 我能够通过从.jar文件复制.dll并引用它来使应用程序工作,但更重要的是,我将重建负责加载库并添加

的.java类文件。
System.loadLibrary();

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

感谢您指点我正确的方向。