IMX6UL framebuffer与电阻触摸屏数据读取冲突

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

IMX6UL framebuffer与电阻触摸屏数据读取冲突

462 Views
spray0
Contributor I

hi~,你好

我在使用imx6ul驱动四线电阻屏搭建平台,使用tslib校准的时候遇到了一个严重的问题:运行ts_calibrate点击屏幕上的十字光标进行校准,但是ts_calibrate并没有响应我的操作。

使用imx6ul自带的接口与四线电阻屏直接相连。

已知简要

tslib提供了

  • ts_calibrate用于校准并生成校准文件
  • ts_test用于屏幕绘写测试
  • ts_print_raw用于打印触摸数据

我使用ts_print_raw,发现可以正常显示我的触摸操作。触摸相应的数据结构为x,y,pressure,和我的 触摸操作数据都是吻合,x,y,pressure数据都是正常。使用的是imx6ul-14x14-evk.dts,对应内核也默认开启了imx6ul触摸屏驱动。

跟踪

我跟踪到tslib库的源代码,阅读了相关代码。发现了ts_calibrate没有响应我的操作的表面原因。 ts_calibrate在读取我的触摸操作的时候,会等待我的触摸结束,也就是

while (samp[index].pressure > 0);

随即我比较了ts_calibratets_print_raw的读取触摸操作的代码,发现都是调用的同一个函数到触摸设 备中去读取的,我在这个调用的函数中添加了printf函数打印读取的数据,即每次读取的时候都会把数据 打印到终端。发现运行ts_calibrate后,点击了一下屏幕后,一直有异常数据读取上来,且pressure值 都为255,所以导致一直在while循环里。因此,ts_calibeate在读取我的触摸事件的时候,认为我一直按下,并且没有放开。

有意思的是我调试的时候发现,系统开机10分钟后,屏幕会自动熄屏进入休眠状态,这个时候我运行 ts_calibrate,屏幕上是不显示任何东西的,反而这时候我点击屏幕能在终端中打印识别出我的触摸操 作。即和ts_print_raw的现象一致。

我比较了下源代码,ts_print_raw是没有对屏幕进行显示操作的。而ts_calibrate对屏幕进行了显示操作,会显示一些提示文字和十字光标用于交互触摸。我注释掉了ts_calibrate中对屏幕设备操作的framebuffer相关代码,此时,运行ts_calibrate不会显示任何东西在屏幕上,而此时ts_calibrate可以正常响应我的触摸。

那么是否是硬件原因?我开启了屏幕终端,此时lcd是有终端显示,即lcd数据是一直刷新的,此时打开我注视掉显示功能的ts_calibeate,也可以正常识别校准。

疑惑

我的触摸屏设备为TSLIB_TSDEVICE=/dev/input/event1

我的屏幕设备为TSLIB_FBDEVICE=/dev/fb0

为什么对framebuffer操作显示数据,会导致触摸屏数据读取失败?(一直有异常数据读取上来)

请问能否提供一点解决问题的思路?非常感谢。

Labels (1)
0 Kudos
0 Replies