【发布时间】:2018-12-13 22:57:54
【问题描述】:
目前我正在研究 STM32f4 板上的 USB 触摸屏 HID 描述符(自定义 HID 描述符)。 为此,我为单接触标识符(单指触摸)实现了一个 HID 描述符,这对我有用。但是,我的要求是多点触摸手指。 所以,我正在将我的单点触控 HID 修改为多点触控 HID。在这种情况下,我为第二根手指添加了一些报告。
这是我的 2 个手指的报告描述符...
0x05, 0x0D, // Usage Page (Digitizer)
0x09, 0x04, // Usage (Touch Screen)
0xA1, 0x01, // Collection (Application)
0x09, 0x55, // Usage (0x55)
0x25, 0x03, // Logical Maximum (3)
0xB1, 0x02, // Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0x09, 0x54, // Usage (0x54)
0x95, 0x01, // Report Count (1)
0x75, 0x08, // Report Size (8)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x22, // Usage (Finger)
0xA1, 0x02, // Collection (Logical)
0x09, 0x51, // Usage (0x51)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x42, // Usage (Tip Switch)
0x09, 0x32, // Usage (In Range)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x06, // Report Count (6)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x16, 0x00, 0x00, // Logical Minimum (0)
0x26, 0x10, 0x27, // Logical Maximum (10000)
0x36, 0x00, 0x00, // Physical Minimum (0)
0x46, 0x10, 0x27, // Physical Maximum (10000)
0x66, 0x00, 0x00, // Unit (None)
0x75, 0x10, // Report Size (16)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0x05, 0x0D, // Usage Page (Digitizer)
0x09, 0x22, // Usage (Finger)
0xA1, 0x02, // Collection (Logical)
0x05, 0x0D, // Usage Page (Digitizer)
0x09, 0x51, // Usage (0x51)
0x75, 0x08, // Report Size (8)
0x95, 0x01, // Report Count (1)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x42, // Usage (Tip Switch)
0x09, 0x32, // Usage (In Range)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x06, // Report Count (6)
0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01, // Usage Page (Generic Desktop Ctrls)
0x09, 0x30, // Usage (X)
0x09, 0x31, // Usage (Y)
0x16, 0x00, 0x00, // Logical Minimum (0)
0x26, 0x10, 0x27, // Logical Maximum (10000)
0x66, 0x00, 0x00, // Unit (None)
0x75, 0x10, // Report Size (16)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0xC0, // End Collection
0xC0, // End Collection
在分析仪中,我变得像这样.. enter image description here
在分析中,它显示了手指 1,2 的相同数据,即使我发送不同的数据。
我在这里附上我如何发送数据..
my_buff[0] = 0x02;//contact count
my_buff[1] = 0x01;//contact identifier(finger1)
my_buff[2] = 0x03;//tip switch and in range
my_buff[3] = 0x88;//x axis lsb
my_buff[4] = 0x13;//x axis msb
my_buff[5] = 0x88;//y axis lsb
my_buff[6] = 0x13;//y axis msb
my_buff[7] = 0x02;//contact identifier(finger2)
my_buff[8] = 0x03;//tip switch and in range
my_buff[9] = 0x70;//x axis lsb
my_buff[10]= 0x12;//x axis msb
my_buff[11] = 0x70;//y axis lsb
my_buff[12] = 0x12;//y axis msb
USBD_HID_SendReport (&USB_OTG_dev,
my_buff,
13);
在这种情况下,我什至没有得到单点触摸。但是,如果我禁用手指 2 中的尖端开关,那么手指 1 触摸工作。
但是如果我禁用手指 1 尖端开关,并启用手指 2 尖端开关,那么即使我没有得到单点触摸。
所以,请帮助我哪里出错了。
我不知道问题是由于报告描述符还是其他原因..
谢谢
【问题讨论】:
标签: c multi-touch hid