0

我想从设备获取隐藏功能报告。由于宿主系统是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");
}

我也尝试了更大的reportSize,例如256,但它仍然不起作用。此外,buf[-1]、buf[featureResults] 和 buf[featureResults+1]不是丢失的数据。

非常感谢。

4

1 回答 1

0

根据此web中的描述,HIDIOCGFEATURE(len) 似乎总是会跳过第零个字节并从第一个字节开始。因此,我在隐藏功能报告(固件)中添加了一个占位符字节 (LSB)。这样,占位符将被跳过并且可以正确读取数据。

任何其他解决方案将不胜感激。

于 2020-06-12T10:12:09.090 回答