tslib库编译与移植

时间:2022-11-20 15:57:53

tslib库编译与移植

1.tslib库简介

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

2 相关工具安装

  安装必要工具libtool、automake、autoconf

$ sudo apt-get install libtool
$ sudo apt-get install automake
$ sudo apt-get install autoconf

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

tslib库编译与移植

  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

- -host=arm-linux    --指定编译器

- -prefix=$PWD/_install ---指定安装目录

​  3.编译安装。

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

  编译安装好后会生成 _install 文件夹。

tslib库编译与移植

  生成的文件信息:

[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

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

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

  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

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

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

  7.修改配置文件。

  如果希望使用linux输入层事件接口,需要取消module_raw input 注释。

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

tslib库编译与移植

  8.配置开发板的的启动文件 profile。

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

tslib库编译与移植

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 #屏幕设备节点

注意: 设置完环境变量之后,需要重启开发板生效,或者使用 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

tslib库编译与移植

tslib库编译与移植

  tslib中提供的测试命令,是通过ts.config文件读取相应的触摸屏配置信息和LCD屏配置信息。

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

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>

#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;
}
  •  程序编译:
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)
  •  运行效果:
[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

tslib库编译与移植

  触摸屏驱动参考示例:​​​https://blog.51cto.com/u_15688123/5870443​