基于linux-4.4.20的 input 框架介绍

1.Linux Input子系统简介

Input子系统是对输入设备的抽象。人机交互的输入设备复杂多样,包括鼠标、键盘、按键、触摸屏、摇杆、麦克风等,在linux设备模型下,这些设备都是字符设备。繁杂的设备给开发带来了巨大工作量,为了简化设备驱动开发,linux将这些设备共性抽象出来,建立了Input子系统。

Linux input设备上报数据采用type code value的形式。

设备驱动层(Input Driver)主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件按照核心层定义的规范提交给核心层。

核心层(Input Core)负责连接驱动层和事件处理层,为设备驱动层提供了规范和接口。设备驱动层只要关心如何驱动硬件并获得硬件数据(例如按键数据、触摸屏坐标数据),然后调用核心层提供的接口,核心层会自动把数据提交给事件处理层。设备驱动(input driver)和处理程序(handler)的注册需要通过核心层来完成,核心层接收来自驱动层的数据信息,并将数据信息选择对应的handler去处理

事件处理层(EventHandler)生成用户空间访问的接口(设备节点),并处理core层提交的数据并且缓存,等待用户空间读取,三者结构见下图:


 

2.Input 子系统数据

    任何程序,核心都是数据的传递和控制,因此,如果想要弄清楚一个模块,必须把其主要结构体弄清楚,input 子系统所涉及的数据结构如下:

1.input_dev结构体

         其中,input_dev是硬件驱动层,代表一个input设备,通过全局的input_dev_list链接在一起,在驱动设备注册的时候,通过input_register_devcie接口实现。上图省略了input_dev

一些比较重要字段,主要是此设备支持的typecode类型,现列出如下:

unsigned longevbit[BITS_TO_LONGS(EV_CNT)]; //事件支持的类型,是typecodevalue中的type

unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];//按键 位图,是code值。

unsigned longrelbit[BITS_TO_LONGS(REL_CNT)]; //相对坐标,属于code值。

unsigned longabsbit[BITS_TO_LONGS(ABS_CNT)];//绝对坐标,其中触摸屏驱动使用的就是这个

unsigned longmscbit[BITS_TO_LONGS(MSC_CNT)];

unsigned longledbit[BITS_TO_LONGS(LED_CNT)];

unsigned longsndbit[BITS_TO_LONGS(SND_CNT)];

unsigned longffbit[BITS_TO_LONGS(FF_CNT)];</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值