tslib库的移植

本文涉及的产品
文本翻译,文本翻译 100万字符
图片翻译,图片翻译 100张
文档翻译,文档翻译 1千页
简介: tslib库的移植

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;
}


目录
相关文章
|
6月前
交叉编译安装tslib
交叉编译安装tslib
76 0
|
5月前
|
存储 编解码 Ubuntu
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
|
6月前
|
编译器
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
195 0
|
Ubuntu Java 编译器
iMX6 yocto平台QT交叉编译环境搭建
iMX6 yocto平台QT交叉编译环境搭建
270 0
iMX6 yocto平台QT交叉编译环境搭建
|
Unix Linux API
开源库介绍:libusb 及其使用
开源库介绍:libusb 及其使用
4109 0
开源库介绍:libusb 及其使用
|
Linux
freetype库的移植
freetype库的移植
353 0
MDK(keil)工具:如何使用MDK生成bin文件
MDK(keil)工具:如何使用MDK生成bin文件
214 0
MDK(keil)工具:如何使用MDK生成bin文件
|
JSON NoSQL Linux
VS2022OpenCV跨平台Linux CMake项目搭建过程(Jetson nano测试)
VS2022OpenCV跨平台Linux CMake项目搭建过程(Jetson nano测试)
945 0
VS2022OpenCV跨平台Linux CMake项目搭建过程(Jetson nano测试)
|
Linux Windows C语言
移植ffmpeg到VC环境心得
所有想学习ffmpeg的网友有福了,大名鼎鼎的ffmpeg,移植到Windows的VC6版本全部开源,编译环境为VC6+SP5+VCPP5。别忘记了顶贴哦。 移植ffmpeg到windows,主要的修改是ffmpeg中VC6不支持C99语法,简单移植步骤如下: 1:首先装好Linux、VMware和SDL,配置好smb,在Linux下编译通过,验证能正确的Run。
790 0