LuatOS扩展库API——【extp】触摸控制

一、概述

extp 触摸扩展库是 tp 核心库功能的扩展,提供手势识别和触摸事件处理的高级功能。该库在 tp 库获取原始触摸数据的基础上,自动解析为各种手势事件,并通过统一的消息接口发布,简化了触摸应用开发和合宙量产功能板、合宙 LCD 配件板的使用。

1.1 主要特性

  • 支持多种设备和芯片:

  • 合宙量产功能板

    • "Air780EHM_LCD_4"(自带 Air780EHM、3.5 寸 480*320 触摸屏,tf 卡槽)
  • 合宙 LCD 配件板

    • "AirLCD_1010"(对应 Air8000 整机开发板上配套的的显示屏)
    • "AirLCD_1020"(对应 Air8101 核心板上配套的的显示屏)
  • 支持触摸芯片:"gt911"、"cst820"、"gt9157"、"jd9261t"、"ft3x68"

  • 自动识别手势事件:按下瞬间状态、持续移动距离、滑动事件、单击事件、长按事件

  • 可配置的消息发布控制,按需启用/禁用特定事件消息和参数发布

  • 支持滑动和长按阈值自定义,适配不同尺寸屏幕

  • 支持硬件 I2C 和软件 I2C 方式初始化触摸芯片和获取触摸数据

1.2 extp 扩展库使用说明

  1. extp 为扩展库,没有内置到 LuatOS 内核固件中,真实设备使用时需要 require("extp")加载后才能正常调用 extp 的功能。
  2. 触摸初始化应在显示初始化后执行
  3. 合宙量产功能板和合宙 LCD 配件板 + 配套开发板使用,只需配置 tp_model 参数为对应名称即可执行初始化,
  4. 合宙 LCD 配件板在非配套开发板上使用可根据实际接线进行修改,初始化时会优先使用传入参数,没有传入参数再使用默认参数;
  5. 使用本库支持触摸芯片,初始化需要根据接线情况传入 I2C 端口号,触摸中断引脚 GPIO 的 ID,和触摸 IC 复位引脚端口号
  6. 触摸初始化完成后,未使用 extp.set_publish_enabled(msg_type, enabled)接口设置指定消息类型的发布状态,extp 库会默认自动处理触摸数据并通过 sys.publish(``"BASE_TOUCH_EVENT"``, event, param1, param2) 发布全局消息以及携带的事件参数,可以使用等待消息 result, event, param1, param2 =sys.waitUntil("BASE_TOUCH_EVENT", timeout)阻塞当前协程,直到收到指定消息或超时的方式进行触摸事件的接收。
  7. 消息解释可以看第三章节"BASE_TOUCH_EVENT"触摸事件消息常量详解

1.3 触摸事件逻辑说明

  1. 首次按下瞬间会发布携带 TOUCH_DOWN 标志参数的消息,
  2. 按下后不抬手在屏幕上移动,水平移动或垂直移动超过默认滑动判定阈值 45,会锁定滑动方向,并对外发布 MOVE_X 或者 MOVE_Y 的标志参数以及相对于按下坐标的滑动位置,可用于实现在锁定方向上页面跟随手指移动的效果;
  3. 一旦进入移动状态后,触摸屏幕的手指抬起,根据锁定移动的方向上在按抬手坐标相对于按下坐标距离是正还是负数触发 SWIPE_LEFT、SWIPE_RIGHT、SWIPE_UP、SWIPE_DOWN 事件的一种,可用于实现上下左右翻页的效果;
  4. 按下后水平移动或垂直移动没有超过默认滑动判定阈值 45,此时触摸屏幕的手指抬起,从抬起到按下的时间没有超过默认长按判定阈值 500ms,会对外发布 SINGLE_TAP 标志的参数以按下坐标,从抬起到按下的时间超过默认长按判定阈值 500ms,会对外发布 LONG_PRESS 标志的参数以按下坐标,可用于实现点击后执行程序效果;

1.4 注意事项

extp 扩展库所有触摸坐标数据都是基于原始消息 RAW_DATA 中 tp_data 数据进行分析,默认关闭

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/ui/extp;

