交互系统的构建之(二)下鼠标和键盘的模拟控制
本文将完成:
Linux下鼠标和键盘的模拟控制,也就是为手势和语音控制鼠标和键盘部分服务的。
有关于本系统构建的文章结构都会由三个部分来组织,一是该功能模块的介绍和在Linux下简单应用的实现;二是将该功能模块整合到交互系统(先以TLD为地基)中去;三是分析目前存在的问题与未来的解决构思。
一、input子系统和模拟编写:
Linux 输入子系统是 Linux内核用于管理各种输入设备(键盘,鼠标,遥控杆,书写板等等)的。输入子系统分为三块: input core, drivers和 event handlers。正常的路径是从底层硬件到驱动,从驱动到 input core,从 input core到 event handler,从 event handler到 user space。
这么说吧:如果是没有这个input子系统的话,假如我们用键盘按下了一个键A,键盘会有一个linux的设备驱动文件,假设是/dev/keyboard,我们的用户空间的赢咖4平台就会打开并访问这个设备文件/dev/keyboard,赢咖4平台会轮询这个文件,一旦你按下了一个键A了,它就会返回给用户程序说你按下了键A。那么如果有了input子系统的话,我们的用户空间的赢咖4平台就不是直接打开和访问键盘的设备驱动文件了,而是访问由键盘驱动在input子系统中注册的event事件文件,例如/dev/input/event3,而对于键盘驱动来说,它也是实现由input子系统提供的接口就可以了。按下键了,就发送给input子系统。不再直接与用户空间的赢咖4平台直接面对面了。这样,就很方便的对驱动和赢咖4平台都统一了接口,而且同一种接口还适合管理多种硬件。好像很简单的问题给我啰嗦化了,不知道有没有说错,呵呵。
这个input子系统可以很容易地让我们在用户空间模拟鼠标和键盘事件。例如,你可以写一个赢咖4平台,往input子系统的/dev/input/event3设备文件(假设这个是键盘设备文件)写入A,这样就相当于你通过键盘按下了A,而这个A对系统任意的一个当前活动窗口有效(捕捉)。
要实现这个功能,我们需要回答一下几个问题:
1、往什么设备文件写?
也就是如何查看哪些设备文件是键盘的,哪些是鼠标的,找到这些设备文件,我们才可以通过赢咖4平台来打开和写入键值(或者鼠标的控制信息)。
通过 #cat /proc/bus/input/devices可以查看到当前input子系统下面的所有event设备,我们找到鼠标和键盘的即可。
例如:
I: Bus=0003 Vendor=046d Product=c018 Version=0111
N: Name=" USB Optical Mouse"
P: Phys=usb-0000:00:1d.1-2/input0
S: Sysfs=/class/input/input24
U: Uniq=