您的位置:首页 > 汽车 > 新车 > 网站系统制作_在线设计平台分析_怎么制作自己的网站网页_保定网站建设公司哪家好

网站系统制作_在线设计平台分析_怎么制作自己的网站网页_保定网站建设公司哪家好

2024/9/20 18:46:32 来源:https://blog.csdn.net/shui12912/article/details/142355773  浏览:    关键词:网站系统制作_在线设计平台分析_怎么制作自己的网站网页_保定网站建设公司哪家好
网站系统制作_在线设计平台分析_怎么制作自己的网站网页_保定网站建设公司哪家好

文章目录

  • 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)流程图
读取数据流程图
注:设备文件不同于普通文件,读写设备文件之前不需要设置读写位置的偏移量

程序验证

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com