input子系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了input子系统相关的知识,希望对你有一定的参考价值。
linux中input子系统的编程模型:
命令行界面的输入类设备应用接口
GUI界面
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子系统的主要内容,如果未能解决你的问题,请参考以下文章