1、getevent介绍
root@sabresd_6dq:/ # getevent
add device 1: /dev/input/event0
name: "ar1021 Touchscreen"
could not get driver version for /dev/input/mice, Not a typewriter
add device 2: /dev/input/event2
name: "gpio-keys"
add device 3: /dev/input/event1
name: "WM8962 Beep Generator"
//这个后面是音量加
/dev/input/event2: 0001 0073 00000001 //按下:注意这里的0073为十六进制数
/dev/input/event2: 0000 0000 00000000 //同步
/dev/input/event2: 0001 0073 00000000 //松开
/dev/input/event2: 0000 0000 00000000 //同步
//这个后面是音量减
/dev/input/event2: 0001 0072 00000001
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0001 0072 00000000
/dev/input/event2: 0000 0000 00000000
130|root@sabresd_6dq:/ # getevent -lt /dev/input/event2
[ 2604.070121] EV_KEY KEY_VOLUMEUP DOWN
[ 2604.070121] EV_SYN SYN_REPORT 00000000
[ 2604.270183] EV_KEY KEY_VOLUMEUP UP
[ 2604.270183] EV_SYN SYN_REPORT 00000000
[ 2606.510123] EV_KEY KEY_VOLUMEDOWN DOWN
[ 2606.510123] EV_SYN SYN_REPORT 00000000
[ 2606.620089] EV_KEY KEY_VOLUMEDOWN UP
[ 2606.620089] EV_SYN SYN_REPORT 00000000`在这里插入代码片`
getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。
这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c
关于event设备的获取,在 /proc/bus/input/devices 下面:
$ adb shell cat /proc/bus/input/devices
=========================
一、getevent
获取getevent 的使用方法 : getevent -h
getevent 监控当前的事件, 鼠标事件, 按键事件, 拖动滑动 以及其他类型的event事件;
使用getevent 获得/dev/input/eventX设备 汇报的事件,这个命令会输出所有event设备的 基本信息,如下:
shell@pc7625:/ $ getevent
add device 1: /dev/input/event6
name: “accel”
add device 2: /dev/input/event5
name: “goodix_ts”
add device 3: /dev/input/event0
name: “Power Button”
add device 4: /dev/input/event1
name: “Video Bus”
add device 5: /dev/input/event4
name: “baytrailaudio Intel MID Audio Jack”
add device 6: /dev/input/event2
name: “gpio-lesskey”
add device 7: /dev/input/event3
name: “dollar_cove_power_button”
表明系统有 7个event设备 ;
在我的android设备里,event2 代表 音量加减按键;
shell@pc7625:/ $ getevent /dev/input/event2 &
点击 音量减按键 :
按键 按下的log :
0001 0072 00000001
0000 0000 00000000
按键 弹起的log :
0001 0072 00000000
0000 0000 00000000
其中/dev/input/event2 是device的名字 ;
0001 是type;
0072 是键码;
最后一个根据type不同而不同;
比如上面的 00000001 就是按下 音量键的keydown,00000000 是松开 音量键的keyup;
具体的type,code,value的定义 可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到;
=============================
二、sendevent:
命令格式 : sendevent [device] [type] [code] [value]
需要注意的是在 getevent 中code显示的是十六进制, 而sendevent 中需要用 十进制
1、模拟发送一个 音量加键:
按下 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000001
/dev/input/event3: 0000 0000 00000000
松开 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000000
/dev/input/event3: 0000 0000 00000000
------------- 模拟 按键 ------------
发送 按下 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 1
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
发送 松开 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 0
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
type, code, value的定义可参看kernel/include/linux/input.h
type如下定义:
/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN
分别对应keyboard, 相对坐标, 绝对坐标, 同步事件
EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型
EV_SYN对应的code如下:
/*
* Synchronization events.
*/
#define SYN_REPORT 0
#define SYN_CONFIG 1
#define SYN_MT_REPORT 2
EV_KEY的code比较多,这里就不列出来了,可参照input.h
EV_REL对应的code:
/*
* Relative axes
*/
#define REL_X 0x00
#define REL_Y 0x01
#define REL_Z 0x02
#define REL_RX 0x03
#define REL_RY 0x04
#define REL_RZ 0x05
#define REL_HWHEEL 0x06
#define REL_DIAL 0x07
#define REL_WHEEL 0x08
#define REL_MISC 0x09
#define REL_MAX 0x0f
#define REL_CNT (REL_MAX+1)
EV_ABS对应的code:
/*
* Absolute axes
*/
#define ABS_X 0x00
#define ABS_Y 0x01
#define ABS_Z 0x02
#define ABS_RX 0x03
#define ABS_RY 0x04
#define ABS_RZ 0x05
#define ABS_THROTTLE 0x06
#define ABS_RUDDER 0x07
#define ABS_WHEEL 0x08
#define ABS_GAS 0x09
#define ABS_BRAKE 0x0a
#define ABS_HAT0X 0x10
#define ABS_HAT0Y 0x11
#define ABS_HAT1X 0x12
#define ABS_HAT1Y 0x13
#define ABS_HAT2X 0x14
#define ABS_HAT2Y 0x15
#define ABS_HAT3X 0x16
#define ABS_HAT3Y 0x17
#define ABS_PRESSURE 0x18
#define ABS_DISTANCE 0x19
#define ABS_TILT_X 0x1a
#define ABS_TILT_Y 0x1b
#define ABS_TOOL_WIDTH 0x1c
#define ABS_VOLUME 0x20
#define ABS_MISC 0x28
###
#define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
#define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
#define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
#define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
#define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
#define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
#define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
#define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
#define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
#define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
###
#define ABS_MAX 0x3f
#define ABS_CNT (ABS_MAX+1)
=====================================================================================
三、input keyevent
如果想模拟按键,send event用起来比较繁琐,可以用input keyevent代替
下面是input keyevent几个比较常用的用法:
input keyevent 3 // Home
input keyevent 4 // Back
input keyevent 19 //Up
input keyevent 20 //Down
input keyevent 21 //Left
input keyevent 22 //Right
input keyevent 23 //Select/Ok
input keyevent 24 //Volume+
input keyevent 25 // Volume-
input keyevent 82 // Menu 菜单
更多的按键事件keycode可参考:http://www.cnblogs.com/mgzc-1508873480/p/7826967.html
用senevent 模拟触屏事件
sendevent /dev/input/event1 0003 0000 0000015e // ABS x 坐标
sendevent /dev/input/event1: 0003 0001 000000df // ABS y 坐标
sendevent /dev/input/event1: 0001 014a 00000001 // BTN touch事件 值为1
sendevent /dev/input/event1: 0003 0018 00000000 // ABS pressure事件
sendevent /dev/input/event1: 0001 014a 00000000 // BTN touch事件 值为0
sendevent /dev/input/event1: 0000 0000 00000000 // sync事件
**
adb命令模拟按键事件KeyCode
**
例子:
//这条命令相当于按了设备的Backkey键
adb shell input keyevent 4
//可以解锁屏幕
adb shell input keyevent 82
//在屏幕上做划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒)
adb shell input swipe 50 250 250 250 500
//在屏幕上点击坐标点x=50 y=250的位置。
adb shell input tap 50 250
//输入字符abc
adb shell input text abc
每个数字与keycode对应表如下:
0 --> “KEYCODE_UNKNOWN”
1 --> “KEYCODE_MENU”
2 --> “KEYCODE_SOFT_RIGHT”
3 --> “KEYCODE_HOME”
4 --> “KEYCODE_BACK”
5 --> “KEYCODE_CALL”
6 --> “KEYCODE_ENDCALL”
7 --> “KEYCODE_0”
8 --> “KEYCODE_1”
9 --> “KEYCODE_2”
10 --> “KEYCODE_3”
11 --> “KEYCODE_4”
12 --> “KEYCODE_5”
13 --> “KEYCODE_6”
14 --> “KEYCODE_7”
15 --> “KEYCODE_8”
16 --> “KEYCODE_9”
17 --> “KEYCODE_STAR”
18 --> “KEYCODE_POUND”
19 --> “KEYCODE_DPAD_UP”
20 --> “KEYCODE_DPAD_DOWN”
21 --> “KEYCODE_DPAD_LEFT”
22 --> “KEYCODE_DPAD_RIGHT”
23 --> “KEYCODE_DPAD_CENTER”
24 --> “KEYCODE_VOLUME_UP”
25 --> “KEYCODE_VOLUME_DOWN”
26 --> “KEYCODE_POWER”
27 --> “KEYCODE_CAMERA”
28 --> “KEYCODE_CLEAR”
29 --> “KEYCODE_A”
30 --> “KEYCODE_B”
31 --> “KEYCODE_C”
32 --> “KEYCODE_D”
33 --> “KEYCODE_E”
34 --> “KEYCODE_F”
35 --> “KEYCODE_G”
36 --> “KEYCODE_H”
37 --> “KEYCODE_I”
38 --> “KEYCODE_J”
39 --> “KEYCODE_K”
40 --> “KEYCODE_L”
41 --> “KEYCODE_M”
42 --> “KEYCODE_N”
43 --> “KEYCODE_O”
44 --> “KEYCODE_P”
45 --> “KEYCODE_Q”
46 --> “KEYCODE_R”
47 --> “KEYCODE_S”
48 --> “KEYCODE_T”
49 --> “KEYCODE_U”
50 --> “KEYCODE_V”
51 --> “KEYCODE_W”
52 --> “KEYCODE_X”
53 --> “KEYCODE_Y”
54 --> “KEYCODE_Z”
55 --> “KEYCODE_COMMA”
56 --> “KEYCODE_PERIOD”
57 --> “KEYCODE_ALT_LEFT”
58 --> “KEYCODE_ALT_RIGHT”
59 --> “KEYCODE_SHIFT_LEFT”
60 --> “KEYCODE_SHIFT_RIGHT”
61 --> “KEYCODE_TAB”
62 --> “KEYCODE_SPACE”
63 --> “KEYCODE_SYM”
64 --> “KEYCODE_EXPLORER”
65 --> “KEYCODE_ENVELOPE”
66 --> “KEYCODE_ENTER”
67 --> “KEYCODE_DEL”
68 --> “KEYCODE_GRAVE”
69 --> “KEYCODE_MINUS”
70 --> “KEYCODE_EQUALS”
71 --> “KEYCODE_LEFT_BRACKET”
72 --> “KEYCODE_RIGHT_BRACKET”
73 --> “KEYCODE_BACKSLASH”
74 --> “KEYCODE_SEMICOLON”
75 --> “KEYCODE_APOSTROPHE”
76 --> “KEYCODE_SLASH”
77 --> “KEYCODE_AT”
78 --> “KEYCODE_NUM”
79 --> “KEYCODE_HEADSETHOOK”
80 --> “KEYCODE_FOCUS”
81 --> “KEYCODE_PLUS”
82 --> “KEYCODE_MENU”
83 --> “KEYCODE_NOTIFICATION”
84 --> “KEYCODE_SEARCH”
85 --> “TAG_LAST_KEYCODE”
KEYCODE列表
电话键
KEYCODE_CALL
拨号键
5
KEYCODE_ENDCALL
挂机键
6
KEYCODE_HOME
按键Home
3
KEYCODE_MENU
菜单键
82
KEYCODE_BACK
返回键
4
KEYCODE_SEARCH
搜索键
84
KEYCODE_CAMERA
拍照键
27
KEYCODE_FOCUS
拍照对焦键
80
KEYCODE_POWER
电源键
26
KEYCODE_NOTIFICATION
通知键
83
KEYCODE_MUTE
话筒静音键
91
KEYCODE_VOLUME_MUTE
扬声器静音键
164
KEYCODE_VOLUME_UP
音量增加键
24
KEYCODE_VOLUME_DOWN
音量减小键
25
控制键
KEYCODE_ENTER
回车键
66
KEYCODE_ESCAPE
ESC键
111
KEYCODE_DPAD_CENTER
导航键 确定键
23
KEYCODE_DPAD_UP
导航键 向上
19
KEYCODE_DPAD_DOWN
导航键 向下
20
KEYCODE_DPAD_LEFT
导航键 向左
21
KEYCODE_DPAD_RIGHT
导航键 向右
22
KEYCODE_MOVE_HOME
光标移动到开始键
122
KEYCODE_MOVE_END
光标移动到末尾键
123
KEYCODE_PAGE_UP
向上翻页键
92
KEYCODE_PAGE_DOWN
向下翻页键
93
KEYCODE_DEL
退格键
67
KEYCODE_FORWARD_DEL
删除键
112
KEYCODE_INSERT
插入键
124
KEYCODE_TAB
Tab键
61
KEYCODE_NUM_LOCK
小键盘锁
143
KEYCODE_CAPS_LOCK
大写锁定键
115
KEYCODE_BREAK
Break/Pause键
121
KEYCODE_SCROLL_LOCK
滚动锁定键
116
KEYCODE_ZOOM_IN
放大键
168
KEYCODE_ZOOM_OUT
缩小键
169
组合键
KEYCODE_ALT_LEFT
Alt+Left
KEYCODE_ALT_RIGHT
Alt+Right
KEYCODE_CTRL_LEFT
Control+Left
KEYCODE_CTRL_RIGHT
Control+Right
KEYCODE_SHIFT_LEFT
Shift+Left
KEYCODE_SHIFT_RIGHT
Shift+Right
基本
KEYCODE_0
按键’0’
7
KEYCODE_1
按键’1’
8
KEYCODE_2
按键’2’
9
KEYCODE_3
按键’3’
10
KEYCODE_4
按键’4’
11
KEYCODE_5
按键’5’
12
KEYCODE_6
按键’6’
13
KEYCODE_7
按键’7’
14
KEYCODE_8
按键’8’
15
KEYCODE_9
按键’9’
16
KEYCODE_A
按键’A’
29
KEYCODE_B
按键’B’
30
KEYCODE_C
按键’C’
31
KEYCODE_D
按键’D’
32
KEYCODE_E
按键’E’
33
KEYCODE_F
按键’F’
34
KEYCODE_G
按键’G’
35
KEYCODE_H
按键’H’
36
KEYCODE_I
按键’I’
37
KEYCODE_J
按键’J’
38
KEYCODE_K
按键’K’
39
KEYCODE_L
按键’L’
40
KEYCODE_M
按键’M’
41
KEYCODE_N
按键’N’
42
KEYCODE_O
按键’O’
43
KEYCODE_P
按键’P’
44
KEYCODE_Q
按键’Q’
45
KEYCODE_R
按键’R’
46
KEYCODE_S
按键’S’
47
KEYCODE_T
按键’T’
48
KEYCODE_U
按键’U’
49
KEYCODE_V
按键’V’
50
KEYCODE_W
按键’W’
51
KEYCODE_X
按键’X’
52
KEYCODE_Y
按键’Y’
53
KEYCODE_Z
按键’Z’
54
符号
KEYCODE_PLUS
按键’+’
KEYCODE_MINUS
按键’-’
KEYCODE_STAR
按键’*’
KEYCODE_SLASH
按键’/’
KEYCODE_EQUALS
按键’=’
KEYCODE_AT
按键’@’
KEYCODE_POUND
按键’#’
KEYCODE_APOSTROPHE
按键’’’ (单引号)
KEYCODE_BACKSLASH
按键’’
KEYCODE_COMMA
按键’,’
KEYCODE_PERIOD
按键’.’
KEYCODE_LEFT_BRACKET
按键’[’
KEYCODE_RIGHT_BRACKET
按键’]’
KEYCODE_SEMICOLON
按键’;’
KEYCODE_GRAVE
按键’`’
KEYCODE_SPACE
空格键
小键盘
KEYCODE_NUMPAD_0
小键盘按键’0’
KEYCODE_NUMPAD_1
小键盘按键’1’
KEYCODE_NUMPAD_2
小键盘按键’2’
KEYCODE_NUMPAD_3
小键盘按键’3’
KEYCODE_NUMPAD_4
小键盘按键’4’
KEYCODE_NUMPAD_5
小键盘按键’5’
KEYCODE_NUMPAD_6
小键盘按键’6’
KEYCODE_NUMPAD_7
小键盘按键’7’
KEYCODE_NUMPAD_8
小键盘按键’8’
KEYCODE_NUMPAD_9
小键盘按键’9’
KEYCODE_NUMPAD_ADD
小键盘按键’+’
KEYCODE_NUMPAD_SUBTRACT
小键盘按键’-’
KEYCODE_NUMPAD_MULTIPLY
小键盘按键’*’
KEYCODE_NUMPAD_DIVIDE
小键盘按键’/’
KEYCODE_NUMPAD_EQUALS
小键盘按键’=’
KEYCODE_NUMPAD_COMMA
小键盘按键’,’
KEYCODE_NUMPAD_DOT
小键盘按键’.’
KEYCODE_NUMPAD_LEFT_PAREN
小键盘按键’(’
KEYCODE_NUMPAD_RIGHT_PAREN
小键盘按键’)’
KEYCODE_NUMPAD_ENTER
小键盘按键回车
功能键
KEYCODE_F1
按键F1
KEYCODE_F2
按键F2
KEYCODE_F3
按键F3
KEYCODE_F4
按键F4
KEYCODE_F5
按键F5
KEYCODE_F6
按键F6
KEYCODE_F7
按键F7
KEYCODE_F8
按键F8
KEYCODE_F9
按键F9
KEYCODE_F10
按键F10
KEYCODE_F11
按键F11
KEYCODE_F12
按键F12
多媒体键
KEYCODE_MEDIA_PLAY
多媒体键 播放
KEYCODE_MEDIA_STOP
多媒体键 停止
KEYCODE_MEDIA_PAUSE
多媒体键 暂停
KEYCODE_MEDIA_PLAY_PAUSE
多媒体键 播放/暂停
KEYCODE_MEDIA_FAST_FORWARD
多媒体键 快进
KEYCODE_MEDIA_REWIND
多媒体键 快退
KEYCODE_MEDIA_NEXT
多媒体键 下一首
KEYCODE_MEDIA_PREVIOUS
多媒体键 上一首
KEYCODE_MEDIA_CLOSE
多媒体键 关闭
KEYCODE_MEDIA_EJECT
多媒体键 弹出
KEYCODE_MEDIA_RECORD
多媒体键 录音
手柄按键
KEYCODE_BUTTON_1
通用游戏手柄按钮#1
KEYCODE_BUTTON_2
通用游戏手柄按钮 #2
KEYCODE_BUTTON_3
通用游戏手柄按钮 #3
KEYCODE_BUTTON_4
通用游戏手柄按钮 #4
KEYCODE_BUTTON_5
通用游戏手柄按钮 #5
KEYCODE_BUTTON_6
通用游戏手柄按钮 #6
KEYCODE_BUTTON_7
通用游戏手柄按钮 #7
KEYCODE_BUTTON_8
通用游戏手柄按钮 #8
KEYCODE_BUTTON_9
通用游戏手柄按钮 #9
KEYCODE_BUTTON_10
通用游戏手柄按钮 #10
KEYCODE_BUTTON_11
通用游戏手柄按钮 #11
KEYCODE_BUTTON_12
通用游戏手柄按钮 #12
KEYCODE_BUTTON_13
通用游戏手柄按钮 #13
KEYCODE_BUTTON_14
通用游戏手柄按钮 #14
KEYCODE_BUTTON_15
通用游戏手柄按钮 #15
KEYCODE_BUTTON_16
通用游戏手柄按钮 #16
KEYCODE_BUTTON_A
游戏手柄按钮 A
KEYCODE_BUTTON_B
游戏手柄按钮 B
KEYCODE_BUTTON_C
游戏手柄按钮 C
KEYCODE_BUTTON_X
游戏手柄按钮 X
KEYCODE_BUTTON_Y
游戏手柄按钮 Y
KEYCODE_BUTTON_Z
游戏手柄按钮 Z
KEYCODE_BUTTON_L1
游戏手柄按钮 L1
KEYCODE_BUTTON_L2
游戏手柄按钮 L2
KEYCODE_BUTTON_R1
游戏手柄按钮 R1
KEYCODE_BUTTON_R2
游戏手柄按钮 R2
KEYCODE_BUTTON_MODE
游戏手柄按钮 Mode
KEYCODE_BUTTON_SELECT
游戏手柄按钮 Select
KEYCODE_BUTTON_START
游戏手柄按钮 Start
KEYCODE_BUTTON_THUMBL
Left Thumb Button
KEYCODE_BUTTON_THUMBR
Right Thumb Button
待查
KEYCODE_NUM
按键Number modifier
KEYCODE_INFO
按键Info
KEYCODE_APP_SWITCH
按键App switch
KEYCODE_BOOKMARK
按键Bookmark
KEYCODE_AVR_INPUT
按键A/V Receiver input
KEYCODE_AVR_POWER
按键A/V Receiver power
KEYCODE_CAPTIONS
按键Toggle captions
KEYCODE_CHANNEL_DOWN
按键Channel down
KEYCODE_CHANNEL_UP
按键Channel up
KEYCODE_CLEAR
按键Clear
KEYCODE_DVR
按键DVR
KEYCODE_ENVELOPE
按键Envelope special function
KEYCODE_EXPLORER
按键Explorer special function
KEYCODE_FORWARD
按键Forward
KEYCODE_FORWARD_DEL
按键Forward Delete
KEYCODE_FUNCTION
按键Function modifier
KEYCODE_GUIDE
按键Guide
KEYCODE_HEADSETHOOK
按键Headset Hook
KEYCODE_META_LEFT
按键Left Meta modifier
KEYCODE_META_RIGHT
按键Right Meta modifier
KEYCODE_PICTSYMBOLS
按键Picture Symbols modifier
KEYCODE_PROG_BLUE
按键Blue “programmable”
KEYCODE_PROG_GREEN
按键Green “programmable”
KEYCODE_PROG_RED
按键Red “programmable”
KEYCODE_PROG_YELLOW
按键Yellow “programmable”
KEYCODE_SETTINGS
按键Settings
KEYCODE_SOFT_LEFT
按键Soft Left
KEYCODE_SOFT_RIGHT
按键Soft Right
KEYCODE_STB_INPUT
按键Set-top-box input
KEYCODE_STB_POWER
按键Set-top-box power
KEYCODE_SWITCH_CHARSET
按键Switch Charset modifier
KEYCODE_SYM
按键Symbol modifier
KEYCODE_SYSRQ
按键System Request / Print Screen
KEYCODE_TV
按键TV
KEYCODE_TV_INPUT
按键TV input
KEYCODE_TV_POWER
按键TV power
KEYCODE_WINDOW
按键Window
KEYCODE_UNKNOWN