BigTeam_learninglanduochong.blog.chinaunix.net
landuochong
https://github.com/zytc2009/BigTeam_learning
全部博文(864)
徒弟们的作品(0)
2023年(1)
2021年(1)
2019年(3)
2018年(1)
2017年(10)
2015年(3)
2014年(8)
2013年(3)
2012年(69)
2011年(103)
2010年(357)
2009年(283)
2008年(22)
被施了魔
laoyouji
xiaozhen
http李成
广通broa
athsonxy
小豆芽mm
Nicoleji
donno001
斯普特尼
HYT0416
dengxiay
nanyanzh
xuequans
Ellul
AiYongYe
Eight02
ruojie00
分类: C/C++
2008-06-23 13:08:12
QTE触摸屏加载有两种方法:
(1)QTE本身触摸屏加载;
主要注意三个内容:
编译QTE时,在其自定义配置文件(位于QTDIR/src/tools/qconfig-XXX.h,其XXX为自定义的名字,该特征字可以在configure时用-qconfig XXX指定)所应加的内容:
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW
去掉鼠标自动识别功能 :#define QT_NO_QWS_MOUSE_AUTO
去掉不用的鼠标驱动,(在实际中,这一步可以不要,但对于缩减QTE的大小很有帮助),方法主要是在configure时设置配置参数为-no-mouse-pc -no-mouse-bus -no-mouse-yopy -no-mouse-vr41xx 。
以该编译好的QTE库为基础,编译应用程序;
在目标机上,要将触摸屏驱动链接好。在QTE3.0的版本中,如果定义了上述的两个IPAQ相关的宏,其默认打开设备文件/dev/h3600_tsraw。如果只定义QT_QWS_IPAQ,则打开设备文件为/dev/h3600_ts。
在目标机上,设定环境变量:QWS_MOUSE_PROTO=linuxtp:/dev/h3600_tsraw。
(2)使用tslib方法;
编译TSLIB1.3:
进行如下操作
#./autogen.sh #生成configure文件
CC= $ARM_TOOL_PATH/arm-linux-gcc
CXX= $ARM_TOOL_PATH/arm-linux-g++
./configure --host=arm-linux --target=arm-linux --disable-inputapi --prefix=$PWD/build
make
make install
将build的整个目录拷贝到目标机,然后在目标机做如下设定,修改/etc/profile文件,在其中加入以下环境变量的设置
export V_ROOT=/xxx/xxx/build #目标机上build所在的路径
export TSLIB_TSEVENTTYPE=H3600 #设定类型为H3600,其主要是对着tslib中的设备结构体定义,该定义要与触摸屏驱动中的一致
export TSLIB_CONSOLEDEVICE=none #设定控制台设备为none,否则默认为/dev/tty。在tslib1.3源码中,只要不是none,它就会打开$(TSLIB_CONSOLEDEVICE)1,默认的为/dev/tty1的设备,然后从中读取console的可用设置。这样可以避免出现“open consoledevice: No such file or directory KDSETMODE: Bad file descriptor”的错误
export TSLIB_FBDEVICE=/dev/fb0 #指定帧缓冲设备
export TSLIB_TSDEVICE=/dev/touchscreen/0raw #指定触摸屏设备节点文件
export TSLIB_CALIBFILE=$V_ROOT/etc/pointercal #指定触摸屏校准文件pintercal的存放位置
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf #指定TSLIB配置文件的位置
export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins #指定触摸屏插件所在路径
编译TSLIB1.4(TSLIB07072006)
进行如下操作:
echo "ac_cv_func_malloc_0_nonnull=yes" > tslib/arm-linux.autogen #为了防止出现undefined reference to `rpl_malloc' 错误
CONFIG_SITE=arm-linux.autogen ./configure CC=arm-linux-gcc CXX=arm-linux-g++ --host=arm-s3c2410-linux-gnu --target=arm-s3c2410-linux-gnu --disable-input --disable-arctic2 --disable-mk712 --disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-h2200 --with-gnu-ld --prefix=$PWD/build
将build的整个目录拷贝到目标机,然后在目标机做如下设定,修改/etc/profile文件,在其中加入以下环境变量的设置。其解释类上,不同于TSLIB1.3的是,TLIB1.4通过配置文件ts.conf中module_raw h3600语句来加载对应的设备结构体定义。已废除了TSLIB_TSEVENTTYPE宏。
export V_ROOT=/xxx/xxx/build
export TSLIB_TSDEVICE=/dev/touchscreen/0raw
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$V_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
一个值得注意的问题是:TSLIB1.4在ts_config函数中通过while((p=fgets(buf,BUFF_SIZE,f))!=NULL)来加载ts.conf中的语句,而buf只有512byte。所以对于ts.conf没有用的定义语句,请将其删除,以防止误发生段错误。
以TSLIB库为基础,编译QTE。
QTE2.3.10直接支持-tslib选项开关的应用。不用修改任何文件。可以通过网上所说的拷贝tslib.h头文件及库文件到QTE相关目录来进行编译(对于tslib1.4,还要拷贝tslib_private.h)。也可以在./configure进指定-L -I来防止出现找不到相应库文件 的错误。(对于tslib1.4,应该还加上-lts选项)。
对于其它版本的QTE,可以通过在QTE文件夹路径下执行grep -lir 'tslib' *来查看是否有对tslib的支持,如果没有则需要对源码进行相应的修改。(onebyte注:虽然网上说有补丁可下,但俺一直没找到相关的patch,但看看QTE2.3.10的源码后再做相应的修改还算比较方便:)
[onebyte后记]:
由于是一个人在做基于embedded linux的软件开发,没有他人直接的交流,所以摸索QTE触摸屏支持的过程是相当辛苦的!网上关于这一块的说法不一,使得自己对QTE触摸屏支持的方法很长时间辨不清方向。但在这里还是要非常感谢网上的许多朋友,正是通过大家的讨论才将这块内容逐渐理通。
在这里特将这些方法记载下来,送给同我一样经历过困惑的朋友们:P
[参考网站]
网上各论坛中关于TSLIB内容的帖子不少,这里只记一些主要的论坛网站,有兴趣的可以到这上面去看看:
[1]
[2]
[3]
[4]
[5]
上一篇:工作笔记——Tslib的编译和触摸屏测试
下一篇:Framebuffer(帧缓冲区) 转
登录 注册