Linux应用开发基础知识——tslib应用编程(十一)

文章目录

  • 一、tslib是啥?
  • 二、tslib 框架分析
  • 三、交叉编译、测试 tslib
    • 3.1、交叉编译tslib
      • (1)设置交叉编译工具链
      • (2)进入tslib目录
      • (3)安装工具链
      • (4)确定工具链中头文件、库文件目录
    • 3.2、测试 tslib
    • 3.3、自己写一个测试程序
      • 上机实验:

一、tslib是啥?

tslib 是一个触摸屏的开源库,可以使用它来访问触摸屏设备,可以给输入设 备 添 加 各 种 “ filter ” ( 过 滤 器 , 就 是 各 种 处 理 ) , 地 址 是 :tslib
编译 tslib 后,可以得到 libts 库,还可以得到各种工具:较准工具、测试工具。

二、tslib 框架分析

在这里插入图片描述
核心在于“plugins”目录里的“插件”,或称为“module”。这个目录下的每个文件都是一个 module,每个 module 都提供 2 个函数:readread_mt,前者用于读取单点触摸屏的数据,后者用于读取多点触摸屏的数据。

要分析 tslib 的框架,先看看示例程序怎么使用,我们参考 ts_test.c
ts_test_mt.c,前者用于一般触摸屏(比如电阻屏、单点电容屏),后者用于多
点触摸屏。
一个图就可以弄清楚 tslib 的框架:在这里插入图片描述
调用 ts_open 后,可以打开某个设备节点,构造出一个 tsdev 结构体。然后调
用 ts_config 读取配置文件的处理,假设/etc/ts.conf 内容如下:

module_raw input
module pthres pmin=1
module dejitter delta=100
module linear

每行表示一个“module”或“moduel_raw”
对于所有的“module”,都会插入 tsdev.list 链表头,也就是 tsdev.list执行配置文件中最后一个“module”,配置文件中第一个“module”位于链表的尾部。
对于所有的“module_raw”,都会插入 tsdev.list_raw 链表头,一般只有一“module_raw”。
无论是调用 ts_read 还是 ts_read_mt,都是通过 tsdev.list 中的模块来
处理数据的。这写模块是递归调用的,比如linear模块的read函数如图 7.24:在这里插入图片描述
linear 模块的 read_raw 函数如图 7.25:在这里插入图片描述
因为是递归调用,所有最先使用 input 模块读取设备节点得到原始数据,再依次经过 pthres 模块、dejitter 模块、linear 模块处理后,才返回最终数据。

三、交叉编译、测试 tslib

3.1、交叉编译tslib

(1)设置交叉编译工具链

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

(2)进入tslib目录

从window上传tslib压缩包到ubuntu,然后执行下面命令进入tslib目录:

tar -xzf tslib-1.21.tar.xz
cd tslib-1.21

常见报错解决:

如果解压报错:
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
解决方法:tar -vxf tslib-1.21.tar.xz
1、压缩的时候用cvf参数,解压的时候用xvf参数
2、压缩的时候用czvf参数,解压的时候用xzvf参数

(3)安装工具链

执行下面命令:

./configure --host=arm-buildroot-linux-gnueabihf --prefix=/
make
make install DESTDIR=$PWD/tmp
cd tmp/

(4)确定工具链中头文件、库文件目录

echo 'main(){}'| arm-buildroot-linux-gnueabihf-gcc -E -v -

在这里插入图片描述

