打印
[圈圈教你玩USB]

window7 触摸屏接口描述符,谁知道?谢谢

[复制链接]
楼主: h490516509
手机看帖
扫描二维码
随时随地手机跟帖
21
computer00| | 2010-2-8 12:58 | 只看该作者 回帖奖励 |倒序浏览
类就是告诉系统它是什么设备啊,例如HID设备,大容量存储设备,音频设备等等。如果你要做HID设备,类必须要指定为HID设备,明白吗?不然系统就不会去获取你的报告描述符,因为它根本就不是HID设备。子类和协议,是在类的基础上更进一步细分,例如有些键盘、鼠标等,他们是HID设备,并且能够在引导时的BIOS中使用,就可以在子类和协议上指定它是这样的设备,这个你要仔细看看HID协议的文档。

系统有现成的驱动的啊,就像鼠标、键盘那样,win7是自带的多点触摸的驱动,你只要按照白皮书的规范来搞,它就是标准的win7多点触摸设备,不需要你写驱动。相反,倒是厂商自定义的USB设备(不是自定义HID设备,自定义HID设备其实就是一个标准的HID设备了,只不过没有实现更上层的子设备,系统就会产生一个HID兼容设备,系统是自带这个驱动的)需要自己写驱动程序。

使用特权

评论回复
22
h490516509|  楼主 | 2010-2-8 13:54 | 只看该作者
类就是告诉系统它是什么设备啊,例如HID设备,大容量存储设备,音频设备等等。如果你要做HID设备,类必须要指定为HID设备,明白吗?不然系统就不会去获取你的报告描述符,因为它根本就不是HID设备。子类和协议,是在 ...
computer00 发表于 2010-2-8 12:58

我用的是试用板WINDOWS 7,在驱动文件夹下,没发展有触摸驱动,也不知是不是公开的。。。。

使用特权

评论回复
23
computer00| | 2010-2-8 14:46 | 只看该作者
这个标准正式版的win7才能支持多点。没有的话,只有自己搞驱动了,做成自定义HID设备,然后搞个驱动,或者服务程序,可以参考一下TUIO这样的东东,已经一些FLASH、软件等支持这个东东。

使用特权

评论回复
24
h490516509|  楼主 | 2010-2-8 17:08 | 只看该作者
这个标准正式版的win7才能支持多点。没有的话,只有自己搞驱动了,做成自定义HID设备,然后搞个驱动,或者服务程序,可以参考一下TUIO这样的东东,已经一些FLASH、软件等支持这个东东。 ...
computer00 发表于 2010-2-8 14:46

如果要自己写,真的要人命啊。。。
感觉试用版,应该功能全有的。。
刚安装不久,30天还没够。。。。

使用特权

评论回复
25
h490516509|  楼主 | 2010-2-8 17:11 | 只看该作者
这个标准正式版的win7才能支持多点。没有的话,只有自己搞驱动了,做成自定义HID设备,然后搞个驱动,或者服务程序,可以参考一下TUIO这样的东东,已经一些FLASH、软件等支持这个东东。 ...
computer00 发表于 2010-2-8 14:46

如何开启Windows 7系统的多点触控?0 u  Z9 M2 ~  I0 G

 答:“多点触控”技术已在苹果iPhone手机和MacBook Air笔记本电脑上大获成功,该技术可以实现对数码产品的便捷操控,Windows 7提供了对多点触控的良好支持,系统附带多点触控软件(Multitouch Software)包,为多点触控电脑优化的含6款游戏和应用程序的组件,该触控包将将提供给电脑厂商,它们将为适用触控技术的电脑选择安装这一产品。
  要开启设备的多点触控功能,必须安装相应的驱动,否则还是单点触控。而且,随着驱动的版本更新升级,不仅仅支持两点触控、甚至可以支持三点、四点触控,据微软官方介绍,最多可以支持10点触控,还是很强大的。

好像单点可以的。。。

使用特权

评论回复
26
computer00| | 2010-2-8 17:23 | 只看该作者
如果不想自己写,就买个高级点的版本咯...
低级一些的版本是不支持多点触摸的,

Windows 7包含6个版本,分别为Windows 7 Starter(初级版)、Windows 7 Home Basic(家庭普通版)、Windows 7 Home Premium(家庭高级版)、Windows 7 Professional(专业版)、 Windows 7 Enterprise(企业版)以及Windows7 Ultimate(旗舰版)。

Windows 7 Starter(初级版)

