全部博文(153)
分类:
2009-06-22 12:47:42
第二部分:tslib-
上次移植minigui,这次继续上次的移植,往4020上移植tslib
(1)第一步:下载source code并解压
我用的是tslib-1.3.tar.bz2。
下载地址:
(2)第二步:针对底层驱动修改配置信息
./autogen.sh (这步会生产configure文件)
./configure CC=arm-linux-gcc --build=i686-pc-linux --target=arm-linux --host=arm-linux --prefix=/usr/local/arm/
其中最后一项--enable-inputapi=no 是由于驱动不支持ioctl操作,如果不改最后会有如下现象:
我在板子上运行./ts_test的时候,总是提示我:ts_open: No such file or directory?
这个问题曾经也折腾了我好久
(3)第三步:修改源码
1、修改/tslib/plugins/Makefile里面找rpath
将LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
修改为:
LDFLAGS :=$(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd`(这个可是顿号)
否则make时报如下错:
make的时候libtool:link: only absolute run-paths are allowed
2、修改src/ts_read_raw.c中的 char *defaulttseventtype="UCB1x00";改为char *defaulttseventtype="H3600",因为我的触摸屏驱动对应此结构。
3、修改tslib源码的tests/ts_calibrate.c的getxy函数中修改一些代码。如下
static int getxy(struct tsdev *ts, int *x, int *y)
{
..................................................................
..................................................................
修改的代码
/* Read until we get a touch. */
do {
if (ts_read_raw(ts, &samp[0], 1) < 0) {
perror("ts_read");
close_framebuffer();
exit(1);
}
} while (samp[0].pressure > 0);
do {
if (ts_read_raw(ts, &samp[0], 1) < 0) {
perror("ts_read");
close_framebuffer();
exit(1);
}
} while (samp[0].pressure == 0);
printf("Took %d samples...\n",index);
..................................................................
..................................................................
}
我发现tslib与minigui中对于压力参数的规定刚好相反,tslib规定samp[0].pressure> 0是按下,samp[0].pressure == 0是手松开而事实是相反的
如果不改就会出现在运行./ts_calibrate程序时不能有效校准,这个一定得注意!!!!!!!!!!!!!!!
4、修改在tslib/plugins/mousebuts.c 的mousebuts_read函数中一段代码
//if(t>60)
//{
//dest->pressure=1000;
//buts->fLeftBut=0;
//}
//else
//{
dest->pressure=0;
buts->fLeftBut=2;
//}
要将红色的部分注释掉,否则以后运行minigui时对按钮的操作时,如果对一个按钮进行点击时,并把光标停在按钮的上面
它就会不断的触发按钮的点击事件,这当然不是我们想要得到的结果
(4)编译与安装
make
make install
经过安装步骤后,进入/usr/local/arm/3.4.1/arm-linux 目录下可以看到如下的文件:
[root@localhost tslib-1.3]# cd /usr/local/arm/3.4.1/arm-linux
● # ls bin/
ts_calibrate ts_print ts_test ts_print_raw
● # ls etc/
ts.conf
这里建议配置为:
module mousebuts
#module variance xlimit=20 ylimit=20 pthreshold=3
#module dejitter xdelta=20 ydelta=20 pthreshold=3
module linear
若实际运行时发现抖动比较厉害,可以采用下面的配置:
module mousebuts
#module variance xlimit=20 ylimit=20 pthreshold=3
module dejitter xdelta=20 ydelta=20 pthreshold=3
module linear
● # ls lib/
libts-0.0.so.0 libts-0.0.so.
● # ls share/ts/
plugins/
5.修改ts_read_raw.c
在if(ret > 0) {之前添加代码:et = sizeof(*hevt);
成一下形式:
ret = sizeof(*hevt);
if(ret > 0) {