HID鼠标描述符

绝对坐标

描述符

/* USB 鼠标HID描述符(绝对坐标) */
/* HID Report Descriptor Mouse */
const u8 Mouse_ReportDescriptor[] =
{
    0x05, 0x01,         // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,         // USAGE (Mouse)
    0xa1, 0x01,         // COLLECTION (Application)
    0x09, 0x01,         //   USAGE (Pointer)
    0xa1, 0x00,         //   COLLECTION (Physical)
    0x05, 0x09,         //     USAGE_PAGE (Button)
    0x19, 0x01,         //     USAGE_MINIMUM (Button 1)
    0x29, 0x03,         //     USAGE_MAXIMUM (Button 3)
    0x15, 0x00,         //     LOGICAL_MINIMUM (0)
    0x25, 0x01,         //     LOGICAL_MAXIMUM (1)
    0x95, 0x03,         //     REPORT_COUNT (3)
    0x75, 0x01,         //     REPORT_SIZE (1)
    0x81, 0x02,         //     INPUT (Data,Var,Abs)
    0x95, 0x01,         //     REPORT_COUNT (1)
    0x75, 0x05,         //     REPORT_SIZE (5)
    0x81, 0x03,         //     INPUT (Cnst,Var,Abs)
    0x05, 0x01,         //     USAGE_PAGE (Generic Desktop)
    0x09, 0x30,         //     USAGE (X)
    0x09, 0x31,         //     USAGE (Y)
    0x09, 0x00,         //     USAGE (Undefined)
    0x15, 0x00,         //     LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x7f,   //     LOGICAL_MAXIMUM (32767)
    0x35, 0x00,         //     PHYSICAL_MINIMUM(0)
    0x46, 0xFF, 0x7F,   //     PHYSICAL_MAXIMUM(32767)
    0x75, 0x10,         //     REPORT_SIZE (16)
    0x95, 0x03,         //     REPORT_COUNT (3)
    0x81, 0x02,         //     INPUT (Data,Var,Abs)
    0xc0,               //   END_COLLECTION         
}

报文说明

鼠标发送给PC的数据每次7个字节

Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6

定义分别是:

Byte0 --
       |--Bit7:   1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 
       |--Bit6:   1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 
       |--Bit5:   Y 坐标变化的符号位,1表示负数,即鼠标向下移动 
       |--Bit4:   X 坐标变化的符号位,1表示负数,即鼠标向左移动 
       |--Bit3:     恒为1 
       |--Bit2:   1 表示中键按下 
       |--Bit1:   1 表示右键按下 
       |--Bit0:   1 表示左键按下 
Byte1、Byte2 -- X坐标
Byte3、Byte4 -- Y坐标
Byte5、Byte6 -- 没测试过,可能是滚轮吧,反正我每次都填的0;  

相对坐标

描述符

/* USB 鼠标HID描述符(相对坐标) */
/* HID Report Descriptor Mouse */
const u8 Mouse_ReportDescriptor[] =
{
    0x05, 0x01,          // Usage Page(Generic Desktop)
    0x09, 0x02,          //     Usage(Mouse) 
    0xA1, 0x01,          //     Collection(Logical)
    0x09, 0x01,          //     Usage(Pointer)
    0xA1, 0x00,          //     Collection(Linked)
    0x05, 0x09,          //     Usage Page(Buttons) 
    0x19, 0x01,          //     Usage Minimum(1) 
    0x29, 0x03,          //     Usage Maximum(3)
    0x15, 0x00,          //     Logical Minimum(0) 
    0x25, 0x01,          //     Logical Maximum(1) 
    0x95, 0x03,          //     Report Count(3) 
    0x75, 0x01,          //     Report Size(1)
    0x81, 0x02,          //     Input(Variable) 
    0x95, 0x01,          //     Report Count(1) 
    0x75, 0x05,          //     Report Size(5)
    0x81, 0x01,          //     Input(Constant,Array)
    0x05, 0x01,          //     Usage Page(Generic Desktop) 
    0x09, 0x30,          //     Usage(X axis) 
    0x09, 0x31,          //     Usage(Y axis) 
    0x09, 0x38,          //     Usage(Wheel)
    0x15, 0x81,          //     Logical Minimum(-127) 
    0x25, 0x7F,          //     Logical Maximum(127) 
    0x75, 0x08,          //     Report Size(8)
    0x95, 0x03,          //     Report Count(3)
    0x81, 0x06,          //     Input(Variable, Relative) 
    0xC0                 // End Collection*/ 
}

报文说明

鼠标发送给PC的数据每次4个字节

Byte0 Byte1 Byte2 Byte3

定义分别是:

Byte0 --
    |--Bit7:   1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 
    |--Bit6:   1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 
    |--Bit5:   Y 坐标变化的符号位,1表示负数,即鼠标向下移动 
    |--Bit4:   X 坐标变化的符号位,1表示负数,即鼠标向左移动 
    |--Bit3:     恒为1 
    |--Bit2:   1 表示中键按下 
    |--Bit1:   1 表示右键按下 
    |--Bit0:   1 表示左键按下 
Byte1 -- X坐标变化量,与Byte的Bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量 
Byte2 -- Y坐标变化量,与Byte的Bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
Byte3 -- 滚轮变化。
对Byte0的4-7位没有测试,Byte0的4-7全为0的时候,Byte1 Byte2的正负表示鼠标移动方向 

 继续浏览关于 HIDUSB 的文章

 本文最后更新于 2021/03/01 15:21:56,可能因经年累月而与现状有所差异

 引用转载请注明: 落梧笔记 > 电子 > HID鼠标描述符