2.1 硬件 I2C 使用示例

lua 复制代码
-- 加载触摸驱动模块
extp = require "extp"                     

-- 初始化触摸屏
local extp_result = extp.init({tp_model = "Air780EHM_LCD_4"})

if extp_result then
    log.info("触摸屏初始化成功")
else
    log.error("触摸屏初始化失败")
    return
end

-- 演示关闭和打开触摸后是否进行数据解析和发布开关
extp.set_publish_enabled("ALL", false)
extp.set_publish_enabled("SWIPE_UP", true)
extp.set_publish_enabled("TOUCH_DOWN", true)
extp.set_publish_enabled("SWIPE_LEFT", true)
extp.set_publish_enabled("SWIPE_RIGHT", true)
extp.set_publish_enabled("MOVE_X", true)
extp.set_publish_enabled("MOVE_Y", true)
extp.set_publish_enabled("SINGLE_TAP", true)
extp.set_publish_enabled("LONG_PRESS", true)

-- 获取单击消息类型的发布状态
log.info("SINGLE_TAP",extp.get_publish_enable("SINGLE_TAP"))

-- 订阅触摸事件
while true do
    local result, event, param1, param2 = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
    if result then
        if event == "TOUCH_DOWN" then
            log.info("按下事件", "X:", param1, "Y:", param2)
        elseif event == "SWIPE_LEFT" then
            log.info("向左滑动")
        elseif event == "SWIPE_RIGHT" then
            log.info("向右滑动")
        elseif event == "MOVE_X" then
            log.info("水平移动", "距离:", param1)
        elseif event == "MOVE_Y" then
            log.info("垂直移动", "距离:", param2)
        elseif event == "SINGLE_TAP" then
            log.info("单击", "X:", param1, "Y:", param2)
        elseif event == "LONG_PRESS" then
            log.info("长按", "X:", param1, "Y:", param2)
        end
    end
    -- 主动刷新数据到屏幕
    lcd.flush()
end

2.2 软件 I2C 使用示例

lua 复制代码
-- 加载触摸驱动模块
extp = require "extp"  

-- 创建软件I2C对象
local softI2C = i2c.createSoft(0, 1)  -- SCL=20, SDA=21

-- 初始化触摸屏
local extp_result = extp.init({
    tp_model = "AirLCD_1020", 
    i2c_id = softI2C, 
    pin_rst = 28, 
    pin_int = 7
})

if extp_result then
    log.info("触摸屏初始化成功")
else
    log.error("触摸屏初始化失败")
    return
end

-- 订阅触摸事件
while true do
    local result, event, param1, param2 = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
    if result then
        if event == "TOUCH_DOWN" then
            log.info("按下事件", "X:", param1, "Y:", param2)
        elseif event == "SWIPE_LEFT" then
            log.info("向左滑动")
        elseif event == "SWIPE_RIGHT" then
            log.info("向右滑动")
        elseif event == "MOVE_X" then
            log.info("水平移动", "距离:", param1)
        elseif event == "MOVE_Y" then
            log.info("垂直移动", "距离:", param2)
        elseif event == "SINGLE_TAP" then
            log.info("单击", "X:", param1, "Y:", param2)
        elseif event == "LONG_PRESS" then
            log.info("长按", "X:", param1, "Y:", param2)
        end
    end
    -- 主动刷新数据到屏幕
    lcd.flush()
end

sys.taskInit(ui_main)

2.3 效果演示(对应:2.1 硬件 I2C 使用示例)

