Linux输入设备应用编程(触摸屏获取坐标信息)

news2024/12/24 8:24:40

上一章学习了开发板外接键盘并获取键盘的的输入

Linux输入设备应用编程(键盘,按键)-CSDN博客

本章编写触摸屏应用程序,获取触摸屏的坐标信息并将其打印出来

一 触摸屏数据分析(触摸,点击,松开)

1.1 硬件须知 

首先在测试触摸屏之前,需要保证开发板上已经连接了LCD屏

使用命令"cat /proc/bus/input/devices",确定触摸屏对应的设备节点(本人将指令封装成了cat_dev),如下所示:  

7寸的LCD屏 红线划的是我LCD的设备名与设备节点

1.2 触摸屏信息分析

执行input文件后,一个手指点击触摸屏后松开,终端将会打印如下信息:  

首先第一行上报了绝对位移事件EV_ABS(type=3)中的ABS_MT_TRACKING_ID(code=57)事件,并且value值等于246,也就是ID,这个ID是一个非负数,所以表示这是一个新的触摸点被创建,也就意味着触摸屏上产生了一个新的触摸点(手指按下)。

第二行上报了绝对位移事件EV_ABS(type=3)中的ABS_MT_POSITION_X(code=53)事件,其value对应的便是触摸点的X坐标;

第三行上报了ABS_MT_POSITION_Y(code=54)事件,其value值对应的便是触摸点Y坐标,所以由此可知该触摸点的坐标为(890, 445)。

第四行上报了按键类事件EV_KEY(type=1)中的BTN_TOUCH(code=330),value值等于1,表示这是触摸屏上最先产生的触摸点(slot=0、也就是触摸点0)。

第五行和第六行分别上报了绝对位移事件EV_ABS(type=3)中的ABS_X(code=0)和ABS_Y(code=1),其value分别对应的是触摸点的X坐标和Y坐标。多点触摸设备也会通过ABS_X、ABS_Y事件上报触摸点的X、Y坐标,但通常只有触摸点0支持,所以可以把多点触摸设备当成单点触摸设备来使用。

第七行上报了同步类事件EV_SYN(type=0)中的SYN_REPORT(code=0)事件,表示此次触摸点的信息全部上报完毕。

第八行当手指松开时,触摸点就会被销毁,上报ABS_MT_TRACKING_ID事件,并将value设置为-1(ID)

第四行上报了按键类事件EV_KEY(type=1)中的BTN_TOUCH(code=330),value值等于0,表示触摸屏上的触摸点销毁

最后一行上报同步事件(type=0、code=0),告知应用层数据完整。

二 触摸屏应用编程

2.1 获取触摸屏的最大同时触点

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>

int main(int argc, char *argv[])
{
    struct input_absinfo info;    //调用 ioctl()会将获取到的信息写入到struct input_absinfo对象
    int fd = -1;
    int max_slots;                            //最大触摸点数

    /* 校验传参 */
    if (2 != argc) {
        fprintf(stderr, "usage: %s <input-dev>\n", argv[0]);
        exit(-1);
    }

    /* 打开文件 */
    if (0 > (fd = open(argv[1], O_RDONLY))) {
        perror("open error");
        exit(-1);
    }

    /* 获取slot信息 */
    if (0 > ioctl(fd, EVIOCGABS(ABS_MT_SLOT), &info)) {
        perror("ioctl error");
        close(fd);
        exit(-1);
    }

    max_slots = info.maximum + 1 - info.minimum;
    printf("max_slots: %d\n", max_slots);

    /* 关闭、退出 */
    close(fd);
    exit(0);
}

 代码写完后,进行交叉编译,通过scp指令将文件发送到开发板上,然后执行input_slot文件

所以从打印结果可知,我们这个屏是一个5点触摸屏。 

2.2  触摸屏单点触点编程

2.3  触摸屏多点触点编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1220360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程控制3——进程程序替换

进程的创建有fork&#xff0c;进程的退出有main函数的return&#xff0c;exit&#xff0c;_exit函数 而进程的退出中&#xff0c;一个进程的退出只能有三种情况&#xff0c;退出成功结果对/不对&#xff0c;或者是运行异常收到信号终止 但是我们发现我们用代码创建的子进程它是…

直击虎牙Q3财报:转身出击,一场应对不确定性的新战事

世界上唯一不变的&#xff0c;就是变化。 今年上半年&#xff0c;中国游戏市场销售仍在同比下降&#xff0c;游戏版号和行业政策都在趋严&#xff0c;游戏直播行业仍有较多不确定因素。延续过去的老路子&#xff0c;挖掘新的增量空间有限。 不过也要看到&#xff0c;行业出现…

geoserver的ECQL查询

ECQL Reference — GeoServer 2.24.x User Manual CQL and ECQL — GeoServer 2.24.x User Manual ECQL是CQL的扩展&#xff0c;类似sql查询&#xff0c;比ogc的xml格式简单&#xff0c;可以应用在wfs和wms查询上。 通过可视化页面查看过滤效果&#xff0c;默认视图 主键不会…

Spring Task单机定时任务(使用及阻塞问题解决)

