Android sendevent/getevent 用法

源文;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如下定义

  1.  
    /*
  2.  
    * Event types
  3.  
    */
  4.  
    #define EV_SYN 0x00
  5.  
    #define EV_KEY 0x01
  6.  
    #define EV_REL 0x02
  7.  
    #define EV_ABS 0x03
  8.  
    #define EV_MSC 0x04
  9.  
    #define EV_SW 0x05
  10.  
    #define EV_LED 0x11
  11.  
    #define EV_SND 0x12
  12.  
    #define EV_REP 0x14
  13.  
    #define EV_FF 0x15
  14.  
    #define EV_PWR 0x16
  15.  
    #define EV_FF_STATUS 0x17
  16.  
    #define EV_MAX 0x1f
  17.  
    #define EV_CNT (EV_MAX+1)


一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN

分别对应keyboard, 相对坐标, 绝对坐标, 同步事件

EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型

EV_SYN对应的code如下

  1.  
    /*
  2.  
    * Synchronization events.
  3.  
    */
  4.  
    #define SYN_REPORT 0
  5.  
    #define SYN_CONFIG 1
  6.  
    #define SYN_MT_REPORT 2


EV_KEY的code比较多,这里就不列出来了,可参照input.h

EV_REL对应的code

  1.  
    /*
  2.  
    * Relative axes
  3.  
    */
  4.  
    #define REL_X 0x00
  5.  
    #define REL_Y 0x01
  6.  
    #define REL_Z 0x02
  7.  
    #define REL_RX 0x03
  8.  
    #define REL_RY 0x04
  9.  
    #define REL_RZ 0x05
  10.  
    #define REL_HWHEEL 0x06
  11.  
    #define REL_DIAL 0x07
  12.  
    #define REL_WHEEL 0x08
  13.  
    #define REL_MISC 0x09
  14.  
    #define REL_MAX 0x0f
  15.  
    #define REL_CNT (REL_MAX+1)


EV_ABS对应的code

  1.  
    /*
  2.  
    * Absolute axes
  3.  
    */
  4.  
     
  5.  
    #define ABS_X 0x00
  6.  
    #define ABS_Y 0x01
  7.  
    #define ABS_Z 0x02
  8.  
    #define ABS_RX 0x03
  9.  
    #define ABS_RY 0x04
  10.  
    #define ABS_RZ 0x05
  11.  
    #define ABS_THROTTLE 0x06
  12.  
    #define ABS_RUDDER 0x07
  13.  
    #define ABS_WHEEL 0x08
  14.  
    #define ABS_GAS 0x09
  15.  
    #define ABS_BRAKE 0x0a
  16.  
    #define ABS_HAT0X 0x10
  17.  
    #define ABS_HAT0Y 0x11
  18.  
    #define ABS_HAT1X 0x12
  19.  
    #define ABS_HAT1Y 0x13
  20.  
    #define ABS_HAT2X 0x14
  21.  
    #define ABS_HAT2Y 0x15
  22.  
    #define ABS_HAT3X 0x16
  23.  
    #define ABS_HAT3Y 0x17
  24.  
    #define ABS_PRESSURE 0x18
  25.  
    #define ABS_DISTANCE 0x19
  26.  
    #define ABS_TILT_X 0x1a
  27.  
    #define ABS_TILT_Y 0x1b
  28.  
    #define ABS_TOOL_WIDTH 0x1c
  29.  
    #define ABS_VOLUME 0x20
  30.  
    #define ABS_MISC 0x28
  31.  
     
  32.  
    #define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
  33.  
    #define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
  34.  
    #define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
  35.  
    #define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
  36.  
    #define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
  37.  
    #define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
  38.  
    #define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
  39.  
    #define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
  40.  
    #define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
  41.  
    #define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
  42.  
    #define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
  43.  
     
  44.  
    #define ABS_MAX 0x3f
  45.  
    #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