zoukankan      html  css  js  c++  java
  • Linux移植随笔:终于解决Tslib的问题了【转】

    转自:http://www.latelee.org/embedded-linux/porting-linux-tslib.html

    前段时间让Tslib搞晕头了,原来一切都是版本惹的祸。本文只是一个随笔,随笔者,随意用笔写下心得而已,因此不必较真。正如我所欣赏的“乘兴而来,兴尽而返”一样。——估计当年王子猷是赏完了夜景,兴致也完了,就回家了。

    闲话少提。

    搞tslib时,出现了许多错误,像

    No raw modules loaded.
    ts_config: Success

    selected device is not a touchscreen I understand

    ts_read: Invalid argument

    等等错误,在网上找了很多资料,可惜都没有适合我的。

    现在用的tslib是使用git下载的。注意,最好使用Linux平台下载,因为tslib中包括了脚本文件(如autogen.sh),而Windows与Linux处理一行的结束字符是不相同的,因此请在Linux中下载,当然,使用编辑器转换结束字符也无所谓。

    命令如下:

    $ git clone https://github.com/kergoth/tslib

    在Linux下安装git可参考:Linux移植随笔:git的使用

    编译过程如下:

    $ ./autogen.sh

    $ ./configure –host=arm-linux –prefix=/home/latelee/lib/tslib

    $ make

    $ make install

    网上流行的编译方法如下:

    $ ./autogen.sh

    $ echo “ac_cv_func_malloc_0_nonnull=yes”> tmp.cache

    $ ./configure –host=arm-linux –cache-file=tmp.cache –enable-inputapi=no –prefix=/home/latelee/lib/tslib

    $ make

    $ make install

    有两点不同:

    一,没有“ac_cv_func_malloc_0_nonnull=yes”,编译过程没有报错;

    二,去掉“–enable-inputapi=no”,网上说法不在此处提及,单看README文件的描述:

    TSLIB_TSDEVICE   TS device file name.

    Default (non inputapi): /dev/touchscreen/ucb1x00

    Default (inputapi): /dev/input/event0

    板子的触摸屏设备文件正是/dev/input/event0(默认值,可以在配置文件ts.conf中设置这个环境变量)。

    make install后,会在/home/latelee/lib/tslib目录生成4个子目录:

    include lib etc bin

    生成的库位于lib中,该目录下还有一个子目录ts,它包含了许多校准用到的库(如input.so等)。etc下的ts.conf为配置文件,bin目录下为校准、测试工具(如校准的ts_calibrate,测试用的ts_test)。

    配置文件如下:

    # Late Lee 2011-03-31 for touchscreen test
    
    export TSLIB_ROOT=/usr/local/tslib
    
    export TSLIB_TSDEVICE=/dev/input/event0
    
    export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
    
    export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
    
    export TSLIB_CALIBFILE=/etc/pointercal
    
    export TSLIB_CONSOLEDEVICE=none
    
    export TSLIB_FBDEVICE=/dev/fb0
    
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

    (该文件的日期为上个月最后一天,离今已十余天,为了这个花费的时日可不少。)

    使用TSLIB_ROOT这个变量比较好,因为只要将编译生成后的tslib文件夹复制到某个位置,再修改这个变量即可,其它的不用修改。

    配置文件ts.conf内容如下:

    module_raw input

    module pthres pmin=1

    module variance delta=30

    module dejitter delta=100

    module linear

    module_raw有许多种,这里只使用input(即Linux的input子系统,设备文件名称为/dev/input/event0),其它的删除掉。后面的几个module还没有深入了解,它们使用的库就在tslib/lib/ts中,最后三个模块的字面意思是“方差(滤波)”、“去抖动(去噪)”、“线性(坐标变换)”,对这些东西不了解,不发表意见。

    运行校准程序,触摸屏依次出现5个点,依次点击之:

    # ./ts_calibrate

    xres = 240, yres = 320

    Took 14 samples…

    Top left : X =  276 Y =  795

    Took 12 samples…

    Top right : X =  736 Y =  796

    Took 11 samples…

    Bot right : X =  735 Y =  248

    Took 7 samples…

    Bot left : X =  274 Y =  247

    Took 7 samples…

    Center : X =  505 Y =  524

    -33.156189 0.304019 -0.000832

    369.119629 0.000871 -0.401456

    Calibration constants: -2172924 19924 -54 24190624 57 -26309 65536

    生成的校准文件名为pointercal,位于/etc目录下。

    如果想运行ts的测试程序,在tslib/bin目录下输入

    ./ts_test

    即可。

    屏幕最上方会出现三个按钮,分别为“Drag”、“Draw”和“Quit”,默认是第一个,因此,用触摸笔点击任何一处,十字光标便会到那里。

    下面是点击“Draw”按钮并用触摸笔写字的提示信息的一小部分:

    1302603922.770286:     98    302      1

    1302603922.800295:    107    300      1

    1302603922.815277:    118    297      1

    1302603922.830291:    130    294      1

    1302603922.845288:    143    290      1

    1302603922.845288:    151    288      1

    1302603922.875166:    168    284      0

    第一列为timeval结构体的两个成员:tv_sec和tv_usec,中间两列分别是X和Y的坐标,最后为pressure,这里可以理解成“触摸事件”,为1表示触摸笔点击了(接触)屏幕,为0表示触摸笔离开了屏幕(这里出现很多的1是正常的,因为写字过程中笔没有离开触摸屏——这是废话,请无视之)。

    点击屏幕上“Quit”或按Ctrl+C可退出该程序。

    文中前面安装Tslib的路径是主机(又称开发主机、服务器、host)上的,后面与Tslib环境变量有关的是开发板(又称目标板、板子、target)上的。

    最后附图一张,也算有图有真相了:

    Tslib测试图片——来自latelee.org

    本文固定链接: http://www.latelee.org/embedded-linux/porting-linux-tslib.html

  • 相关阅读:
    前端之JavaScript
    前端之CSS
    前端之HTML
    编程总结
    线程
    锁机制,信号机制,事件机制
    并发编程
    struct
    linux查看端口
    vue页面跳转传参
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/5100723.html
Copyright © 2011-2022 走看看