HID用作鼠标的报告描述符解析

const uint8_t HID_ReportDescriptor[] = {

USAGE_PAGE(Generic Desktop)             //全局项目,用途页用作通用桌面

USAGE (Mouse)                                   //局部项目,说明接下来的应用集合用途用作鼠标

COLLECTION (Application)                //集合开始,是一个应用集合

USAGE (Pointer)                               //局部项目,说明用途为指针

COLLECTION (Physical)                //物理集合,用途由前面的局部项目定义为指针集合

USAGE_PAGE (Button)                 //全局项目,选择用途页为按键

USAGE_MINIMUM (Button 1)        //用法的最小值为1,实际上是鼠标左键

USAGE_MAXIMUM (Button 3)       //用法的最大值为3,实际上是鼠标中键

LOGICAL_MINIMUM (0)                //返回的数据域最小值

LOGICAL_MAXIMUM (1)               //返回的数据域最大值

REPORT_SIZE (1)                      //说明每个数据域的长度为1个位

REPORT_COUNT (3)                     //数据域的数目为3个

INPUT (Data,Var,Abs)                  //主项目,说明三个长度为1位的数据域(数量和长度由前面两个全局项目定义)用来作为输                                                           //入,属性数据可变动,独立的变量

USAGE_PAGE (Generic Desktop)   //下面是定义X轴和Y轴

USAGE (X)

 LOGICAL_MINIMUM (0)

 LOGICAL_MAXIMUM (1365)

PHYSICAL_MINIMUM (0)

 PHYSICAL_MAXIMUM (1365)

 REPORT_SIZE (16)

 REPORT_COUNT (1)

 INPUT (Data,Var,Abs)

USAGE (Y)

LOGICAL_MINIMUM (0)

 LOGICAL_MAXIMUM (767)

PHYSICAL_MINIMUM (0)

PHYSICAL_MAXIMUM (767)

REPORT_SIZE (16)

REPORT_COUNT (1)

 INPUT (Data,Var,Abs)

 END_COLLECTION

 END_COLLECTION

}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HID鼠标全局位置描述符是在鼠标HID报告描述符中定义的。在USB HID规范中,每个HID设备都需要定义一个HID报告描述符,其中包含设备的全局描述符、输入报告描述符和输出报告描述符。而鼠标HID报告描述符中,全局描述符描述了鼠标设备的全局属性,包括厂商标识、产品标识、设备版本号等信息。其中,鼠标的全局位置描述符描述了鼠标的坐标轴信息,包括X轴和Y轴的分辨率、最小值、最大值等。 在HID报告描述符中,全局位置描述符通常会紧跟在全局描述符之后,具体的格式如下: ``` typedef struct { uint8_t bDescriptorType; // 描述符类型,固定为0x06 uint16_t wDescriptorLength; // 描述符长度,字节数 // 全局属性 uint8_t bcdHID; // HID协议版本号 uint8_t bCountryCode; // 国家代码 uint8_t bNumDescriptors; // HID描述符数量 // HID描述符列表 struct { uint8_t bDescriptorType; // 描述符类型,固定为0x22 uint16_t wDescriptorLength; // 描述符长度,字节数 // 鼠标的全局位置描述符 uint8_t bDescriptorType2; // 描述符类型,固定为0x24 uint8_t bDescriptorLength; // 描述符长度,字节数 uint16_t wReportCount; // 报告数量 // X轴坐标信息 uint8_t bDescriptorType3; // 描述符类型,固定为0x25 uint8_t bDescriptorLength2; // 描述符长度,字节数 uint8_t bSize; // 数据位数 uint8_t bReportCount; // 报告数量 int8_t bLogicalMinimum; // 逻辑最小值 int8_t bLogicalMaximum; // 逻辑最大值 uint8_t bPhysicalMinimum; // 物理最小值 uint8_t bPhysicalMaximum; // 物理最大值 // Y轴坐标信息 uint8_t bDescriptorType4; // 描述符类型,固定为0x25 uint8_t bDescriptorLength3; // 描述符长度,字节数 uint8_t bSize2; // 数据位数 uint8_t bReportCount2; // 报告数量 int8_t bLogicalMinimum2; // 逻辑最小值 int8_t bLogicalMaximum2; // 逻辑最大值 uint8_t bPhysicalMinimum2; // 物理最小值 uint8_t bPhysicalMaximum2; // 物理最大值 } HIDDescriptorList[bNumDescriptors]; } HIDDescriptor; ``` 可以通过解析该结构体来找到鼠标的全局位置描述符的位置及其属性值。其中,bDescriptorType字段的值为0x06,表明这是一个全局描述符;wDescriptorLength字段表示该描述符的长度;bcdHID字段表示HID协议版本号;bCountryCode字段表示国家代码;bNumDescriptors字段表示HID描述符的数量;HIDDescriptorList数组则包含了所有的HID描述符。可以在HIDDescriptorList数组中搜索bDescriptorType字段的值为0x22的项,以找到鼠标HID描述符。在鼠标HID描述符中,可以查找bDescriptorType字段的值为0x24的项,以找到鼠标的全局位置描述符。在全局位置描述符中,可以查找bDescriptorType字段的值为0x25的项,以获取X轴和Y轴坐标的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值