第三方库介绍——tslib库

article/2025/1/15 21:55:15

文章目录

  • tslib 简介
  • tslib 框架分析
    • tslib 的框架
  • 交叉编译、测试 tslib
  • tslib应用程序

tslib 简介

tslib 是一个触摸屏的开源库,可以使用它来访问触摸屏设备,可以给输入设备添加各种“ filter ”( 过滤器,就是各种处理)

编译 tslib 后,可以得到 libts 库,还可以得到各种工具:较准工具、测试工具。

官网地址:C library for filtering touchscreen events

tslib 框架分析

tslib 的主要代码位置
在这里插入图片描述

  • plugins目录下的每个文件都是一个 module,每个模块都会被编译成动态库,每个 module 都提供 2 个函数:read、read_mt,前者用于读取单点触摸屏的数据,后者用于读取多点触摸屏的数据。

  • tests目录下是测试程序:参考 ts_test.c 和ts_test_mt.c,前者用于一般触摸屏(比如电阻屏、单点电容屏),后者用于多点触摸屏。

tslib 的框架

在这里插入图片描述

框架分析:框架分析视频

交叉编译、测试 tslib

安装依赖库:

sudo apt-get install autoconf automake libtool
./configure --host=arm-buildroot-linux-gnueabihf  --prefix=/
make
make install DESTDIR=$PWD/tmp
cd tmp/
cp include/* /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include
cp lib/*so* -d  /home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/

不能写–prefix=$(pwd)/tmp,因为操作配置文件的函数:ts_config函数会通过宏定义:TS_CONF找到配置文件的路径,而这个宏定义是在安装的时候生成的,会导致配置文件里面的路径过长,这样移植到开发板上的时候就不用创建过长的路径,而是直接放在/etc路径下,如果设置了的话会有如下的现象
在这里插入图片描述

make install后,会在tmp目录生成4个子目录:include lib etc bin

  • lib目录下还有一个子目录ts,它包含了许多校准用到的库(如input.so等)。
  • etc下的ts.conf为配置文件
  • bin目录下为校准、测试工具(如校准的ts_calibrate,测试用的ts_test),可以直接放在开发板上运行

把前面编译出来的 tslib-1.21/tmp/部分文件复制到板子上,因为程序运行时需要

sudo cp lib/*so* -d /home/book/nfs_rootfs/lib
sudo cp bin/* /home/book/nfs_rootfs/bin
sudo cp etc/ts.conf -d /home/book/nfs_rootfs/etc

此时开发板的网络文件系统mnt中有共享的文件,将文件拷贝到开发板的/bin和/lib和/etc目录下

cp lib/*so* -d /lib
cp bin/* /bin
cp etc/* /etc

在mnt/lib目录下,将两个文件夹也拷贝到lib目录下

cp ts /lib -rf
cp pkgconfig/ /lib -rf

首先需要关闭默认的 qt gui 程序,才可以执行ts_print_mt测试命令,关闭 qt 命令如下所示:

systemctl stop myir

在单板上执行测试程序,因为放在/bin目录下,可以直接执行:

ts_print_mt

恢复开发板

systemctl start myir

tslib应用程序

触摸屏可能支持多个触点,比如 5 个:tslib 为了简化处理,即使只有 2个触点,ts_read_mt 函数也会返回 5 个触点数据(存储在ts_sample_mt结构体中),可以根据标志位判断数据是否有效。

在这里插入图片描述
ts_sample_mt 结构体如下:
在这里插入图片描述

实现一个程序,不断打印 2 个触点的距离。
思路:假设是 5 点触摸屏,调用一次 ts_read_mt 可以得到 5 个新数据;使用新旧数据进行判断,如果有 2 个触点,就打印出距离。主要是对samp_mt

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <getopt.h> 
#include <linux/input.h>
#include <sys/ioctl.h>
#include <tslib.h>int distance(struct ts_sample_mt *point1, struct ts_sample_mt *point2)
{int x = point1->x - point2->x;int y = point1->y - point2->y;return x*x + y*y;
}int main(int argc, char **argv)
{struct tsdev *ts;int i;int ret;struct ts_sample_mt **samp_mt;struct ts_sample_mt **pre_samp_mt;	int max_slots;int point_pressed[20];struct input_absinfo slot;int touch_cnt = 0;ts = ts_setup(NULL, 0);if (!ts){printf("ts_setup err\n");return -1;}if (ioctl(ts_fd(ts), EVIOCGABS(ABS_MT_SLOT), &slot) < 0) {perror("ioctl EVIOGABS");ts_close(ts);return errno;}max_slots = slot.maximum + 1 - slot.minimum;samp_mt = malloc(sizeof(struct ts_sample_mt *));if (!samp_mt) {ts_close(ts);return -ENOMEM;}samp_mt[0] = calloc(max_slots, sizeof(struct ts_sample_mt));if (!samp_mt[0]) {free(samp_mt);ts_close(ts);return -ENOMEM;}pre_samp_mt = malloc(sizeof(struct ts_sample_mt *));if (!pre_samp_mt) {ts_close(ts);return -ENOMEM;}pre_samp_mt[0] = calloc(max_slots, sizeof(struct ts_sample_mt));if (!pre_samp_mt[0]) {free(pre_samp_mt);ts_close(ts);return -ENOMEM;}for ( i = 0; i < max_slots; i++)pre_samp_mt[0][i].valid = 0;while (1){ret = ts_read_mt(ts, samp_mt, max_slots, 1);if (ret < 0) {printf("ts_read_mt err\n");ts_close(ts);return -1;}for (i = 0; i < max_slots; i++){if (samp_mt[0][i].valid){memcpy(&pre_samp_mt[0][i], &samp_mt[0][i], sizeof(struct ts_sample_mt));}}touch_cnt = 0;for (i = 0; i < max_slots; i++){if (pre_samp_mt[0][i].valid && pre_samp_mt[0][i].tracking_id != -1)point_pressed[touch_cnt++] = i;}if (touch_cnt == 2){printf("distance: %08d\n", distance(&pre_samp_mt[0][point_pressed[0]], &pre_samp_mt[0][point_pressed[1]]));}}return 0;
}

参考视频:编写应用程序


http://chatgpt.dhexx.cn/article/02L0pQOh.shtml

相关文章

tslib框架分析

tslib时一个触摸屏的开源库&#xff0c;可以使用它来访问触摸屏设备&#xff0c;可以输入给设备添加各种"filter"&#xff0c;地址这里 编译tslib后&#xff0c;可以得到libts库&#xff0c;还可以得到各种工具&#xff1a;校准工具、测试工具 一、tslib框架分析 …

暑假实训成果及心得

暑假实训成果及心得 本次暑假实训主要从大数据的现况及前景出发&#xff0c;通过大数据发展的趋势及鲲鹏云大数据对大数据有了一个全新的认识。 自我介绍 本着对大数据热爱&#xff0c;我毅然决然的踏上了这条大数据的不归路。第一次接触大数据是在高三的语文试卷里&#xf…

大学生mysql实训心得_大学生实训心得体会范文(精选3篇)

大学生实训心得体会范文(精选3篇) 当在某些事情上我们有很深的体会时,往往会写一篇心得体会,这样可以帮助我们总结以往思想、工作和学习。一起来学习心得体会是如何写的吧,以下是小编为大家收集的大学生实训心得体会范文(精选3篇),仅供参考,欢迎大家阅读。 大学生实训心得…

谈谈我的实习感受~

写在前面 有粉丝私信说&#xff0c;让我出一篇关于工作感受的文章&#xff0c;今天他来了。 初来乍到 刚入职的时候&#xff0c;一个词形容——一脸懵逼&#xff0c;不过有人带着会好很多&#xff0c;他会告诉你需要做什么&#xff0c;当然了刚来的一两周一般都是熟悉公司业务&…

c语言实验报告总结通用版,大学生实训心得体会(通用11篇)

大学生实训心得体会(通用11篇) 我们心里有一些收获后,好好地写一份心得体会,这样能够培养人思考的习惯。很多人都十分头疼怎么写一篇精彩的心得体会,以下是小编精心整理的大学生实训心得体会(通用11篇),欢迎大家分享。 大学生实训心得体会1 在我们过去的读书生涯中,有一个…

云计算实训报告总结_实训报告心得体会(通用5篇)

实训报告心得体会(通用5篇) 我们在一些事情上受到启发后,马上将其记录下来,这样就可以总结出具体的经验和想法。那么如何写心得体会才能更有感染力呢?以下是小编帮大家整理的实训报告心得体会(通用5篇),欢迎阅读,希望大家能够喜欢。 实训报告心得体会1 我对于visualbasic的…

大学生html5实训报告,大学生实训心得体会范文(精选5篇)

大学生实训心得体会范文(精选5篇) 当我们积累了新的体会时,应该马上记录下来,写一篇心得体会,如此就可以提升我们写作能力了。你想好怎么写心得体会了吗?下面是小编整理的大学生实训心得体会范文(精选5篇),仅供参考,大家一起来看看吧。 大学生实训心得体会1 五月,在各种…

html5实训总结200字,实训心得体会范文200字(通用5篇)

实训心得体会范文200字(通用5篇) 当我们心中积累了不少感想和见解时,写心得体会是一个不错的选择,这样就可以通过不断总结,丰富我们的思想。那么心得体会怎么写才恰当呢?下面是小编收集整理的实训心得体会范文200字(通用5篇),仅供参考,大家一起来看看吧。 实训心得体会1 …

大学生html5实训心得体会,实训心得体会600字(精选5篇)

实训心得体会600字(精选5篇) 当我们心中积累了不少感想和见解时,写一篇心得体会,记录下来,这样我们就可以提高对思维的训练。但是心得体会有什么要求呢?下面是小编帮大家整理的实训心得体会600字(精选5篇),欢迎阅读,希望大家能够喜欢。 实训心得体会600字1 时间过的真快,…

上第一次实训课感想

上第一次Java实训课感想 第一天开始实训,有点担心自己不会做,但第一天分配的任务比我想象的要简单一点,是用navicat创建数据表,用到了mysql的知识。 比较麻烦的就是给表导入数据,因为数据比较多,所以比较麻烦,但总体来说还好。 然后用百度脑图创建了一张思维导图,如下…

html怎么制作表单,HTML如何制作表单

制作表单的方法&#xff1a;首先使用form标签创建表单&#xff0c;搭建表单框架&#xff1b;然后使用input标签创建文本输入框和提交按钮&#xff1b;接着使用select和option标签创建下拉列表&#xff1b;最后使用textarea标签创建文本区域即可。 本教程操作环境&#xff1a;wi…

HTML 什么是表单

什么是表单 HTML 表单的主要作用是接收用户的输入&#xff0c;当用户提交表单时&#xff0c;浏览器将用户在表单中输入的数据打包&#xff0c;并发送给服务器&#xff0c;从而实现用户与Web服务器的交互。 表单是控件的容器&#xff0c;一个表单由form元素、表单控件和表单按…

HTML表单和表格

一.表单 HTML 表单简介 定义和用法 HTML 常用表单元素 属性 1.1 HTML表单简介 HTML 表单是 HTML 文档中的 一个区域 HTML 表单这个区域中包含了一系列的 可交互元素 HTML 表单主要用于 收集用户输入信息 1.2 定义和用法 <form> 标签用于为用户输入创建 HTML 表单。 …

HTML登录表单的制作

表单的知识点总结 form必须有action属性&#xff0c;表示提交地址所有需要提交的数据&#xff0c;input必须有name属性input按钮的文字&#xff0c;使用value属性表示input必须放在form标签才能提交 input标签常见类型总结 文本输入框 密码输入框 单选框 复选框 type"…

HTML网页设计:十一、表单

表单 HTML系列文章目录 HTML网页设计&#xff1a;一、HTML的基本结构HTML网页设计&#xff1a;二、网页的基本标签HTML网页设计&#xff1a;三、图像标签之&#xff1c;img&#xff1e;标签HTML网页设计&#xff1a;四、超链接HTML网页设计&#xff1a;五、行内元素和块元素H…

HTML表单--如何使用HTML创建表单

HTML表单是什么&#xff1f; HTML 表单用于收集用户输入&#xff0c;与服务器进行交互&#xff0c;使用form元素来定义一个HTML表单。 下面简单介绍表单中常见元素的用法。 1.表单标签 form 属性&#xff1a; action —数据提交的服务器地址method— 数据提交的方法 数据提…

初学者:html中的表单详解(下面附有代码)

表单的理解与解释 表单&#xff1a;采集不同类型的用户输入数据&#xff0c;发送给服务器&#xff0c;实现用户和服务器之间的数据交互。 表单标签form 声明数据采集的范围&#xff0c;只要是在form中的&#xff0c;都是要采集的数据。 一个页面中可以有多个form标签&#xf…

HTML表单制作

为什么写表单&#xff1f;&#xff08;目的是为了收集用户信息&#xff09; 表单的组成&#xff1a;表单域、表单控件&#xff08;也称表单元素&#xff09;和提示信息3个部分构成。 在HTML中&#xff0c;<form>标签用于定义表单域&#xff0c;以实现用户信息的收集和传…

html的form表单详解

这里写目录标题 Form表单介绍表单元素单选按钮复选框文件隐藏域提交按钮重置按钮按钮图像图片按钮下拉列表多行文本框(文本域)HTML5新增type类型HTML5新增属性编码不易 如有帮助到您 请支持一下 多谢Form表单介绍 表单在 Web 网页中用来给访问者填写信息,从而能采集客户端信息…

HTML——表单

文章目录 一&#xff0c;创建一个表单&#xff08;一&#xff09;HTML表单是什么&#xff1f;&#xff08;二&#xff09;创建一个表单1&#xff0c;form元素2&#xff0c;label、input 和 textarea 元素3&#xff0c;button 元素 &#xff08;三&#xff09;简单的表单样式 二…