cp include/* /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include
cp -d lib/*so* /home/book/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/

3.2、测试 tslib

把库文件放到单板上:运行程序要用。先在开发板上使用 NFS 挂载 Ubuntu 的目录,再把前面编译出来的 tslib-1.21/tmp/部分文件复制到板子上,示例命令如下:

cp /mnt/tslib-1.21/tmp/lib/ts -rfd /lib
cp /mnt/tslib-1.21/tmp/lib/so -d /lib
cp /mnt/tslib-1.21/tmp/bin/* /bin
cp /mnt/tslib-1.21/tmp/etc/ts.conf -d /etc

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

mv /etc/init.d/*hmi* /root
mv /etc/init.d/*lvgl* /root
reboot

在单板上执行测试程序:

export TSLIB_PLUGINDIR=/lib/ts
ts_test_mt

在这里插入图片描述

3.3、自己写一个测试程序

程序(screen1.c):打印出触摸屏的触摸点的坐标以及压力值

#include <tslib.h>
#include <stdio.h>//定义一个指向触摸屏设备的静态全局变量
static struct tsdev *g_ts;int main()
{struct ts_sample samp;int ret;//初始化触摸屏设备g_ts = ts_setup(NULL, 0);if (!g_ts){printf("ts_setup err\n");return -1;}while(1){//从触摸屏读取一个样品ret = ts_read(g_ts, &samp, 1);if (ret != 1)return -1;//填充数据,便于保存printf("iX:  %d\n",samp.x);printf("iY:  %d\n",samp.y);	printf("pre: %d\n",samp.pressure);}//samp.tv;//读取成功,返回0return 0;
}

上机实验:

编译:arm-buildroot-linux-gnueabihf-gcc -o test screen1.c -lts
拷贝过去板子:cp test ~/nfs_rootfs/
运行:./test

现象:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10064.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL必会知识精华6(组合WHERE子句)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以完成数据库增删改查的实际操作。同时轻松应对面试或者笔试题中MySQL相关题目。 上篇文章我们先做一下数据库的where条件过滤的方法&#xff0c;都是单个条件的过滤。本篇文章主要介绍查询的组合WHERE子句的…

系统架构师2023版:习题

架构设计基础 计算机基础 目前处理器市场中存在 CPU 和 DSP 两种类型的处理器&#xff0c;分别用于不同的场景&#xff0c;这两种处理器具有不同的体系结构&#xff0c;DSP采用()。 A.冯诺依曼结构 B.哈佛结构 C.FPGA 结构 D.与 GPU 相同的结构 解析:…

企微SCRM价格解析及其性价比分析

内容概要 在如今的数字化时代&#xff0c;企业对于客户关系管理的需求日益增长&#xff0c;而企微SCRM&#xff08;Social Customer Relationship Management&#xff09;作为一款新兴的客户管理工具&#xff0c;正好满足了这一需求。本文旨在为大家深入解析企微SCRM的价格体系…

RocketMQ学习笔记

RocketMQ笔记 文章目录 一、引言⼆、RocketMQ介绍RocketMQ的由来 三、RocketMQ的基本概念1 技术架构2 部署架构 四、快速开始1.下载RocketMQ2.安装RocketMQ3.启动NameServer4.启动Broker5.使⽤发送和接收消息验证MQ6.关闭服务器 五、搭建RocketMQ集群1.RocketMQ集群模式2.搭建主…

基于AI大模型开发应用层产品经典解决方案:ASR+LLM+TTS

在 AI 大模型开发领域&#xff0c;ASR&#xff08;自动语音识别&#xff09;LLM&#xff08;大语言模型&#xff09;TTS&#xff08;语音合成&#xff09;的解决方案是一种将语音输入、语言理解和语音输出整合在一起的技术架构&#xff0c;能够实现智能的语音交互应用。 方案介…

tree-transfer-vue3插件(树形数据穿梭框)

tree-transfer-vue3 效果图 简介 tree-transfer-vue3 是一个基于 VUE 和 element-plus 的树形穿梭框组件&#xff0c;使用前请确认已经引入element-plus&#xff01; 此组件功能类似于element-plus的transfer组件&#xff0c;但是里面的数据是树形结构&#xff01; 实际上&am…

临床检验方法与仪器 第一部分作业:光谱分析仪器与技术的总结与归纳+新型光谱仪的调研

临床检验方法与仪器 第一部分作业 列表归纳紫外-可见分光光度计、荧光光谱分析仪、原子吸收光谱仪、原子发射光谱仪的原理、特点、技术优势和主要应用对象&#xff1b;调研新型光谱仪&#xff0c;每一类至少提供1个例子&#xff0c;列出图片、厂家、型号、主要技术特点和优势。…

Linux系统编程-多线程线程属性

如何查看有那些多线程系统调用属性api 线程属性系统api举例 /* int pthead_attr_init(pthread_attr_t *attr); -对属性变量初始化int pthread_attr_destroy(pthread_attr_t *attr); -使用完毕需要销毁int pthread_attr_getdetachstate(const pthread_attr_t *attr, int*detach…

LVGL加入外围字库

一、首先lvgl是有自带字库的 lvgl/src/font 如下图 二、但如果这个字库不能满足我们的需求我们就要外建字库。 1、字库生成软件LVGL官网,字体转换器 — LVGL如下图: 最后按“提交”就可以看到有一个字体被下载到你电脑里。他是以.c文件的型式,把它COPY到lvgl的根目录下 2、…

【Steam登录】protobuf协议逆向

https://api.steampowered.com/IAuthenticationService/GetPasswordRSAPublicKey/v1 搜索 input_protobuf_encoded定位 input_protobuf_encoded的值就是 o s r.SerializeBody() o i.iI(s) 精准定位 打上条件断点&#xff1a;t ‘Authentication.GetPasswordRSAPublicKey…

ML 系列:第 21 节 — 离散概率分布(二项分布)

一、说明 二项分布描述了在固定数量的独立伯努利试验中一定数量的成功的概率&#xff0c;其中每个试验只有两种可能的结果&#xff08;通常标记为成功和失败&#xff09;。 二、探讨伯努利模型 例如&#xff0c;假设您正在抛一枚公平的硬币 &#xff08;其中正面成功&#xff…

【模拟集成电路】知识点笔记_1

知识点笔记_1 零极点相关1 PM和GM相关概念2零极点 温度系数五种常见噪声源MOS管和BJT选取BJT刨面图工艺角衬底主要噪声来源共模反馈三种常用CMFB1 工作在线性区MOS作为CMFB&#xff08;匹配决定输出电压&#xff09;2 电阻反馈&#xff08;Buf&#xff09;3 电流差分对&#xf…

资产管理:SpringBoot框架的高效解决方案

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

Redis - 集群(Cluster)

一、基本概念 上述的哨兵模式,提⾼了系统的可⽤性.但是真正⽤来存储数据的还是master和slave节点.所有的数 据都需要存储在单个master和slave节点中. 如果数据量很⼤,接近超出了master/slave所在机器的物理内存,就可能出现严重问题了. 如何获取更⼤的空间?加机器即可!所谓&q…

基于springboot的高校科研管理系统(源码+调试+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据你想解决的问题&#xff0c;今天给…

pwn学习笔记(11)--off_by_one

pwn学习笔记&#xff08;11&#xff09;–off_by_one ​ 在处理for循环或者while循环的时候&#xff0c;有的可能会遇到如下情况&#xff1a; #include<stdio.h>int main(){char buf[0x10];for (int i 0 ; i < 0x10 ; i ){buf[i] getchar();}puts(buf);}​ 多次输…

YOLOv8模型改进 第十九讲 添加倒置残差移动块iRMB(Inverted Residual Mobile Block,) 去除图像噪声

本文这次分享的是倒置残差移动块iRMB&#xff0c;iRMB&#xff08;Inverted Residual Mobile Block&#xff09;的作用主要是在神经网络中实现高效的特征提取&#xff0c;它融合了卷积神经网络&#xff08;CNN&#xff09;捕捉局部特征的高效性和 Transformer 动态建模长距离交…

express项目中使用MySQL

一、安装mysql 模块 1.1 先配置包管理工具 npm init -y1.2、安装mysql 模块 npm install mysql2二、配置mysql // 1、导入mysql模块 const mysql require("mysql2");// 2、建立与mysql 数据库的链接 const db mysql.createPool({host: "127.0.0.1", …

泛微E9 OA与金蝶云的差旅费报销接口集成

FD001-差旅费报销申请 泛微>金蝶--498 集成案例分享 在企业日常运营中&#xff0c;差旅费报销申请的处理效率直接影响到员工满意度和财务管理的精确性。为了实现泛微OA-Http系统与金蝶云星空平台之间的数据无缝对接&#xff0c;我们设计并实施了FD001-差旅费报销申请集成方…

新疆高校大数据实验室案例分享

高校大数据实验室建设&#xff0c;企业可以提供技术支持、实训平台和项目案例&#xff0c;高校则提供科研和教学资源&#xff0c;实现产学研一体化。不仅有利于大数据技术的应用和人才培养也有利于区域发展。 泰迪与新疆合作的院校包括新疆大学、昌吉学院等 新疆大…