近期在做mips上移植触摸屏的课题。
网上的方法都看遍了,tslib-1.3,tslib-1.4都可移植到板子上,但是依然不能实现触摸屏的校准功能。
下面描述一下自己所遇到的问题,希望能得到大家的指正。
目标平台:mips
交叉编译工具:mipsel-linux-gcc.
内核:linux-2.6.22.19-29-sigma
触摸屏:未手动安排触摸屏驱动,将屏插入到板子的usb接口。
cat /proc/bus/input/devices 显示如下:
I: Bus=0003 Vendor=0eef Product=0001 Version=0112
N: Name="HOLTEK Touch"
P: Phys=usb-tangox-ehci-hcd-1.1/input0
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=mouse0 event0
B: EV=b
B: KEY=401 0 30000 0 0 0 0 0 0 0 0
B: ABS=f
cat /dev/input/event0,手摸触摸屏,有反应。
经过排查错误,tslib-1.3或者1.4都已经./autogen.sh ./configure,make,make install成功。
其中./configure --host=mipsel-linux --prefix=/nfsroot/8654root/mnt/config/tslib ac_cv_func_malloc_0_nonnull=yes --disable-inputapi
tslib-1.3时:
export TSLIB_ROOT=/tslib;
export TSLIB_TSDEVICE=/dev/input/event0;
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal;
export POINTERCAL_FILE=$TSLIB_ROOT/etc/pointercal;
export TSLIB_PLUGINDIR=$TSLIB_ROOT/share/ts/plugins;
export TSLIB_CONSOLEDEVICE=none;
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf;
export TSLIB_FBDEVICE=/dev/fb0;
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH;
export TSLIB_TSEVENTTYPE=UCB1x00;
运行./ts_calibrate
可显示光标,x轴正确,但是y轴其实在78%的时候便已经超出。
查看源码presure值一直为正。按光标没法进入下一个点校正。
将ts_calibrate函数getxy()中的
if (index < MAX_SAMPLES-1)
index++;
改为
if (index < MAX_SAMPLES-1)
index++;
esle
break;
在prssure值不等于0的情况下也可跳出循环,则显示如下:
Took 127 samples...
Top left : X = 19912 Y = 29152
Took 127 samples...
Top right: X = 19912 Y = 27934
Took 127 samples...
Bot right: X = 19912 Y = 34397
Took 127 samples...
Bot left : X = 19912 Y = 37781
Took 127 samples...
Middle: X = 19912 Y = 37470
902.598145 0.046774 0.015463
524.549683 0.018851 0.005005
Calibration constants: 59152672 3065 1013 34376888 1235 327 65536
可以看到读到的值都是错的。
尝试export TSLIB_TSEVENTTYPE为其它的值,也都不行。
tslib-1.4时:
export TSLIB_ROOT=/tslib;
export TSLIB_TSDEVICE=/dev/input/event0;
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal;
export POINTERCAL_FILE=$TSLIB_ROOT/etc/pointercal;
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts;
export TSLIB_CONSOLEDEVICE=none;
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf;
export TSLIB_FBDEVICE=/dev/fb0;
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH;
export TSLIB_TSEVENTTYPE=UCB1x00;
./ts_calibrate
不可显示光标,读值也不对。
个人分析:从ts_read_raw读到的数便是错的,猜想可能是tslib里面所定义的几个结构
struct ts_event ;
struct h3600_ts_event;
struct mk712_ts_event ;
struct arctic2_ts_event ;
struct collie_ts_event ;
struct corgi_ts_event ;
都不满足/dev/input/event0的设备文件所读到的数,有可能是选错了触摸屏所对应的驱动类型,但是全部试过都不行,是否是tslib中未出现的类型?
是否可能是我的触摸屏根本就没有安装驱动程度,但是又为何cat /dev/input/event0时可以有反应??
--disable-inputapi项尝试过不加,但是也不行。
纠结了好久了啊,希望大家给意见,谢谢,谢谢!!!!!
------解决方案--------------------
QVFB方式使用USB触摸屏,这主要看触摸屏控制器厂家的支持,自己搞驱动很麻烦的,要在触摸屏驱动层、TSLIB和QTEmbedded这几个方面做修改,要对linux系统环境变量、usb或串口触摸屏驱动、QTE[email protected] TSLIB官网的驱动是不能直接校准触摸屏的。