前言
在嵌入式开发中,按键和触摸板等输入系统很常见,其驱动文件位于/dev/input
下,以event开头,后接数字。epoll是2.6内核引入的I/O多路复用的新的高效的接口,我在以前的博客中,使用其实现了一个聊天室服务器程序。这里我们使用其来监控input子系统事件。
在嵌入式软件开发中,小的程序,我们可以直接使用I/O接口来获得外部的时间输入,而如果对于一个大型的嵌入式软件系统,其会被很多地方用到,那么就需要进行相应的封装处理,对外提供统一的接口。
Dispatcher
本篇我们就来实现我们自己的Dispatcher,开始的时候我只监控KeyBoard的事件,所以叫KeyDispatcher
,后来加入了鼠标,所以不要奇怪类型。
查看本机的Input设备
使用cat /pro/bus/input/devices
命令,我得到了我的键盘和鼠标的驱动文件名。
I: Bus=0003 Vendor=24ae Product=2000 Version=0101
N: Name="RAPOO RAPOO 2.4G Wireless Device"
P: Phys=usb-0000:00:1d.0-1.3/input1
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.1/input/input15
U: Uniq=
H: Handlers=kbd mouse0 event7
B: PROP=0
B: EV=1f
B: KEY=4837fff072ff32d bf54444600000000 1f0001 20f908b17c000 677bfad941dfed 9ed68000004400 10000002
B: REL=1c3
我使用的是RAPOO的无线鼠标,H: Handlers=kbd mouse0 event7
mouse0,为/dev/input
目录下的event7文件。
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input4
U: Uniq=
H: Handlers=sysrq kbd event4
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: