tslib库的移植


tslib库的移植

1. 下载

下载地址:github仓库

2. 将下载好的压缩包移动到linux虚拟机上,并解压,进入该目录

tar -xJf tslib-1.21.tar.xz
cd tslib-1.21

3. 执行configure来配置Makefile文件

注意: prefix不能随便指明路径,因为以后运行程序的时候,程序会根据该路径去寻找库文件。如果打算将编译好的lib下所有的库文件放在开发板的/lib下,那么就应该将prefix设置为/;如果打算将编译好的lib下的所有库文件放在开发板的/usr/lib下,那么就应该将prefix设置为/usr

./configure --host=arm-linux-gnueabihf prefix=/

4. 执行make编译库

make DESTDIR=/home/hxd/tools/tslib   # DESTDIR用于指定你的安装位置
make install

5. 将编译好的文件配置到编译工具链

该步骤可做可不做,做了以后编译程序的时候可以不用手动指定需要该库的库文件路径和头文件路径
关于将编译好的库放在那个位置,可以查看这篇文章的1.5小节: https://blog.csdn.net/weixin_47024013/article/details/125527484

cp /home/hxd/tools/tslib/include/* -rfd /usr/lib/gcc-cross/arm-linux-gnueabihf/9/include/   # 第一个路径与你指定的库的安装路径有关
cp /home/hxd/tools/tslib/lib/* -rfd /usr/lib/gcc-cross/arm-linux/gnueabihf/9/
cp /home/hxd/tools/tslib/etc/* -rfd /etc/

6. 将编译好的库配置到开发板上

我们只需要将lib文件夹的所有文件放在开发板的/lib文件夹下(/lib还是/usr/lib取决于你的第三步)

先将tslib文件夹复制nfs的目录下,然后开发板挂载该nfs,也可以通过其他方式将文件拷贝到服务器上
cp -rfd /mnt/tslib/lib/* /lib

7. 实例

7.1 单点触摸

#include<stdio.h>
#include<stdlib.h>
#include<tslib.h>

int main()
{
	struct tsdev *ts = NULL;  // 设备句柄
	struct ts_sample samp;
	int pressure = 0;

	ts = ts_setup(NULL, 0);
	if (ts == NULL) {
		fprintf(stderr, "ts_setup error\n");
		exit(-1);
	}

	for(;;) {
		if (0 > ts_read(ts, &samp, 1)) {
			fprintf(stderr, "ts_read error\n");
			exit(-1);
		}

		if (samp.pressure > 0) {
			if (pressure > 0) {
				printf("移动(%d, %d)\n", samp.x, samp.y);
			} else {
				printf("按下(%d, %d)\n", samp.x, samp.y);
			}
			pressure = samp.pressure;
		} else if (samp.pressure == 0 && pressure > 0) {
			printf("松开(%d, %d)\n", samp.x, samp.y);
			pressure = samp.pressure;
		}

	}
}

7.2 多点触摸

#include<stdio.h>
#include<stdlib.h>
#include<sys/ioctl.h>
#include<linux/input.h>
#include<tslib.h>
#include<string.h>

int main()
{
	struct tsdev *ts = NULL;
	struct ts_sample_mt *mt_ptr = NULL;
	struct ts_sample_mt *mt_old = NULL;
	struct input_absinfo slot;
	int max_slots;
	int i = 0;

	// 初始化
	ts = ts_setup(NULL, 0);
	if (ts < 0) {
		printf("setup error\n");
		return -1;
	}

	// 获取该触摸屏支持的触摸点数
	if (0 > ioctl(ts_fd(ts), EVIOCGABS(ABS_MT_SLOT), &slot)) {
		printf("ioctl error\n");
		return -1;
	}

	max_slots = slot.maximum - slot.minimum + 1;
	printf("max_slots: %d\n", max_slots);

	// 开辟空间
	mt_ptr = (struct ts_sample_mt *)malloc(sizeof(struct ts_sample_mt)*max_slots);
	mt_old = (struct ts_sample_mt *)malloc(sizeof(struct ts_sample_mt)*max_slots);
	if (mt_ptr == NULL || mt_old == NULL) {
		printf("malloc error\n");
		return -1;
	}
	memset(mt_ptr, 0, sizeof(struct ts_sample_mt)*max_slots);
	memset(mt_old, 0, sizeof(struct ts_sample_mt)*max_slots);

	for(;;) {
		if (ts_read_mt(ts, &mt_ptr, max_slots, 1) < 0) {
			printf("ts_read_mt error\n");
			exit(-1);
		}
		//printf("-------debug---------\n");
		for (i=0;i<max_slots;i++) {
			if (mt_ptr[i].valid) {
				printf("i: %d\n", i);
				if (mt_ptr[i].pressure > 0) {
					if (mt_old[i].pressure > 0) {
						printf("slot<%d>, 移动(%d, %d)\n", mt_ptr[i].slot, mt_ptr[i].x, mt_ptr[i].y);
					} else {
						printf("slot<%d>, 按下(%d, %d)\n", mt_ptr[i].slot, mt_ptr[i].x, mt_ptr[i].y);
					}
					memcpy(&mt_old[i], &mt_ptr[i], sizeof(struct ts_sample_mt));
				} else {
					printf("slot<%d>, 松开(%d, %d)\n", mt_ptr[i].slot, mt_ptr[i].x, mt_ptr[i].y);
					memcpy(&mt_old[i], &mt_ptr[i], sizeof(struct ts_sample_mt));
				}
			}
		}
	}
	free(mt_ptr);
	free(mt_old);
	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值