写入HID键盘在Linux上有效,但在Windows上无效

时间:2018-11-19 06:16:17

标签: java linux windows hid hidapi

我正在尝试通过使用Java HIDAPI包装器here通过Java程序向其发送HID数据包来设置RGB键盘的LED的方法。

到目前为止,我已经取得了成功,但仅限于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 :(得分:0)

好的,所以我终于使它开始工作了! 基本上,我从Java HIDAPI切换到hid4java,修改了代码以执行相同的操作,并且它的工作原理很吸引人! (在Windows上)

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

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