Android sendevent/geteventの使い方


getevent/sendeventソースコード
この2つのコマンドのソースコードはsystem/core/toolbox/でsendevent.c getevent.c
getevent
geteventを使用して/dev/input/eventXデバイスが報告するイベントを取得します.このコマンドは、次のようにすべてのeventデバイスの基本情報を出力します.
add device 1:/dev/input/event1   name:     "mxc_ts"add device 2:/dev/input/event0   name:     "mxckpd"
システムにはinputデバイスtouchscreen,keyboardに対応する2つのeventデバイスがあることを示した.
Androidはsendeventを使用してタッチスクリーン、キーボード、その他のイベントをシミュレートすることができます.
sendevent/dev/input/eventX type code value
/dev/input/eventXは1つのeventデバイスに対応し、geteventによって利用可能なeventデバイスを得ることができる.
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対応コードは以下の通り
/*
 * Synchronization events.
 */
#define SYN_REPORT      0
#define SYN_CONFIG      1
#define SYN_MT_REPORT       2

EV_KEYのコードが多いので、ここでは列挙しません.input.を参照してください.h
EV_REL対応コード
/*
 * 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対応コード
/*
 * 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メニュー
seneventでタッチスクリーンイベントをシミュレートする
sendevent/dev/input/event 1 0003 0000 0000015 e//ABS x座標
sendevent/dev/input/event 1:0003 0001 00000 df//ABS y座標
sendevent/dev/input/event 1:0001 014 a 00000001//BTN touchイベント値1
sendevent/dev/input/event 1:0003 0018億円//ABS pressureイベント
sendevent/dev/input/event 1:0001 014 a 00000000//BTN touchイベント値0
sendevent/dev/input/event 1:0000 00000000//syncイベント