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
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 文件夹。
生成的文件信息:
[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
8.配置开发板的的启动文件 profile。
[wbyq@wbyq _install]$ vim /home/wbyq/soft_work/rootfs/etc/profile
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中提供的测试命令,是通过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
触摸屏驱动参考示例:https://blog.51cto.com/u_15688123/5870443