lua 复制代码
[2025-10-13 17:33:33.403][000000000.908] I/gt911 TP find device GT911 ,address:0x14
[2025-10-13 17:33:33.410][000000000.958] I/user.extp 所有消息发布 禁用
[2025-10-13 17:33:33.416][000000000.958] I/user.extp SWIPE_UP 消息发布 启用
[2025-10-13 17:33:33.424][000000000.959] I/user.extp TOUCH_DOWN 消息发布 启用
[2025-10-13 17:33:33.430][000000000.959] I/user.extp SWIPE_LEFT 消息发布 启用
[2025-10-13 17:33:33.439][000000000.959] I/user.extp SWIPE_RIGHT 消息发布 启用
[2025-10-13 17:33:33.446][000000000.960] I/user.extp MOVE_X 消息发布 启用
[2025-10-13 17:33:33.455][000000000.960] I/user.extp MOVE_Y 消息发布 启用
[2025-10-13 17:33:33.462][000000000.960] I/user.extp SINGLE_TAP 消息发布 启用
[2025-10-13 17:33:33.469][000000000.960] I/user.extp LONG_PRESS 消息发布 启用
[2025-10-13 17:33:33.476][000000000.961] I/user.SINGLE_TAP true
[2025-10-13 17:33:37.206][000000004.980] I/user.按下事件 X: 175 Y: 213
[2025-10-13 17:33:37.502][000000005.276] I/user.单击 X: 175 Y: 213
[2025-10-13 17:33:38.362][000000006.127] I/user.按下事件 X: 183 Y: 222
[2025-10-13 17:33:39.464][000000007.230] I/user.长按 X: 183 Y: 222
[2025-10-13 17:33:40.180][000000007.954] I/user.按下事件 X: 136 Y: 190
[2025-10-13 17:33:40.334][000000008.102] I/user.水平移动 距离: 139
[2025-10-13 17:33:40.338][000000008.112] I/user.向右滑动
[2025-10-13 17:33:40.813][000000008.580] I/user.按下事件 X: 302 Y: 248
[2025-10-13 17:33:41.017][000000008.792] I/user.水平移动 距离: -127
[2025-10-13 17:33:41.023][000000008.802] I/user.向左滑动
[2025-10-13 17:33:41.390][000000009.164] I/user.按下事件 X: 229 Y: 306
[2025-10-13 17:33:41.529][000000009.302] I/user.垂直移动 距离: -132
[2025-10-13 17:33:41.885][000000009.653] I/user.按下事件 X: 237 Y: 131
[2025-10-13 17:33:42.024][000000009.791] I/user.垂直移动 距离: 192

三、"BASE_TOUCH_EVENT"触摸事件消息常量详解

扩展库常量,顾名思义是由合宙 LuatOS 扩展库中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;

  1. extp 扩展库发出的触摸解析事件和参数,可以使用 sys.waitUntil 订阅接收然后进一步使用。 其格式为:result, event, param1, param2 =sys.waitUntil("BASE_TOUCH_EVENT", timeout))

  2. "BASE_TOUCH_EVENT"为订阅 extp 库触摸事件的参数的标志

  3. result 如果为 true 表示收到消息,false 表示超时,timeout(可选 )为设置的超时时间,单位 ms

  4. event 为事件类型

  5. param1 和 param2 为事件类型携带的参数

  6. event,param1,param2 固定搭配,event 包含以下常量

3.1 RAW_DATA

lua 复制代码
参数含义:原始触摸数据事件,tp_device为触摸设备对象,无实际用途,tp_data为原始触摸数据表;
数据类型:string;
是否必选:常量,默认关闭该消息,可选使用extp.set_publish_enabled(msg_type, enabled)接口打开;
注意事项:每次触摸芯片上报数据时发布,所有触摸判定的原始数据,数据量最大,不做解析可以选择关闭;        
取值范围:tp_data中最多包含10个子表,tp_data[1]、tp_data[2]、
        tp_data[3]......tp_data[10],也就最多支持触摸芯片同时上报10个触摸点的数据,
        每个子表中包含event、x、y、timestamp四个参数,每个参数说明如下:
        {
            参数含义:返回的触摸事件类型
            数据类型:number
            取值范围:tp.EVENT_NONE  空事件,不应出现,
                     tp.EVENT_DOWN  按下,
                     tp.EVENT_UP   抬起,
                     tp.EVENT_MOVE  移动,
            注意事项:无
            event  = ,

            参数含义:返回触摸点数的x坐标
            数据类型:number
            取值范围:0到屏幕宽度
            注意事项:获取的坐标都是正整数,
                     同样使用该坐标计算产生的结果用于显示也必须是整数,
                     假设时用了产生了非整数,应该使用math.floor()向下取整后再使用,
                     否则会报错重启。
            x  = ,

            参数含义:返回触摸点数的y坐标
            数据类型:number
            取值范围:0到屏幕高度
            注意事项:获取的坐标都是正整数,
                     同样使用该坐标计算产生的结果用于显示也必须是整数,
                     假设时用了产生了非整数,应该使用math.floor()向下取整后再使用,
                     否则会报错重启。
            y  = ,

            参数含义:返回触摸时对应的时间戳,单位ms,从系统运行开始计算
            数据类型:number
            取值范围:number
            注意事项:该数值大小如果是32位系统,最大为2的32次方,换算下来不超过25天,
                     如果系统长时间不断电运行,又需要判断按压时间,
                     可以使用mcu.ticks2(1)返回的第二个参数来作为触摸时间判断依据;
            timestamp = ,
        } 
