原帖地址:http://publishblog.blogchina.com/blog/tb.b?diaryID=452249
嵌入式系统设计中,触摸屏校正是必可可少的步骤。
三四天的心血啊!为了它圣诞都没耍痛快!
进行触摸屏的校正前,先要知道一点背景知识:
1、触摸屏的驱动:
内核中../drivers/chat/目录下有个文件好象是s2410_ts***
是触摸屏能正常工作的第一层处理:在这里把底层电路传来的信号处理成数字信号
2、qte的触摸屏的驱动
在/..src/embedded/中qmouselinuxtp_qws.cpp中
触摸屏起来以后就要进行校正
为什么要进行校正呢:
因为从设备得到的数据是物理屏的数据,比如s3c2410的触摸屏的ad转换是10位精度,也就是说物理数据从0~1023,在实际的情况中一般是 100~1000之间的数据,而我们的液晶屏是320*240(或者是其他的,这和触摸屏的数据没有任何的关系),所以必须将物理数据转换为屏幕上点的数据.他们之间的转换公式,就必须通过定标的方式来确定.
所谓的定标,就是在屏幕上依次出现topleft,bottomleft,bottomright,topright和center一共5个点,用户必须依次在这5个点上点击(在触摸屏上点击,触摸屏就放在液晶屏的上方),这样我们得到了物理的点,也得到了对应的实际的点,因此就可以计算出相应的参数, 计算公式是:
s = 1 << 16;
a = s * (screen_tl.x() - screen_br.x() ) / (dev_tl.x() - dev_br.x());
b = 0;
c = s * screen_tl.x() - a * dev_tl.x();
d = 0;
e = s * (screen_tl.y() - screen_br.y() ) / (dev_tl.y() - dev_br.y());
f = s * screen_tl.y() - e * dev_tl.y();
假设p是物理的数据,那么转换到屏幕上点的公式就是:
x=(a * p.x() + b * p.y() + c) / s );
y= (d * p.x() + e * p.y() + f) / s );
需要注意的是:如果物理的点特别的不合常理,比如左边和右边的y的差值相差太大,说明屏的线性度太差,不会通过测试.
S3c2410的触摸屏驱动是iPAQ兼容的驱动,编译的时候需要定义2个宏:
QWS_MOUSE_IPAQ,QWS_MOUSE_IPAQ_RAW.同时设定的是
QWS_MOUSE_PROTO=Tpanel:/dev/h3600_tsraw
文章评论(0条评论)
登录后参与讨论