gzyueqian
13352868059

粤嵌linux入门基础教程培训内容之触摸屏应用接口

更新时间: 2019-01-04 14:05:09来源: 粤嵌教育浏览量:3479

  连接操作系统的输入设备,可不知一种,也许是一个标准的PS/2键盘,也许是一个USB鼠标,或者是一块触摸屏,甚至是一个游戏机摇杆,linux入门基础教程在处理这些纷繁各异的输入设备的时候,采用的办法还是找中间层来屏蔽各种细节,请看下图:

  在 Linux 的内核中, 对输入设备的使用, 实际上运用了 3 大块来管理, 他们分别是所谓的输入设备驱动层、 输入子系统核心层, 以及事件触发层。 linux入门基础教程他们各自的工作分别是:

  1, 输入设备驱动层:

  每一种设备都有其特定的驱动程序, 他们被妥当地装载到操作系统的设备模型框架内,封装硬件所提供的功能, 向上提供规定的接口。

  2, 核心层:

  此处将收集由设备驱动层发来的数据, 整合之后触发某一事件。

  3, 事件触发层:

  这一层是我们需要关注的,我们可以通过在用户空间读取相应设备的节点文件来获知某设备的某一个动作。 在靠近应用程序的事件触发层上, 内核所获知的各类输入事件, 比如键盘被按了一下, 触摸屏被滑了一下等, 都将被统一封装在一个叫做 input_even 的结构体当中, 这个结构体定义如下: (/usr/include/Linux/input.h)

  21 struct input_event {

  22 struct timeval time;

  23 __u16 type;

  24 __u16 code;

  25 __s32 value;

  26 };

  该结构体有 4 个成员, 其含义分别如下:

  一、 time: 输入事件发生的时间戳, 精确到微秒。 时间结构体定义如下:

  struct timeval

  {

  __time_t tv_sec; // 秒

  long int tv_usec; // 微秒(1 微秒 = 10^3毫秒 = 10^6秒)

  };

  二、 type: 输入事件的类型。 比如:

  EV_SYN: 事件间的分割标志, 有些事件可能会在时间和空间上产生延续, 比如持续按住一个按键。 为了更好地管理这些持续的事件, EV_SYN 用以将他们分割成一个个的小的数据包。

  EV_KEY: 用以描述键盘, 按键或者类似键盘的设备的状态变化。

  EV_REL: 相对位移, 比如鼠标的移动, 滚轮的转动等。

  EV_ABS: 位移, 比如触摸屏上的坐标值。

  EV_MSC: 不能匹配现有的类型, 这相当于当前暂不识别的事件。 比如在 Linux系统中按下键盘中针对 Windows 系统的“一键杀毒” 按键, 将会产生该事件。

  EV_LED: 用于控制设备上的 LED 灯的开关, 比如按下键盘的大写锁定键, 会同时产生 ”EV_KEY” 和 ”EV_LED” 两个事件。

  三、code:这个“事件的代码”用于对事件的类型作进一步的描述。比如:当发生 EV_KEY事件时, 则可能是键盘被按下了, 那么究竟是哪个按键被按下了呢? 此时查看 code 就知道了。 当发生 EV_REL 事件时, 也许是鼠标动了, 也许是滚轮动了。这时可以用 code 的值来加以区分。

  四、 value: 当 code 都不足以区分事件的性质的时候, 可以用 value 来确认。 比如由EV_REL 和 REL_WHEEL 确认发生了鼠标滚轮的动作, 但是究竟是向上滚还是向下滚呢?再比如由由 EV_KEY 和 KEY_F 确认了发生键盘上 F 键的动作, 但究竟是按下呢还是弹起呢? 这时都可以用 value 值来进一步判断。

  linux入门基础教程关于触摸屏应用接口的内容就讲到这里,想了解更多内容可咨询粤嵌教育培训。


免费预约试听课