原文地址: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
- SYN (0000): 0000 0001 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,
- };
- # 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 /dev/input/event1 1 158 1
- # sendevent /dev/input/event1 1 158 0