我正在玩一些特殊types的键盘的驱动程序代码。 而这个键盘确实有特殊的模式。 根据规范,这些模式只能通过发送和获取function报告来启用。
我使用'hid.c'文件和用户模式来发送HID报告。 但'hid_read'和'hid_get_feature_report'都失败,错误号为-1。
我已经尝试使用libusb从内核驱动程序分离键盘,但是当我这样做时,'hid_open'失败。 我想这是由于HID接口已经由内核使用“input”或某些驱动程序。 所以,我可能不需要解除内核hidraw驱动程序,而应该尝试解除“hidraw”驱动程序的键盘(“input”)驱动程序顶部的绑定。 我对么?
任何想法我怎么能做到这一点? 以及如何find哪些驱动程序使用哪个驱动程序和哪个低级驱动程序绑定到哪个驱动程序?
将鼠标光标隐藏在窗口中的特定客户区域上
如何在Linux中写入CM108芯片的GPIO引脚?
在Linux上接收来自USB HID键盘设备的字符
阅读多个HID报告
是否有可能使计算机像蓝牙HID设备一样运行?
I2C到FPGA到PCIe到HID
Windows:启动一个隐藏的新进程(无窗口)
CreateFileA无法在Windows中打开HID设备
我自己找到了答案。 答案是挖掘这个项目,发现它隐藏在libusb上的实现。 或者你可以直接收到报告。
int HID_API_EXPORT hid_get_feature_report(hid_device *dev,unsigned char *data,size_t length) { int res = -1; int skipped_report_id = 0; int report_number = data[0]; if (report_number == 0x0) { /* Offset the return buffer by 1,so that the report ID will remain in byte 0. */ data++; length--; skipped_report_id = 1; } res = libusb_control_transfer(dev->device_handle,LIBUSB_REQUEST_TYPE_CLASS|LIBUSB_RECIPIENT_INTERFACE|LIBUSB_ENDPOINT_IN,0x01/*HID get_report*/,(3/*HID feature*/ << 8) | report_number,dev->interface,(unsigned char *)data,length,1000/*timeout millis*/); if (res < 0) return -1; if (skipped_report_id) res++; return res; }
对不起,由于某些法律原因,我无法发布我的实际代码。 不过上面的代码是来自hidapi的实现。
所以,即使你使用旧的内核,你仍然有机会让你的驱动程序工作。 这也回答了这个问题: https : //stackoverflow.com/questions/30565999/kernel-version-2-6-32-does-not-support-hidiocgfeature
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。