Linux事件编码

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

2.1.3 SYN_MT_REPORT

用于同步和分割触摸事件。参看multi-touch-protocol.txt文档获得更多信息。

2.1.4 SYN_DROPPED

用于指示evdev客户端的事件队列中的缓冲区溢出。客户端应忽略直到下一个SYN_REPORT事件的所有事件,并查询设备(使用EVIOCG * ioctls)以获取其当前状态。

2.2 EV_KEY

EV_KEY事件采用KEY_<name>或者BTN_<name>的格式。例如,KEY_A用于表示键盘上的‘A’按键。当一个按键被按下时,将会发送一个包含按键的编码的事件,其值为1。当按键被释放时,一个事件被发送,其值为0。一些硬件在重复按下按键时发送的事件值为2。总的来说,KEY_<name>用于键盘按键,BTN_<name>用于其他类型短暂切换事件。

一些EV_KEY编码具有特殊含义:

2.2.1 BTN_TOOL_<name>

这些编码与输入触控板、平板电脑和触摸屏结合使用。这些设备可能和手指、笔或者其他工具一起使用。当一个事件发生并且工具被使用,相应的BTN_TOOL_<name>编码需要被设置为值1。当工具不再与输入设备相互作用时,BTN_TOOL_<name>编码需要被重置为0。触控板、平板电脑和触摸屏在事件产生时应该使用至少一个BTN_TOOL_<name>编码。

2.2.2 BTN_TOUCH

BTN_TOUCH用于触摸接触。当一个输入工具确定处于有意义的物理接触范围内时,此属性的值必须设置为1。有意义的物理接触可以是任何接触或者是接触条件被定义的接触。例如,触摸板可以在压力上升到某个确定值的时候将这个属性值设置为1。BTN_TOUCH可以与BTN_TOOL_ 编码结合使用。例如,当平板电脑笔在平板电脑表面上方徘徊但没有触摸到表面时,可以设置BTN_TOOL_PEN为1,BTN_TOUCH为0。

注意:对于旧版本的mousedev仿真驱动程序的某些功能,BTN_TOUCH必须是同步帧中发出的第一个evdev编码。

注意:过去,具有BTN_TOOL_FINGER和BTN_TOUCH的触摸设备在用户空间被认为是触摸板,而类似设备没有BTN_TOOL_FINGER被认为是触摸屏。为了后续兼容当前的用户空间,建议遵循这一特征。未来,这一特征将会不再被支持,定义在linux/input.h中的EVIOCGPROP设备属性将会用来传递设备类型。

2.2.3 BTN_TOOL_FINGER, BTN_TOOL_DOUBLETAP, BTN_TOOL_TRIPLETAP, BTN_TOOL_QUADTAP

这几个编码对应一个、两个、三个和四个手指与触摸板或触摸屏相互作用。例如,如果用户使用两个手指在触摸板上移动从而滚动屏幕上的内容,BTN_TOOL_DOUBLETAP在这个动作期间应该被设置为值1。注意,所有BTN_TOOL_<name>编码和BTN_TOUCH编码在目的上是互不相干的,手指触摸触摸板产生的事件应该从每个组中产生一个编码。在任何同步帧中,最多只有一个BTN_TOOL_<name>编码的值被设置为1。

注意:过去,一些驱动发送在相同的同步帧中通过值1来发送多个手指数量的编码,这种用法是不被赞同的。

注意:在多点触控驱动中,input_mt_report_finger_count()函数被用于发送这些编码。请参看multi-touch-protocol.txt获取详细信息。

2.3 EV_REL

EV_REL事件描述某个属性的相对变化。例如,鼠标可能向左移动确定的单位数,但是,它的绝对空间位置是不可知的。如果绝对为位置可知,应该使用EV_ABS编码来代替EV_REL编码。

一些EV_REL编码具有特殊的含义:

2.3.1 REL_WHEEL,REL_HWHEEL

这些编码分别用于竖直和水平滚轮。

2.4 EV_ABS

EV_ABS事件描述某一属性的绝对位变化。例如,触摸板能够发送触摸位置的坐标值。

一些EV_ABS编码具有特殊含义:

2.4.1 ABS_DISTANCE

用于描述工具到交互表面的距离。仅在工具悬停时(即紧靠设备且BTN_TOUCH代码的值为0时)才发出此事件。如果输入设备可以在三维空间中不受限制地使用,考虑使用ABS_Z替代。

当工具进入到可检测的邻近区域时BTN_TOOL_<name>应该被置1,当工具离开可检测区域时BTN_TOOL_<name>应该被置0。BTN_TOOL_<name>标记了当前被硬件检测到的工具类型,并且它与ABS_DISTANCE和/或BTN_TOUCH是相互独立的。

2.4.2 AB_MT_<name>

用于描述多点触输入事件。请参看multi-touch-protocol.txt获取更多信息。

2.5 EV_SW

EV_SW用于描述状态二进制开关。例如,SW_LID编码用于表示笔记本计算机的机盖是否关闭。

当绑定到设备或者从挂起中恢复后,驱动程序必须上报当前开关状态。这样可以确保设备、内核和用户空间状态同步。

当恢复时,如果开关状态和挂起时相同,输入子系统将会过滤出开关状态信息。驱动程序在任何时候都不需要保存开关的状态。

2.6 EV_MSC

EV_MSC事件用于输入和输出那些不能被分类到其他种类下的事件。

一些EV_MSC编码具有特殊含义:

2.6.1 MSC_TIMESTAMP

用于报告自上次重置之后的微秒数。这个事件应该被编码为uint32值,该值可以绕回而不会产生特殊后果。假定两个连续事件之间的时间差在合理的时间范围(小时)内是可靠的。

一个复位到0的情况可能发生,在这种情况下自从上次事件后的时间是不可知的。如果设备不提供这个信息,驱动程序一定不要提供这个信息到用户空间。

2.7 EV_LED

EV_LED事件通过输入和输出来设置和查询设备上的各种LED状态。

2.8 EV_REP

EV_REP事件用来描述自动重复事件。

2.9 EV_SND

EV_SND事件用来发送声音指令到简单的声音输出设备。

2.10 EV_FF

EV_FF事件用来初始化具有力反馈能力的设备,同时让这样的设备产生反馈。

2.11 EV_PWR

EV_PWR事件是一种特殊类型的事件,用来作为电源管理。它的用法定义的不是太好。待以后处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值