参数示例:
        local result, event, param1, param2 = sys.waitUntil("BASE_TOUCH_EVENT", 1000)

        if result and event == "RAW_DATA" then
            log.info("原始触摸数据", param2[1].event, param2[1].x, param2[1].y)
        end

3.2 TOUCH_DOWN

lua 复制代码
参数含义:按下瞬间事件,param1为按下位置的X坐标,param2为按下位置的Y坐标;;
数据类型:string;
是否必选:常量,默认关闭该消息,可选使用extp.set_publish_enabled(msg_type, enabled)接口打开;
注意事项:手指初次接触触摸屏时发布;
参数示例:
        local result, event, x, y = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "TOUCH_DOWN" then
            log.info("按下事件", "X:", x, "Y:", y)
        end

3.3 MOVE_X

lua 复制代码
参数含义:水平移动事件,param1为水平移动距离(正数向右,负数向左),param2为0;
数据类型:string;
是否必选:常量,默认关闭该消息,可选使用extp.set_publish_enabled(msg_type, enabled)接口打开;
注意事项:在按下状态下检测到水平移动超过阈值时发布;
参数示例:
        local result, event, moveX, zero = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "MOVE_X" then
            log.info("水平移动", "距离:", moveX)
        end

3.4 MOVE_Y

lua 复制代码
参数含义:垂直移动事件,param1为0,param2为垂直移动距离(正数向下,负数向上);
数据类型:string;
是否必选:常量,默认关闭该消息,可选使用extp.set_publish_enabled(msg_type, enabled)接口打开;
注意事项:在按下状态下检测到垂直移动超过阈值时发布;
参数示例:
        local result, event, zero, moveY = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "MOVE_Y" then
            log.info("垂直移动", "距离:", moveY)
        end

3.5 SWIPE_LEFT

lua 复制代码
参数含义:向左滑动事件,param1为向左滑动距离,param2为0;
数据类型:string;
是否必选:常量,可选使用;
注意事项:抬手时检测到向左滑动超过阈值时发布;
参数示例:
        local result, event, moveX, zero = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "SWIPE_LEFT" then
            log.info("向左滑动", "距离:", moveX)
        end

3.6 SWIPE_RIGHT

lua 复制代码
参数含义:向右滑动事件,param1为向右滑动距离,param2为0;
数据类型:string;
是否必选:常量,可选使用;
注意事项:抬手时检测到向右滑动超过阈值时发布;
参数示例:
        local result, event, moveX, zero = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "SWIPE_RIGHT" then
            log.info("向右滑动", "距离:", moveX)
        end

3.7 SWIPE_UP

lua 复制代码
参数含义:向上滑动事件,param1为0,param2为向上滑动距离;
数据类型:string;
是否必选:常量,可选使用;
注意事项:抬手时检测到向上滑动超过阈值时发布;
参数示例:
        local result, event, zero, moveY = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "SWIPE_UP" then
            log.info("向上滑动", "距离:", moveY)
        end

3.8 SWIPE_DOWN

