Запись на HID-клавиатуру работает в Linux, но не в Windows - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь установить светодиоды моей RGB-клавиатуры, отправляя ей пакеты HID через мою программу Java, с найденной оболочкой Java HIDAPI здесь .

До сих пор я был успешным, но только на моем ноутбуке с Linux. Когда я пытаюсь запустить код в Windows, я получаю сообщение об ошибке «Неверная функция», которое, как я предполагаю, эквивалентно системной ошибке 0x1, ERROR_INVALID_FUNCTION .

Этот пример кода не будет работать в Windows, но будет работать в Linux. (Когда он запускается из терминала с добавлением sudo к команде.)

// Device is found prior to this...

if (device != null) {
    device.disableBlocking();

    // Initialise the buffer, and send it. PACKET_SIZE is 264
    byte[] buffer = new byte[PACKET_SIZE];
    for (int i = 0; i < PACKET_SIZE; i++) { buffer[i] = (byte)0x00; }

    // These bytes are required for it to actually change the LED's.
    buffer[0] = 0x07;
    buffer[1] = 0x0E;
    buffer[2] = 0x01;
    buffer[3] = 0x01;

    try {
        // Actually send the data.
        device.sendFeatureReport(buffer);
    }
    // Handle I/O exceptions
    catch (IOException e) {
        e.printStackTrace(); 
    }

    // Close the device.
    device.close();
}
else {
    System.err.println("DEVICE IS NULL");
}

Я пытался работать от имени администратора, к сожалению, без разницы ...

Если мой вопрос недостаточно ясен, дайте мне знать, и я попытаюсь прояснить его дальше.

Любая помощь будет принята с благодарностью! Я отчаянно пытаюсь найти решение этой проблемы! :)


Версии ОС, если это имеет значение:
Linux Ubuntu 18.04
Windows 8.1

1 Ответ

0 голосов
/ 24 ноября 2018

Хорошо, так что мне удалось наконец заставить его работать! По сути, я переключился с Java HIDAPI на hid4java , изменил код, чтобы сделать то же самое, и это сработало как шарм! (В Windows)

Я также удалил первый байт в буфере и использовал его в качестве параметра reportId в функции hid4java hidDevice.sendFeatureReport. Это сместило все байты на 1, но это было легко исправить, вычтя 1 из индекса, когда нужно было установить значение в буфере. (Не показано в примере моего вопроса.)

Я еще не тестировал это на Linux, но я бы предположил, что он все еще будет работать.

...