打印

WIN7 USB HID 多点触控报告描述符问题

[复制链接]
12674|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tdma602|  楼主 | 2012-1-11 11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人最近在研究WIN7多点触控,遇到以下几个问题:
MCU是PIC18F2450,USB HID报告描述符如下:
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x04, // USAGE (Touch Screen)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x01,//REPORTID_MTOUCH, // REPORT_ID (Touch)
0x09, 0x22, // USAGE (Finger)
0xa1, 0x02, // COLLECTION (Logical)
0x09, 0x42, // USAGE (Tip Switch)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x32, // USAGE (In Range)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x81, 0x03, // INPUT (Cnst,Ary,Abs)
0x75, 0x08, // REPORT_SIZE (8)
0x09, 0x51, // USAGE ( Contact Identifier)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desk..
0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (4095)
0x75, 0x10, // REPORT_SIZE (16)
0x55, 0x00, // UNIT_EXPONENT (0)
0x65, 0x00, // UNIT (00)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0x00, 0x00, // PHYSICAL_MAXIMUM (0)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x46, 0x00, 0x00, // PHYSICAL_MAXIMUM (906)
0x09, 0x31, // USAGE (Y)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x22, // USAGE (Finger)
0xa1, 0x02, // COLLECTION (Logical)
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x42, // USAGE (Tip Switch)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x09, 0x32, // USAGE (In Range)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x81, 0x03, // INPUT (Cnst,Ary,Abs)
0x75, 0x08, // REPORT_SIZE (8)
0x09, 0x51, // USAGE ( Contact Identifier)
0x95, 0x01, // REPORT_COUNT (1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x05, 0x01, // USAGE_PAGE (Generic Desk..
0x26, 0xff, 0x7f, // LOGICAL_MAXIMUM (32767)
0x75, 0x10, // REPORT_SIZE (16)
0x55, 0x00, // UNIT_EXPONENT (0)
0x65, 0x00, // UNIT (0)
0x09, 0x30, // USAGE (X)
0x35, 0x00, // PHYSICAL_MINIMUM (0)
0x46, 0x00, 0x00, // PHYSICAL_MAXIMUM (0)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x46, 0x00, 0x00, // PHYSICAL_MAXIMUM (0)
0x09, 0x31, // USAGE (Y)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
0x05, 0x0d, // USAGE_PAGE (Digitizers)
0x09, 0x54, // USAGE (Actual count)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x08, // LOGICAL_MAXIMUM (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
//0x85, 0x05,//REPORTID_MAX_COUNT, // REPORT_ID (Feature)
0x09, 0x55, // USAGE(Maximum Count)
0xB1, 0x02, // FEATURE (Data,Var,Abs)
0xc0, // END_COLLECTION

按以上报告描述符,报告格式应为:
报告大小为13+1(REPORT_ID)字节
OUT[0]-------REPORT_ID
OUT[1]-------bit7~bit2--全为0,bit1~bit0--触控开关
OUT[2]-------联系标识
OUT[3] OUT[4]-------X轴绝对纵坐标
OUT[5] OUT[6]-------Y轴绝对纵坐标
OUT[7]-------bit7~bit2--全为0,bit1~bit0--触控开关
OUT[8]-------联系标识
OUT[9] OUT[10]-------X轴绝对纵坐标
OUT[11] OUT[12]-------Y轴绝对纵坐标
OUT[13]-------实际点数量
设备连接上WIN7可以正常识别。
问题1:我在WIN7上,按以上报告格式发送数据,系统都没反应!!!
问题2:FEATURE 报告怎样发送呢?以上报告描述符在XP和WIN7在USB握手过程有什么不同?
问题3:我在报告描述符里放进了一段MOUSE的描述符(用另一个REPORT_ID),在XP和WIN7在都可以正常识别,同时可以正常操作,请问怎样才能使设备在XP下只发出MOUSE的报告,在WIN7下发多点触控的报告呢?

相关帖子

