CTP 与 LVGL 集成
14 Oct 2024
Read time: 1 minute(s)
关于此任务
本节详细介绍如何将触控屏与 ArtInChip 的 LVGL 图形库对接,确保在 Luban-Lite 平台上顺利运行并验证触控功能。
以 gt911 电容式触控屏为例,详细操作流程如下所示:
过程
- 替换触控屏驱动,修改驱动调用,在 packages/artinchip/lvgl-ui/lv_port_disp.c
的
lv_port_disp_init()函数里,将触控屏名称由原设备名改为gt911。tpc_run("name", info.width, info.height); //将 name 改成注册的 CTP 的名字如:gt911 - 修改 packages/artinchip/lvgl-ui/lv_tpc_run.c 中关于 CTP
的宏定义,将原有的触控屏宏
AIC_TOUCH_PANEL_ST16XX替换为AIC_TOUCH_PANEL_GT911。确保触控点读取函数名称正确对应。#ifdef AIC_TOUCH_PANEL_ST16XX //替换成 bsp/peripheral/touch/gt911/Kconfig 的宏如:AIC_TOUCH_PANEL_GT911 extern rt_size_t gt911_read_point(struct rt_touch_device *touch, void *buf, rt_size_t read_num); #endif #define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 4096 #define THREAD_TIMESLICE 5 static rt_thread_t gt911_thread = RT_NULL; static rt_sem_t gt911_sem = RT_NULL; static rt_device_t dev = RT_NULL; static struct rt_touch_data *read_data; static struct rt_touch_info info; static void gt911_entry(void *parameter) { rt_device_control(dev, RT_TOUCH_CTRL_GET_INFO, &info); read_data = (struct rt_touch_data *)rt_malloc(sizeof(struct rt_touch_data) * info.point_num); while (1) { rt_sem_take(gt911_sem, RT_WAITING_FOREVER); int num = 0; #ifdef AIC_TOUCH_PANEL_ST16XX //替换成 bsp/peripheral/touch/gt911/Kconfig 的宏如:AIC_TOUCH_PANEL_GT911 num = rt_device_read(dev, 0, read_data, info.point_num); #endif
