3

我正在尝试通过我的 Java 程序向它发送 HID 数据包来设置我的 RGB 键盘的 LED,这里有 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

4

1 回答 1

1

好吧,所以我终于设法让它工作了!基本上,我从 Java HIDAPI 切换到hid4java,修改了代码来做同样的事情,它就像一个魅力!(在 Windows 上)

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

虽然我还没有在 Linux 上测试过这个,但我认为它仍然可以工作。

于 2018-11-24T00:53:38.770 回答