我正在尝试通过使用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
答案 0 :(得分:0)
好的,所以我终于使它开始工作了! 基本上,我从Java HIDAPI切换到hid4java,修改了代码以执行相同的操作,并且它的工作原理很吸引人! (在Windows上)
我还删除了缓冲区中的第一个字节,并将其用作hid4java的HidDevice.sendFeatureReport函数中的reportId参数。这将所有字节移了1,但是当要设置缓冲区中的值时,可以通过在索引处减去1轻松解决此问题。 (在我的问题示例中未显示。)
虽然我还没有在Linux上进行过测试,但是我认为它仍然可以工作。