LVGL V8.2 嵌入式Linux平台使用tslib实现输入接口(以SSD212为例)

简介: LVGL V8.2 嵌入式Linux平台使用tslib实现输入接口(以SSD212为例)

由于驱动上报的触摸屏坐标没有进行方向翻转,故上报的坐标在屏幕方向是X、Y都反了。但是我不想 改驱动,因此只能在Linux应用上实现坐标转换。tslib对电阻屏的支持是比较好的,而且我的系统里也移植 了tslib相关的库,那么直接拿来用就好了。

1、tslib在文件系统中的配置

640.png

如果想要开机就自动加载tslib环境,则需要在rcS中添加 source /etc/profile ,让环境变量生效,这 样tslib环境在Linux系统启动后,进入文件系统的时候便能够自动将相关的环境变量加载成功。

640.png

2、实现事件初始化和事件读函数
#include "evdev.h"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>
#include "tslib.h"
int evdev_root_x;
int evdev_root_y;
int evdev_button;
struct tsdev *ts;
struct ts_sample samp;
//事件初始化
void evdev_init(void)
{
  //以只读 & 非阻塞的形式打开事件节点
  //调用ts_setup的条件是需要在环境变量中声明TSLIB_TSDEVICE变量
  //否则推荐使用ts_open函数来进行初始化
  ts = ts_setup(NULL, O_RDONLY | O_NONBLOCK);
  if (!ts) {
    perror("ts_setup");
    exit(1);
  }
  evdev_root_x = 0;
  evdev_root_y = 0;
  evdev_button = LV_INDEV_STATE_REL;
}
//读取输入事件
void evdev_read(lv_indev_drv_t * drv, lv_indev_data_t * data)
{
  //当获取到触摸时将读取到的点的坐标以及状态赋值给临时变量
  while(ts_read(ts, &samp, 1) > 0)
  {
    evdev_root_x = samp.x ;
    evdev_root_y = samp.y ;
  }
  if(0 == samp.pressure)
    evdev_button = LV_INDEV_STATE_REL ;
  else
    evdev_button = LV_INDEV_STATE_PR ;
  //将变量注册到LVGL输入设备接口的环境中
  data->point.x = evdev_root_x ;
  data->point.y = evdev_root_y ;
  data->state = evdev_button ;
  //坐标限幅
  if(data->point.x < 0)
     data->point.x = 0;
  if(data->point.y < 0)
     data->point.y = 0;
  if(data->point.x >= drv->disp->driver->hor_res)
     data->point.x = drv->disp->driver->hor_res - 1;
  if(data->point.y >= drv->disp->driver->ver_res)
     data->point.y = drv->disp->driver->ver_res - 1;
  return ;
}

要让LVGL支持输入,我们需要将实现驱动注册,按照文档提示:

640.png

因此在main函数中需要进行如下调用注册输入设备:

evdev_init();
static lv_indev_drv_t indev_drv_1;
lv_indev_drv_init(&indev_drv_1);
indev_drv_1.type = LV_INDEV_TYPE_POINTER; //触摸板或鼠标
indev_drv_1.read_cb = evdev_read;
lv_indev_drv_register(&indev_drv_1);

这时候LVGL的输入设备接口就可以调用tslib的接口来读取触摸事件了。


另外,还需要注意的地方是在Makefile中需要添加tslib的路径:

#
# Makefile
#
CC := arm-linux-gnueabihf-gcc
LVGL_DIR_NAME ?= lvgl
LVGL_DIR ?= ${shell pwd}
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wno-error=missing-prototypes -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=2048 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare -I /home/yw/share/tslib_1.22/include/
LDFLAGS ?= -lm -lts -lpthread -L/home/yangyx/share/tslib_1.22/lib/
BIN = wifi_scan_list
....省略....
....

如上所示,我们需要在LDFLAGS处添加tslib库的路径:

-L/home/yangyx/share/tslib_1.22/lib/

这样才能识别我们在程序中调用的tslib接口。由于我们这个程序是在ARM平台上使用,因此需要根据不同的交叉编译工具链修改,这里我用的是SSD212平台,因此配置为:

CC := arm-linux-gnueabihf-gcc

修改完毕后重新编译程序,再将可执行文件移植到相应的平台上即可使用。目前应用例程还在修改中,后续将会共享到Github或者Gitee,地址将在评论区给出。

640.png

往期精彩

Keil MDK软件包(pack)下载的几种方法


手把手教你在Keil MDK中使用GCC编译器工具链


分享一个在Keil开发环境中配置代码格式化工具Astyle(美化代码风格)


Keil MDK 将升级为 Keil Studio,你想要的黑色主题来了,附手把手使用教程


Keil MDK的一些推荐功能(编码格式、自动保存、代码提示、动态语法检查、多核编译)

目录
相关文章
|
3月前
|
Ubuntu Linux Shell
Linux环境下VSCode快速安装终极指南:debian/ubuntu/linux平台通用
以上就是在Linux环境下安装VSCode的终极指南,抛开繁复的专业词汇,以平易近人的文字、形象生动的比喻让你轻松学会这一过程。别忘了,你的小伙伴VSCode已经在应用菜单里等你了!
807 23
|
4月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
286 41
|
4月前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
151 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
3月前
|
Dart Linux iOS开发
JEB Pro v5.30 (macOS, Linux, Windows) - 逆向工程平台
JEB Pro v5.30 (macOS, Linux, Windows) - 逆向工程平台
199 0
JEB Pro v5.30 (macOS, Linux, Windows) - 逆向工程平台
|
4月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
378 17
|
4月前
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
113 18
|
4月前
|
开发框架 关系型数据库 Java
Linux操作系统中JDK、Tomcat、MySQL的完整安装流程以及J2EE后端接口的部署
然后Tomcat会自动将其解压成一个名为ROOT的文件夹。重启Tomcat,让新“植物”适应新环境。访问http://localhost:8080/yourproject看到你的项目页面,说明“植物”种植成功。
125 10
|
6月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
8月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
446 15
|
9月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
380 13