这是功能最少的版本,缺乏Aero特效功能,没有64位支持,没有Windows媒体中心和移动中心等,对更换桌面背景有限制(很奇怪)。它主要设计用于类似上网本的低端计算机,通过系统集成或者OEM计算机上预装获得,并限于某些特定类型的硬件。

Windows 7 Home Basic(家庭普通版)

这是简化的家庭版,中文版预期售价399元。支持多显示器,有移动中心,限制部分Aero特效,没有Windows媒体中心,缺乏Tablet支持,没有远程桌面,只能加入不能创建家庭网络组(Home Group)等。它仅在新兴市场投放,例如中国、印度、巴西等。

Windows 7 Home Premium(家庭高级版)

面向家庭用户,满足家庭娱乐需求,包含所有桌面增强和多媒体功能,如Aero特效、多点触控功能、媒体中心、建立家庭网络组、手写识别等,不支持Windows域、Windows XP模式、多语言等。

Windows 7 Professional(专业版)

面向爱好者和小企业用户,满足办公开发需求,包含加强的网络功能,如活动目录和域支持、远程桌面等,另外还有网络备份、位置感知打印、加密文件系统、演示模式、Windows XP模式等功能。64位可支持更大内存(192GB)。 可以通过全球OEM厂商和零售商获得。

Windows 7 Enterprise(企业版)

面向企业市场的高级版本,满足企业数据共享、管理、安全等需求。包含多语言包、UNIX应用支持、BitLocker驱动器加密、分支缓存(BranchCache)等,通过与微软有软件保证合同的公司进行批量许可出售。不在OEM和零售市场发售。

Windows 7 Ultimate(旗舰版)

拥有所有功能,与企业版基本是相同的产品,仅仅在授权方式及其相关应用及服务上有区别,面向高端用户和软件爱好者。专业版用户和家庭高级版用户可以付费通过Windows随时升级 (WAU)服务升级到旗舰版。

注:在这六个版本中,Windows 7家庭高级版和Windows 7专业版是两大主力版本,前者面向家庭用户,后者针对商业用户。此外,32位版本和64位版本没有外观或者功能上的区别,但64位版本支持16GB(最高至192GB)内存,而32位版本只能支持最大4GB内存。目前所有新的和较新的 CPU都是64位兼容的,均可使用64位版本。

使用特权

评论回复
27
h490516509|  楼主 | 2010-2-8 17:32 | 只看该作者
如果不想自己写,就买个高级点的版本咯...
低级一些的版本是不支持多点触摸的,

Windows 7包含6个版本,分别为Windows 7 Starter(初级版)、Windows 7 Home Basic(家庭普通版)、Windows 7 Home Premium(家庭高级版) ...
computer00 发表于 2010-2-8 17:23

现在都不知里面有没有驱动啊。。。。。。。。
试用版,我驱动文件夹里找不到驱动程序。。。。。。
真郁闷啊。。。。。。。

使用特权

评论回复
28
computer00| | 2010-2-9 09:46 | 只看该作者
关于驱动方面的,你可以参考下http://www.microsoft.com/whdc/device/input/default.mspx里面的相关**吧。不过,既然版本有限制,我想可能不单是缺少驱动那么简单的事。

使用特权

评论回复
29
h490516509|  楼主 | 2010-2-9 10:39 | 只看该作者
关于驱动方面的,你可以参考下http://www.microsoft.com/whdc/device/input/default.mspx里面的相关**吧。不过,既然版本有限制,我想可能不单是缺少驱动那么简单的事。 ...
computer00 发表于 2010-2-9 09:46


