HID 报告描述符的填充方式

前言

本文结合博文:http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/
以及实践,介绍HID 报告描述符的编写过程中使用的两种方法。

案例需求

实现一个按键的HID报告描述符:包括三个按键。需要实现发送按钮的数据给主机;使用一个位(bit)来代表一个按钮。

使用C语言来描述,可以看成是C语言的结构体:

struct mouse_report_t
{
    uint8_t buttons;
}

在内存空间可以看成是:
这里写图片描述

第一种填充方式

将Usage 填充到0~2 位,由于3~7位并没Usage,故在后面补上5bit的内存空间,形成一个字节对齐。之后就可以通过向0~2位写值,然后报告给主机。

USAGE_PAGE (Button)
USAGE_MINIMUM (Button 1)
USAGE_MAXIMUM (Button 3)
LOGICAL_MINIMUM (0)
LOGICAL_MAXIMUM (1)
REPORT_COUNT (3)
REPORT_SIZE (1)
INPUT (Data,Var,Abs)
REPORT_COUNT (1)
REPORT_SIZE (5)
INPUT (Cnst,Var,Abs)

第二种填充方式

将Usage 填充到0~2 位,由于3~7位并没Usage,故在后面补上5bit的内存空间,形成一个字节对齐。之后主机通过0~2位读取值。

USAGE_PAGE (Button)
USAGE (Button 1)
USAGE (Button 2)
USAGE (Button 3)
LOGICAL_MINIMUM (0)
LOGICAL_MAXIMUM (1)
REPORT_COUNT (3)
REPORT_SIZE (1)
INPUT (Data,Var,Abs)
REPORT_COUNT (1)
REPORT_SIZE (5)
INPUT (Cnst,Var,Abs)

总结

本文主要用于记录有常用到的两种填充HID描述的方式,对于案例的具体实现可以参考另一篇有趣的博文:http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/

猜你喜欢

转载自blog.csdn.net/masterjackal/article/details/80011535