linux 系统编程 input子系统
input子系统就是针对于各种输入的一种框架.
框架可以认为是,一种实现方法,linux中有很多框架,很多子系统.
比如之前没有框架的时候,大家各写各的,随意定义函数.
后来有个人写的很好,得到认可,他写的就是模板,大家都模仿他,之后他写的代码就是框架了.
输入设备: 鼠标,键盘,触摸屏 ...
输入设备通用的特点就是,会向linux输入数据.
input子系统就是为了统一所有的交互设备而产生的.
它规定了输入设备接入linux,linux识别后会在哪个文件中产生节点.
它规定了操作输入设备的步骤.
它规定了输入的数据会填充到哪个结构体.

第一步: linux识别设备
操作目标之前,要知道设备在哪里.
基于input子系统注册成功的输入设备,都会在 /dev/input 目录下生成相应的设备节点(设备文件).设备节点名称通常为eventX(X为0.1.2.3...).通过读取这些设备节点,可以获取输入设备上报的数据.

第二步: 打开设备
打开/dev/input/event0 设备文件;
获取fd;


第三步: 根据fd读设备
应用程序发起读操作(譬如调用 read),刷新结构体;
如果没有数据可读则会进入休眠(阻塞 I/O 情况下);
当有数据可读时,应用程序会被唤醒,读操作获取到数据返回;


第四步: 获取设备输入数据
应用程序从结构体中得到输入的数据。


如何获取数据:
每次read,都会刷新一下结构体.
struct input_event.
该结构体在<linux/input.h>中.

测试一个usb键盘程序.
1,首先是让系统识别到usb键盘
把键盘按到linux板子上.
板子终端就会打印出信息.(表示板子已经识别到usb键盘了)

可以查看ubs键盘对应的设备节点,
使用命令: cat /proc/bus/input/devices


现象:
运行程序 ./testApp /dev/input/event3

键盘的上下左右,分别是:103, 108 ,105, 106