lua 复制代码
参数含义:向下滑动事件,param1为0,param2为向下滑动距离;
数据类型:string;
是否必选:常量,可选使用;
注意事项:抬手时检测到向下滑动超过阈值时发布;
参数示例:
        local result, event, zero, moveY = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "SWIPE_DOWN" then
            log.info("向下滑动", "距离:", moveY)
        end

3.9 SINGLE_TAP

lua 复制代码
参数含义:单击事件,param1为点击位置的X坐标,param2为点击位置的Y坐标;
数据类型:string;
是否必选:常量,可选使用;
注意事项:抬手时检测到按下时间小于长按阈值且移动距离小于滑动阈值时发布;
参数示例:
        local result, event, x, y = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "SINGLE_TAP" then
            log.info("单击事件", "X:", x, "Y:", y)
        end

3.10 LONG_PRESS

lua 复制代码
参数含义:长按事件,param1为长按位置的X坐标,param2为长按位置的Y坐标;
数据类型:string;
是否必选:常量,可选使用;
注意事项:抬手时检测到按下时间大于等于长按阈值且移动距离小于滑动阈值时发布;
参数示例:
        local result, event, x, y = sys.waitUntil("BASE_TOUCH_EVENT", 1000)
        if result and event == "LONG_PRESS" then
            log.info("长按事件", "X:", x, "Y:", y)
        end

四、函数详解

4.1 extp.init(param)

功能

初始化触摸设备,配置相应的触摸芯片参数。初始化成功后,触摸操作会自动转换为对应的手势事件,通过 sys.publish("BASE_TOUCH_EVENT", event, param1, param2) 发布。

参数

param