沙发
knate| | 2012-1-21 17:03 | 只看该作者
feature report必须还得有个单独的报表
否则WIN7下无法使用.
枚举过程的数据分析下就知道了..

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
tdma602 + 1
板凳
ebird2012| | 2012-2-14 10:32 | 只看该作者
我最近也遇到同样的问题,楼主解决没有啊,同请教!

使用特权

评论回复
地板
new_come| | 2012-5-11 16:40 | 只看该作者
楼主的问题解决了吗?把经验共享一下呗。

使用特权

评论回复
5
nan_banqiu| | 2012-12-25 12:42 | 只看该作者
问题解决了?

使用特权

评论回复
6
yinbenjun| | 2012-12-25 14:50 | 只看该作者
对于feature report,系统会发送get report命令来取数据,所以下位机程序里面要写处理get report和set report命令的函数。

使用特权

评论回复
7
tdma602|  楼主 | 2013-3-8 14:16 | 只看该作者
yinbenjun 发表于 2012-12-25 14:50
对于feature report,系统会发送get report命令来取数据,所以下位机程序里面要写处理get report和set repo ...

已解决,
确实要“ 下位机程序里面要写处理get report和set report命令的函数。”
在设备与系统握手过程中,WIN7系统会发送get report命令来获取触控设备最大的触控点数,最小值为1。
如果下位机没做处理,在WIN7系统下你发触控设备的数据包是没反应的。

使用特权

评论回复
8
yffgdr| | 2013-3-11 16:45 | 只看该作者
楼主你好,我也在做多点触控的驱动设计,好多东西不太懂呢   你这个报告描述符里面的// LOGICAL_MAXIMUM (4095)
是什么意思呢? LOGICAL_MAXIMUM (32767)
还有这个是什么意思呢?还有就是为什么我把描述符都填好之后,主机的设备管理器有黄色的感叹号呢?是我描述符写的不对呢还是我的程序枚举过程中因为没有get_report的处理呢?呵呵 问题有点多 谢谢楼主啦  可否QQ交流下呢  我的QQ421906339  

使用特权

评论回复
9
a1718| | 2013-3-12 10:19 | 只看该作者
跟着学习下,了解了解

使用特权

评论回复
10
kerovv| | 2013-3-22 00:28 | 只看该作者
tdma602 发表于 2013-3-8 14:16
已解决,
确实要“ 下位机程序里面要写处理get report和set report命令的函数。”
在设备与系统握手过程 ...

请问下位机怎么处理get report这个命令,我现在只能实现单点触摸,多点的时候把点发上去没反应,感觉是没处理触控设备的最大触控点数,请问这个最大触控点数怎么往上报呢?

使用特权

评论回复
11
jiege0129| | 2013-5-15 20:17 | 只看该作者
同样的问题,请问有人解决了吗

使用特权

评论回复
12
jiege0129| | 2013-5-21 21:52 | 只看该作者
tdma602 发表于 2013-3-8 14:16
已解决,
确实要“ 下位机程序里面要写处理get report和set report命令的函数。”
在设备与系统握手过程 ...

哥们,,,497086461交流一下啊,谢谢了

使用特权

评论回复
13
凉白开| | 2013-5-23 21:05 | 只看该作者
正在研究  跑进来看看

使用特权

评论回复
14
wan2008pfjy| | 2015-7-30 15:47 | 只看该作者
楼主,我也遇到了这样的问题,就是处理get report和set report命令的函数不大明白怎么实现。请指教pengfeng208@163.com

使用特权

评论回复
15
eydj2008| | 2018-3-20 21:36 | 只看该作者
tdma602 发表于 2013-3-8 14:16
已解决,
确实要“ 下位机程序里面要写处理get report和set report命令的函数。”
在设备与系统握手过程 ...

WIN10 也需要吗   我也是枚举成功了  不响应触点
我发现人家行的那台  特征报告 报了258个  这么多
我看到 也有人讲 只报二个字节   最大点数 和一个ID吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

6

帖子

1

粉丝