描述符
/* USB PEN HID描述符 */
/* HID Report Descriptor PEN */
const u8 Pen_ReportDescriptor[] =
{
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x02, // USAGE (Pen)
0xa1, 0x01, // COLLECTION (Application)
0x09, 0x20, // USAGE (Stylus)
0xa1, 0x00, // COLLECTION (Physical)
// 0x85, REPORT_ID_PEN, // REPORT_ID (Pen)
0x09, 0x42, // USAGE (Tip Switch)
0x09, 0x44, // USAGE (Barrel Switch)
0x09, 0x45, // USAGE (Eraser Switch)
0x09, 0x3c, // USAGE (Invert)
0x09, 0x32, // USAGE (In Range)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x05, // REPORT_COUNT (5)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x0b, // REPORT_COUNT (11)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)
0x75, 0x10, // REPORT_SIZE (16)
0x95, 0x01, // REPORT_COUNT (1)
0xa4, // PUSH
0x55, 0x0d, // UNIT_EXPONENT (-3)
0x65, 0x33, // UNIT (Inch,EngLinear)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0x00, 0x00, // PHYSICAL_MAXIMUM (0)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x31, // USAGE (Y)
0x46, 0x00, 0x00, // PHYSICAL_MAXIMUM (0)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xb4, // POP
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x30, // USAGE (Tip Pressure)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x3d, // USAGE (X Tilt)
0x09, 0x3e, // USAGE (Y Tilt)
0x16, 0x01, 0x80, // LOGICAL_MINIMUM (-32767)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
}
报文说明
Pen Input报文共9Byte
Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 Byte8 Byte9 Byte10 Byte11
Byte0 -- 开关
|--Bit0: Tip switch触点开关
|--Bit1:Barrel Switch桶开关
|--Bit2:Eraser Switch擦开关
|--Bit3:Invert反转
|--Bit4:In Range
|--Bit5:填0,保留
|--Bit6:填0,保留
|--Bit7:填0,保留
笔操作流程:
笔尖悬空 0x10
笔尖接触屏幕 0x11
笔尖抬起 0x10
笔尖释放 0x00
橡皮擦操作流程:
橡皮擦悬空 0x1a
橡皮擦接触屏幕 0x16
橡皮擦抬起 0x1a
橡皮擦释放 0x00
Byte 1:0x00保留
Byte 2~3 : X坐标
Byte 4~5 : Y坐标
Byte 6~7 : Tip Pressure 压力
Byte 8~9 : X Tilt
Byte 10~11 :Y Tilt
Byte8~11可以在HID描述符里删除