当前位置:网站首页>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;
}
边栏推荐
- HDMI2.1与HDMI2.0的区别以及转换PD信号。
- Screenshot tool snipaste
- Iterm2设置
- 华为交换机:配置telnet和ssh、web访问
- Huawei switch console password reset, device initialization, default password
- 【LeetCode】3. Merge two sorted lists · merge two ordered linked lists
- [at] abc 258G - Triangle 三元组可达-暴力
- OSPF experiment
- Technical dry goods Shengsi mindspire dynamic transformer with variable sequence length has been released!
- PHP common sorting algorithm
猜你喜欢

Analysis of the problems of the 12th Blue Bridge Cup single chip microcomputer provincial competition

Analysis of the problems of the 11th Blue Bridge Cup single chip microcomputer provincial competition

Docker installs MySQL and successfully uses Navicat connection

Robots protocol
![[MySQL 11] how to solve the case sensitive problem of MySQL 8.0.18](/img/9b/db5fe1a37e0de5ba363f9e108310a5.png)
[MySQL 11] how to solve the case sensitive problem of MySQL 8.0.18

PAT甲级 1031 Hello World for U

vcs import src < ros2. Repos failed

UA camouflage, get and post in requests carry parameters to obtain JSON format content

【MySQL 14】使用DBeaver工具远程备份及恢复MySQL数据库(Linux 环境)

Oracle queries grouped by time
随机推荐
【LeetCode】3. Merge Two Sorted Lists·合并两个有序链表
WorldView卫星遥感影像数据/米级分辨率遥感影像
Redis批量启停脚本
华为交换机:配置telnet和ssh、web访问
[at] abc 258G - Triangle 三元組可達-暴力
【cocos creator】获取资源uuid
PAT甲级 1030 Travel Plan
Go language foundation ----- 16 ----- goroutine, GPM model
Technical dry goods | thinking about the unification of dynamic and static diagrams of AI framework
*p++、*++p、++*p、(*p)++
vcs import src < ros2. Repos failed
[untitled]
[at] abc 258G - Triangle 三元组可达-暴力
Pat class a 1031 Hello world for u
Pat class a 1032 sharing
Go language foundation ----- 05 ----- structure
Pat class a 1028 list sorting
haproxy+keepalived搭建01
Iterm2设置
How does yarn link help developers debug NPM packages?