当前位置:网站首页>tslib库的移植
tslib库的移植
2022-07-03 07:52:00 【不会学习的小菜鸡】
目录
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;
}
边栏推荐
- Enter three times and guess a number
- 【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题
- 技术干货|关于AI Architecture未来的一些思考
- 【LeetCode】3. Merge two sorted lists · merge two ordered linked lists
- 华为交换机Console密码重置、设备初始化、默认密码
- Technical dry goods | thinking about the unification of dynamic and static diagrams of AI framework
- [at] abc 258G - Triangle 三元組可達-暴力
- Register keyword
- Redis配置文件
- 【LeetCode】2. Valid parentheses · valid parentheses
猜你喜欢
Technical dry goods Shengsi mindspire dynamic transformer with variable sequence length has been released!
[MySQL 12] MySQL 8.0.18 reinitialization
PAT甲级 1031 Hello World for U
OSPF experiment
HarmonyOS第三次培训笔记
Redis batch startup and shutdown script
【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题
Screenshot tool snipaste
【cocos creator】点击按钮切换界面
多旅行商问题——公式和求解过程概述
随机推荐
2020-12-12
Go language foundation ----- 02 ----- basic data types and operators
Install cross compiler arm none liunx gnueabihf
Project experience sharing: handwritten Chinese character recognition based on Shengsi mindspire
What is definition? What is a statement? What is the difference between them?
Technical dry goods Shengsi mindspire dynamic transformer with variable sequence length has been released!
PDO and SDO concepts
Go language foundation ------ 12 ------ JSON
【LeetCode】3. Merge two sorted lists · merge two ordered linked lists
STM32F103 SPI (pit Diary)
Wechat applet taro learning record
Redis配置文件
【LeetCode】2. Valid Parentheses·有效的括号
C language learning notes (mind map)
What is a data type? What is the use of data types?
How does yarn link help developers debug NPM packages?
LwIP learning socket (API)
Go language foundation ----- 07 ----- method
[MySQL 12] MySQL 8.0.18 reinitialization
PAT甲级 1027 Colors in Mars