网站优化定做,嘉兴模板建站代理,wordpress usermeta,莱阳网站制作现今的项目中已经很少有使用电阻TP#xff0c;但总有些奇怪的需求。如果项目中遇到需要校准电阻屏如何保证较快且较稳的调试TP呢。这里介绍使用ts_lib库来进行调试。 当然也可以使用一些常见的校准算法#xff0c;采集5点#xff0c;但最终的公式应该是不变的#xff1a; X…现今的项目中已经很少有使用电阻TP但总有些奇怪的需求。如果项目中遇到需要校准电阻屏如何保证较快且较稳的调试TP呢。这里介绍使用ts_lib库来进行调试。 当然也可以使用一些常见的校准算法采集5点但最终的公式应该是不变的 X上报 Kx*XrawKyx*YrawXoff (1) Y上报 Ky*YrawKxy*XrawYoff (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 loadedSegmentation faultno souch file or directory VT_OPENQRY,FB问题等为问题这些问题将会附在我的附件中请查看我的移植方法附件来进行修改源码。直至编译通过。 我们不需要知道ts_lib是怎样来进行校准的但是我们得知道如何去使用这个工具首先我们得明白使用这个工具时参与K这些计算的XY坐标是哪种坐标在进行计算时我们的底层需要上报的是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_CONSOLEDEVICEnone 这是我的硬件参数也可以直接写入代码中免去这一步。 接下来我们发现没有屏幕告诉我按哪里怎么做校准。似乎在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