Linux输入子系统分析二
input输入子系统主要函数分析
各种注册函数:input_register_device,.input_register_handle,.input_register_handler
input_register_device:用来注册一个输入设备
int input_register_device(struct unput_dev *dev)
主要功能:初始化一些默认值,将自己的device结构添加到Linux设备模型中。将input_dev添加到input_dev_list链表中,然后寻找合适的handler与input_handler配对,配对的核心函数是input_attach_handler
1.1 input_attach_handler
int input_attach_handler(struct input_dev *dev, struct input_handler *handler)
主要功能:调用两个函数:配对函数input_match_device和处理函数connect
1.1.1 input_match_device
static const struct input_device_id *input_match_device(const struct input_device_id *id, struct input_dev *dev)
主要功能:比较input_dev中的id和handler支持的id,存放在handler的id_table中
首先看id->driver_info有没有设置,如果设置了说明他匹配所有的id,evdev就是这样的handler。然后根据id->flag来比较内容,如果都比较成功进入MATCH_BIT,这个宏是用来按位进行比较的,功能是比较所支持的事件类型,只有所有的位都匹配才返回成功。否则进入下一个id的比较。
1.1.2 connect
触摸屏的connect函数:evdev_connect
static int evdev_connect(struct input_handler *handler,struct input_dev *dev,const struct input_device_id *id)
主要功能:做配对后的善后工作,分配一个evdev结构体,并初始化相关成员,evdev结构体中有input_handle结构,初始化并注册之。input_register_handle:用来注册input_handle结构体
int input_register_handle(struct input_handle *handle)
主要功能:把一个handle结构体通过d_node链表项,分别链接到input_dev的h_list,input_handler的h_list上,以后通过这个h_list就可以遍历相关的input_handleinput_register_handler:注册一个input_handler结构体
int input_register_handler(struct input_handler *handler)
主要功能:参照input_register_device