下面是单点触摸描述符。
0x05, 0x0d,                         // USAGE_PAGE (Digitizers)          0
    0x09, 0x04,                         // USAGE (Touch Screen)             2
    0xa1, 0x01,                         // COLLECTION (Application)         4
    0x85, 0xaa,                          //   REPORT_ID (Touch)              6
    0x09, 0x20,                         //   USAGE (Stylus)                 8
    0xa1, 0x00,                         //   COLLECTION (Physical)          10
    0x09, 0x42,                         //     USAGE (Tip Switch)           12
    0x15, 0x00,                         //     LOGICAL_MINIMUM (0)          14
    0x25, 0x01,                         //     LOGICAL_MAXIMUM (1)          16
    0x75, 0x01,                         //     REPORT_SIZE (1)              18
    0x95, 0x01,                         //     REPORT_COUNT (1)             20
    0x81, 0x02,                         //     INPUT (Data,Var,Abs)         22
    0x95, 0x03,                         //     REPORT_COUNT (3)             24
    0x81, 0x03,                         //     INPUT (Cnst,Ary,Abs)         26
    0x09, 0x32,                         //     USAGE (In Range)             28
    0x09, 0x37,                         //     USAGE (Data Valid-Finger)    30
    0x95, 0x02,                         //     REPORT_COUNT (2)             32
    0x81, 0x02,                         //     INPUT (Data,Var,Abs)         34
    0x95, 0x0a,                         //     REPORT_COUNT (10)            36
    0x81, 0x03,                         //     INPUT (Cnst,Ary,Abs)         38
    0x05, 0x01,                         //     USAGE_PAGE (Generic Desktop) 40
    0x26, 0xff, 0x7f,                   //     LOGICAL_MAXIMUM (32767)      42
    0x75, 0x10,                         //     REPORT_SIZE (16)             45
    0x95, 0x01,                         //     REPORT_COUNT (1)             47
    0xa4,                               //     PUSH                         49
    0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           50
    0x65, 0x00,                         //     UNIT (None)                  52
    0x09, 0x30,                         //     USAGE (X)                    54
    0x35, 0x00,                         //     PHYSICAL_MINIMUM (0)         56
    0x46, 0x00, 0x00,                   //     PHYSICAL_MAXIMUM (0)         58
    0x81, 0x02,                         //     INPUT (Data,Var,Abs)         61
    0x09, 0x31,                         //     USAGE (Y)                    63
    0x46, 0x00, 0x00,                   //     PHYSICAL_MAXIMUM (0)         65
    0x81, 0x02,                         //     INPUT (Data,Var,Abs)         68
    0xb4,                               //     POP                          70
    0x05, 0x0d,                         //     USAGE PAGE (Digitizers)      71
    0x09, 0x60,                         //     USAGE (Width)                73
    0x09, 0x61,                         //     USAGE (Height)               75
    0x95, 0x02,                         //     REPORT_COUNT (2)             77
    0x81, 0x02,                         //     INPUT (Data,Var,Abs)         79
    0x95, 0x01,                         //     REPORT_COUNT (1)             81
    0x81, 0x03,                         //     INPUT (Cnst,Ary,Abs)         83/85
    0xc0,                               //   END_COLLECTION                 0/1
    0xc0 ,                              // END_COLLECTION                   0/1

For Windows 7, touch digitizers appear through HID as a touch digitizer (page 0x0D, usage 0x04).
The following usages are required:
·
X (page 0x01, usage 0x30) and Y (page 0x01, usage 0x31).

·
Tip switch (page 0x0D, usage 0x42).

·
In-range (page 0x0D, usage 0x32).

Use tip switch to indicate finger contact and liftoff from the digitizer surface, similar to how a pen reports contact with the digitizer.
If the device supports z-axis detection, it reports in-range correctly. If the device does not support z-axis detection, the driver reports packets with in-range and tip switch set when a finger comes in contact with the digitizer.
Note that some earlier versions of Windows have different guidelines for how touch digitizer drivers should handle in-range reporting. The Windows XP Tablet PC OEM Preinstallation Kit (OPK) includes information about how to implement a touch digitizer driver for Windows XP. For more information, contact your Microsoft technical account manager.
The following usages are optional, but you should implement them if the digitizer hardware supports them:
·
Confidence (page 0x0D, usage 0x47).
·
Width and height (page 0x0D, usages 0x48 and 0x49).

上面是报告描述符,
以下是我的解理,不知对不对,希望圈圈能指点指点。
上面报告描述符要发12字节给电脑。
我发给的数据为。
data[0]=0x21,data[1]=0x00,data[2]=0x00,data[3]=0x01,data[4]=0x00,data[5]=0x01,data[6]=0x10,data[7]=0x00,data[8]=0x10,data[9]=0x00,data[10]=0x00,data[11]=0x00,
第0个节字data[0],第0位为判断是否触摸位。我置1
第0个节字,每三位为IN Range位,判断是否有z轴。我置0。
第0个节字,每四位为信心位,判断对触摸的确定度,我置1。
第0个节字其它位为常数0。
每1个节字,data[1]。为常数位。我置0。
第2,3节字data[2]=0x00,data[3]=0x01。为X轴,坐标。
第4,5节字data[4]=0x00,data[5]=0x01。为Y轴,坐标。
第6,7节字data[6]=0x10,data[7]=0x00。为触摸宽度。
第8.,9节字data[8]=0x10,data[9]=0x00。为触摸高度。
第10.11节字data[10]=0x00,data[11]=0x00,为常数0
不知前上分细对不对?发送的数据对不对?
LM:逻辑大,LN:逻辑小,
PM:物理大,PN:物理小,




