现今的项目中已经很少有使用电阻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中

  ExeCommand cmd = new ExeCommand(false).run("/system/bin/ts_calibrate", );
calibrtion.Open();
calibrtion.Start_Cali();
while(cmd.isRunning())
{
try {
sleep();
} catch (Exception e) { }
String buf = cmd.getResult();
//do something
Log.i("result",buf.toString()); calibrtion.Close();
Log.i("auto","done!");
}

该小段则为运行命令行。

在程序中我还做了一部分获取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

MTK-TP(电阻屏校准程序ts_lib移植)的更多相关文章

  1. 微信小程序快速移植支付宝小程序

    移植背景: 1. 支付宝小程序开发文档只了解了大致框架,跑了demo,具体Api.组件没太多了解: 2. 已有微信小程序,移植支付宝小程序做预研(主要针对授权登录.支付等功能). 3. 移植的微信小程 ...

  2. eclipse对Java程序的移植

    有些Java项目可能不在同一台计算机上开发,所以程序需要平台间进行移植,方法很简单,首先有一个最简单的项目HelloJava 当我们开发完成或者要休息了,一般都会保存然后在项目上右击,选择Close ...

  3. Linux2.6.32内核笔记(5)在应用程序中移植使用内核链表【转】

    转自:http://blog.csdn.net/Deep_l_zh/article/details/48392935 版权声明:本文为博主原创文章,未经博主允许不得转载. 摘要:将内核链表移植到应用程 ...

  4. motion程序的移植和安装【转】

    本文转载自:http://blog.csdn.net/guozhiyuan20095318/article/details/7310486 motion是一个开源的用于移动图像监控的程序.我在做博创杯 ...

  5. arm linux上的第一个应用程序 BOA移植

    1. 首先, linux在开发板上能跑起来了. 包括网络驱动也有了, ifconfig之后, 能看到在rcS里面设置的IP, 也能ping通windows主机了, 当然, 也要window关掉防火墙才 ...

  6. MTK TP手势添加

    old: #include "tpd.h" #include "tpd_custom_gt9xx.h" #ifndef TPD_NO_GPIO #include ...

  7. linux不同环境下c/c++程序移植方法

    这边之前的大多数项目都用的java,而自己用的c++,等到快要上线的时候才发现线上机器的gcc和libc的版本都巨低,跟自己测试开发用的环境不兼容,编译出的c++可执行文件没法运行.解决c++程序的移 ...

  8. windows c++ 程序移植到Linux的一些要点

    这段时间得到一份源码,是Windows下的,调试了一把,可以正常运行,可是没有Linux版本,而实际的应用场景是要在Linux服务器上面运行 所以涉及到Windows下c++程序的移植,有同事竭力推荐 ...

  9. windows c++程序移植到linux的要点

    这段时间得到一份源码,是Windows下的,调试了一把,可以正常运行,可是没有Linux版本,而实际的应用场景是要在Linux服务器上面运行 所以涉及到Windows下c++程序的移植,有同事竭力推荐 ...

随机推荐

  1. 问题:CGI返回给前端的汉字数据是乱码(已解决)

    今天,我在写CGI程序,把后台数据返回到前台页面上,出现乱码, 不好看,所以,我在Content-type:application后面加了字符集的设置(字符集和前端一样), fprintf(stdou ...

  2. IntelliJ IDEA 2017.2.6 x64 配置 tomcat 启动 maven 项目

    IntelliJ IDEA 2017.2.6 x64 配置 tomcat 启动 maven 项目 1.确认 IDEA 是否启用了 tomcat 插件 2.添加 tomcat 选择 tomcat 存放路 ...

  3. [Day21]异常

    1.异常-Java代码在运行时期发生的问题,在Java中,把异常信息封装成了一个类.当出现了问题时,就会创建异常类对象并抛出异常相关的信息 1.1 异常的继承体系 Throwable:它是所有错误与异 ...

  4. instrument之Xcode Analyze 代码静态检查及问题解决

    Static Code Analysis(静态代码分析)用来发现源代码潜在的错误与缺陷,源代码编译后只有在运行时有可能会产生细微的错误,他们可能难以识别和修复,所以这些潜在的威胁在开发过程中一定要尽可 ...

  5. 在Vuex更新,组件内的视图更新问题

    由于js的限制,vue无法进行监听数组; 当你利用索引直接设置一个项时,例如: vm.items[indexOfItem] = newValue 当你修改数组的长度时,例如: vm.items.len ...

  6. nginx域名跳转到www下

  7. Install Superset from Python3.6

    本文安装Superset大致分为以下部分: 在操作系统中安装相关依赖,我所用的操作系统为Centos6.5 安装Python3.6.6 安装Superset 详细步骤如下: 相关依赖的安装 yum i ...

  8. Port Channel and VPC

    1.Port Channel 介绍 Port Channel  简介 绑定多个物理链路(最多8条),到一个单一的逻辑链路,在两个物理设备之间 每个物理端口只能被放入一个port-channel中. 在 ...

  9. 搭建docker私有仓库(https)

    1.修改openssl.cnf,支持IP地址方式,HTTPS访问在Redhat7或者Centos系统中,文件所在位置是/etc/pki/tls/openssl.cnf.在其中的[ v3_ca]部分,添 ...

  10. Uncaught TypeError: Cannot read property 'getters' of undefined

    vuex下新建的模板没有加 export default permission导致错误