用tslib实现Android触摸屏校准

 

 

1.       触摸屏校准原理

请参看文章http://blog.sina.com.cn/wyw1976

 

2.       触摸屏校准通用方法

主要采用以下公式,实现触摸屏校正,其中XL, YL是显示屏坐标,XT, YT是触摸屏坐标,

XL = XT*A+YT*B+C;

YL = YT*D+YT*E+F;    公式(1)

 

由于具体计算是希望是整数运算,所以实际中保存的ABCDEF为整数,而增加一个参数Div, 有以下公司实现:

XL = (XT*A+YT*B+C) / Div;

YL = (YT*D+YT*E+F) / Div;    公式(2)

因此通常保存的参数是七个。

 

一般通过3个采样点就可以实现校准,tslib则使用了5个采样点,可实现更准确的校准。

 

3.       Linuxproc文件系统实现触摸屏校正

Android本身并不带触摸屏校准,因此要校准触摸屏最好完全在底层驱动完成,而Android获取到的数据直接将是校准后的坐标数据。

1) 首先在touchscreen的驱动加载时,创建一个proc文件,如:

ts_proc_entry = create_proc_entry("driver/micc_ts", 0, NULL);

if (ts_proc_entry) {

        ts_proc_entry->write_proc = ts_proc_write;

}

可在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_ts

 

这样通过直接读取触摸屏数据即可获得校准后数据。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值