# Android getevent用法详解

背景

在调试安卓设备按键,想使用hexdump,但是发现没有找到,反而找到了这个更好用的工具。

以下是我的调试片段

# getevent -l /dev/input/event0
EV_KEY KEY_ENTER DOWN
EV_SYN SYN_REPORT 00000000
EV_KEY KEY_ENTER UP
EV_SYN SYN_REPORT 00000000 EV_KEY KEY_UP DOWN
EV_SYN SYN_REPORT 00000000
EV_KEY KEY_UP UP
EV_SYN SYN_REPORT 00000000
EV_KEY KEY_BACK DOWN
EV_SYN SYN_REPORT 00000000

前言

修改来自:Android getevent用法详解

getevent 指令用于获取 input 输入事件,比如获取按键上报信息、获取触摸屏上报信息等。

程序的实现:system/core/toolbox/getevent.c

用法

getevent -h:查看 getevent 帮助信息

# getevent -h
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
-t: show time stamps
-n: don't print newlines
-s: print switch states for given bits
-S: print all switch states
-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
-d: show HID descriptor, if available
-p: show possible events (errs, dev, name, pos. events)
-i: show all device info and possible events
-l: label event types and names in plain text
-q: quiet (clear verbosity mask)
-c: print given number of events then exit
-r: print rate events are received

getevent:显示当前有那些输入设备,数量与 /dev/input 目录下相同。

由于会将对应的设备节点以及设备描述打印出来,因此非常方便调试人员后续选择对应的设备。

此时,接收任何一切输入

#  getevent -l
add device 1: /dev/input/event6
name: "msm8909-snd-card Headset Jack"
add device 2: /dev/input/event5
name: "msm8909-snd-card Button Jack"
add device 3: /dev/input/event2
name: "qpnp_pon"
add device 4: /dev/input/event1
name: "gpiokey-pulley"
could not get driver version for /dev/input/mice, Not a typewriter
add device 5: /dev/input/event3
name: "gpio-keys"
add device 6: /dev/input/event0
name: "aw9523-keys"
add device 7: /dev/input/event4
name: "accelerometer"
/dev/input/event0: EV_KEY KEY_UP DOWN
/dev/input/event0: EV_SYN SYN_REPORT 00000000
/dev/input/event0: EV_KEY KEY_UP UP
/dev/input/event0: EV_SYN SYN_REPORT 00000000
/dev/input/event0: EV_KEY KEY_LEFT DOWN
/dev/input/event0: EV_SYN SYN_REPORT 00000000
/dev/input/event0: EV_KEY KEY_LEFT UP
/dev/input/event0: EV_SYN SYN_REPORT 00000000
/dev/input/event2: EV_KEY KEY_POWER UP
/dev/input/event2: EV_SYN SYN_REPORT 00000000
/dev/input/event3: EV_KEY KEY_F1 DOWN
/dev/input/event3: EV_SYN SYN_REPORT 00000000
/dev/input/event3: EV_KEY KEY_F1 UP
/dev/input/event3: EV_SYN SYN_REPORT 00000000
/dev/input/event3: EV_KEY KEY_F1 DOWN
/dev/input/event3: EV_SYN SYN_REPORT 00000000 # ls /dev/input/
event0 event1 event2 event3 event4 event5 event6 mice

读取指定的设备 读取 event3 数据(触摸屏)

# getevent /dev/input/event3
0003 0039 00000004
0003 0035 00002324
0003 0036 00001a9f
0001 014a 00000001
0003 0000 00002324
0003 0001 00001a9f
0000 0000 00000000
0003 0039 ffffffff
0001 014a 00000000
0000 0000 00000000

-t:显示时间戳


# getevent -t /dev/input/event3
[ 1141.248434] 0003 0039 0000000e
[ 1141.248434] 0003 0035 00002cd4
[ 1141.248434] 0003 0036 00001a09
[ 1141.248434] 0001 014a 00000001
[ 1141.248434] 0003 0000 00002cd4
[ 1141.248434] 0003 0001 00001a09
[ 1141.248434] 0000 0000 00000000
[ 1141.322181] 0003 0039 ffffffff
[ 1141.322181] 0001 014a 00000000
[ 1141.322181] 0000 0000 00000000

-n:不换行打印

# getevent -n /dev/input/event3
0003 0039 000000020003 0035 00002f000003 0036 00001a4e0001 014a 000000010003 0000 00002f000003 0001 00001a4e0000 0000 000000000003 0039 ffffffff0001 014a 000000000000 0000 000000000003 0039 000000030003 0035 00002e880003 0036 000019b80001 014a 000000010003 0000 00002e880003 0001 000019b80000 0000 000000000003 0039 ffffffff0001 014a 000000000000 0000 000000000003 0039 000000040003 0035 00002d700003 0036 00001a000001 014a 000000010003 0000 00002d700003 0001 00001a000000 0000 000000000003 0039 ffffffff0001 014a 000000000000 0000 000000000003 0039 000000050003 0035 00002d080003 0036 000019a50001 014a 000000010003 0000 00002d080003 0001 000019a50000 0000 000000000003 0039 ffffffff0001 014a 000000000000

