zoukankan      html  css  js  c++  java
  • 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事件

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/9267311.html
Copyright © 2011-2022 走看看