前言
本文结合博文: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/