现今的项目中已经很少有使用电阻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移植)相关推荐

  1. MTK 驱动(63)---MTK TP驱动移植

    MTK TP驱动移植 对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 ...

  2. MTK TP驱动移植

    对于MTK TP驱动移植一般分为六部分: 1.硬件IO口配置: 2.TP驱动移植: 3.I2C通信: 4.中断触发: 5.数据上报: 6.虚拟按键: 硬件电路: 1.GPIO配置 打开 mediate ...

  3. android 如何使得电阻屏在第一次开机时自动叫起屏幕校准程序

    Android系统中有一个Provision程序,只会在第一次开机时运行一次,它会将Settings.Secure.DEVICE_PROVISIONED的值设置为1,随后就把自己disable掉 ,那 ...

  4. 自己编写wince的校准程序

    自己编写wince的校准程序 2009-12-22 22:32 http://hi.baidu.com/lihuanhai1943/blog/item/2ccc99fa599d3e14a9d3117f ...

  5. matlab相机标定程序,MATLAB单相机校准程序中文.pdf

    MATLAB单相机校准程序中文 单相机标定程序 相机标定概述 您可以使用相机标定程序估计相机内参数,外参数,镜头畸变参数.您可以使用 这些相机参数到多种计算机视觉应用.这些应用范围包括消除镜头畸变的影 ...

  6. 更改触摸屏校准程序界面提示文字

    BSP中提供的触摸屏校准程序在个别设备上用起来可能不太适合,比如说我们的设备屏幕宽度只有 240pixels,会有部分字符超出屏幕外侧,原以为这是BSP的提供的程序,无源码没办法修改,这两天才知道原来 ...

  7. Android 屏幕校准程序的实现

    屏幕校准程序的需求: 烧系统之后,第一次进入系统要在主界面唧Launcher界面起来之前启动屏幕校准程序.校准成功后以后开机不再启动. 在Launcher之前启动屏幕校准程序很简单,只需要在Andro ...

  8. 运行程序报“应用程序配置不正确”或者缺少运行库造成程序不可移植的问题...

    虚拟机里边是Windows server 2003的系统,本机VS2008开发的exe程序移植到虚拟机中Release版本正常,Debug版本不能正常启动报"应用程序配置不正确", ...

  9. jquery程序 windows移植到linux显示不了,windows程序移植linux

    1,路径名统一用正斜杠"/".(windows下正反斜杠都识别,linux只认正斜杠.) 2,统一使用UTF-8格式编码. vim中无法保存汉字时,可输入下列命令: :set fi ...

最新文章

  1. 取消Eclipse等号、分号、空格代码自动补全
  2. 数据库连接池——C3P0:数据库连接池技术
  3. Linux下dislocate命令用法,五个超酷Linux命令
  4. Java高阶部分知识点汇总(三)-内存空间的引用
  5. 利用Inotify和Rsync将webproject文件自己主动同步到多台应用server
  6. 行内元素与块级元素,以及区别
  7. memcached 的基本命令
  8. VMware NAT模式设置静态IP(可上网)
  9. 如何让一个用户拥有root权限
  10. springboot08 自动配置原理
  11. 在Ubuntu上面使用华为EC3372
  12. 从聚合数据请求菜谱大全接口数据,解析显示到ListView
  13. access()函数、_access()函数
  14. 计算机正确坐姿,[图文]办公室必知:电脑族正确坐姿细解
  15. 读刘文鹏之《古代埃及史》
  16. 详解Android Selinux 权限及问题
  17. 快速搭建个人博客——保姆级教程
  18. 最详细的语言***教程大全
  19. idea创建maven+springMVC+mybatis
  20. python-App自动化测试框架——uiautomator2之元素操作方法(二)

热门文章

  1. KMP字符串匹配算法理解(转)
  2. 大小端、位段和内存对齐
  3. 【转载】只有程序员才能看懂的幽默
  4. 11张信用卡20多万全部逾期还不上,每天电话追债,怎么办?
  5. 如果人民币贬值,对股市会有什么影响?
  6. PV PVC - 每天5分钟玩转 Docker 容器技术(150)
  7. 银行停贷、涨息、排队,8月不贷只能等明年
  8. 没有眼睛的街头卖艺人
  9. [学习] FPGA之基本原理(可能理解不对)
  10. JQ 全选后获取选中的值_JQ完全学习版本