Java и HID Связь

Я хочу написать Linux/Windows/Mac Java HID контроллер для простого беспроводного устройства 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(. . .) Всегда возвращает ноль. Кроме того, я переместил hidapi.dll, который был встроен в каталог C:...\Java...\bin... или что-то в этом роде, я уверен, что это правильно, потому что не было ни одной неудовлетворительной ошибки ссылки. Это действительно расстраивает, потому что, кажется, нет нигде нового руководства по Java и HID.

Что я здесь не так делаю?

2 ответа

Решение

Таким образом, проблема, которую я обнаружил, была с родными библиотеками. Я смог заставить приложение работать, скопировав.dll из файла.jar и сославшись на него, но, что более важно, я собираюсь перестроить файл класса.java, отвечающий за загрузку библиотеки, и добавить

System.loadLibrary();

вызов. Когда JavaHidApiClassPathLibraryLoader.loadNativeHIDLibrary(); вызывается метод, который не загружает библиотеку после успешной записи ее во временный файл, который слегка раздражает. Это исключит необходимость ручной загрузки библиотеки из статического места...

Спасибо, что указали мне в правильном направлении.

Я немного опоздал, чтобы ответить на этот вопрос, но я написал библиотеку под названием hid4java, которая может решить вашу проблему.

Он основан на Java Native Access (JNA), который намного проще, чем возиться со сложными заклинаниями JNI.

Я должен был написать это, потому что javahidapi устарел и основной код signal11 / hidapi значительно продвинулся. Более старые версии библиотеки hidapi имели проблемы в OS X с событиями присоединения / отсоединения, которые теперь были исправлены, поэтому необходимо обновление.

Также я обнаружил, что невозможно получить USB HID-устройство через usb4java в OS X, поэтому я решил написать эту библиотеку, чтобы решить эту проблему.

Надеюсь, поможет.

Другие вопросы по тегам