tslib库的移植

本文涉及的产品
文本翻译,文本翻译 100万字符
语种识别,语种识别 100万字符
图片翻译,图片翻译 100张
简介: 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;
}


目录
相关文章
|
5月前
|
存储 编解码 Ubuntu
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
【QT】linux下alsa库的移植和QT中音视频的处理&笔记
|
6月前
|
编译器
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
182 0
|
6月前
交叉编译libvisca库ARM版本
交叉编译libvisca库ARM版本
87 0
|
Ubuntu Java 编译器
iMX6 yocto平台QT交叉编译环境搭建
iMX6 yocto平台QT交叉编译环境搭建
259 0
iMX6 yocto平台QT交叉编译环境搭建
|
Linux
freetype库的移植
freetype库的移植
344 0
|
JSON NoSQL Linux
VS2022OpenCV跨平台Linux CMake项目搭建过程(Jetson nano测试)
VS2022OpenCV跨平台Linux CMake项目搭建过程(Jetson nano测试)
914 0
VS2022OpenCV跨平台Linux CMake项目搭建过程(Jetson nano测试)
|
编解码 算法 安全
Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
|
Linux
Linux qtcreator编程实现动态加载动态链接库
Linux qtcreator编程实现动态加载动态链接库
477 0