【应用开发三】 input子系统介绍

news2024/9/20 20:46:38

文章目录

  • 1 名词解释
  • 2 输入设备编程框架
    • 2.1 input子系统
    • 2.2 读取数据流程
    • 2.3 input_event结构体
      • 2.3.1 type(哪类事件)
      • 2.2 code(具体事件)
      • 2.3 value(数值)
    • 2.4 数据同步
    • 2.5 读取start input_event数据

1 名词解释

1)输入设备:能够产生输入时间的设备,例如鼠标、键盘、触摸屏等
2)input子系统:用于统一管理linux中所有输入设备的框架。

2 输入设备编程框架

2.1 input子系统

上面介绍input子系统是一套统一的输入设备框架。驱动开发人员基于input子系统开发设备驱动,input子系统可以屏蔽硬件差异,向应用层提供统一接口。
基于input子系统注册成功的输入设备,都会在/dev/input目录下生成对应的设备节点,设备节点名称通常为eventX(X为数字编号0、1等)。具体那个设备对应那个编号需要查找。

确定设备文件
使用od命令

sudo od -x /dev/input/eventX

2.2 读取数据流程

1)打开设备文件(/dev/input/eventX
2)读数据(read
3)数据解析

  1. 打开设备文件
    使用open函数 打开设备文件,操作类型为O_RDONLY
  2. 读取数据
    数据读取时会有两种情况,一个是有数据,一个是没有数据。
    当有数据可读取的时候,应用程序会被唤醒,读操作获取数据返回;
    当没有数据可读的时候,程序会进入休眠模式(阻塞I/O情况下)
  3. 解析数据
    读取到的数据会放在input_event类型的结构体中,该结构体定义在<linux/input.h>头文件中,结构体成员变量以及具体解析形式在下面介绍。

2.3 input_event结构体

struct input_event {
	struct timeval time;	// 事件上报事件
	__u16 type;				// 事件类型
	__u16 code;				// 该类事件的具体事件
	__u16 value;			// 事件值
}

2.3.1 type(哪类事件)

type用于描述输入事件属于哪类事件,例如按键类(键盘),位移类(鼠标)等,具体类型如下表所示:

数值含义
EV_SYN0x00同步类型事件
EV_KEY0x01按键类事件
EV_REL0x02相对位移事件
EV_ABS0x03绝对位移事件
EV_MSC0x04其他事件
EV_SW0x05
EV_LED0x11
EV_SND0x12
EV_REP0x14
EV_FF0x15
EV_PWR0x16
EV_FF_STATUS0x17
EV_MAX0x1f
EV_CNTEV_MAX + 1

2.2 code(具体事件)

code表示该类事件中的哪一个具体事件,type中的每中类型事件都包含一系列的具体事件,例如按键类,就包含A、B、C、D等具体事件。
按键类事件

#define KEY_RESERVED 0
#define KEY_ESC 1 //ESC 键
#define KEY_1 2 //数字 1 键
#define KEY_2 3 //数字 2 键
#define KEY_TAB 15 //TAB 键
#define KEY_Q 16 //字母 Q 键
#define KEY_W 17 //字母 W 键
#define KEY_E 18 //字母 E 键
#define KEY_R 19 //字母 R 键
……

相对位移事件

#define REL_X 0x00 //X 轴
#define REL_Y 0x01 //Y 轴
#define REL_Z 0x02 //Z 轴
#define REL_RX 0x03
#define REL_RY 0x04
#define REL_RZ 0x05
#define REL_HWHEEL 0x06
#define REL_DIAL 0x07
#define REL_WHEEL 0x08
#define REL_MISC 0x09
#define REL_MAX 0x0f
#define REL_CNT (REL_MAX+1)

绝对位移事件
触摸屏设备是一种绝对位移设备,产生绝对位移事件,对于触摸屏来说,一个触摸点所包含的信息有很多中,例如触摸点坐标(x,y,z)、按压力大小、接触面积等。绝对位移事件如下:

#define ABS_X 0x00 //X 轴
#define ABS_Y 0x01 //Y 轴
#define ABS_Z 0x02 //Z 轴
#define ABS_RX 0x03
#define ABS_RY 0x04
#define ABS_RZ 0x05
#define ABS_THROTTLE 0x06
#define ABS_RUDDER 0x07
#define ABS_WHEEL 0x08
#define ABS_GAS 0x09
#define ABS_BRAKE 0x0a
#define ABS_HAT0X 0x10
#define ABS_HAT0Y 0x11
#define ABS_HAT1X 0x12
#define ABS_HAT1Y 0x13
#define ABS_HAT2X 0x14
#define ABS_HAT2Y 0x15
#define ABS_HAT3X 0x16
#define ABS_HAT3Y 0x17
#define ABS_PRESSURE 0x18
#define ABS_DISTANCE 0x19
#define ABS_TILT_X 0x1a
#define ABS_TILT_Y 0x1b
#define ABS_TOOL_WIDTH 0x1c
......

