在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
Zero byte disappear when get hid feature report using ioctl() in Linux
我想从设备获取隐藏功能报告。由于主机系统是 Ubuntu18.04,因此我遵循了此示例(从第 125 行到第 135 行(。但是,加载的数据不完整。例如,功能报告uint32_t 0xFFEEDDCC但我得到的是DD EE FF,零字节CC消失了。所以,我想知道为什么零字节消失以及如何获得完整的数据。
以下是我的代码。
uchar buf[reportSize]; // reportSize = 5, in case the report id occupies 1 byte
int fdevice = open(devicePath, O_RDWR);
// get feature report
buf[0] = reportID;
featureResults = ioctl(fdevice, HIDIOCGFEATURE(reportSize), buf); // featureResults = 3 but should be 4
if (featureResults < 0)
{
perror("HIDIOCGFEATURE");
}
else
{
for (int i = 0; i < featureResults; i++)
printf("%hhx ", buf[i]); // only show DD EE FF
puts("n");
}
我也尝试使用更大的报告大小,例如 256,但它仍然不起作用。此外,buf[-1],buf[featureResults]和buf[featureResults+1]不是丢失的数据。
谢谢。
根据这个网络中的描述,HIDIOCGFEATURE(len(似乎总是会跳过第0个字节,从第一个字节开始。因此,我将占位符字节 (LSB( 添加到隐藏功能报告(固件(。这样,将跳过占位符,并且可以正确读取数据。
任何其他解决方案将不胜感激。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- Android NDK传感器向事件队列报告奇怪的间隔
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 使用std::source_location报告错误的最佳实践
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- Clang-Linux:报告CFI错误而不会崩溃.ftrap功能和-O2
- C++链表报告功能
- 神秘功能出现在我的gcov报告中
- 未获得正确的功能报告