tslib移植-selected device is not a touchscreen I understand 错误解决

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liuzijiang1123/article/details/45787901


这篇文章必须要写,因为昨天移植了触摸屏的驱动后又移植了tslib,拷到开发板上运行后出现了这个错误,更恐怖的是花了一个晚上的时间,早上来实验室才弄好,网上找了好多这个错误的解决方法,很多都不是蛮详细的,都比较不适合我们新手去看。 

不过千辛万苦的是找到了这个博客,最后帮助我解决了,大家可以参考一下  

http://blog.csdn.net/zhaocj/article/details/37522115

我写这个博客是为了让更多的跟我一样的新手来解决这个问题,有载图的话估计比较清晰一点。


首先我们的思路应该是先判断是内核错误还是tslib移植的错误。


首先进入内核触摸屏驱动的源代码

vim drivers/input/touchscreen/s3c2410_ts.c


当我们每按一下屏幕 用printk将坐标信息打印出来


出现了坐标信息,说明我们内核里面移植的触摸屏驱动没有问题


这样我们就可以确定应该是我们的tslib的问题

首先是环境变量和配置的问题,这些问题在我这篇文章中写道了,这里的这个问题显现不是环境和配置的问题  (http://blog.csdn.net/liuzijiang1123/article/details/45670049)




看到这个错误的提示,我们应该想到tslib源码里面肯定有这个错误提示的条件,这样就让我们有了思路,我们可以去找到这个文件看看他错误判断的条件是啥?


[lzj@localhost plugins]$ pwd
/home/lzj/fl2440/3rdparty/tslib/plugins
[lzj@localhost plugins]$ vim input-raw.c




首先tslib通过EVIOCGVERSION来获取驱动的版本号,然后再通过EVIOCGBIT来判断设备是否为触摸屏,最后获取触摸屏的X轴(ABS_X),Y轴(ABS_Y),以及压力(ABS_PRESSURE)。其中只要有一项内容不正确,tslib都会认为该设备不是触摸屏,而打印出“selecteddevice is not a touchscreen I understand”错误。

****************************************************************************************************************************************************************************************

使用 EVIOCGBIT ioctl可以获取设备的能力和特性。

EVIOCGBIT ioctl处理 4个参数 ( ioctl(fd, EVIOCGBIT(ev_type, max_bytes), bitfield)) ev_type是返回的 type feature 0是个特殊 case,表示返回设备支持的所有的type features)。 max_bytes表示返回的最大字节数。 bitfield域是指向保存结果的内存指针。 return value表示保存结果的实际字节数,如果调用失败,则返回负值。

这里用bit和EV_ABS相与来判断是不是EV_ABS事件,判断是这个事件后再判断这个事件是否又X,Y轴和压力值。



*****************************************************************************************************************************************************************************************

首先检查一下自己编译器的版本号

vim /opt/buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclibcgnueabi/sysroot/usr/include/linux/input.h

然后检查一下内核中的版本号

[lzj@localhost linux]$ pwd
/home/lzj/linux-3.0.1/include/linux
[lzj@localhost linux]$ vim input.h

版本号都没问题都没错误


再来看触摸屏的绝对值事件,这个在驱动移植的时候肯定是正确,不然测试程序肯定是不正确。

最后看触摸屏的X轴(ABS_X),Y轴(ABS_Y),以及压力(ABS_PRESSURE)。通过查看linux-3.0中的触摸屏驱动文件s3c2410_ts.c,发现系统没有给出ABS_PRESSURE,因此为了与tslib一致,linux-3.0要加上ABS_PRESSURE内容。

touch_timer_fire函数中的第一input_sync(ts.input);前添加下面函数:

input_report_abs(ts.input,  ABS_PRESSURE,  1);(内核将压力值上报给tslib)



在该函数中的第二input_sync(ts.input);前添加:

input_report_abs(ts.input,  ABS_PRESSURE,  0);


s3c2410ts_probe函数内的ts.input->name = "S3C24XX TouchScreen";语句前添加:

input_set_abs_params(ts.input,  ABS_PRESSURE,  0,  1,  0,  0);



通过上面的修改,就可以使tslib能够正确识别出开发板的触摸屏,执行ts_calibratets_test命令毫无问题。




测试成功了!


如果你改了上面的还没成功的话,这个问题我也遇到过

是因为内核里面有2个event事件,一个是按键的一个是触摸屏的,结果我用了event0的按键事件,所以肯定找不到触摸屏设备!真是悲催,花了好久的时间原来是因为这个原因。


你只需要改一下配置文件

 vim /etc/profile


希望对遇到我一样问题的人有帮助,少走弯路。


展开阅读全文

移植tslib,光标没反应

11-08

rn实在没办法,来这里求指点了:rn我移植TSLIB,移植好后运行ts_test,校准等tslib/bin下的程序时都没问题,一切正常。但当运行QT程序时,触摸屏光标没反应:rn首先我编译QT的时候参数如下:rn./configure -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license -qt-mouse-tslib -I/usr/local/Trolltech/include -L/usr/local/Trolltech/librnrn配置文件如下:rnexport TSLIB_ROOT=/tslibrnexport QTDIR=/tiny6410rnexport TSLIB_ROOT=/tslibrnexport PATH=$QTDIR/bin:$PATHrnexport TSLIB_CONSOLEDEVICE=nonernexport TSLIB_FBDEVICE=/dev/fb0rn#export TSLIB_TSDEVICE=/dev/event0rnexport TSLIB_TSDEVICE=/dev/touchscreen-1wirernexport TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/tsrnexport TSLIB_CONFFILE=/tslib/etc/ts.confrnexport TSLIB_CALIBFILE=/etc/pointercalrn#export QWS_MOUSE_PROTO=Tslib:/dev/event0rnexport QWS_SIZE=800*480rnexport QWS_MOUSE_PROTO=/dev/micern#export QWS_MOUSE_PROTO=/dev/mouse0rnexport TSLIB_CALIBFILE=/etc/pointercalrn#export TSLIB_TSEVENTTYPE=H3600rnexport QT_QWS_FONTDIR=/tiny6410/lib/fontsrnexport LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/librnrn 论坛

没有更多推荐了,返回首页