此文章为个人翻译英文文档的产物,仅当做个人笔记使用,不喜勿喷!!
对于翻译内容有强迫症的读者请勿阅读此文档!!
阅读过程中如有不恰当之处欢迎交流指正~~
如需转载,请注明出处!
Linux中的输入协议采用一系列的类型和编码向用户空间表示输入设备的值。
单一的硬件事件可以产生多个输入事件,每个输入事件包含新的单个数据项值。使用一个特殊的事件类型EV_SYNC将输入事件分成不同的数据包,数据包中输入数据的改变在时间上是在同一时刻出现的。在下文中,术语“事件”是指单个输入事件,包括类型,编码和值。
输入协议是一种状态性的协议,只有在事件编码的值改变之后才需要发送事件。尽管如此,状态是保存在Linux输入子系统中的,驱动程序没有必要去保存状态,并且,即使驱动发送没有改变的值也是没有关系的。用户空间通过使用定义在linux/input.h中的EVIOCG来得到当前状态的事件编码。设备支持的事件上报也由sysfs在class/input/event/device/capabilities /中提供,而设备的属性在class/input/event*/device/properties中提供。
1. 事件类型
事件类型是逻辑输入构造下的代码分组。 每种类型都有一组用于生成事件的适用代码。 有关每种类型的有效代码的详细信息,请参见“代码”部分。
- EV_SYN : 分割事件的标记。事件可能按照事件或者空间进行分割,例如多点触协议。
- EV_KEY : 用于描述键盘、按键或其他类似按键设备的状态变化。
- EV_REL : 用于描述相对坐标值变化,例如向左移动鼠标5个单位。
- EV_ABS : 用于描述绝对坐标值变化,例如描述触摸屏上的触摸坐标。
- EV_MSC : 用于描述不适合其他事件类型的杂项输入数据。
- EV_SW : 用于描述二进制状态输入开关。
- EV_LED : 用于开关设备上的LED。
- EV_SND : 用于输出声音到设备。
- EV_REP : 用于自动重复设备。
- EV_FF : 用于给输入设备发送一个力反馈命令。
- EV_PWR : 用于电源按键和开关输入的特殊类型。
- EV_FF_STATUS :用于接受力反馈设备状态。
2. 事件编码
事件编码定义了准确的事件类型。
2.1 EV_SYNC
EV_SYNC事件值没有被定义。它们只有在evdev事件流中被发送时才被定义。
2.1.1 SYN_REPORT
用于同步和分割事件到不同的数据包,数据包中输入数据的改变在时间上是在同一时刻出现的。例如,鼠标的一个动作可能产生REL_X和REL_Y两个值的变化,在这个之后需要发送SYN_REPORT。下一个动作可能发送更多的REL_X和REL_Y,需要发送另一个SYN_REPORT。
2.1.2 SYN_CONFIG
TBD