getevent/sendevent 使用说明

转载:http://blog.csdn.net/g_salamander/article/details/8004064

这两天准备写一下input子系统的分析,过程中发现了两个好工具,呵呵,就是本文介绍的主角:getevent用于获取当前系统input设备的 一些参数和实时事件的数据;sendevent用于发送input事件,这样在调试的时候遇到有的样机按键坏了或者触摸屏坏了就方便了,工具的源码位于 Android SDK的system/core/toolbox下面。

一、getevent

首先看一下命令的用法说明:

# getevent -h
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-p] [-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)
    -p: show possible events (errs, dev, name, pos. events)
    -q: quiet (clear verbosity mask)
    -c: print given number of events then exit
    -r: print rate events are received

其中 [-t] 参数显示事件的时间戳,[-n] 取消事件显示时的换行符,[-s switchmask] 得到指定位的开关状态,[-S] 得到所有开关的状态,[-v [mask]] 根据mask的值显示相关信息,后面详细介绍mask的使用方法,[-p] 显示每个设备支持的事件类型和编码,[-q] 只显示事件数据,[-c count] 只显示count次事件的数据,[-r] 显示事件接收频率。下面看一下命令以及相关参数的使用结果:

1、getevent -p

# getevent -p
add device 1: /dev/input/event4
  name:     "tempsensor"
  events:
    SYN (0000): 0000  0003
    ABS (0003): 0010  value 0, min 0, max 100, fuzz 0 flat 0
add device 2: /dev/input/event3
  name:     "accsensor"
  events:
    SYN (0000): 0000  0003
    ABS (0003): 0000  value -23, min 0, max 0, fuzz 0 flat 0
                0001  value -8, min 0, max 0, fuzz 0 flat 0
                0002  value -966, min 0, max 0, fuzz 0 flat 0
add device 3: /dev/input/event2
  name:     "xx_keypad"
  events:
    SYN (0000): 0000  0001
    KEY (0001): 0000  0001  0002  0003  0004  0005  0006  0007
                0008  0009  000a  000b  000c  000d  000e  000f
                0010  0011  0012  0013  0014  0015  0016  0017
                0018  0019  001a  001b  001c  001d  001e  001f
                0020  0021  0022  0023  0024  0025  0026  0027
                0028  0029  002a  002b  002c  002d  002e  002f
                0030  0031  0032  0033  0034  0035  0036  0037
                0038  0039  003a  003b  003c  003d  003e  003f
                0074
add device 4: /dev/input/event1
  name:     "xx_ts"
  events:
    SYN (0000): 0000  0001  0003
    KEY (0001): 0066  008b  009e  00d9
    ABS (0003): 0030  value 0, min 0, max 255, fuzz 0 flat 0
                0035  value 0, min 0, max 320, fuzz 0 flat 0
                0036  value 0, min 0, max 480, fuzz 0 flat 0

可以看到 [-p] 参数显示出来当前系统存在的所有input设备,并且把每个设备支持的事件类型以及编码都列举了出来,比如xx_ts:

SYN (0000): 0000  0001  0003

表示xx_ts支持的事件类型有:EV_SYN [0000] (同步事件),EV_KEY [0001] (按键事件),EV_ABS [0003] (绝对值事件);

KEY (0001): 0066  008b  009e  00d9

表示xx_ts支持的按键编码有:KEY_HOME [0066] (HOME键),KEY_MENU [008b] (MENU键)

KEY_BACK [009e] (BACK键),KEY_SEARCH [00d9] (SEARCH键)

ABS (0003): 0030  value 0, min 0, max 255, fuzz 0 flat 0
            0035  value 0, min 0, max 320, fuzz 0 flat 0
            0036  value 0, min 0, max 480, fuzz 0 flat 0

表示xx_ts支持的绝对值编码有:ABS_MT_TOUCH_MAJOR [0030] (接触面长轴值) {有效值范围[0, 255]}

ABS_MT_POSITION_X [0035] (x轴坐标) {有效值范围[0, 320]}

ABS_MT_POSITION_Y [0036] (y轴坐标) {有效值范围[0, 480]}

2、getevent -v [mask]

[-v] 参数会根据mask的值决定显示内容,在源码中可以找到相应位的定义:

enum {
    PRINT_DEVICE_ERRORS     = 1U << 0,
    PRINT_DEVICE            = 1U << 1,
    PRINT_DEVICE_NAME       = 1U << 2,
    PRINT_DEVICE_INFO       = 1U << 3,
    PRINT_VERSION           = 1U << 4,
    PRINT_POSSIBLE_EVENTS   = 1U << 5,
};

其 中 PRINT_DEVICE_ERRORS 显示错误信息,PRINT_DEVICE 显示设备个数,PRINT_DEVICE_NAME 显示设备名称,PRINT_DEVICE_INFO 显示设备信息,PRINT_VERSION 显示设备版本号,PRINT_POSSIBLE_EVENTS 显示设备支持的事件类型及编码。唯一觉得有缺憾的是 [-v] 参数执行后会一直显示事件的数据,而没有mask决定是否显示这些数据,不过可以通过grep过滤掉。在输入命令时根据相应的位决定mask值:

# getevent -v 63
add device 1: /dev/input/event4
  bus:      0000
  vendor    0000
  product   0000
  version   0000
  name:     "tempsensor"
  location: ""
  id:       ""
  version:  1.0.0
  events:
    SYN (0000): 0000  0003
    ABS (0003): 0010  value 0, min 0, max 100, fuzz 0 flat 0