-s:显示指定位的开关状态

# getevent -s5 /dev/input/event3
0000

-S:显示所有位的开关状态

# getevent -S /dev/input/event3
getevent -S /dev/input/event3
0000

-v:根据 mask 值显示相关信息,执行后会一直显示上报数据

errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64

默认显示 dev| name| info| vers = 30;

# getevent -v /dev/input/event3
add device 1: /dev/input/event3
bus: 0003
vendor 222a
product 004d
version 0110
name: "ILITEK Multi-Touch-V3020"
location: "usb-ff540000.usb-1.3/input0"
id: ""
version: 1.0.1 # getevent -v30 /dev/input/event3
add device 1: /dev/input/event3
bus: 0003
vendor 222a
product 004d
version 0110
name: "ILITEK Multi-Touch-V3020"
location: "usb-ff540000.usb-1.3/input0"
id: ""
version: 1.0.1 # getevent -v2 /dev/input/event3
add device 1: /dev/input/event3 # getevent -v8 /dev/input/event3
getevent -v8 /dev/input/event3
bus: 0003
vendor 222a
product 004d
version 0110
location: "usb-ff540000.usb-1.3/input0"
id: "" # getevent -v16 /dev/input/event3
version: 1.0.1 # getevent -v32 /dev/input/event3
events:
KEY (0001): 014a
ABS (0003): 0000 : value 12008, min 0, max 16384, fuzz 0, flat 0, resolution 31
0001 : value 5790, min 0, max 9600, fuzz 0, flat 0, resolution 32
002f : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 16384, fuzz 0, flat 0, resolution 31
0036 : value 0, min 0, max 9600, fuzz 0, flat 0, resolution 32
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0

-d:如果设备可用,显示设备隐藏的描述信息

-p:显示设备支持的事件类型和编码方式

# getevent -p /dev/input/event3
add device 1: /dev/input/event3
name: "ILITEK Multi-Touch-V3020"
events:
KEY (0001): 014a
ABS (0003): 0000 : value 13084, min 0, max 16384, fuzz 0, flat 0, resolution 31
0001 : value 5284, min 0, max 9600, fuzz 0, flat 0, resolution 32
002f : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
0035 : value 0, min 0, max 16384, fuzz 0, flat 0, resolution 31
0036 : value 0, min 0, max 9600, fuzz 0, flat 0, resolution 32
0039 : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
input props:
INPUT_PROP_DIRECT

-i:显示设备的所有信息和支持的事件,比 -p 显示更多信息

# getevent -i /dev/input/event3

-l:以文本形式输出事件类型和名称,比 -t 更清楚直观

# getevent -l /dev/input/event3
getevent -l /dev/input/event3
// 事件类型 事件码 事件值
EV_ABS ABS_MT_TRACKING_ID 0000000f
EV_ABS ABS_MT_POSITION_X 00002bbc
EV_ABS ABS_MT_POSITION_Y 00001b6d
EV_KEY BTN_TOUCH DOWN
EV_ABS ABS_X 00002bbc
EV_ABS ABS_Y 00001b6d
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_TRACKING_ID ffffffff
EV_KEY BTN_TOUCH UP
EV_SYN SYN_REPORT 00000000

-q:暂时不会使用

-c:打印固定数量的事件并退出

# getevent -c 10 /dev/input/event3
getevent -c 10 /dev/input/event3
0003 0039 00000012
0003 0035 000038a4
0003 0036 000008f5
0001 014a 00000001
0003 0000 000038a4
0003 0001 000008f5
0000 0000 00000000
0003 0039 ffffffff
0001 014a 00000000
0000 0000 00000000

-r:显示事件上报速率

// 检测触摸屏报点速率
# getevent -r /dev/input/event3
getevent -r /dev/input/event3
0003 0039 00000015
0003 0035 000030d8
0003 0036 00001954
0001 014a 00000001
0003 0000 000030d8
0003 0001 00001954
0000 0000 00000000 rate 0
0003 0039 ffffffff
0001 014a 00000000
0000 0000 00000000 rate 9

参数可以组合使用,一次性查看需要的输入信息

# getevent -tlr /dev/input/event3
[ 2514.550104] EV_ABS ABS_MT_TRACKING_ID 0000001c
[ 2514.550104] EV_ABS ABS_MT_POSITION_X 00002dac
[ 2514.550104] EV_ABS ABS_MT_POSITION_Y 000018ca
[ 2514.550104] EV_KEY BTN_TOUCH DOWN
[ 2514.550104] EV_ABS ABS_X 00002dac
[ 2514.550104] EV_ABS ABS_Y 000018ca
[ 2514.550104] EV_SYN SYN_REPORT 00000000 rate 0
[ 2514.638845] EV_ABS ABS_MT_TRACKING_ID ffffffff
[ 2514.638845] EV_KEY BTN_TOUCH UP
[ 2514.638845] EV_SYN SYN_REPORT 00000000 rate 11

