触摸屏驱动的改写
1、项目需求-Qt相关:
开发平台:开源平板
开发环境:ubuntu 10.10
Linux源码:linux 3.0.8
Qt开发工具: Qtsdk
这次项目我们用的是开源平板平台,在上面跑Qt程序,因此需要触摸功能。那怎样实现触摸功能呀。
首先,我们的平板上可以跑android,只要把android镜像烧到flash,只要启动起来触摸屏就可以用,并且还支持多点触控。说明里面有我们要的驱动,我努力的找到了平板的驱动源码.c文件,那该怎样进行修改,这是个难题。
源码路径:$ cd ~/fspad-702/lichee/linux-3.0/drivers/input/touchscreen/
平板的源码有了,该怎样修改?这里我们有以前在A8上能运行Qt的linux源码。
源码路径:、linux-2.6.35\drivers\input\touchscreen\s3c3410_ts.c。
建议先看总体分析: input子系统 KeyPad-Touch上报数据格式与机制.doc
地址:http://blog.csdn.net/android_huber
接着我们看我们的代码:
$ vim s3c2410.c
找到下图位置的代码。
是不是和input子系统 KeyPad-Touch上报数据格式与机制.doc里的讲解代码很相似。这里我们用的是单点触摸方式。
此段代码是按下时上传部分。
Down: 按下
Input_report_ads():把信息提交到上层
要注意这里我们用到的是input_sync();
此段是抬起时上传的部分。
这里else 代表的是弹起。
首先我们应该知道input被看做是一个设备,对一个设备来说。一定要init,register,open等等。
Register 部分以红色部分为主,其他的代码不用修改。
Input_set_abs_parms(); 设置触摸屏的参数如长宽的范围、触摸的方式等。
以上是A8触摸屏的驱动代码部分分析,A8上的Qt应用程序已经跑起来。点击触摸屏可以实现相应反应。
开源平板pad的触摸屏是电容屏,并且触摸屏的驱动是多点触控的。那我们就可以参考A8上的触摸屏代码。
虽然触摸设备不一样,驱动源码也大不相同,但它们的原理是一样。还是一样我们只关心设备注册和触摸位置信息的上传。
PAD触摸驱动源码:
$ vim ~/fspad-702/lichee/linux-3.0/drivers/input/touchscreen/ssd253x-ts.c
1、register部分
1、未改之前代码:
Ssi_input->evbit[ ] evbit字段用于描述支持的事件,这里支持按键事件、绝对事件、同步事件。
Ssi_input->keybit[ ] 描述按键的类型。
BTN_TOUCH类型来表示触摸屏的点击
注册部分:
2、修改之后:
点击上报信息部分(未改时):
上报部分改之后:
就这么简单,平板上的触摸屏可以完好的运作启来了。Qt程序可以完美的运行。