一、介绍 SpringTask是Spring自主研发的定时任务工具&#xff0c;并且存在于Spring体系中&#xff0c;不需要添加任何依赖 Spring Boot 默认在无任何第三方依赖的情况下使用 spring-context 模块下提供的定时任务工具 Spring Task。 我们只需要使用 EnableScheduling 注解就可…

upload-labs关卡11(双写后缀名绕过)通关思路

文章目录 前言一、回顾前几关知识点二、靶场第十一关通关思路1、看源代码2、bp抓包双写后缀名绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的…

基于springboot实现疫苗接种管理系统项目【项目源码】计算机毕业设计

基于springboot实现疫苗接种管理系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的…

Antv/G2 分组柱状图+折线图双轴图表

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,heightdevice-height"><title>分组柱状图折线图双轴图表</title><styl…

《Effective C++》条款20

宁以pass-by-reference-to-const替换pass-by-value class A { public:A() {cout << "A()" << endl;}A(const A& a){cout << "A(const A& a)" << endl;}~A(){cout << "~A()" << endl;} private:stri…

今天不学习今天写爱心特效HTML代码

效果&#xff1a; 操作过程 首先在桌面创建一个后缀为txt的文件&#xff0c;然后将下面的代码复制进去保存&#xff0c;再将.txt后缀改为html&#xff0c;最后点击这个文件就会出现爱心特效啦~ 具体代码如下&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.…

Ubuntu 下C++数字雨

以前写过一个Window下的数字雨&#xff0c;像黑客帝国里那样的01数字&#xff0c;现在补充一版Linux下的。使用了curses库&#xff0c;安装方法与使用方法参照 Linux下curses函数库的详细介绍_libcurses库-CSDN博客 5-linux学习笔记之-----curses-CSDN博客 效果如下&#xf…

【TEC100TAI-KIT】青翼科技基于复微青龙JFMQL100TAI的全国产化智能异构计算平台

板卡概述 TEC100TAI-KIT是我司自主研制的一款基于上海复旦微电子复微青龙100TAI的全国产智能异构计算平台开发套件&#xff0c;该套件包含1个复微青龙100TAI核心板和1个PCIE规格的扩展底板。 该套件的核心板集成了100TAI的最小系统&#xff0c;包含一颗JFMQL100TAI900片上系统…

手撕【双向链表】带头双向循环(2)

目录 Test.c DList.h DList.c SLInsert SLErase DList.c总代码 顺序表和链表的对比 今天继续再双向循环链表的基础上做修改。 ❓提问&#xff1a;请你在10分钟内写一个带头双向循环链表。 其实我们只要把SLInsert 和 SLErase 写好就大功告成了&#xff01;&#x1f197…

TensorFlow: 框架的自动微分机制

自动微分&#xff08;Automatic differentiation&#xff09;是深度学习框架中的一个关键功能&#xff0c;它为我们提供了一种便捷且高效的方式来求解函数的导数。在TensorFlow中&#xff0c;作为一款流行且强大的机器学习框架&#xff0c;自动微分机制为用户提供了一个方便的方…

004 OpenCV akaze特征点检测匹配

目录 一、环境 二、akaze特征点算法 2.1、基本原理 2.2、实现过程 2.3、实际应用 2.4、优点与不足 三、代码 3.1、数据准备 3.2、完整代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、akaze特征点算法 特征点检测算法…

ctyunos 与 openeuler

ctyunos-2.0.1-220311-aarch64-dvd ctyunos-2.0.1-220329-everything-aarch64-dvd glibc python3 对应openEuler 20.03 LTS SP1

Selenium操作已经打开的Chrome浏览器窗口

Selenium操作已经打开的Chrome浏览器窗口 0. 背景 在使用之前的代码通过selenium操作Chrome浏览器时&#xff0c;每次都要新打开一个窗口&#xff0c;觉得麻烦&#xff0c;所以尝试使用 Selenium 获取已经打开的浏览器窗口&#xff0c;在此记录下过程 本文使用 chrome浏览器来…

Word中NoteExpress不显示的问题

首先确认我们以及安装了word插件 我们打开word却没有。此时我们打开&#xff1a;文件->选项->加载项 我们发现被禁用了 选择【禁用项目】&#xff08;如果没有&#xff0c;试一试【缓慢且禁用的加载项】&#xff09;&#xff0c;点击转到 选择启用 如果没有禁用且没有出…

基于SSM的校园家教兼职信息交流平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

μC/OS-II---消息邮箱管理1(os_mbox.c)

目录 消息邮箱创建消息邮箱删除等待邮箱中的消息向邮箱发送一则消息 消息邮箱创建 OS_EVENT *OSMboxCreate (void *pmsg) {OS_EVENT *pevent; #if OS_CRITICAL_METHOD 3u /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr …

比特币上的人工智能

以感知机为例 人工智能&#xff0c;尤其是机器学习形式的人工智能&#xff0c;最近取得了巨大的进步&#xff0c;应用范围从人脸识别到自动驾驶汽车。我们建议将 AI 与比特币区块链结合起来&#xff0c;以获得许多其他方式无法实现的显着优势&#xff1a; 公开透明&#xff1a…