使用getevent在Android中调试输入子系统的更多相关文章

  1. Android 中调试手段 打印函数调用栈信息

    下面来简单介绍下 android 中的一种调试方法. 在 android 的 app 开发与调试中,经常需要用到打 Log 的方式来查看函数调用点. 这里介绍一种方法来打印当前栈中的函数调用关系 St ...

  2. Android中TextView输入字数统计和限制

    在Android开发应用的时候,文本编辑框中最多输入140个字,经常会显示还剩多少字以限制用户输入的字数, EditText content;//定义一个文本输入框 TextView hasnum;/ ...

  3. Android中密码输入内容可见性切换

    今天在做项目的时候遇到了一个关于密码输入框可见性切换问题,上网搜了搜,这里面门道还不小,做一个记录吧,下次遇到就好解决了. 首先写了一个简单的测试工程: <LinearLayout xmlns: ...

  4. Android中验证输入是否为汉字及手机号,邮箱验证,IP地址可用port号验证

    1,验证是否为汉字 // 验证昵称 private boolean verifyNickname() { String nickname = edt_username.getText().toStri ...

  5. Android中验证输入是否为汉字、手机号及邮箱

    1,验证是否为汉字 Code// 验证昵称 private boolean verifyNickname() { String nickname = edt_username.getText().to ...

  6. inux 驱动程序开发中输入子系统总共能产生哪些事件类型(EV_KEY,EV_ABS,EV_REL)

    inux 驱动程序开发中, 输入子系统总共能产生哪些事件类型?,以及分别是什么意思?详见如下: Linux中输入设备的事件类型有EV_SYN 0x00 同步事件EV_KEY 0x01 按键事件,如KE ...

  7. 嵌入式Linux驱动学习之路(十六)输入子系统

    以前写的一些输入设备的驱动都是采用字符设备处理的.问题由此而来,Linux开源社区的大神们看到了这大量输入设备如此分散不堪,有木有可以实现一种机制,可以对分散的.不同类别的输入设备进行统一的驱动,所以 ...

  8. Linux输入子系统(转)

    Linux输入子系统(Input Subsystem) 1.1.input子系统概述 输入设备(如按键,键盘,触摸屏,鼠标等)是典型的字符设备,其一般的工作机制是低层在按键,触摸等动作发生时产生一个中 ...

  9. Linux输入子系统(一) _驱动编码

    输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主设备号13,同时输入子系 ...

  10. 10. linux输入子系统/input 设备【转】

    转自:https://www.cnblogs.com/crmn/articles/6696819.html 按键事件信息之上报绝对事件信息之上报相对事件信息之上报功能键驱动编写多点触控事件的上报 只产 ...

随机推荐

  1. rails 给数据库表里加入索引

    创建迁移文件 rails g migration add_product_images_index 编写迁移文件 db/migrate/20170119093958_add_product_image ...

  2. Fiddler在抓取https数据包时如何解决Tunnel to 443的问题?

    学习视频: https://www.bilibili.com/video/BV1zg4y1i7k3?p=2 谷歌浏览器导入证书 1.导出证书到桌面 2.双击安装证书 3.浏览器-->设置--&g ...

  3. List集合中获取重复元素

    一.方法1 ## 测试数据 List<String> words = Arrays.asList("a", "b", "c", ...

  4. 面向K-12学生的远程访问学校计算机实验室

    ​ 为了应对新冠肺炎大流行,许多学校被迫采用远程学习和混合时间制度.在家学习的学生必须使用自己的个人设备或学校提供的设备(例如 Chromebook )来完成课堂作业. 尽管许多解决方案可以帮助学生和 ...

  5. Linux下mv和cp命令的区别

    1.功能上的区别 ​ mv:用户可以使用mv为文件或目录重命名或将文件由一个目录移入另一个目录中. ​ cp: cp的功能是将给出的文件或目录拷贝到另一文件或目录中. 2.inode上的区别(inod ...

  6. supersocket实际应用之你画我猜游戏(一)

    supersocket这款组件,让不懂tcp/ip的人都能开发出网络应用.我们不必在开发与自己主要应用不相关的代码了,主要精力都能放在设计业务逻辑上面了. 现在使用现成又完备的组件,真是大大的提高了开 ...

  7. Django 的 ORM

    Django 的 ORM: 注意: 需要提前创建好数据库,Django不会自动创建数据库

  8. HTML——select下拉选择标签

    select的基本语法: <select> <option></option> </select> 例子: <p>籍贯: <selec ...

  9. QShop商城-快速开始-uni-app小程序

    QShop商城-快速开始-uni-app小程序 工具准备 HBuilderX 此项目为UniApp开发,开发工具为HBuilderX,下载地址: https://hx.dcloud.net.cn/Tu ...

  10. 机器学习策略篇:详解如何改善你的模型的表现(Improving your model performance)

    如何改善模型的表现 学过正交化,如何设立开发集和测试集,用人类水平错误率来估计贝叶斯错误率以及如何估计可避免偏差和方差.现在把它们全部组合起来写成一套指导方针,如何提高学习算法性能的指导方针. 所以想 ...