精度公式:(LM-LN)/(PM-PN)*10(的三次方)
还是怎么计算?




使用特权

评论回复
30
computer00| | 2010-2-9 10:55 | 只看该作者
In Range也要为1吧。搞不懂为啥物理最大值为0??

使用特权

评论回复
31
h490516509|  楼主 | 2010-2-9 11:04 | 只看该作者
In Range也要为1吧。搞不懂为啥物理最大值为0??
computer00 发表于 2010-2-9 10:55


Under Windows 2000, XP, Vista and Windows 7, if a touch device is HID compliant it can utilise the HID driver supplied with the operating system to control ‘Human Interface Devices’ as long as the HID descriptors and generated data confirm to the HID requirements.  A separate calibration procedure is used to remap the co-ordinates in the controller to match the desktop video system.  Under Vista and Windows 7 extended touch functionality is also enabled in appropriate environments.


use the physical dimensions property fo x and y usages
if you cannot report accurate units,report 0 units.

使用特权

评论回复
32
h490516509|  楼主 | 2010-2-9 11:05 | 只看该作者
Under Windows 2000, XP, Vista and Windows 7, if a touch device is HID compliant it can utilise the HID driver supplied with the operating system to control ‘Human Interface Devices’ as long as the ...
h490516509 发表于 2010-2-9 11:04


从上可以知道,对单点触摸,用HID这个驱动。为什么,我就不能通信成功呢。。。郁闷啊。。。。。。。。

使用特权

评论回复
33
computer00| | 2010-2-9 11:26 | 只看该作者
单点触摸,你按照标准的USB鼠标来描述就得了呗...

使用特权

评论回复
34
h490516509|  楼主 | 2010-2-9 11:30 | 只看该作者
33# computer00

In-built HID device driverWindows 7 extended touch features are automatically enabled for HID compliant devices that comply with the core HID and multi-touch extensions

The devices must appear as a ** certified HID digitizer and:
    Hold standard device class in HID descriptor Automated descriptor query    这句什么意思?
  • Observe all required HID and Multi-touch extension usages   这句什么意思?
我想试一下触摸的协议。。。总搞点新技术吧。。。多点就不想,但单点必须的。。。。谢谢。。。

使用特权

评论回复
35
h490516509|  楼主 | 2010-2-9 11:32 | 只看该作者
单点触摸,你按照标准的USB鼠标来描述就得了呗...
computer00 发表于 2010-2-9 11:26


In-built HID device driverWindows 7 extended touch features are automatically enabled for HID compliant devices that comply with the core HID and multi-touch extensions

The devices must appear as a ** certified HID digitizer and:
    Hold standard device class in HID descriptor Automated descriptor query.................
  • Observe all required HID and Multi-touch extension usages..........

使用特权

评论回复
36
h490516509|  楼主 | 2010-2-9 11:33 | 只看该作者
In-built HID device driverWindows 7 extended touch features are automatically enabled for HID compliant devices that comply with the core HID and multi-touch extensions

The devices must appear as ...
h490516509 发表于 2010-2-9 11:32

最主要是老板要求。。。郁闷。。。

使用特权

评论回复
37
computer00| | 2010-2-9 11:36 | 只看该作者
这样啊,你把物理最大值改成跟逻辑最大值一样试是,单位去掉。

使用特权

评论回复
38
h490516509|  楼主 | 2010-2-9 11:44 | 只看该作者
0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           50
    0x65, 0x00,                         //     UNIT (None)                  52
把这个去掉吗?

使用特权

评论回复
39
h490516509|  楼主 | 2010-2-9 11:44 | 只看该作者
这样啊,你把物理最大值改成跟逻辑最大值一样试是,单位去掉。
computer00 发表于 2010-2-9 11:36

0x55, 0x0d,                         //     UNIT_EXPONENT (-3)           50
    0x65, 0x00,                         //     UNIT (None)                  52
把这个去掉吗?

使用特权

评论回复
40
computer00| | 2010-2-9 11:46 | 只看该作者
恩。把物理最大值改成跟逻辑最大值一样。

使用特权

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

本版积分规则