输入设备应用

news2024/9/23 23:32:58

1.输入设备其实就是能够产生输入事件的设备就称为输入设备, 常见的输入设备包括鼠标、键盘、触摸屏、按钮等等,它们都能够产生输入事件,产生输入数据给计算机系统。

2.对于输入设备的应用编程其主要是获取输入设备上报的数据、 输入设备当前状态等,譬如获取触摸屏当前触摸点的 X、 Y 轴位置信息以及触摸屏当前处于按下还是松开状态

3.输入设备

输入设备(也称为 input 设备),常见的输入设备有鼠标、键盘、触摸屏、 遥控器、电脑画图板等,用户通过输入设备与系统进行交互。

4.input 子系统

Linux 系统为了统一管理这些输入设备,实现了一套能够兼容所有输入设备的框架,那么这个框架就是 input 子系统。驱动开发人员基于 input 子系统开发输入设备的驱动程序, input 子系统可以屏蔽硬件的差异,向应用层提供一套统一的接口。

基于 input 子系统注册成功的输入设备,都会在/dev/input 目录下生成对应的设备节点(设备文件), 设备节点名称通常为 eventX(X 表示一个数字编号 0、 1、 2、 3 等),譬如/dev/input/event0、 /dev/input/event1、/dev/input/event2 等, 通过读取这些设备节点可以获取输入设备上报的数据

5.读取数据的流程 --- (假设触摸屏设备对应的设备节点为/dev/input/event0)

1) 应用程序打开/dev/input/event0 设备文件;

2) 应用程序发起读操作(譬如调用 read),如果没有数据可读则会进入休眠(阻塞 I/O 情况下);

3) 当有数据可读时,应用程序会被唤醒,读操作获取到数据返回;

4) 应用程序对读取到的数据进行解析。

6.应用程序如何解析数据

其实每一次 read 操作获取的都是一个 struct input_event 结构体类型数据, 该结构体定义在<linux/input.h>头文件中。

            struct input_event 结构体
struct input_event {
    struct timeval time; // 内核会记录每个上报的事件其发生的时间,并通过变量 time 返回给应用程序。
    __u16 type;          //用于描述发生了哪一种类型的事件
    __u16 code;          //表示该类事件中的哪一个具体事件
    __s32 value;         //内核每次上报事件都会向应用层发送一个数据 value,对 value 值的解释随着 code 的变化而变化。
};

type:

#define EV_SYN 0x00 //同步类事件,用于同步事件
#define EV_KEY 0x01 //按键类事件
#define EV_REL 0x02 //相对位移类事件(譬如鼠标)
#define EV_ABS 0x03 //绝对位移类事件(譬如触摸屏)
#define EV_MSC 0x04 //其它杂类事件

code

按键类事件:
#define KEY_RESERVED 0
#define KEY_ESC 1 //ESC 键
#define KEY_1 2 //数字 1 键
#define KEY_2 3 //数字 2 键

相对位移事件
#define REL_X 0x00 //X 轴
#define REL_Y 0x01 //Y 轴
#define REL_Z 0x02 //Z 轴

value --- 对 value 值的解释需要根据不同的 code 值而定。

注意:同步事件用于实现同步操作、告知接收者本轮上报的数据已经完整。

7.输入设备调用 read()会读取到一个 struct input_event 类型数据,将读取到的 struct input_event 类型数据中的每一个元素打印出来、 并对它们进行解析。

程序中首先调用 open()函数打开设备文件,之后在 for 循环中调用 read()函数读取文件,将读取到的数据存放在 struct input_event 结构体对象中,之后将结构体对象中的各个成员变量打印出来。

8 ./read_multitouch_app /dev/input/event1

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

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

相关文章

驱动程序那点事儿

是什么 驱动程序是一个软件组件&#xff0c;&#xff08;添加到操作系统中的一小块代码&#xff09;&#xff0c;是操作系统和设备通信的桥梁。应用程序需要从设备中读取某些数据&#xff0c;操作系统会调用由驱动程序实现的函数。驱动程序了解如何与设备硬件通信以获取数据。当…

菜鸟程序员如何快速进阶成为编程老司机?

菜鸟程序员如何摆脱稚嫩&#xff0c;快速成长为一名资深码农&#xff1f; 以下这些事情&#xff0c;帮你快速打好基础。 如果你想成为更好的开发者&#xff0c;你应该尤其注意第10点和第14点。 1.积极大胆地谷歌。你得知道如何有效地组织搜索关键字&#xff0c;查阅别人写的…

高并发系统设计 --热点key问题解决

热点Key问题&#xff0c;这是一个老生常谈的问题了&#xff0c;今天我们来仔细的去剖析这个问题。 热点key带来的问题 流量集中。达到服务器处理上限&#xff08;CPU&#xff0c;网络IO等&#xff09;会影响在同一个Redis实例上其他key的读写请求操作热key请求落到同一个Redi…

【魅力开源】第7集:开源ERP系统Odoo发展史(Odoo中文社区野史2019版)

文章目录前言历程后记前言 开源 ERP 系统 Odoo 的发展史。 历程 2002 年比利时13 岁开 始学习编程序的 Fabien Pinckaers 所创建创办了Tiny Sprl 公司。Tiny Sprl 公司的第一个产品就是开发 Tiny ERP&#xff0c;即后来的 OpenERP&#xff0c;现在改名为Odoo。 2007 年 Ope…

Sklearn标准化和归一化方法汇总(3):范数归一化

Sklearn中与特征缩放有关的五个函数和类&#xff0c;全部位于sklearn.preprocessing包内。作为一个系列文章&#xff0c;我们将逐一讲解Sklearn中提供的标准化和归一化方法&#xff0c;以下是本系列已发布的文章列表&#xff1a; Sklearn标准化和归一化方法汇总(1)&#xff1a…

