Edit online

CTP 与 LVGL 集成

14 Oct 2024
Read time: 1 minute(s)

关于此任务

本节详细介绍如何将触控屏与 ArtInChip 的 LVGL 图形库对接,确保在 Luban-Lite 平台上顺利运行并验证触控功能。

以 gt911 电容式触控屏为例,详细操作流程如下所示:

过程

  1. 替换触控屏驱动,修改驱动调用,在 packages/artinchip/lvgl-ui/lv_port_disp.clv_port_disp_init() 函数里,将触控屏名称由原设备名改为 gt911
    tpc_run("name", info.width, info.height);       //将 name 改成注册的 CTP 的名字如:gt911
  2. 修改 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