1、分层
设备驱动层:
本层要驱动开发者自己实现,可参考drivers/input/keyboard/key.c
1.结构体:
核心层:
内核已帮我们完成,在drivers/input/input.c
1.结构体:
事件处理层:
针对不同的类型,内核分别提供了三个事件处理:
0-31 joystick joydev.c
32----63 mouse mousedev.c
64----95 event evdev.c
1.结构体:
2、步骤流程:
方法1:
struct input_dev dev;
方法2:
struct input_dev *dev ;
struct input_dev __must_check *input_allocate_device(void);
2.初始化
1. 支持什么事件
set_bit(EV_KEY,input_dev.evbit);
2、支持什么子事件
set_bit(BTN_0,input_dev.keybit));
3、设置事件参数
3.注册:
int __must_check input_register_device(struct input_dev *);
4.在需要的地方上报事件
static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
例如:
input_report_key(&input_dev,BTN_0,0);
input_report_key(&input_dev,BTN_0,1);
input_sync(&input_dev);
5.释放:
void input_unregister_device(struct input_dev *);
3、实例:
源码下载
4、源码追踪:
更多细节见xmind思维导图。