LV17-01-输入类设备-04-触摸屏应用开发实例
本文主要是输入类设备控制——触摸屏设备应用开发实例的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
PC端开发环境 | Windows | Windows11 |
Ubuntu | Ubuntu20.04.2的64位版本 | |
VMware® Workstation 17 Pro | 17.6.0 build-24238078 | |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) | |
Win32DiskImager | Win32DiskImager v1.0 | |
Linux开发板环境 | Linux开发板 | 正点原子 i.MX6ULL Linux 阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) | |
linux内核 | linux-4.15(NXP官方提供) |
点击查看本文参考资料
分类 | 网址 | 说明 |
官方网站 | https://www.arm.com/ | ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档 |
https://www.nxp.com.cn/ | NXP官方网站 | |
https://www.nxpic.org.cn/ | NXP 官方社区 | |
https://u-boot.readthedocs.io/en/latest/ | u-boot官网 | |
https://www.kernel.org/ | linux内核官网 | |
其他网站 | kernel - Linux source code (v4.15) - Bootlin | linux内核源码在线查看 |
点击查看相关文件下载
分类 | 网址 | 说明 |
NXP | https://github.com/nxp-imx | NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库 |
https://elixir.bootlin.com/linux/latest/source | 在线阅读linux kernel源码 | |
nxp-imx/linux-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga | NXP linux内核仓库tags中的rel_imx_4.1.15_2.1.0_ga | |
nxp-imx/uboot-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga | NXP u-boot仓库tags中的rel_imx_4.1.15_2.1.0_ga | |
I.MX6ULL | i.MX 6ULL Applications Processors for Industrial Products | I.MX6ULL 芯片手册(datasheet,可以在线查看) |
i.MX 6ULL Applications ProcessorReference Manual | I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网) |
一、获取触摸屏点数
1. 代码编写
1 | /** ===================================================== |
2. 开发板测试
可以看到这个是一个5点的触摸屏。
二、单点触摸
这里我的触摸屏好像并不会上报按下的这个事件,所以流程与多点触摸一致了,直接看多点触摸的实例。
三、多点触摸
1. 代码编写
1 |
|
示例代码中定义了 struct ts_mt 数据结构,用于描述多点触摸情况下每一个触摸点的信息。
首先来看下 main()函数,定义了 max|_slots 变量,用于指定触摸屏设备的支持的最大触摸点数,通过:
1 | ioctl(fd, EVIOCGABS(ABS_MT_SLOT), &slot) |
获取到触摸屏该信息。
接着根据 max_slots 变量的值,为 mt 指针申请内存:
1 | mt = calloc(max_slots, sizeof(struct ts_mt)); |
while循环中调用 ts_read()函数,该函数是自定义函数,用于获取触摸屏上报的数据, 第一个参数表示文件描述符 fd、第二个参数表示触摸屏支持的最大触摸点数、第三个参数则是 struct ts_mt 数组, ts_read()函数会将获取到的数据存放在数组中, mt[0]表示 slot<0>数据、 mt[1]表示 slot<1>的数据依次类推。
在内部的 for 循环中,则对获取到的数据进行分析,判断数据是否有效,并根据 id 判断手指的动作,在单点触摸应用程序中,我们是通过 BTN_TOUCH 事件来判断手指的动作;而在多点触摸应用中,我们需要通过 id 来判断多个手指的动作。
2. 开发板测试
我们编译后执行,然后多个手指按下的时候会有如下打印:
上图是按下和移动的打印信息,当手指拿开的时候如下: