主题 : 电容触摸屏和鼠标箭头 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 81007
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-11-02
最后登录: 2013-07-22
楼主  发表于: 2012-11-30 09:33

 电容触摸屏和鼠标箭头

PC:Fedora9
ARM mini2440
CTPM IC ft5406
linux 2.6.32.2
qt 2.2
最近参考资料编写了一个电容触摸屏的驱动,我是把它模拟电子触摸屏上报的触摸,视乎是因为tslib问题,不支持多点触摸。目前算是完成了单点触摸。
但是有个奇怪的现象,我的触摸并不准确,描述一下:第一感觉像是触控板,屏幕上鼠标指针移动时触摸屏上手指移动的两倍,手指移到屏幕边缘鼠标会继续之前的移动直到屏幕边缘,就是这样的感觉,不知道描述清楚没。
开始以为我是模拟电阻屏的input上报机制是不是电容屏要初校准?然后调用不了tslib的校准。忙了一点时间重新移植了tslib,问题解决了,结果问题更困惑了 。描述一下:运行./usr/local/tslib/bin/ts_test时候我点下的坐标在串口上ts_test打印的点和我驱动程序中添加的上报数据点的打印信息以及我从I2C中读取的坐标数据是一样的。显示的校准十字也跟着我的手指或者显示轨迹是也是正确的! 但是,鼠标箭头就是不和tslib在一起,
虽然想过各种可能,实际调试无果!互相讨论交流也是一种办法了,所以在这里希望大家能够指点一二,给个思路或者方向!
[ 此帖被295171924在2012-11-30 09:49重新编辑 ]
级别: 新手上路
UID: 81007
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-11-02
最后登录: 2013-07-22
1楼  发表于: 2012-11-30 09:47

 回 楼主(295171924) 的帖子

        
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
2楼  发表于: 2012-11-30 10:07
不错,挺厉害的
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
UID: 81007
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-11-02
最后登录: 2013-07-22
3楼  发表于: 2012-11-30 12:11

 回 2楼(mindee) 的帖子

问题还没解决呢,别夸我了!

我看到这样一篇文档:【引】
bin/qtopia

TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then
        export QWS_MOUSE_PROTO="Tslib:/dev/input/event0 USB:/dev/input/mice"//鼠标和触摸屏共存会偏移

        if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
                rm /etc/pointercal
        fi
else
        export QWS_MOUSE_PROTO="USB:/dev/input/mice"
        >/etc/pointercal
fi
unset TS_INFO_FILE
}
所以我修改了那一部分:
下面是我串口终端的信息:

Please press Enter to activate this console.
[root@FriendlyARM /]# vi etc/profile

# Ash profile
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]\# '
PATH=$PATH

HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=lib:/usr/local/lib:$T_ROOT/lib:$LD_LIBRARY_PATH
export QWS_MOUSE_PROTO="Tslib:/dev/input/event0"
[1] + Stopped                    vi etc/profile
[root@FriendlyARM /]# vi bin/qtopia

#!/bin/sh

export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=/usr/local/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export QTDIR=/opt/Qtopia
export QPEDIR=/opt/Qtopia
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH


TS_INFO_FILE=/sys/devices/virtual/input/input0/uevent
if [ -e $TS_INFO_FILE -a "/bin/grep -q TouchScreen < $TS_INFO_FILE" ]; then
        export QWS_MOUSE_PROTO="Tslib:/dev/input/event0"
        if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
                rm /etc/pointercal
        fi
else
        export QWS_MOUSE_PROTO="USB:/dev/input/mice"
        >/etc/pointercal
fi
unset TS_INFO_FILE
[2] + Stopped                    vi bin/qtopia
[root@FriendlyARM /]# echo $QWS_MOUSE_PROTO
Tslib:/dev/input/event0
[root@FriendlyARM /]# ls dev/input/
event0  mice    mouse0
[root@FriendlyARM /]# cat dev/input/event0
1(195,320)(0x0c3,0x140)
==end=
ph7
  
    @p?
        
             Jp8
                1(194,320)(0x0c2,0x140)
==end=
p
     1(194,320)(0x0c2,0x140)
==end=
==end=
p?
p?

Jp?
[root@FriendlyARM /]# cat dev/input/event0
1(134,349)(0x086,0x15d)
==end=
9亖9佈1(134,349)(0x086,0x15d)
==end=
==end=
^C
[root@FriendlyARM /]# ./usr/local/tslib/bin/ts_test
Segmentation fault
[root@FriendlyARM /]# rm etc/pointercal
[root@FriendlyARM /]# ./usr/local/tslib/bin/ts_test
1(235,240)(0x0eb,0x0f0)
==end=
1(235,240)(0x0eb,0x0f0)
==end=
1(235,240)(0x0eb,0x0f0)
==end=
==end=
166.100255:    235    240    200
166.165094:    235    240      0

其中有两个文件的内容,以及dev/input/下cat了两个设备触摸都打了乱码,ts_test运行后的打点信息(1(235,240)(0x0eb,0x0f0)==end=(这个是我驱动打印的上报坐标和i2c读取的值))

问题没有解决!
级别: 新手上路
UID: 81007
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-11-02
最后登录: 2013-07-22
4楼  发表于: 2012-11-30 14:24









自己顶起来
级别: 新手上路
UID: 81007
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2012-11-02
最后登录: 2013-07-22
5楼  发表于: 2012-11-30 17:30

 回 2楼(mindee) 的帖子

问题解决了,
是因为我自己的驱动名字里没有“TouchScreen”所以被认为是鼠标,
鼠标上报的点是一个移动的相对坐标加上前一动作的坐标!

现在有个问题是毛刺,描述一下:使用QT的手写程序进行写字操作,画的笔画不是细细的线,也不是粗而均匀的线,而是细细的线并且线上有好多小角度分叉毛刺!

初步思考是认为压力问题,也就是上报时有个数据我设置200,参考自带电阻屏驱动里面的值是1,我修改以后,现象还是一样。问题没有解决。另一个想法是我在看到串口上的打点数据想到的,我按一下,中断触发了几次,上报了几次点。如果一直按着会一直快速的打印坐标,个人认为毛刺是因为中断太快,一次短触摸如果只报一个点是不是就不会有毛刺,毛刺也是触摸点坐标,在一个点上的短停留结果读取上报了手指范围内的抖动的几个点。然后连线,结果就变成毛刺。