2.3 value(数值)

value值的含义会随着code的变化而变化,对于按键事件来说,如果code=2(KEY_1),value的含义如下:

0:KEYZ_1松开
1:KEYZ_1按下
2:KEYZ_1长按

如果code=1,此时value的值为坐标值

2.4 数据同步

对于触摸屏来说,一个触摸点的信息包含x坐标和y坐标以及其他信息,但是,一次read只能读取一个信息,此时就遇到一个问题,那就是用户如何知道一个触摸点信息已经读取完毕了呢?
同步事件类型就是来解决这个问题的,当触摸点的所有信息全部读取完毕之后,内核会产生一个同步事件类型,已告知应用程序本轮数据已完整,可以进行同步了。同步事件的code值如下:

#define SYN_REPORT 0
#define SYN_CONFIG 1
#define SYN_MT_REPORT 2
#define SYN_DROPPED 3
#define SYN_MAX 0xf
#define SYN_CNT (SYN_MAX+1)

2.5 读取start input_event数据

1)程序:读取input数据
该程序使用的是阻塞式读取,在没有数据时,程序会等待数据
2)流程图
读取数据流程图
注:设备文件不同于普通文件,读写设备文件之前不需要设置读写位置的偏移量

程序验证

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

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

相关文章

微信小程序如何引入第三方插件

前言 微信的文档不行&#xff0c;我这个&#xff0c;行 如何找到插件管理的页面 扫码登录微信小程序的后台设置页面&#xff0c;点击小程序信息的查看详情&#xff0c;然后点第三方设置 修改app.json 在插件管理的页面添加好要用的插件之后&#xff0c;在插件的详情页面找到…

C++学习指南(六)----list

欢迎来到繁星的CSDN。本期内容主要包括&#xff0c;list的介绍、使用以及与vector的优缺点。 一、什么是list 在先前的C语言学习中&#xff0c;我们接触到了顺序表和链表&#xff0c;而在C中&#xff0c;这正好对应了vector&#xff08;动态增长顺序表&#xff09;和l…

机器学习(西瓜书)第 10 章 降维与度量学习

10.1 k近邻学习kNN k 近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法,其工作机制非常简单&#xff1a;给定测试样本&#xff0c;基于某种距离度量找出训练集中与其最靠近的k个训练样本&#xff0c;然后基于这k个 “邻居”的信息来进行预测.通常&#xff0c;在…

常用排序算法时间复杂度和稳定性

以下是常用排序算法时间复杂度和稳定性&#xff0c;也是常考的&#xff1a;

如何衡量企业品牌力?判断指标有哪些?

企业品牌力是指品牌在市场中的竞争力和影响力&#xff0c;它反映了品牌的价值、知名度、忠诚度、感知质量、差异化以及市场表现等方面。要去衡量一个企业的品牌力&#xff0c;大多从品牌的知名度、忠诚度、所占市场份额、顾客口碑、社媒影响力、品牌资产价值等多方面去判断。我…

【计网】从零开始使用TCP进行socket编程 --- 客户端与服务端的通信实现

阵雨后放晴的天空中&#xff0c; 出现的彩虹很快便会消失。 而人心中的彩虹却永不会消失。 --- 太宰治 《斜阳》--- 从零开始使用TCP进行socket编程 1 TCP与UDP2 TCP服务器类2.1 TCP基础知识2.2 整体框架设计2.3 初始化接口2.4 循环接收接口与服务接口 3 服务端与客户端测试…

Jboss CVE-2015-7501 靶场攻略

漏洞介绍 这是经典的JBoss反序列化漏洞&#xff0c;JBoss在/invoker/JMXInvokerServlet请求中读取了⽤户传⼊的对象&#xff0c;然后我们利⽤Apache Commons Collections中的 Gadget 执⾏任意代码 影响范围 JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10 …

使用API有效率地管理Dynadot域名,为域名进行隐私保护设置

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

欧美海外仓系统有哪些服务商选择?

