USB HID-compliant mouse报点协议解析
本篇文章主要是对usb 多点触控给Windows上报点位时上报的数据解析。至于usb怎样枚举出一个多点触控在这不做解释,网上有很多教程。
1、当你的usb hid设备枚举正常后,你可以使用bus hound看到你的usb 设备里有一个新增的HID-compliant mouse接口。可以通过usbTreeView查看对应的端点,我这里的该接口对应的是端点1。所以上报触摸点时,通过端点1上报就好。
.
2、windows要知道你的触摸状态,必须要知道你有几个点上报,每个点的状态(按下还是松开),每个点对应的id(也就是对应的手指id),每个点的坐标。由上面的端点描述可以看到bInterval = 0x01(1ms),也就是说windows这边时1ms找我们要一次触摸点的坐标,当我们有坐标点更新时就上传坐标点,当没有触摸时,直接NAK就好。
3、数据报文来了。举个例子
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x02 | 0x07 | 0x00 | 0x00 | 0x04 | 0x00 | 0x04 | 0x06 | 0x01 | 0x00 | 0x08 | 0x00 | 0x08 | 0x02 |
设备 ID | 第一个点触摸状态 | 手指ID | X坐标低8位 | X坐标高8位 | Y坐标低8位 | Y坐标高8位 | 第二点触摸状态 | 手指ID | X坐标低8位 | X坐标高8位 | Y坐标低8位 | Y坐标高8位 | 此包中的有效点数 |
设备ID固定值 | 被按下 | 手指id为0x00 | X坐标为0x0400 | 计算下来为1024 | Y坐标为0x0400 | 计算下来为1024 | 被释放 | 手指id为0x01 | X坐标为0x800 | 计算下来为2048 | Y坐标为0x0800 | 计算下来为2048 | 有点数为2个 |
上面的报文(0x02,0x07,0x00,0x00,0x04,0x00,0x04,0x06,0x01,0x00,0x08,0x00,0x08,0x02)的意思就是0号手指被按下,其坐标点为(1024,1024),1号手指被释放,释放的位置坐标点为(2048,2048)。依此类推,如果需要报第三点、第四点等按照上面的格式添加数据就可以了。