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事件


更多相关文章

  1. android PopupWindow模拟Windows开始菜单显示消失效果
  2. View的事件体系《Android开发艺术探索》笔记
  3. [Flutter]监听Android返回键事件
  4. Cordova 3.x 源码分析(7) -- CordovaLib概要
  5. 关于JAVA回调函数和Android事件响应
  6. onInterceptTouchEvent和onTouchEvent调用时序2
  7. Android(安卓)TV 屏幕适配
  8. android事件处理的四种写法--电话拨号为例
  9. Android(安卓)canvas绘图基础之运动的时钟

随机推荐

  1. Android非Kotlin支持项目添加Kotlin代码
  2. Android 进程间通信 实例分析
  3. Android——使用 Broastcast 实现进程间
  4. Android(安卓)开发资料总结--网络请求框
  5. Adapter软件设计模式在Android的应用
  6. [RK3399][Android7.1] 调试笔记 --- 设置
  7. Android 按键处理(驱动层到上层)架构
  8. Android Framework AIDL的使用
  9. Android(安卓)UI开发第二十一篇――下拉
  10. Android(安卓)PopupWindow 实现自定义弹