lua 复制代码
> 参数含义:触摸芯片配置参数表,参数说明如下:  
> {  
> 参数含义:触摸芯片型号  
> 数据类型:string  
> 是否必选:是  
> 取值范围:分为三大类,当tp\_model是配件板且搭配配套的开发板使用或者量产功能板时,  
> 只需要传入tp\_model参数  
> 1、合宙LCD配件板  
> "AirLCD\_1010"(对应Air8000整机开发板上配套的的显示屏)  
> "AirLCD\_1020"(对应Air8101核心板上配套的的显示屏)  
> 2、合宙量产功能板  
> "Air780EHM\_LCD\_4"(自带3.5寸480\*320触摸屏,矢量字库,tf卡槽)  
> 3、支持触摸IC型号  
> "gt911"、"cst820"、"gt9157"、"jd9261t"、"ft3x68"  
> 注意事项:必须使用支持的型号,否则初始化失败  
> 参数示例:tp\_model = "Air780EHM\_LCD\_4"  
> 参数名称: param.tp\_model
> 
> 参数含义:I2C通信端口,可以是硬件I2C端口号(number类型)或软件I2C对象(userdata类型)  
> 数据类型:number类型或userdata类型  
> 是否必选:是  
> 取值范围:有效的硬件I2C端口号或由i2c.createSoft创建的软件I2C对象  
> 注意事项:需要先使用i2c.setup初始化对应的I2C总线;  
> 如果不知道所接引脚对应是哪个GPIO,可以查看对应型号的引脚(管脚)复用表,  
> 或者可以使用[LuatIO引脚复用配置工具](https://docs.openluat.com/air780epm/common/luatio/),参照说明查看对应型号的管脚默认定义;  
> 参数示例:i2c\_id = 1(硬件I2C端口1)或i2c\_id = i2c.createSoft(20, 21)(软件I2C对象)  
> 参数名称: param.i2c\_id
> 
> 参数含义:触摸芯片复位引脚GPIO的ID  
> 数据类型:number  
> 是否必选:是  
> 取值范围:有效的GPIO的ID,若屏幕实际未引出触摸芯片RST引脚,  
> 则可以写成255一个不存在的且符合number类型的引脚;  
> 注意事项:引脚需要正确连接到触摸芯片的复位引脚  
> 参数示例:pin\_rst = 20  
> 参数名称: param.pin\_rst
> 
> 参数含义:触摸芯片中断输入到SOC的引脚  
> 数据类型:number  
> 是否必选:是  
> 取值范围:支持设置为输入模式的GPIO的ID和gpio.WEKEUP引脚  
> 注意事项:引脚需要正确连接到触摸芯片的中断输出引脚  
> 参数示例:pin\_int = 22  
> 参数名称: param.pin\_int
> 
> 参数含义:屏幕宽度像素值  
> 数据类型:number  
> 是否必选:否  
> 取值范围:大于0的整数,省略此参数则默认值自动从已初始化的LCD获取,  
> 注意事项:填非正整数会报错重启  
> 参数示例:320  
> 参数名称: param.w
> 
> 参数含义:屏幕高度像素值  
> 数据类型:number  
> 是否必选:否  
> 取值范围:大于0的整数,省略此参数则默认值自动从已初始化的LCD获取,  
> 注意事项:填非正整数会报错重启  
> 参数示例:240  
> 参数名称: param.h  
> }
> 
> 数据类型:table  
> 取值范围:参数含义中规定的参数  
> 是否必选:是  
> 注意事项:暂无  

返回值

local extpinit_result = extp.init(param)

extpinit_result

lua 复制代码
含义说明:返回初始化结果
数据类型:boolean
取值范围:初始化成功返回true,初始化失败返回false
注意事项:无
返回示例:local extpinit_result = extp.init(param)
         log.info("extpinit_result ", extpinit_result)
         成功会打印:true
         失败会打印:false

示例 1 LCD 配件板 + 默认参数

lua 复制代码
-- AirLCD_1010搭配Air8000整机开发板初始化
extp.init({tp_model = "AirLCD_1010"})

-- AirLCD_1020搭配Air8101核心板初始化
extp.init({tp_model =  "AirLCD_1020"})

--也可以只传型号,或部分覆盖参数
extp.init({tp_model = "AirLCD_1020",pin_int = 22 }) -- 更改中断触发引脚

示例 2 LCD 配件板 + 自定义参数,示例为 extp 扩展库内默认参数

AirLCD_1010搭配Air8000整机开发板,自定义参数初始化

lua 复制代码
extp.init(
    {
        tp_model = "AirLCD_1010", -- LCD型号
        i2c_id = 0,
        pin_rst = 255,
        pin_int = gpio.WAKEUP0
    }
)

AirLCD_1020搭配Air8101核心板,自定义参数初始化

lua 复制代码
extp.init(
    {
        tp_model = "AirLCD_1020", -- LCD型号
        i2c_id = i2c.createSoft(0, 1),
        pin_rst = 28,
        pin_int = 7
    }
)

示例 3 LCD 量产功能板,不支持修改默认参数

lua 复制代码
-- 初始化触摸屏
local result = extp.init({tp_model = "Air780EHM_LCD_4"})

if result then
    log.info("触摸屏初始化成功")
else
    log.error("触摸屏初始化失败")
end

示例 4 驱动 ic 型号

lua 复制代码
-- 初始化extp所支持的驱动IC"gt911"
extp.init(
    {
        tp_model = "gt911", -- LCD型号
        i2c_id = 0,
        pin_rst = 28,
        pin_int = 20
    }
)

4.2 extp.set_publish_enabled(msg_type, enabled)

功能

设置指定消息类型的发布状态,控制是否发布特定类型的触摸事件;

注意事项

  • 默认打开发布状态事件有:

  • SINGLE_TAP -- 单击

  • LONG_PRESS -- 长按

  • 默认关闭发布状态事件有:

  • SWIPE_LEFT -- 向左滑动

  • SWIPE_RIGHT -- 向右滑动

  • SWIPE_UP -- 向上滑动

  • SWIPE_DOWN -- 向下滑动

  • TOUCH_DOWN -- 按下事件

  • MOVE_X -- 水平移动

  • MOVE_Y -- 垂直移动

  • RAW_DATA -- 原始触摸数据

参数

msg_type

lua 复制代码
参数含义:消息类型
数据类型:string
是否必选:是
取值范围:"RAW_DATA"、"TOUCH_DOWN"、"MOVE_X"、"MOVE_Y"、"SWIPE_LEFT"、"SWIPE_RIGHT"、
         "SWIPE_UP"、"SWIPE_DOWN"、"SINGLE_TAP"、"LONG_PRESS"、"ALL"
注意事项:"ALL"表示设置所有消息类型的发布状态
参数示例:"MOVE_X"

enabled

lua 复制代码
参数含义:是否启用发布
数据类型:boolean
是否必选:是
取值范围:true表示启用发布,false表示禁用发布
注意事项:设置后会立即生效
参数示例:true

返回值

local set_result = extp.set_publish_enabled(msg_type, enabled)

set_result

lua 复制代码
含义说明:返回操作结果
数据类型:boolean
取值范围:操作成功返回true,操作失败返回false
注意事项:当msg_type为未知类型时返回false
返回示例:local set_result = extp.set_publish_enabled("MOVE_X", true)
         log.info("set_result ", set_result)
         成功会打印:true
         失败会打印:false

示例

lua 复制代码
-- 初始化触摸屏后,禁用不需要的事件
extp.set_publish_enabled("RAW_DATA", false)  -- 通常不需要原始数据
extp.set_publish_enabled("MOVE_X", false)    -- 如果不需要实时移动跟踪
extp.set_publish_enabled("MOVE_Y", false)    -- 如果不需要实时移动跟踪

-- 可以按需启用
extp.set_publish_enabled("ALL", false)  -- 先禁用所有
extp.set_publish_enabled("TOUCH_DOWN", true)
extp.set_publish_enabled("SINGLE_TAP", true)
extp.set_publish_enabled("LONG_PRESS", true)

4.3 extp.get_publish_enable(msg_type)

功能

获取指定消息类型的发布状态或所有消息类型的发布状态。

参数

msg_type

lua 复制代码
参数含义:消息类型
数据类型:string或nil
是否必选:否
取值范围:当为具体消息类型时,取值范围同set_publish_enabled;当为nil时表示获取所有消息状态
注意事项:如果传入nil,则返回所有消息类型的发布状态表
参数示例:nil 或 "MOVE_X"

返回值

local get_result = extp.get_publish_enable(msg_type)

get_result

lua 复制代码
含义说明:返回发布状态
数据类型:boolean或table
取值范围:
         当msg_type为具体消息类型时:返回该消息类型的发布状态(true/false)
         当msg_type为nil时:返回所有消息类型的发布状态表
         当msg_type无效时:返回false
注意事项:返回表包含所有消息类型的启用状态
返回示例: 
        -- 获取单个状态
        local single_tap_status = extp.get_publish_enable("SINGLE_TAP")
        log.info("SINGLE_TAP:", single_tap_status and "启用" or "禁用")

        -- 获取所有状态表
        local all_status = extp.get_publish_enable("ALL")
        -- 遍历表查看具体状态
        for msg_type, enabled in pairs(all_status) do
            log.info(string.format("%-12s: %s", msg_type, enabled and "启用" or "禁用"))
        end

示例

lua 复制代码
-- 获取单个状态
local single_tap_status = extp.get_publish_enable("SINGLE_TAP")
log.info("SINGLE_TAP:", single_tap_status and "启用" or "禁用")


-- 获取所有状态表
local all_status = extp.get_publish_enable("ALL")
-- 遍历表查看具体状态
for msg_type, enabled in pairs(all_status) do
    log.info(string.format("%-12s: %s", msg_type, enabled and "启用" or "禁用"))
end

4.4 extp.set_swipe_threshold(threshold)

功能

设置滑动判定阈值,用于确定何时将触摸移动识别为滑动事件,默认水平或垂直方向首次滑动超过 45 像素判定为滑动。

参数

threshold

lua 复制代码
参数含义:滑动判定阈值
数据类型:number
是否必选:是
取值范围:必须大于0的数值,单位像素
注意事项:阈值设置过小可能导致过于灵敏,过大可能导致滑动延时
         可以设置为(屏幕横向分辨率/屏幕横向长度,单位mm)*7
参数示例:45

返回值

local set_result = extp.set_swipe_threshold(threshold)

set_result

lua 复制代码
含义说明:返回操作结果
数据类型:boolean
取值范围:操作成功返回true,操作失败返回false
注意事项:当threshold不是正数时返回false
返回示例:local set_result = extp.set_swipe_threshold(30)
         log.info("set_result ", set_result)
         成功会打印:true
         失败会打印:false

示例

lua 复制代码
-- 设置滑动判定阈值为30像素
local success = extp.set_swipe_threshold(30)
if success then
    log.info("滑动阈值设置成功")
else
    log.error("滑动阈值设置失败")
end

4.5 extp.set_long_press_threshold(threshold)

功能

设置长按判定阈值,用于区分抬手后点击事件是单击还是长按。默认值是 500ms,在未触发滑动判定的情况下(手指按下后移动距离未超过设置滑动判定阈值),按下至抬起时间小于等于设置阈值判定为单击事件,大于设置阈值判定为长按事件。

参数

threshold

lua 复制代码
参数含义:长按判定阈值
数据类型:number
是否必选:是
取值范围:必须大于0的数值,单位毫秒
注意事项:阈值设置过小可能导致长按被误识别为单击,过大可能导致用户体验不佳
参数示例:500

返回值

local set_result = extp.set_long_press_threshold(threshold)

set_result

lua 复制代码
含义说明:返回操作结果
数据类型:boolean
取值范围:操作成功返回true,操作失败返回false
注意事项:当threshold不是正数时返回false
返回示例:local set_result = extp.set_long_press_threshold(800)
         log.info("set_result ", set_result)
         成功会打印:true
         失败会打印:false

示例

lua 复制代码
-- 设置长按判定阈值为800毫秒
local set_result = extp.set_long_press_threshold(800)
if set_result then
    log.info("长按阈值设置成功")
else
    log.error("长按阈值设置失败")
end

五、产品支持说明

extp 触摸扩展库支持所有搭载兼容触摸芯片的 LuatOS 产品,可以查看选型手册对应型号及所使用的固件是否支持 tp 库。

支持型号

  • 量产功能板

  • "Air780EHM_LCD_4"(自带 Air780EHM、3.5 寸 480*320 触摸屏,tf 卡槽)

  • LCD 配件板

  • "AirLCD_1010"(对应 Air8000 整机开发板上配套的的显示屏)

  • "AirLCD_1020"(对应 Air8101 核心板上配套的的显示屏)

  • 支持触摸芯片:"gt911"、"cst820"、"gt9157"、"jd9261t"

硬件要求

  • 支持 I2C 通信接口,且触摸芯片正确连接到 I2C 总线
  • 需要复位引脚和中断引脚

今天就分享到这里啦~~~

相关推荐
电子科技圈2 小时前
芯科科技2026 Tech Talks技术讲座启航聚焦无线与边缘 AI,共绘智能物联新蓝图
人工智能·嵌入式硬件·mcu·物联网·智能家居·智能硬件·iot
三佛科技-134163842122 小时前
智能宠物净味器方案开发--基于FT62EC23-RB国产单片机方案
单片机·嵌入式硬件·宠物
v132665623683 小时前
博通集成:BK7239N 双频wifi6 超低功耗 iot芯片
嵌入式硬件·物联网·iot·双频wifi
768dh3 小时前
TL431+光耦反馈电路
单片机·嵌入式硬件
胡楚昊3 小时前
IOT漏洞挖掘初体验-Tenda A15
物联网
ShiMetaPi3 小时前
NeurIPS 2024 | 丝滑视觉新极限:EPA 框架利用事件相机突破插帧伪影瓶颈
人工智能·嵌入式硬件·计算机视觉·自动驾驶·事件相机·evs
北京耐用通信3 小时前
破局工业通讯壁垒!耐达讯自动化EtherCAT转RS232网关,老设备焕新核心桥梁
服务器·网络·人工智能·科技·物联网·网络协议·自动化
水云桐程序员3 小时前
LED电路的设计原理
单片机·嵌入式硬件
charlie1145141913 小时前
嵌入式现代C++教程实战篇第12篇:C宏时代的LED驱动 —— 能跑但不优雅
c语言·c++·stm32·单片机·嵌入式硬件·c