当前位置: 首页 > news >正文

输入设备应用

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

相关文章:

  • 中国国家住房和城乡建设部网站/今日重大国际新闻
  • 做网站用的到java吗/营销网站建设制作
  • lnmp wordpress 主题/重庆seo排名收费
  • 公司企业管理/seo排名第一
  • 帷客分享 wordpress/优化设计答案六年级
  • 乌市昌吉州建设局网站/百度关键词模拟点击软件
  • 如何更好的在企业中构建绩效管理流程
  • Golang语法快速上手2
  • 【第二章 Excel数据格式】
  • 2023.1.18单词打卡
  • 创建成功的风格指南
  • 【Python标准库】LZ77编码的基本原理和lzma模块
  • Tarjan算法
  • python比较两张图片并获取精准度
  • Best Buy 百思买DROP SHIP EDI需求分析
  • 年度总结-你觉得什么叫生活?
  • <<零入门容器云网络实战>>技术专栏发布介绍
  • “水果零售第二股”百果园上市首日市值近百亿