input子系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了input子系统相关的知识,希望对你有一定的参考价值。

linux中input子系统的编程模型:

  1. 命令行界面的输入类设备应用接口

  2. GUI界面

  3. struct input_event

struct input_event {

struct timeval time;

__u16 type;

__u16 code;

__s32 value;

};

通过该结构体将输入类设备的类别、特征等相关信息记录下来。


为什么需要input子系统?

各种不同的输入类设备有各自不同的特征、对应不同的寄存器操作、不同的硬件操作方法,需要一套机制来将这些设备管理起来,方便我们调用。


input子系统分为四个部分:应用层 + input event + input core + 硬件驱动


那么,input子系统如何工作呢,如何去判断发生了什么输入类设备呢?


例如,当按下鼠标按键时,会触发一个硬件中断事件,进入中断服务函数,读取寄存器得知是哪个硬件发生了动作,如得知是鼠标的左键被按下了,将该事件记录下来后会上报给input core层,进行一系列处理后上报到input event层,input event层把这些事件的相关信息封装成一个input_event结构体,之后通过应用层接口上报给应用层,应用层通过read系统调用把input_event结构体的内容读取出来,应用层通过去解析input_event结构体,得知到底发生了什么输入类事件。


如通过time得知是什么时候发生的输入类事件,通过type得知是一个鼠标输入而不是键盘输入,通过code得知是鼠标的左键,通过value得知是左键被按下而不是被松开。


应用层就会知道是几时几分几秒鼠标的左键被按下了,这时再去做这种情况下要实现的功能。


事件驱动型GUI框架(如QT、VC)的底层支撑就是input子系统。

以上是关于input子系统的主要内容,如果未能解决你的问题,请参考以下文章

Linux驱动开发input子系统

Linux驱动开发input子系统

input 输入子系统分析

Linux INPUT 子系统实验

linux input输入子系统分析《四》:input子系统整体流程全面分析

input子系统四 input事件处理