在跨境电商的全球化浪潮中&#xff0c;欧美市场以其成熟的电商生态和庞大的消费群体&#xff0c;成为了众多跨境卖家竞相争夺的高地。为了提升物流效率、降低成本并增强客户体验&#xff0c;海外仓成为了不可或缺的一环。而海外仓系统的选择&#xff0c;则直接关系到仓库的运营…

qt--Qml控件库如何从外部导入

文章目录 两种方案方案1 给项目添加子项目方案2 使用pri文件 综合来说 &#xff1a; 两种方案 方案1 给项目添加子项目 利用git的特性 对应的子项目就是我们的控件库 然后需要哪个控件 在父项目的qrc路径进行导入 即可将控件库里面的控件给导入项目 在使用的时候 使用模…

tomcat中间件漏洞CVE-2017-12615,后台弱口令部署war包,CVE-2020-1938

一.CVE-2017-12615 环境搭建 cd vulhub-master/tomcat/CVE-2017-12615 docker-compose up -d 漏洞复现 http://172.16.1.22 1.⾸⻚抓包&#xff0c;修改为 PUT ⽅式提交 PUT /shell.jsp/ 2.上传成功进行访问&#xff0c;使用Webshell客户端⼯具进⾏连接 二.后台弱口令部…

二、电源滤波器

电源滤波器 1、电源滤波的过程分析! 波形形成过程: 2、计算: 滤波电容的容量和耐压值选择。 学习心得

mysql-死锁

文章目录 1、概念1.1、创建表 account1.2、id 自动创建 主键索引 primary1.3、name 没有创建索引 2、产生死锁的必要条件2.1、此时 name 没有创建 索引 3、如何处理死锁3.1、方式1&#xff1a;等待&#xff0c;直到超时&#xff08;innodb_lock_wait_timeout50s&#xff09;3.2…

软件测试分类篇(上)

目录 引言&#xff1a; 一、为什么要对软件测试进行分类 二、按照测试目标分类 1. 界面测试 2. 功能测试 3. 性能测试 4. 可靠性测试 5. 安全性测试 6. 易用性测试 三、按照执行方式分类 1. 静态测试 2. 动态测试 四、按照测试方法分类 1. 白盒测试 2. 黑盒测试 …

继承常见问题

问题一&#xff1a; 下面关于继承说法不正确的是&#xff08; &#xff09; A.继承可以使用现有类的所有功能&#xff0c;并在无需重新编写原来类的情况下对这些功能进行扩展 B.继承体系中子类必须要体现出与基类的不同 C.子类对象一定比基类对象大 D.继承呈现了面相对象程序设…

关于若尔当矩阵中过渡矩阵的求法

关于若尔当矩阵中过渡矩阵的求法 豆瓜爱数学 ​关注 桜井雪子 等 114 人赞同了该文章 本文主要介绍考研中常考的另一类问题&#xff0c;当我们确认一个Jordan标准形时&#xff0c;对于过渡矩阵如何确定&#xff1f;这个常常是我们复习过程中容易忽略的一部分内容&#xff0c;…

【QT基础】创建项目项目代码解释

目录 前言一&#xff0c;使⽤Qt Creator 新建项目1. 新建项目2. 选择项⽬模板3. 选择项⽬路径4. 选择构建系统5. 填写类信息设置界⾯6. 选择语⾔和翻译⽂件7. 选择Qt套件8. 选择版本控制系统9. 最终效果 二&#xff0c;项目代码说明1. main.cpp文件2. Widget.h文件3. Widget.cp…

AI大模型之旅--milvus向量库安装

milvus-向量索引库 milvus的官方文档中看到最新版本的部署方式 :https://milvus.io/docs/install_standalone-docker.md 部署 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh 如果下载不下来&a…

AI浪潮新崛起:借助AI+实景/视频直播创新魅力,开启无人自动直播新时代!

AI浪潮新崛起&#xff1a;借助AI实景/视频直播创新魅力&#xff0c;开启无人自动直播新时代&#xff01; 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再仅仅是科幻电影中的桥段&#xff0c;它正以不可阻挡之势渗透到我们生活的方方面面&#xff…

【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划

文章目录 0. 前言1. 基于搜索的路径规划1.1 A* 算法1.2 Hybrid A* 算法 2. 基于采样的路径规划2.1 Frent Frame方法2.2 Cartesian →Frent 1D ( x , y ) (x, y) (x,y) —> ( s , l ) (s, l) (s,l)2.3 Cartesian →Frent 3D2.4 贝尔曼Bellman最优性原理2.5 高速轨迹采样——…