当前位置:网站首页>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;
}
边栏推荐
- Go language foundation ----- 16 ----- goroutine, GPM model
- 【MySQL 12】MySQL 8.0.18 重新初始化
- HDMI2.1与HDMI2.0的区别以及转换PD信号。
- When did you find out that youth was over
- Technical dry goods | thinking about the unification of dynamic and static diagrams of AI framework
- [untitled]
- Shengsi mindspire is upgraded again, the ultimate innovation of deep scientific computing
- Redis查看客户端连接
- How does yarn link help developers debug NPM packages?
- How to clear the console password for s7700 device
猜你喜欢

MAE

VMware virtual machine configuration static IP

多旅行商问题——公式和求解过程概述

Iterm2设置

Install cross compiler arm none liunx gnueabihf

Screenshot tool snipaste

Go language foundation ----- 07 ----- method

Redis批量启停脚本

Docker installs MySQL and successfully uses Navicat connection

Go language foundation ----- 16 ----- goroutine, GPM model
随机推荐
JS common basic case sorting (continuous update)
Screenshot tool snipaste
[at] abc 258G - Triangle 三元组可达-暴力
Go language foundation ------17 ----- channel creation, read-write, security shutdown, multiplexing select
Go language foundation ----- 13 ----- file
jsutlis
Technical dry goods Shengsi mindspire dynamic transformer with variable sequence length has been released!
Redis配置文件
go语言-循环语句
Uniapp learning records
PAT甲级 1031 Hello World for U
EtherCAT state machine transition (ESM)
Go language foundation ----- 03 ----- process control, function, value transfer, reference transfer, defer function
HDMI2.1与HDMI2.0的区别以及转换PD信号。
Go language foundation ------ 14 ------ gotest
Huawei switch console password reset, device initialization, default password
Go language foundation ----- 02 ----- basic data types and operators
Go language foundation ----- 07 ----- method
【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题
Pycharm remote ssh pyenv error: pydev debugger: warning: trying to add breakpoint to file that does