增加 Linux Input 子系统详解.
Signed-off-by: rick.chan <chenyang@autoai.com>
This commit is contained in:
parent
e16082796f
commit
2d612ee39f
|
@ -0,0 +1,47 @@
|
||||||
|
# Linux Input 子系统详解
|
||||||
|
|
||||||
|
## 1.Input 子系统框架
|
||||||
|
|
||||||
|
Input 子系统由驱动层、Input Core、Input Event 三部分组成。一个输入事件,如鼠标移动通过 Driver->Input core->Event handler->user space 的顺序到达用户控件的应用程序。
|
||||||
|
|
||||||
|
![Input 子系统框架](./img/Linux_Input_子系统详解/001.png)
|
||||||
|
|
||||||
|
* 驱动层:将底层的硬件输入转化为统一事件形式,向输入核心(Input Core)汇报
|
||||||
|
* Input Core:承上启下, 为驱动层 提供输入设备注册与操作接口,如:input_register_device 通知事件处理层对事件进行处理;在/Proc下产生相应的设备信息。
|
||||||
|
* Input Event:主要是和用户空间交互。(Linux 中在用户空间将所有的设备都当初文件来处理,由于在一般的驱动程序中都有提供 fops 接口,以及在 /dev 下会生成相应的设备文件 nod,这些操作在输入子系统中由事件处理层完成)。
|
||||||
|
|
||||||
|
实现设备驱动核心工作是:向系统报告按键等输入事件(event,通过 input_event 结构描述),不再需要关心文件操作接口(如何理解)。驱动报告事件经过 inputCore 和 Eventhandler 到达用户空间。
|
||||||
|
|
||||||
|
## 2.驱动相关的函数
|
||||||
|
|
||||||
|
### 2.1.设备注册和初始化
|
||||||
|
|
||||||
|
* input_allocate_device:分配一块input_dev结构体类型大小的内存
|
||||||
|
* input_set_capability:设置输入设备可以上报哪些输入事件
|
||||||
|
* input_register_device:向 Input Core 层注册设备
|
||||||
|
* input_unregister_device:注销输入设备函数
|
||||||
|
* input_register_handle:注册一个 handle
|
||||||
|
* set_bit():告诉input输入子系统支持哪些事件,哪些按键。例如:set_bit(EV_KEY,button_dev.evbit),其中button_dev是 struct input_dev类型;
|
||||||
|
|
||||||
|
### 2.3.报告事件
|
||||||
|
|
||||||
|
用于报告EV_KEY,EV_REL,EV_ABS事件的函数分别为:
|
||||||
|
|
||||||
|
void input_report_key (struct input_dev *dev, unsigned int code, int value)
|
||||||
|
|
||||||
|
void input_report_rel (struct input_dev *dev, unsigned int code, int value)
|
||||||
|
|
||||||
|
void input_report_abs (struct input_dev *dev, unsigned int code, int value)
|
||||||
|
|
||||||
|
### 2.4.报告结束
|
||||||
|
|
||||||
|
input_sync() 同步用于告诉 input core 子系统报告结束。
|
||||||
|
|
||||||
|
### 2.5.一次完整个报告过程
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
input_reprot_abs(input_dev,ABS_X,x); // x 坐标
|
||||||
|
input_reprot_abs(input_dev,ABS_Y,y); // y 坐标
|
||||||
|
input_reprot_abs(input_dev,ABS_PRESSURE,1);
|
||||||
|
input_sync(input_dev); // 同步结束
|
||||||
|
```
|
Binary file not shown.
After Width: | Height: | Size: 477 KiB |
Loading…
Reference in New Issue