...

这样就显示出了所有的信息。
二、sendevent
sendevent就比较有用了,首先看一下它的用法说明:

# sendevent
use: sendevent device type code value

可以看到sendevent需要4个参数即:device,type,code,value。这些值可以由input子系统定义,也可以从getevent里面获取,比如我们要模拟一次 BACK 事件,根据前面的信息可知BACK的编码为0x9e即158,那我们输入如下命令即可模拟一次BACK键的按下和弹起:

# sendevent /dev/input/event1 1 158 1
# sendevent /dev/input/event1 1 158 0

device需要是支持该按键的设备这里是xx_ts;type为1表示是按键事件;value为1表示按下,为0表示弹起,一次按键事件由按下和弹起两个操作组成。另外Android还在framework层提供了输入键值的工具input,这些我们后面再详细分析。

时间: 2024-08-28 21:08:17

getevent/sendevent 使用说明的相关文章

Android中的软件Watchdog

由于Android的SystemServer内有一票重要Service,所以在进程内有一个软件实现的Watchdog机制,用于监视SystemServer中各Service是否正常工作.如果超过一定时间(默认30秒),就dump现场便于分析,再超时(默认60秒)就重启SystemServer保证系统可用性.同时logcat中会打印类似下面信息: W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.andr

Android 模拟输入那点事

因工作原因,需要用到模拟输入这个东东,查阅了一些资料,实现方式有多种,我大概分为两类,命令行类和程序类. 命令行类包括自动化测试组件monkeyrunner,getevent/setevent命令,input命令 程序类包括MotionEvent,AccessibilityService,反射等 本人对这块也是刚刚接触,几种方式不评优劣,仅就工作中用到的知识点做记录,以备后用. 1.命令行开启和关闭应用 adb shell am start -n 包名/入口activity //开启某个应用 a

【Android测试】【随笔】模拟双指点击

手势 看到这个标题,很多人会想一想 “双指点击” 的操作是什么样的,首先解释一下吧,为了能清晰明了一点,请看下面的图: 左上角的Tap代表点击操作,也就是我们说的 “单指单击”:右上角是Double Tap顾名思义,使用一个手指完成 “双击” 的动作:左下角的Scroll代表的是用一个手指完成 “滑动”的动作:最后看右下角这张图,这个动作就是我们本节要讲的内容,用两个手指完成 “单击” 的动作,注意两个手指点击的实际要同时,同时按下,同时抬起. 什么需求 为什么会有这样的需求呢?这个需求可能大部

adb调试命令详解-2016.02.01

adb(Android Debug Bridge),调试桥可以让设备的调试监测过程在远端进行,而不必在运行实际运行应用的设备上,方便调试的输出. 1 命令详解 a 查看帮助信息         adb --help 选项参数: adb [-d|-e|-s <serialNumber>] <command> -a 对于adb建立连接,将监听在所有的网卡上 -d 只对于USB连接的设备执行命令,如果有多个设备使用USB连接,将返回失败. -e 只对正在运行的模拟器执行命令,如果有多个模

Android通过代码模拟物理、屏幕点击事件

本文讲的是通过使用代码,可以控制手机的屏幕和物理按键,也就是说不只是在某一个APP里去操作,而是整个手机系统. getevent/sendevent getevent&sendevent 是android系统下的一个工具,可以模拟多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件.getevent用于获取当前系统input设备的一些参数和实时事件的数据:sendevent用于发送input事件,这俩命令的作用就是相当于解放了手

Android自动回放工具——RERAN

一 .安卓输入子系统事件编码 安卓输入时间编码格式为:(timestamp: device: type code value) timestamp:系统开机到当前的时间 device:可以产生输入事件的设备 type:输入事件类型码,如下图定义 /* * Event types */ #define EV_SYN 0x00 #define EV_KEY 0x01 #define EV_REL 0x02 #define EV_ABS 0x03 #define EV_MSC 0x04 #define

shell命令:getevent和sendevent

1.getevent 输出所有event设备的基本信息 输出格式: 设备名: 事件type 事件code 事件value 注意:这里的数字都是16进制. getevent -c 10 //输出10条信息后退出getevent -l //将type.code.value以对应的常量名称显示 使用 getevent -l 命令后输出结果格式为: 对应的数字代码转换为容易理解的字符串了,这些常量定义都在input.h文件中. 2.sendevent 发送事件命令,模拟事件操作. 该命令格式如下: 注意

(转)使用getevent监听Android输入设备文件

尊重原创转载请注明:From AigeStudio(http://blog.csdn.net/aigestudio)Power by Aige 侵权必究! 炮兵镇楼 上一节Android事件分发完全解析之为什么是她中我们简略地分析了事件分发机制的由来,这里要说明一点,Android(或者说任何的驱动系统)都包含大量不同类型的事件,比如按键啦.轨迹球啦.鼠标啦.触摸啦.红外线啦等等等,这里为了简化问题也为了切合实际,我们只针对触摸事件进行分析,至于其他的一些杂七杂八的事件其实都很好理解就不多说了.

phantomjs使用说明

phantomjs使用说明 12条评论 phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问.canvas/svg绘制等功能都很完备,在页面抓取.页面输出.自动化测试等方面有广泛的应用. 安装 下载phantomjs(官方下载,下载失败请访问另一个下载点).解压到任意目录,并将包含phantomjs.exe的目录添加到系统路径. 如果要借助phantomjs进行无头测试,请参考各个测试框架的说明,或者参考phantomjs的官方文档:http:/