linux input event 子系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux input event 子系统相关的知识,希望对你有一定的参考价值。

参考技术A 一、linux input 子系统中,每个输入设备可以建立一个devices,如插入USB mouse的时候会建立,在系统、dev/input目录下就会生成一个对应的device,如:/dev/input/event0,可以通过读取device获取输入设备的信息; 具体可以访问 http://blog.sina.com.cn/s/blog_602f87700101dno6.html

0.1:关键结构体input_event信息:
struct input_event
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
;

type: 设备类型。可以设置为:

sdk封装的解决思路;
type: EV_REL鼠标设备 0x02
code : rel_x 0x00 表示x轴方向 rel_y 0x01 表示y轴方向 (一次鼠标移动会产生两个input event事件)
value: EV_REL type下有正负表示方向

介绍键盘的code
Type为EV_KEY时,value: 0表示按键抬起。1表示按键按下。(4表示持续按下等?)。

问题:因为会出现一次鼠标移动就有两个事件产生,所以就要判断这一时刻到底是哪个事件
方法:

鼠标事件:

上1
下0
左2
右3

键盘事件:
上103
下108
左105
右106
停28

蓝牙键盘
1:2
2:3
3:4
4:5
5:6
w:17
a:30
s:31
d:32

Linux input子系统应用编程(10)查看与/dev/input目录下的event对应的设备

  1. /dev/input目录
    /dev/input目录下的事件都是在驱动中调用input_register_device(struct input_dev *dev)产生的。如我的盒子的/dev/input目录的内容如下:
crw-rw---- root     input     13,  64 1970-01-01 08:00 event0
crw-rw---- root     input     13,  65 1970-01-01 08:00 event1
crw-rw---- root     input     13,  66 1970-01-01 08:00 event2
crw-rw---- root     input     13,  67 1970-01-01 08:00 event3
crw-rw---- root     input     13,  68 1970-01-01 08:00 event4
crw-rw---- root     input     13,  69 1970-01-01 08:00 event5
crw-rw---- root     input     13,  70 2013-08-30 09:56 event6
每个event将上报指定的事件,如G-Sensor、触摸屏、Mouse、按键等。
  1. 与event对应的设备信息
    与event对应的相关设备信息位于/proc/bus/input/devices,例子如下:
root@android:/ # cat /proc/bus/input/devices
cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="rk29-keypad"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/rk29-keypad/input/input0
U: Uniq=
H: Handlers=kbd event0 keychord
B: PROP=0
B: EV=3
B: KEY=8000 100000 0 0 0
 
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="rkxx-remotectl"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/rkxx-remotectl/input/input1
U: Uniq=
H: Handlers=kbd event1 keychord
B: PROP=0
B: EV=3
B: KEY=c 70110 260000 0 0 0 20100 2000000 7800000 4000a800 1e16c0 19 78000000 10006ffc
 
I: Bus=0003 Vendor=0c45 Product=1109 Version=0100
N: Name="coocaa Device coocaa Wireless Device"
P: Phys=usb-usb20_host-1.3/input2
S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.3/2-1.3:1.2/input/input2
U: Uniq=
H: Handlers=sysrq kbd event2 keychord
B: PROP=0
B: EV=12001b
B: KEY=10000 7 ff800000 7ff febeffdf ffefffff ffffffff fffffffe
B: ABS=700 0
B: MSC=10
B: LED=1f
 
I: Bus=0003 Vendor=0c45 Product=1109 Version=0100
N: Name="coocaa Device coocaa Wireless Device"
P: Phys=usb-usb20_host-1.3/input3
S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.3/2-1.3:1.3/input/input3
U: Uniq=
H: Handlers=sysrq kbd event3 keychord
B: PROP=0
B: EV=12001f
B: KEY=4837fff 72ff32d bf544446 0 0 1 30f90 8b17c007 ffe77bfa d941dfff febeffdf ffefffff ffffffff fffffffe
B: REL=40
B: ABS=ffffff01 0
B: MSC=10
B: LED=1f
 
I: Bus=0003 Vendor=0c45 Product=1109 Version=0100
N: Name="coocaa Device coocaa Wireless Device"
P: Phys=usb-usb20_host-1.3/input4
S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.3/2-1.3:1.4/input/input4
U: Uniq=
H: Handlers=event4
B: PROP=0
B: EV=17
B: KEY=1f0000 0 0 0 0 0 0 0 0
B: REL=103
B: MSC=10
 
I: Bus=0003 Vendor=0c45 Product=1109 Version=0100
N: Name="coocaa Device coocaa Wireless Device"
P: Phys=usb-usb20_host-1.3/input5
S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.3/2-1.3:1.5/input/input5
U: Uniq=
H: Handlers=sysrq kbd event5 keychord
B: PROP=0
B: EV=12001f
B: KEY=4837fff 72ff32d bf544446 0 0 1 30f90 8b17c007 ffff7bfa d941dfff febeffdf ffefffff ffffffff fffffffe
B: REL=40
B: ABS=1 0
B: MSC=10
B: LED=1f
 
I: Bus=0003 Vendor=093a Product=2510 Version=0111
N: Name="PixArt USB Optical Mouse"
P: Phys=usb-usb20_host-1.2.4/input0
S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.2/2-1.2.4/2-1.2.4:1.0/input/input7
U: Uniq=
H: Handlers=event6
B: PROP=0
B: EV=17
B: KEY=70000 0 0 0 0 0 0 0 0
B: REL=103
B: MSC=10

在上面的H:中可以看到对应的eventxx。

以上是关于linux input event 子系统的主要内容,如果未能解决你的问题,请参考以下文章

Linux input子系统应用编程(10)查看与/dev/input目录下的event对应的设备

Linux input子系统应用编程(10)查看与/dev/input目录下的event对应的设备

Linux/Android——输入子系统input_event传递

嵌入式Linux系统的电子书阅读器项目4——Input Event System

input子系统

Linux INPUT 子系统实验