tiny210 tslib 测试(基于 ft5x06 触摸屏),解决触摸无效问题
1. 拷贝至开发板
将上次实验中的 tmp 文件夹拷贝到开发板,可以通过 nfs 来传输,并将 tmp/lib 下的所有 .so 文件拷贝至 开发板的 /usr/lib 中,并且确保库的映射关系正确。
2. 声明 tslib 的环境变量
export TSLIB_CALIBFILE='/etc/pointercal'
export TSLIB_CONFFILE='/tslib/etc/ts.conf'
export TSLIB_CONSOLEDEVICE='none'
export TSLIB_FBDEVICE='/dev/fb0'
export TSLIB_PLUGINDIR='/tslib/lib/ts'
export TSLIB_TSDEVICE='/dev/input/event1'
这里的 TSLIB_TSDEVICE,要选择与你的触摸屏对应的 event,有一个好的方法,通过命令
cat /proc/bus/input/devices
来确定,我的屏幕为 ft5x06,信息如下:

3. 运行测试程序
进入到 /tslib/bin
执行 ./ts_test
很尴尬,得到以下提示:
selected device is not a touchscreen I understand
去网上搜索了下,有曾经遇到过该问题的网友写道:
是由于内核和编译器的一个宏(EV_VERSION 位置:内核和编译器的 input.h 文件中声明)定义不一致导致的,于是我对比了内核与编译器中的宏,果然不一样,我选择改了编译器中的宏并重新编译 tslib,再次导入开发板运行,仍然提示上述错误!
搜索了下 tslib 的源码,找到该提示的位置,如下(位于 tslib/plugins/input-raw.c):
if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&
(version == EV_VERSION) &&
(ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&
(bit & (1 << EV_ABS)) &&
(ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
(absbit & (1 << ABS_X)) &&
(absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {
fprintf(stderr, "selected device is not a touchscreen I understand\n");
return -1;
}
加上打印便于调试:
if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&
(version == EV_VERSION) &&
(ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&
(bit & (1 << EV_ABS)) &&
(ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0) &&
(absbit & (1 << ABS_X)) &&
(absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {
printf("version: %x, EV_VERSION: %x \n \
EV_ABS: %d \n \
ABS_X: %lld \n \
ABS_Y: %lld \n \
ABS_PRE: %lld \n",\
version, EV_VERSION, (bit & (1 << EV_ABS)), (absbit & (1 << ABS_X)),\
(absbit & (1 << ABS_Y)), (absbit & (1 << ABS_PRESSURE)));
fprintf(stderr, "selected device is not a touchscreen I understand\n");
return -1;
}
重新编译 tslib,导入开发板运行发现 ABS_X、ABS_Y、ABS_PRE 都为 0 !!!!
分析了下,这肯定是内核驱动有问题,故找到源码(drivers\input\touchscreen\ft5x06_ts.c),仔细看了一遍,发现启用多点触控的话,传输数据无法与 tslib 对应,所以关闭了多点,注释掉下句即可,如下:
//#define CONFIG_FT5X0X_MULTITOUCH 1
保存,重新编译内核,下载至开发板,再将运行 ts_test,完美运行!
总结
在我找 BUG 的期间,阅读了内核中关于 tiny210 触摸屏另一个源码:mini210_1wire_host.c
我想,用过友善板子的同学可能知道,他们会将触摸屏上加上一块单片机来与开发板通信,利用他们的 1wire 协议实现更加精准的触控体验,这使得我们的实验变的与大众不同,而且官方并不提供该部分的协议。
记得当初用 Mini2440 的时候,配的是 P35 显示屏,内核必须配置为 1wire 驱动才能使用触控,查阅资料后发现可以更改屏幕的硬件部分来兼容内核自带的触屏源码。
tiny210 自带的文件系统中带有 tslib,这个 tslib 是友善修改过的,而且也不开源,使用的接口的就是 1wire(/dev/touchscreen-1wire)。
接下来是 Qt 应用程序的测试,见下篇文章。
tiny210 tslib 测试(基于 ft5x06 触摸屏),解决触摸无效问题的更多相关文章
- 基于FPGA的XPT2046触摸控制器设计
基于FPGA的XPT2046触摸控制器设计 小梅哥编写,未经许可,文章内容和所涉及代码不得用于其他商业销售的板卡 本实例所涉及代码均可通过向 xiaomeige_fpga@foxmail.com 发 ...
- 嵌入式X86运行linux及QtEmbedded+触摸屏(X86PC104+Xlinux+QtE+触摸屏解决办法)
嵌入式X86运行linux及QtEmbedded+触摸屏(X86PC104+Xlinux+QtE+触摸屏解决办法) QQ:5724308 邮箱:sankye@163.com
- 使用JMeter测试基于WebSocket协议的服务
使用JMeter测试基于WebSocket协议的服务 :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba( ...
- TADOConnection如何测试连接数据库超时的解决办法
TADOConnection如何测试连接数据库超时的解决办法 TADOConnection 提供了很好的数据库连接功能,但是我们在实际使用时,如果指定的远程数据库不存在或其他原因连接不上,程序往往会 ...
- Python基于回溯法解决01背包问题实例
Python基于回溯法解决01背包问题实例 这篇文章主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友 ...
- Windows开启关闭测试模式的方法(含开启测试模式失败的解决办法)
前言: 内含:Windows开启关闭测试模式的方法.开启测试模式失败的解决办法.win10进入bios的方式.BitLocker恢复方式. 对于互联网从业者来说 ...
- 解决:javac: 无效的目标发行版: 1.8
原 解决:javac: 无效的目标发行版: 1.8 2017年06月14日 16:21:12 代码也文艺 阅读数 44795 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- 解决margin-top无效问题
当两个空的块级元素嵌套时,如果内部的块设置有margin-top属性,而且父元素没有下边解决方法所述的特征,那么内部块的margin-top属性会绑架父元素(即将margin-top传递凌驾给了父元素 ...
- 嵌入式Linux驱动学习之路(十九)触摸屏驱动、tslib测试
触摸屏使用流程: 1. 按下产生中断. 2.在中断处理程序中启动AD转换XY坐标. 3.AD转换结束并产生AD中断. 4. 在AD的中断处理函数中上报信息,启动定时器. 5. 定时器时间到后进入中断, ...
随机推荐
- python time库
https://www.cnblogs.com/tkqasn/p/6001134.html
- Prometheus Alert Rules with Some Metrics
Using Prometheus as a monitor system, it is quite efficent. The most important one is that alert tem ...
- 【repost】js window对象属性和方法相关资料整理
window对象有以下方法: open close alert confirm prompt setTimeout clearTimeout setInterval clearInterval mov ...
- Appium之xpath定位元素
原文:http://www.cnblogs.com/cnkemi/p/9180525.html appium也是以webdriver为基的,对于元素的定位也基本一致,只是增加一些更适合移动平台的独特方 ...
- Android 极光推送造成IM服务绑定失败bug
由于极光推送对8.0的支持问题,升级到了最新版本的极光推送.但是最新版本的极光推送,默认将推送服务设置到了新的进程里面,由此引发 Android 极光推送多进程造成的application运行两次 和 ...
- JS求数组差集的几种方法
第一种:如果不考虑IE8的兼容性完全可以使用Foreach ,此方法求出arr1 减去 arr2的差集, arr1 = [1,2,3,4];arr2 = [1,2,3]; var subSet = f ...
- jdk1.8.0环境变量设置
jdk1.8.0环境变量设置 1.jdk安装完毕 打开如下链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...
- Postman SMTP 存在跨站脚本(XSS)漏洞,请换用Post SMTP Mailer/Email Log
Postman SMTP 是一个安装量超过10W的WordPress插件,但是已经2年多没有更新,2017年6月29日,被发现存在跨站脚本(XSS)漏洞(查看详情),并且作者一直没有更新,所以被从Wo ...
- Jupyter-NoteBook-你应该知道的N个小技巧
智能决策上手系列教程索引 不断更新部分内容来自于翻译整理 多行输出 在Notebook的中开头cell中添加以下代码可以实现多行输出: from IPython.core.interactiveshe ...
- ubuntu系统用docker搭建wordpress
目标:在docker中搭建wordpress 安装顺序: 首先要有一个云服务器---购买或者自己搭建(本人是自己在主机上装了虚拟机,搭建了一个ubuntu14.04,安装链接:https://www. ...