博云荣获证券基金信创联盟年度优秀成员

1月12日&#xff0c;证券基金行业信息技术应用创新联盟&#xff08;以下简称“联盟”&#xff09;2022年度峰会在上海顺利举行。会上&#xff0c;联盟为2022年积极参与联盟工作的成员单位进行了颁奖&#xff0c;博云获评信创联盟年度优秀成员奖。 联盟是在中国证券监督管理委员…

Spring | SM整合(Spring+MyBatis)

0️⃣使用工具编辑器&#xff1a;IDEA企业版构建系统&#xff1a;Maven数据库&#xff1a;MySQL1️⃣创建项目&#x1f38f;创建maven项目选择新建项目&#xff0c;在E盘下创建名为SMDemo的项目&#xff0c;构建系统选择Maven.&#x1f38f;项目结构src/main/java - java 逻辑代…

企业宣传新闻稿撰写方法和技巧分享,纯干货

企业宣传新闻稿重点在于“宣传”&#xff0c;目的性强&#xff0c;具有极强的商业价值&#xff0c;怎么撰写是一大难关。 企业新闻稿堪比公关小组&#xff0c;表面上看起来只是简简单单一篇新闻稿&#xff0c;但是实际上企业新闻稿也能起到大作用&#xff0c;企业新闻稿的价值…

Python Kafka客户端性能测试比较

前言 由于工作原因使用到了 Kafka&#xff0c;而现有的代码并不能满足性能需求&#xff0c;所以需要开发高效读写 Kafka 的工具&#xff0c;本文是一个 Python Kafka Client 的性能测试记录&#xff0c;通过本次测试&#xff0c;可以知道选用什么第三方库的性能最高&#xff0c…

umi4+antd5兼容360安全浏览器

项目场景&#xff1a; umi4创建的大屏项目&#xff0c;部分模块使用了antd5进行开发 问题描述 开发完成后&#xff0c;得知客户是360安全浏览器&#xff0c;内核为86&#xff0c;测试过程中出现了样式混乱。 混乱样式有下拉内容的组件&#xff08;如select、dataPicker&#…

Microsoft 365中的智能应用—翻译、朗读、听写

Microsoft 365 是一种订阅式的跨平台办公软件&#xff0c;基于云平台提供多种服务&#xff0c;通过将Word、Excel、PowerPoint和Outlook、OneNote等应用与OneDrive 和 Microsoft Teams等强大的云服务相结合&#xff0c;让任何人使用任何设备随时随地创建和共享内容。 Microsof…

【JavaScript】仿青柠搜索界面

点击搜索栏&#xff0c;背景模糊&#xff0c;出现图标。点击界面任意处&#xff0c;失去焦点&#xff0c;恢复原样 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X…

Elasticsearch高级查询—— 查询所有文档

目录一、初始化文档数据二、查询所有文档示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age":22,"sex…

Qt的开源库TabToolbar

开源地址&#xff1a;https://github.com/SeriousAlexej/TabToolbar 该库的使用方式有两种&#xff1a; 使用json配置文件配置TabToolBar使用代码构建TabToolBar 编译 项目是使用Qt和CMake管理的&#xff0c;并且在开发的时候使用的是Qt6&#xff0c;我实测通过更改CMake的…

设计模式——代理模式

文章目录引入案例提出问题解决思路遇到的困难代理模式概念生活中的代理相关术语静态代理动态代理织入的概念基于JDK的动态代理基于Cglib的动态代理JDK 和 CGLIB 的区别引入案例 计数器的接口 public interface Calculator {int add(int i, int j);int sub(int i, int j);int …

pandas案例——预处理部分地区数据

数据清洗的任务是过滤那些不符合要求的数据&#xff0c;将过滤的结果交给业务主管部门&#xff0c;确认是否过滤掉还是由业务单位修正之后再进行抽取。不符合要求的数据主要是有不完整的数据、错误的数据、重复的数据三大类。数据清洗是与问卷审核不同&#xff0c;录入后的数据…

使用反射和泛型简化Golang查询数据库代码的方案

大纲Postgresql数组案例常规写法定义结构体查询数据问题反射泛型写法结构体定义接口Tag实现逻辑泛型设计实例化模型结构体获取表名过滤字段组装SQL语句查询遍历读取结果实例化模型结构体组装Scan方法的参数调用Scan方法并保存结果完整代码小结Postgresql数组 Postgresql有个很…

7、操作DOM对象(重点)

核心&#xff1a;浏览器网页就是一个DOM树形结构 更新&#xff1a;更新该DOM节点的内容&#xff0c;相当于更新了该DOM节点表示的HTML的内容&#xff1b; 遍历&#xff1a;遍历该DOM节点下的子节点&#xff0c;以便进行进一步操作&#xff1b; 添加&#xff1a;在该DOM节点下…

Matlab中的dsp.AudioFileReader函数的认识和学习

在Matlab中的dsp.AudioFileReader函数的认识和学习1.描述2.语法2.1 语法描述2.2 属性Properties2.3 举例Stream from audio file 来自音频文件的流 1.描述 dsp.AudioFileReader系统对象™ 从音频文件读取音频样本。 要从音频文件读取音频样本&#xff0c;请执行以下操作&…

小方制药冲刺A股上市:毛利率走低,方之光、鲁爱萍夫妇为实控人

近日&#xff0c;上海小方制药股份有限公司&#xff08;下称“小方制药”&#xff09;公开预披露更新招股书&#xff0c;准备在上海证券交易所主板上市。据贝多财经了解&#xff0c;小方制药于2022年7月1日递交招股书&#xff0c;国信证券为其保荐机构。 本次冲刺上市&#xff…