绝对坐标
描述符
/* 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的正负表示鼠标移动方向