Android 系统下 getevent 工具
Android 系统下 getevent 工具
- 1、getevent
- 2、InputEvent 事件
- 2.1 触摸事件
- 2.2 音量按键
/system/bin/getevent
/system/bin/toolbox
/system/bin/toybox
IMS添加实体按键流程 - Android14
1、getevent
getevent
是一个在 Android 系统 或 Linux 嵌入式设备 中常用的调试命令,用于实时查看内核输入事件(input events
),这里主要查看Android系统。
system/core/toolbox/getevent.c
lrwxr-xr-x 1 root shell u:object_r:system_file:s0 7 2009-01-01 08:00 system/bin/getevent -> toolbox
命令|说明
getevent | 列出所有输入设备 |
---|---|
getevent -l | 以可读格式列出设备(推荐) |
getevent /dev/input/event0 | 监听指定设备事件 |
getevent -l /dev/input/event0 | 以可读格式监听事件 |
getevent -p /dev/input/event0 | 查看设备能力 |
2、InputEvent 事件
/dev/input/eventX: type code value
字段 含义 eventX 输入设备节点(如触摸屏、按键) type 事件类型(如按键EV_KEY、绝对坐标EV_ABS) code 事件代码(具体键码或坐标轴) value 事件值(1=按下,0=释放,2=重复)
frameworks/native/services/inputflinger/reader/InputReader.cpp
frameworks/native/services/inputflinger/reader/EventHub.cpp
/** A raw event as retrieved from the EventHub.*/
struct RawEvent {// Time when the event happenednsecs_t when;// Time when the event was read by EventHub. Only populated for input events.// For other events (device added/removed/etc), this value is undefined and should not be read.nsecs_t readTime;int32_t deviceId;int32_t type;int32_t code;int32_t value;
};
2.1 触摸事件
/dev/input/event2: 0001 014a 00000001
/dev/input/event2: 0003 0039 0000007c
/dev/input/event2: 0003 0035 000000d7
/dev/input/event2: 0003 0036 0000049a
/dev/input/event2: 0001 0145 00000001
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0003 0039 ffffffff
/dev/input/event2: 0001 014a 00000000
/dev/input/event2: 0001 0145 00000000
/dev/input/event2: 0000 0000 00000000
行 | 事件(type code value) | 含义 |
---|---|---|
1 | 0001 014a 00000001 | 按下触摸屏(BTN_TOUCH) |
2 | 0003 0039 0000007c | 多点触控槽 ID = 124(0x7c) |
3 | 0003 0035 000000d7 | X 坐标 = 215(0xd7) |
4 | 0003 0036 0000049a | Y 坐标 = 1178(0x49a) |
5 | 0001 0145 00000001 | 按下触控笔/触控点 2(BTN_TOOL_FINGER) |
6 | 0000 0000 00000000 | 同步事件(SYNC_REPORT),表示一帧结束 |
7 | 0003 0039 ffffffff | 多点触控槽 ID = -1(无效,表示释放) |
8 | 0001 014a 00000000 | 抬起触摸屏(BTN_TOUCH = 0) |
9 | 0001 0145 00000000 | 抬起触控笔/触控点 2 |
10 | 0000 0000 00000000 | 同步事件,表示抬起帧结束 |
getevent -l /dev/input/event1
EV_KEY BTN_TOUCH DOWN
EV_ABS ABS_MT_TRACKING_ID 0000003e
EV_ABS ABS_MT_POSITION_X 00000105
EV_ABS ABS_MT_POSITION_Y 00000363
EV_KEY BTN_TOOL_FINGER DOWN
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_TRACKING_ID ffffffff
EV_KEY BTN_TOUCH UP
EV_KEY BTN_TOOL_FINGER UP
EV_SYN SYN_REPORT 00000000
2.2 音量按键
/dev/input/event1: 0001 0072 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 0072 00000000
/dev/input/event1: 0000 0000 00000000
行 | 事件(type code value) | 含义 |
---|---|---|
1 | 0001 0072 00000001 | 音量下键 (ScanCode=0x72, KeyCode=25)按下(0x1) |
2 | 0000 0000 00000000 | 同步事件 |
3 | 0001 0072 00000000 | 音量下键 (ScanCode=0x72, KeyCode=25)释放(0x0) |
4 | 0000 0000 00000000 | 同步事件 |
底层键值ScanCode对应文件: frameworks/base/data/keyboards/Generic.kl
ScanCode转化:#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key }
getevent -l /dev/input/event1
EV_KEY KEY_VOLUMEDOWN DOWN
EV_SYN SYN_REPORT 00000000
EV_KEY KEY_VOLUMEDOWN UP
EV_SYN SYN_REPORT 00000000