源文;https://blog.csdn.net/kickxxx/article/details/7482392
getevent/sendevent源碼
這兩個命令的源碼在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"
表明系統有兩個event設備,分別對應著input設備touchscreen,keyboard
?
Android可以使用sendevent來模擬觸屏,鍵盤以及其他類型的event事件,
sendevent /dev/input/eventX type code value
/dev/input/eventX 對應一個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對應的code如下
?
/* * Synchronization events. */ #define SYN_REPORT 0 #define SYN_CONFIG 1 #define SYN_MT_REPORT 2
EV_KEY的code比較多,這里就不列出來了,可參照input.h
?
?
EV_REL對應的code
/* * 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對應的code
?
?
/* * 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/event1 0003 0000 0000015e??? // ABS x 坐標
sendevent /dev/input/event1: 0003 0001 000000df??? // ABS y 坐標
sendevent /dev/input/event1: 0001 014a 00000001 ? // BTN touch事件 值為1
sendevent /dev/input/event1: 0003 0018 00000000?? // ABS pressure事件
sendevent /dev/input/event1: 0001 014a 00000000?? // BTN touch事件 值為0
sendevent /dev/input/event1: 0000 0000 00000000?? // sync事件
轉載于:https://www.cnblogs.com/senior-engineer/p/9267311.html
總結
以上是生活随笔為你收集整理的Android sendevent/getevent 用法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。