我使用的是QTE2.3.10版本。
现在应用于一款ARM板,触摸屏为压力式四线触摸屏,通过GPIO口连接。
现在已经完成了驱动。
自己写了一个测试程序。
#include <stdio.h>
#include <unistd.h>
#include <sys/fcntl.h>
typedef struct _stTsPosition
{
unsigned short x;
unsigned short y;
}stTsPosition;
int main(void)
{
int nFd;
int flags = O_RDONLY;
int nRet;
char buf[32];
int n=8;
stTsPosition posi;
nFd=open("/dev/ts",flags);
if(nFd<0)
{
printf("Open touch screen failed!\n");
return -1;
}
do
{
nRet=read(nFd,&posi,sizeof(stTsPosition));
if(nRet<0)
{
printf("Read failed,nRet=%d!\n",nRet);
}
else
{
printf("Read suc,nRet=%d!\n",nRet);
printf("posi->x=%d\n",posi.x);
printf("posi->y=%d\n",posi.y);
}
sleep(3);
}while(1);
close(nFd);
return 0;
}
可以正常将每次的触摸坐标读出来。但是这对于QTE来说是不可见的,所以我参照网上一些文章
加入对tslib的支持,我下载的版本是0.1.1.编译完成后(注:我在configure时加入了--disable-input)重新编译QTE加入对tslib的支持。
将编译好的lib库及配置文件放在开发板上。
我的环境变量是这央设置的:
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/ts
export TSLIB_CALIBFILE=/qte/etc/pointercal
export LD_LIBRARY_PATH=/qte/lib
export TSLIB_CONFFILE=/qte/etc/ts.conf
export TSLIB_PLUGINDIR=/qte/lib/ts
QTE的export环境我就不写了。
由于我的屏幕目前没有办法显示文字以及绘制点线,但是可以显示QTE的各example.所以运行
ts_test,校正程序都无法看到屏幕上写的是什么。
而且运行QTE程序,点击屏幕,鼠标也不动。在DEMO里面重载了mouseMoveEvent,mouseReleaseEvent也看不到有调试信息打印出来。
我该如何处理。
我的ts配置文件如下
module_raw corgi
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
由于我的read里面实际传输的坐标数据只有x,y,没有其它数据
也就是说只有
unsigned short x;
unsigned short y;
为内核模块一组合法的包。
而tslib都没有这样的结构,所以我选用了corgi.并且修改了其源代码如下:
struct _stPosition
{
unsigned short x;
unsigned short y;
};
static int corgi_read(struct tslib_module_info *inf, struct ts_sample *samp, int nr)
{
struct tsdev *ts = inf->dev;
struct _stPosition *posi;
int ret;
posi=alloca(sizeof(*posi)*nr);
ret=read(ts->fd,(void *)posi,sizeof(*posi)*nr);
if(ret>0)
{
int nr=ret/sizeof(*posi);
while(ret>=(int)sizeof(*posi))
{
samp->x=posi->x;
samp->y=posi->y;
printf("(%d,%d)\n",samp->x,samp->y);
samp->pressure=0;
/* samp->tv.tv_usec=0;
samp->tv.tv_sec=0;*/
samp++;
posi++;
ret-=sizeof(*posi);
}
return nr;
}
else if(ret==0)
return 0;
else
return -1;
}
在运行ts_test时可以看到在触摸事件发生时,有这个函数的调试信息,即(x,y)数据。
我不知道我这样改有没有问题。但是QTE仍然无法识别我的数据。
不知道是哪里出了问题,还是我这样的做法就是不对的。(我的触摸屏内核模块
只定义完成了open,read函数。)。另外在看不到屏幕的情况下如何进行校正,生成校正文件?
[ 此贴被XChinux在2008-07-18 14:17重新编辑 ]