MTK-TP(电阻屏校准程序ts_lib移植)
现今的项目中已经很少有使用电阻TP,但总有些奇怪的需求。如果项目中遇到需要校准电阻屏如何保证较快且较稳的调试TP呢。这里介绍使用ts_lib库来进行调试。
当然也可以使用一些常见的校准算法,采集5点,但最终的公式应该是不变的:
X上报= Kx*Xraw+Kyx*Yraw+Xoff (1)
Y上报= Ky*Yraw+Kxy*Xraw+Yoff (2)
利用这两个公式可以校准大部分的屏幕,这里Kx,Ky指的是AD采集的数值上与逻辑屏幕上的比例关系,而Kyx指的是在按压物理面同一高度,因为不同Y值所带来X采集值的变化。实际的效果就是,当你按压同一高度时,发现上报的极左与极右两个点高度数值不一样。同理Kxy一样。外框为边界,内框为内部的实际报点坐标,通过该图就能明白Kxy与Kyx的作用了。、
而Xoff与Yoff则很好理解了,就是一些非比例关系的偏差。
有了该公式其实就很容易理解如何去校准屏幕了,当然已经有人为你做好了,那就不必要花时间在这方面过多,把时间放在做自己想做的那块,当然有心趣的朋友可以深入研究。这里附上源码地址: https://github.com/rmcc/android_external_tslib
这个源码下载下来,通过编译即可使用,我这里介绍如何将其编入到MTK源码中,且使其在app中能够使用。其实我的方法算是绕了弯路,其实可以直接把算法核心移植到java代码中,或者JNI中是的效率更高,但我的工作重心不想放在这块,则使用我所知道的方法。
将下载得到的代码放置MTK源码中的/package/app/tslib中,然后cd /package/app/tslib中,使用mm进行编译。在编译中会遇到一些问题,这些问题比如:"No raw modules loaded","Segmentation fault","no souch file or directory"," VT_OPENQRY",FB问题等为问题,这些问题将会附在我的附件中,请查看我的移植方法附件来进行修改源码。直至编译通过。
我们不需要知道ts_lib是怎样来进行校准的,但是我们得知道如何去使用这个工具,首先我们得明白,使用这个工具时,参与K这些计算的X,Y坐标是哪种坐标,在进行计算时,我们的底层需要上报的是AD数值的坐标,范围可能是0~4096或者0~65536,所以在公式里面是Xraw,直接使用的原始数据,而不是根据屏幕转换后的数据,好处当然是因为精度不会丢失,进行转换,难免小数无效位会去掉。驱动代码应在校准时直接上报AD数值,触摸时上报经过公式转换的数值。
同时还要添加一些比如上报压力的参数,不然可能校准代码不通过,在弹起时还要上报压力为0,这些是代码逻辑。
部分重要的需要在驱动中添加修改的代码,我会附在源码附件中使用鲜艳颜色标记,在移植附件中会给大家详细讲解源码,这里就不重复。
如果说在移植后大家能够直接使用adb shell来运行ts_calibretion这个程序,并且完全成功,恭喜你完成移植了。可以小试一把,然后将所得的参数填入你的驱动代码验证,会发现其效果还是杠杠的。校准图如下:
当然其中会有些问题,较多的是open失败,可以尝试使用su权限,并且chmod 777 /dev/graphics/fb0 ;chmod 777 /dev/input/event?(你的TP event),不知如何确定?很简单,输入getevent,按压触屏就知道了。
在./ts_calibretion之前,有必要将一些变量定义下,直接复制在adb shell运行:
export T_ROOT=/system
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_FBDEVICE=/dev/graphics/fb0
export TSLIB_CONSOLEDEVICE=none
这是我的硬件参数,也可以直接写入代码中,免去这一步。
接下来,我们发现没有屏幕告诉我按哪里,怎么做校准。似乎在C程序拿不到屏幕的使用权,更正确的讲应该是立马被刷掉了。那么就在app里面实现好了绘图好了。app这块不懂,只有在网上摘抄些代码,如果有原著觉得不行可联系我,会立马删除。
app这块只能作为一个demo,大家看着修改。源码在附件中。
app中的主要功能是实现一个调用命令行的功能,将参数写入到文件中,更新驱动中当前运行的参数,绘制校准点。
ts_lib采用的是五点校准法,所以先在app中绘制出5个点,但是五个点的位置需要得到,该位置是在屏幕中的位置,可以随意画分布在四个边角的4个点和居中第五点,但是注意的是需要计算出该5个点在屏幕中的像素位置,方法可以使用截图软件截下图,然后使用绘图工具确认下。比如:
图中左下角为显示(200,1855),屏幕为1080*1920,那么在tests/ ts_calibrate.c中修改:
get_sample (ts, &cal, 3, 200, yres - 55, "Bot left");同理其他坐标一样,如图:
此为修改示例,请按照实际情况修改即可,当然厉害的朋友可以在app中画出和实际一样的坐标相同就可以不需要去测量,并且可以传入到ts_calibrate程序中。
接着编写在app中执行命令行的代码,具体实现代码在ExeCommand.java中,而测试代码则在MyThread.java中
1 ExeCommand cmd = new ExeCommand(false).run("/system/bin/ts_calibrate", 60000); 2 calibrtion.Open(); 3 calibrtion.Start_Cali(1); 4 while(cmd.isRunning()) 5 { 6 try { 7 sleep(100); 8 } catch (Exception e) { 9 10 } 11 String buf = cmd.getResult(); 12 //do something 13 Log.i("result",buf.toString()); 14 15 calibrtion.Close(); 16 Log.i("auto","done!"); 17 }
该小段则为运行命令行。
在程序中我还做了一部分获取ts_calibration打印出的最后参数,参数有a[0]~a[6]7个参数,a[6]为扩大倍数,因为很多时候内核不做浮点运算,所以将浮点计算转换为整形计算更好,各参数对应如下:
Kx -> a[1] Ky -> a[5]
Kyx -> a[2] Kxy-> a[4]
Xoff-> a[0] Yoff-> a[3]
当然可能会与网上说的对应有差异,请按照实际情况来匹配。最后一个a[6]一般为65536。
获得了校准参数后当然是储存在文件中,使得驱动以后开机能够使用最新校准参数,其次是更新RAM中正运行的参数。
修改后的源码下载链接:https://files.cnblogs.com/files/inkhearts/tslib-%E4%BF%AE%E6%94%B9androids.rar
demo app,部分驱动程序下载链接:https://files.cnblogs.com/files/inkhearts/dem%26%E7%94%B5%E9%98%BB%E9%A9%B1%E5%8A%A8.rar
完全移植后的的ts_lib app(网上找到的,需修改才能使用):https://pan.baidu.com/s/19vU3E3bkBuFAFttI5uaV8w 提取码:hkac
移植步骤问题:https://files.cnblogs.com/files/inkhearts/tslib_%E7%AC%94%E8%AE%B0.rar
转载于:https://www.cnblogs.com/inkhearts/p/10313501.html
MTK-TP(电阻屏校准程序ts_lib移植)相关推荐
- MTK 驱动(63)---MTK TP驱动移植
MTK TP驱动移植 对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 ...
- MTK TP驱动移植
对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 打开 mediate ...
- android 如何使得电阻屏在第一次开机时自动叫起屏幕校准程序
Android系统中有一个Provision程序,只会在第一次开机时运行一次,它会将Settings.Secure.DEVICE_PROVISIONED的值设置为1,随后就把自己disable掉 ,那 ...
- 自己编写wince的校准程序
自己编写wince的校准程序 2009-12-22 22:32 http://hi.baidu.com/lihuanhai1943/blog/item/2ccc99fa599d3e14a9d3117f ...
- matlab相机标定程序,MATLAB单相机校准程序中文.pdf
MATLAB单相机校准程序中文 单相机标定程序 相机标定概述 您可以使用相机标定程序估计相机内参数,外参数,镜头畸变参数.您可以使用 这些相机参数到多种计算机视觉应用.这些应用范围包括消除镜头畸变的影 ...
- 更改触摸屏校准程序界面提示文字
BSP中提供的触摸屏校准程序在个别设备上用起来可能不太适合,比如说我们的设备屏幕宽度只有 240pixels,会有部分字符超出屏幕外侧,原以为这是BSP的提供的程序,无源码没办法修改,这两天才知道原来 ...
- Android 屏幕校准程序的实现
屏幕校准程序的需求: 烧系统之后,第一次进入系统要在主界面唧Launcher界面起来之前启动屏幕校准程序.校准成功后以后开机不再启动. 在Launcher之前启动屏幕校准程序很简单,只需要在Andro ...
- 运行程序报“应用程序配置不正确”或者缺少运行库造成程序不可移植的问题...
虚拟机里边是Windows server 2003的系统,本机VS2008开发的exe程序移植到虚拟机中Release版本正常,Debug版本不能正常启动报"应用程序配置不正确", ...
- jquery程序 windows移植到linux显示不了,windows程序移植linux
1,路径名统一用正斜杠"/".(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fi ...
最新文章
- 取消Eclipse等号、分号、空格代码自动补全
- 数据库连接池——C3P0:数据库连接池技术
- Linux下dislocate命令用法,五个超酷Linux命令
- Java高阶部分知识点汇总(三)-内存空间的引用
- 利用Inotify和Rsync将webproject文件自己主动同步到多台应用server
- 行内元素与块级元素,以及区别
- memcached 的基本命令
- VMware NAT模式设置静态IP(可上网)
- 如何让一个用户拥有root权限
- springboot08 自动配置原理
- 在Ubuntu上面使用华为EC3372
- 从聚合数据请求菜谱大全接口数据,解析显示到ListView
- access()函数、_access()函数
- 计算机正确坐姿,[图文]办公室必知:电脑族正确坐姿细解
- 读刘文鹏之《古代埃及史》
- 详解Android Selinux 权限及问题
- 快速搭建个人博客——保姆级教程
- 最详细的语言***教程大全
- idea创建maven+springMVC+mybatis
- python-App自动化测试框架——uiautomator2之元素操作方法(二)