Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4519311
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: LINUX

2012-05-07 13:42:43

转自http://loovle.iteye.com/blog/663448
1,触摸屏校准通用方法
主要采用以下公式,实现触摸屏校正,其中XL, YL是显示屏坐标,XT, YT是触摸屏坐标,
XL = XT*A+YT*B+C;
YL = XT*D+YT*E+F;    公式(1)
由于具体计算是希望是整数运算,所以实际中保存的ABCDEF为整数,而增加一个参数Div, 由以下公式实现:
XL = (XT*A+YT*B+C) / Div;
YL = (XT*D+YT*E+F) / Div;    公式(2)
因此通常保存的参数是七个。
一般通过3个采样点就可以实现校准,tslib则使用了5个采样点,可实现更准确的校准。
2,用Linux的proc文件系统实现触摸屏校正
Android本身并不带触摸屏校准,因此要校准触摸屏最好完全在底层驱动完成,而
Android获取到的数据直接将是校准后的坐标数据
1) 首先在touchscreen的驱动加载时,创建一个proc文件,如:
C代码  收藏代码
  1. ts_proc_entry = create_proc_entry("driver/micc_ts", 0, NULL);  
  2. if (ts_proc_entry) {  
  3.         ts_proc_entry->write_proc = ts_proc_write;  
  4. }  

可在ts_proc_write()定义自己的proc数据传递格式。
2) 在touchscreen驱动用默认参数,完成校准,如果不用校准,则设置为:
A=1, B=0, C=0, D=0, E=1, F=0, Div=1
3) 修改tslib—ts_calibrate获得需要的参数A,B,C,D,E,F,Div;
注意要在运行前改为如下参数:
A=1, B=0, C=0, D=0, E=1, F=0, Div=1
如:
echo +a 1 > /proc/driver/micc_ts
echo +b 0 > /proc/driver/micc_ts
echo +c 0 > /proc/driver/micc_ts
echo +d 0 > /proc/driver/micc_ts
echo +e 1 > /proc/driver/micc_ts
echo +f 0 > /proc/driver/micc_ts
echo +g 1 > /proc/driver/micc_ts
保证ts_calibrate获得的是没有校准过的数据,并拷贝至/etc/目录下。
4) 将参数传入内核。
ts_calibrate运行后会输出一个pointercal文件,最好简单修改一下输出格式,如运行一下:
cat $TSLIB_CALIBFILE > /proc/driver/micc_ts,

即可一次性输入七个参数。
当然也可以一个一个地输入,有点太麻烦,
5) 用ts_test测试校准效果。
注意:ts_test默认驱动输出的数据是未校准的,会另外再进行一次校准,需将main()函数中ts_read()改为ts_read_raw(),运行后,可看到校准后的效果。
6) Linux内核启动时,将校准参数传入内核。
修改/etc/init.d/rcS,加入如下行,在启动加载校准数据:
cat /etc/pointercal > /proc/driver/micc_t
s
这样通过直接读取触摸屏数据即可获得校准后数据
阅读(2754) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~