• 5557阅读
  • 0回复

Qte支持触摸屏的问题 [复制链接]

上一主题 下一主题
离线realwerw
 

只看楼主 倒序阅读 楼主  发表于: 2007-06-29
— 本帖被 XChinux 执行加亮操作(2008-07-18) —
我使用的是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重新编辑 ]
快速回复
限100 字节
 
上一个 下一个