• tslib库编译与移植


    tslib库编译与移植

    1.tslib库简介

      tslib 是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

    2 相关工具安装

      安装必要工具libtool、automake、autoconf

    $ sudo apt-get install libtool
    $ sudo apt-get install automake
    $ sudo apt-get install autoconf
    
    • 1
    • 2
    • 3

    3 tslib安装步骤

    • 系统环境

    开发环境: Ubuntu18.04
    目标开发板: Tiny4412
    交叉编译器: arm-linux-gcc
    Linux内核: Linux3.5

      1.下载tslib库源码包,将源码解压到用户目录下。
      tslib源码下载地址:https://github.com/libts/tslib/releases

    [wbyq@wbyq soft_work]$ tar xvf /mnt/hgfs/ubuntu/soft_pack/tslib-master.tar.gz  #解压
    [wbyq@wbyq soft_work]$cd tslib-master/tslib-master/    #进入到源码目录下
    [wbyq@wbyq tslib-master]$ ls
    
    • 1
    • 2
    • 3

    在这里插入图片描述
      2.configure配置,生成Makefile文件。

    [wbyq@wbyq tslib-master]$ ./autogen.sh
    [wbyq@wbyq tslib-master]$ ./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache --prefix=$PWD/_install
    
    • 1
    • 2

    - -host=arm-linux - - -指定编译器
    - -prefix=$PWD/_install - - -指定安装目录

      3.编译安装。

    [wbyq@wbyq tslib-master]$ make && make install  
    
    • 1

      编译安装好后会生成 _install 文件夹。
    在这里插入图片描述
      生成的文件信息:

    [wbyq@wbyq tslib-master]$ cd _install/
    [wbyq@wbyq _install]$ tree
    .
    ├── bin
    │   ├── ts_calibrate
    │   ├── ts_harvest
    │   ├── ts_print
    │   ├── ts_print_raw
    │   └── ts_test
    ├── etc
    │   └── ts.conf
    ├── include
    │   └── tslib.h
    └── lib
        ├── libts-1.0.so.0 -> libts-1.0.so.0.0.0
        ├── libts-1.0.so.0.0.0
        ├── libts.la
        ├── libts.so -> libts-1.0.so.0.0.0
        ├── pkgconfig
        │   ├── tslib-1.0.pc
        │   └── tslib.pc
        └── ts
            ├── arctic2.la
            ├── arctic2.so
            ├── collie.la
            ├── collie.so
            ├── corgi.la
            ├── corgi.so
            ├── dejitter.la
            ├── dejitter.so
            ├── dmc.la
            ├── dmc.so
            ├── galax.la
            ├── galax.so
            ├── h3600.la
            ├── h3600.so
            ├── input.la
            ├── input.so
            ├── linear_h2200.la
            ├── linear_h2200.so
            ├── linear.la
            ├── linear.so
            ├── mk712.la
            ├── mk712.so
            ├── pthres.la
            ├── pthres.so
            ├── tatung.la
            ├── tatung.so
            ├── touchkit.la
            ├── touchkit.so
            ├── ucb1x00.la
            ├── ucb1x00.so
            ├── variance.la
            └── variance.so
    
    6 directories, 45 files
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

      4.拷贝bin目录下的文件到开发板/bin目录下。

    [wbyq@wbyq _install]$ cp bin/* /home/wbyq/soft_work/rootfs/bin/
    
    • 1

      5.拷贝lib目录下的.so文件到开发板的/lib目录下。

    [wbyq@wbyq _install]$ cp lib/*.so* /home/wbyq/soft_work/rootfs/lib/ -rfdv
    [wbyq@wbyq _install]$ cp lib/ts/ /home/wbyq/soft_work/rootfs/lib/ -rfdv
    
    • 1
    • 2

      6.拷贝etc/ts.conf文件到开发板的/etc目录下。

    [wbyq@wbyq _install]$ cp etc/ts.conf /home/wbyq/soft_work/rootfs/etc/ 
    
    • 1

      7.修改配置文件。
      如果希望使用linux输入层事件接口,需要取消module_raw input 注释。

    [wbyq@wbyq _install]$ vim /home/wbyq/soft_work/rootfs/etc/ts.conf
    
    • 1

    在这里插入图片描述
      8.配置开发板的的启动文件 profile。

    [wbyq@wbyq _install]$ vim /home/wbyq/soft_work/rootfs/etc/profile 
    
    • 1

    在这里插入图片描述

    export set TSLIB_TSDEVICE=/dev/input/event2 #设置触摸屏设备节点
    export set TSLIB_CONFFILE=/etc/ts.conf #配置文件环境变量
    export set TSLIB_PLUGINDIR=/lib/ts #指定tslib插件目录
    export set TSLIB_CALIBFILE=/etc/pointercal  #指定校准之后,信息保存的位置(会自动生成)
    export set TSLIB_CONSOLEDEVICE=none  #指定控制台设备文件名字,默认没有。填none
    export set TSLIB_FBDEVICE=/dev/fb0 #屏幕设备节点
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意: 设置完环境变量之后,需要重启开发板生效,或者使用 source 命令立即生效。

    4 开发板运行效果

      安装触摸屏驱动,检查触摸屏设备节点是否为上面设置的event2,运行ts_test

    [root@wbyq code]# insmod ft5x06_dev.ko 
    [  759.390000] IIC子系统:设备层注册成功
    [root@wbyq code]# insmod ft5x06_drv.ko 
    [  762.175000] IIC子系统:驱动层注册成功
    [  762.175000] 资源匹配成功
    [  762.175000] input: Unspecified device as /devices/virtual/input/input3
    [root@wbyq code]# ts_test 
    874.277420:    388    354      1
    874.322712:    384    352      1
    874.337917:    369    348      1
    874.353162:    355    346      1
    874.368397:    332    343      1
    874.383524:    304    339      1
    874.398664:    277    337      1
    874.413889:    258    336      1
    874.429156:    243    335      1
    874.444247:    234    334      1
    874.474649:    230    333      1
    874.489914:    236    330      1
    874.504974:    248    328      1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
    在这里插入图片描述
      tslib中提供的测试命令,是通过ts.config文件读取相应的触摸屏配置信息和LCD屏配置信息。

    5 调用tslib库获取触摸屏坐标

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #include "tslib.h"
    int main(int argc,char *argv[])
    {
    	struct tsdev *ts;
    	char *tsdevice=NULL;
    	/*打开触摸屏设备节点*/
    	if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) {
    		ts = ts_open(tsdevice,0);
    	} 
    	else {
    		ts = ts_open("/dev/input/event2",0);
    	}
    	if(ts==NULL)
    	{
    		perror("ts_open");
    		exit(1);
    	}
    	if (ts_config(ts)) {
    		perror("ts_config");
    		exit(1);
    	}
    	struct ts_sample samp;
    	int ret;
    	printf("   时间    \t X坐标   \t Y坐标\t压力值 \n");
    	while (1) {
    		ret = ts_read(ts, &samp, 1);
    		if (ret < 0) {
    			perror("ts_read");
    			exit(1);
    		}
    		if (ret != 1)
    			continue;
    		printf("[%ld.%06ld] %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec,
    											samp.x, samp.y, samp.pressure);
    	}
    	return 0;	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 程序编译:
    cflags=-I/home/wbyq/soft_work/tslib-master/tslib-master/_install/include  #指定头文件
    cflags+=-L/home/wbyq/soft_work/tslib-master/tslib-master/_install/lib  #指定库文件路径
    cflags+=-lts  #指定库
    app:
    	arm-linux-gcc app.c -o app $(cflags)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 运行效果:
    [root@wbyq code]# ./app 
       时间       X坐标   Y坐标   压力值 
    [4591.061816]    337    369      1
    [4591.124190]    337    369      0
    [4592.426659]    512    399      1
    [4592.502302]    507    400      1
    [4592.517474]    503    401      1
    [4592.532512]    500    403      1
    [4592.547776]    494    405      1
    [4592.562922]    489    408      1
    [4592.578111]    483    410      1
    [4592.593260]    479    412      1
    [4592.624739]    475    415      1
    [4592.655903]    472    417      0
    [4592.972564]    442    402      1
    [4593.063510]    445    402      1
    [4593.078637]    449    402      1
    [4593.093764]    452    403      1
    [4593.109025]    459    404      1
    [4593.124148]    465    404      1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述
      触摸屏驱动参考示例:https://blog.csdn.net/weixin_44453694/article/details/126906896

  • 相关阅读:
    开发一个android应用需要哪些库?
    【STM32】ADC(模拟/数字转换)
    Java后端开发——房贷计算器(Ajax版、Json版、等额本息+等额本金)
    浅析kubernetes中client-go Informer
    期货-股票交易规则
    链表的注意事项
    Django Swagger文档库drf-spectacular
    10月11日
    java-php-python-医院挂号系统计算机毕业设计
    java-net-php-python-springtboot校园信息交流互助系统计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/weixin_44453694/article/details/127937666