写入 HID 键盘适用于 Linux 但不适用于 Windows

Writing to HID keyboard works on Linux but not on Windows

我正在尝试通过我的 Java 程序向它发送 HID 数据包来设置我的 RGB 键盘的 LED,发现 Java HIDAPI 包装器 here

到目前为止,我已经成功了,但仅限于我的 Linux 笔记本电脑。当我尝试 运行 Windows 上的代码时,我得到一个错误 'Invalid function',我假设它等同于系统错误 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");
}

我试过 运行宁作为管理员,不幸的是没有区别...

如果我的问题不够清楚,请告诉我,我会尝试进一步澄清。

如有任何帮助,我们将不胜感激!我迫不及待地想找到解决这个问题的方法! :)


OS 的版本,如果重要的话:
Linux Ubuntu 18.04
Windows8.1

好吧,我终于成功了! 基本上,我从 Java HIDAPI 切换到 hid4java,修改了代码来做同样的事情,而且效果很好! (在 Windows)

我还删除了缓冲区中的第一个字节,并将其用作 hid4java 的 HidDevice.sendFeatureReport 函数中的 reportId 参数。这将所有字节移动了 1,但是当要设置缓冲区中的值时,通过在索引处减去 1 可以很容易地解决这个问题。 (未在我的问题示例中显示。)

虽然我还没有在 Linux 上测试过它,但我认为它仍然有效。