输入子系统:
对不同的输入设备进行统一处理的设备驱动程序框架,包括键盘,鼠标,触摸屏等任何的输入设备都可以通过输入子系统的接口注册到内核中。使用它的好处:
它提供了用于分发输入报告给用户程序的简单事件(envent)的接口,抽取出了输入驱动程序的通用部分,简化了驱动程序,引入了一致性.简便了设备驱动程序的开发。
输入子系统的三层结构: 核心层,具体设备相关的设备层dev和与设备处理的驱动drv层。
input_dev 是硬件驱动层,代表一个input设备
input_handler 是事件处理层,代表一个事件处理器
input_handle 核心层,代表一个配对的input设备与input事件处理函数
输入子系统程序的编写步骤:
1: 分配一个输入设备即input_dev结构体:
声明:static struct input_dev *buttons_dev;
buttons_dev= input_allocate_device();
必要的判断:
if (!buttons_dev)
{
printk("Bad input_allocate_device()\n");
return ENOMEM;
}
2: 支持的输入事件的相关设置
在source insight里面查找input_dev可得到这个结构体的定义:
/*a:产生那类事件*/
set_bit(EV_KEY,buttons_dev->evbit);
产生按键类事件
set_bit(EV_REP, buttons_dev->evbit);产生重复性事件
/*b:产生类里面的哪些事件L,S,ENTER, LEFTSHIT*/
set_bit(KEY_L, buttons_dev->keybit);
set_bit(KEY_S, buttons_dev->keybit);
set_bit(KEY_ENTER, buttons_dev->keybit);
set_bit(KEY_LEFTSHIFT, buttons_dev->keybit);
3:分配一个输入设备
input_register_device(buttons_dev);
4:硬件相关的初始化:
。。。。
5:上报事件:
input_event(buttons_dev,EV_KEY,pindesc->key_val, 0);
input_sync(buttons_dev); 表示此事件已经完成。
6 在出口函数里面释放和注销相应的设备:
input_unregister_device(buttons_dev);
input_free_device(buttons_dev);