[在Linux中使用ioctl()获得隐藏功能报告时零字节消失

问题描述 投票:0回答:1

我想从设备获取隐藏的功能报告。由于主机系统是Ubuntu18.04,因此我遵循了此example(从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]是丢失的数据。 非常感谢。

我想从设备获取隐藏的功能报告。由于主机系统是Ubuntu18.04,因此我遵循此示例(从第125行到第135行)。但是,加载的数据不完整。例如,...

c++ linux hid ioctl
1个回答
0
投票
根据此web中的描述,似乎HIDIOCGFEATURE(len)将始终跳过第0个字节并从第一个字节开始。因此,我将一个占位符字节(LSB)添加到隐藏功能报告(固件)中。这样,将跳过占位符,并且可以正确读取数据。
© www.soinside.com 2019 - 2024. All rights reserved.