【问题标题】:Writing to HID keyboard works on Linux but not on Windows写入 HID 键盘适用于 Linux,但不适用于 Windows
【发布时间】:2019-04-21 11:51:36
【问题描述】:

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

到目前为止,我一直很成功,但只是在我的 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
视窗 8.1

【问题讨论】:

    标签: java linux windows hid hidapi


    【解决方案1】:

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

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

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

    【讨论】:

    • 能否请您发布您的代码以显示您如何发送数据?我也在尝试使用 api 发送数据,但我被卡住了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2016-03-01
    • 2021-05-02
    • 2017-06-14
    • 2011-06-15
    相关资源
    最近更新 更多