原作者博客:
LVGL V8.2 嵌入式Linux平台使用tslib实现输入接口(以SSD212为例)-腾讯云开发者社区-腾讯云
如有侵权,请告知删除
一、环境:
硬件:bingpi-M2
二、系统改动
电阻RGB触摸屏坐标在LVGL上运行不正常,但是在QT运行正常,因此记录下LVGL+TSLIB的适配过程。
2.1修改lvgl内容:(网上大佬作品)
lv_drivers/indev/evdev.c , 改为一下内容
#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 ;
}
2.2在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
在dl目录下有tslib的源文件,可以拷贝出来编译,方便路径查找
2.3将可执行文件打包到镜像中
将 lvgl_8.1.0 工程中编译出的可执行文件 lvgl_demo 拷贝到 SDK 的/package/busybox-initbase-files/busybox-init-base-files/opt 目录下(如果没有 opt 目录, 可以新建)
2.4 修改文件, 上电自运行
/target/allwinner/t113-bingpi_m2/busybox-init-base-files/etc/init.d/rc.modules 文件,
在文件最后一行加入 ./opt/lvgl_demo &
然后, 编译 SDK
2.5开机上电 屏幕校准ts_calibrate

812

被折叠的 条评论
为什么被折叠?



