USB HID 多点触控学习历程(原)
(1)要学习HID,首先要了解USB的工作特点,包括设备枚举、数据传输特点、设备描述符的格式等,网上的百合电子工作室在这方面有很多资料,有本书《圈圈教你玩USB》也可以参考下,电脑圈圈有相关的论坛,大家有困惑可以求上墙。
(2)学习HID类设备的报告描述符,这个是关键。报告描述符很灵活,其语法不同于标准USB描述符,初学者要完全弄懂它,需多花点功夫,手头必备资料:微软白皮书两篇:《device class definition for human interface device (HID)》, 《Universal Serial Bus HID Usage Tables》,这个是基础,很重要,大家要硬着头皮看英文原版的文献;台湾教授林锡宽写的《USB之人性化介面裝置的報告描述元》三篇,这个把报告描述符讲得通俗易懂,很透彻;入门时可以参考我的博文《USB HID 报告描述符解析(转)》,还有百合电子工作室的一些资料,有了这些,应该就可以把报告描述符弄懂七八分了。PS:百合电子工作室有淘宝店,店主谢哥人很热心,大家有问题可以向他咨询哦。
(3)搭建触控硬件环境,主要有两种:一种是51单片机+ usbpdid12,另一种是触摸板+驱动IC+带USB芯片的mcu。我买的是百合电子工作室的USB学习板,基于51单片机+ usbpdid12的模式。先按照教程把鼠标、键盘等模拟出来,熟悉程序的架构,进一步熟悉报告描述符。
(4)仔细阅读微软白皮书《DigitizerDrvs_touch》,修改报告描述符,模拟多点触控。Windows上的多点触控用的是USB HID的digitizer扩展类,这个类是对USB2.0协议的扩增,不属于标准协议内容,在Win7(或是Vista)以前是不支持的。要想实现windows上的多点触控,必须把《DigitizerDrvs_touch》弄清楚,白皮书里面提供了一些触控报告描述符的范例,大家可以模仿,在模拟鼠标例子的基础上修改报告描述符,调试程序,成功运行后将开发板接到PC上,如果被识别,可能会在任务栏出现触摸图标,我的电脑 属性里面“笔和触摸”一栏也会提示当前的触控设备是具有几个点的设备。注意不是所有系统都支持多点触摸设备的,我安装的是旗舰版。这个阶段大家都会遇到的一道坎是“feature报文的处理”,我就不做过多描述,让大家挑战下自己,可以参考以下网页:
http://blog.csdn.net/cazicaquw/article/details/6771582
http://blog.csdn.net/yunwen3344/article/details/8107439
http://kei321test.googlecode.com/svn-history/r14/trunk/USB_HID_Requests.c
(5)验证多点触控的功能。有触摸板的可以直接在“画图板”里划线,基于51单片机和usbpdid12的可以在程序里写代码,向端口发送触点的数据,让其在“画图板”里画直线。
至此,我的多点触控历程暂时告一段落了,祝大家学得顺利、愉快。