AndroidInput系统——JNI NativeInputManager InputManger InputReader

AndroidInput系统——InputReader

AndroidInput系统——InputDispatcher

AndroidInput系统——EventHub

Android Input系统相关结构体

1. input_device_id

struct input_device_id {
kernel_ulong_t flags;
__u16 bustype; // BUS_USB BUS_BLUETOOTH
__u16 vendor;
__u16 product;
__u16 version;
kernel_ulong_t evbit[INPUT_DEVICE_ID_EV_MAX / BITS_PER_LONG + 1]; kernel_ulong_t keybit[INPUT_DEVICE_ID_KEY_MAX / BITS_PER_LONG + 1];
kernel_ulong_t relbit[INPUT_DEVICE_ID_REL_MAX / BITS_PER_LONG + 1];
kernel_ulong_t absbit[INPUT_DEVICE_ID_ABS_MAX / BITS_PER_LONG + 1];
kernel_ulong_t mscbit[INPUT_DEVICE_ID_MSC_MAX / BITS_PER_LONG + 1];
kernel_ulong_t ledbit[INPUT_DEVICE_ID_LED_MAX / BITS_PER_LONG + 1];
kernel_ulong_t sndbit[INPUT_DEVICE_ID_SND_MAX / BITS_PER_LONG + 1];
kernel_ulong_t ffbit[INPUT_DEVICE_ID_FF_MAX / BITS_PER_LONG + 1];
kernel_ulong_t swbit[INPUT_DEVICE_ID_SW_MAX / BITS_PER_LONG + 1];
kernel_ulong_t driver_info;
};

2. input_event (input.h)

struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};

3. RawEvent (EventHub.h)

struct RawEvent {
nsecs_t when; time
int32_t deviceId; ID = 1 ID = 0
int32_t type; EV_REL= 0x02 EV_SYN = 0x00
int32_t code; REL_X = 0x00 SYN_REPORT = 0
int32_t value; Value = 0x01 Value = 0x00
};

调试相关

查看event注册设备

shell@rk3368_32:/dev/input # cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0003 Version=206a
N: Name="synaptics_dsx"
P: Phys=synaptics_dsx/touch_input
S: Sysfs=/devices/ff140000.i2c/i2c-2/2-0020/input/input0
U: Uniq=
H: Handlers=event0 cpufreq ddr_freq
B: PROP=2
B: EV=b
B: KEY=420 0 0 0 0 0 8000 0 0 0 0
B: ABS=2638000 3 I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="rotary.35"
P: Phys=
S: S 大专栏  input系统——android input系统ysfs=/devices/rotary.35/input/input1
U: Uniq=
H: Handlers=event1
B: PROP=0
B: EV=5
B: REL=1 I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="rk29-keypad"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/ff100000.adc/key.38/input/input2
U: Uniq=
H: Handlers=event2 ddr_freq keychord
B: PROP=0
B: EV=3
B: KEY=8000 100000 0 0 0 I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="temperature"
P: Phys=
S: Sysfs=/devices/ff160000.i2c/i2c-4/4-005b/input/input3
U: Uniq=
H: Handlers=event3
B: PROP=0
B: EV=9
B: ABS=40

查看Handler个数

shell@rk3368_box:/dev/input # ls -l
crw-rw---- root input 13, 64 2017-04-12 11:15 event0
crw-rw---- root input 13, 65 2017-04-12 11:15 event1
crw-rw---- root input 13, 66 2017-04-14 08:12 event2
crw-rw---- root input 13, 67 2017-04-14 08:12 event3 cat event0
cat event1

getevent 获取事件

# getevent -h
Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]
-t: show time stamps
-n: don't print newlines
-s: print switch states for given bits
-S: print all switch states
-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32, props=64)
-d: show HID descriptor, if available
-p: show possible events (errs, dev, name, pos. events)
-i: show all device info and possible events
-l: label event types and names in plain text
-q: quiet (clear verbosity mask)
-c: print given number of events then exit
-r: print rate events are received 常用命令组合:
getevent -p // see all of the keys and axes a device reports
getevent -ip // get more information, including HID mapping tables and debugging information
getevent -lp // option to display textual labels for all event codes
getevent -lp
getevent -r -q 监控设备的sendevent事件 getevent -p
add device 1: /dev/input/event3
name: "temperature"
add device 2: /dev/input/event1
name: "rotary.35"
add device 3: /dev/input/event0
name: "synaptics_dsx"
add device 4: /dev/input/event2
name: "rk29-keypad" /dev/input/event1: 0002 0000 00000001 ID=1 EV_REL=0x02 REL_X = 0x00 Value = 0x01
/dev/input/event1: 0000 0000 00000000 ID=0 EV_SYN 0x00 SYN_REPORT = 0 Value = 0x00
/dev/input/event1: 0002 0000 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0002 0000 00000001
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0002 0000 ffffffff EV_REL=0x02 REL_X = 0x00 Value = 0xffffffffff
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0002 0000 ffffffff

dumpsys

dumpsys input:
To dump the input system’s state (Event Hub State,Input Reader State,Input Dispatcher State)

input系统——android input系统的更多相关文章

  1. Android权限系统

    Android系统为每个应用程序提供了一个安全的运行环境,不同程序间相互隔离,应用程序的数据等私有资源,外界无法访问.这个安全的运行环境由Android的权限系统(可称为沙箱系统)来提供.本文简单记录 ...

  2. 图解Android - Android GUI 系统 (5) - Android的Event Input System

    Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...

  3. Linux/Android——Input系统之InputMapper 处理 (八)【转】

    本文转载自:http://blog.csdn.net/jscese/article/details/43561773 前文Linux/Android——Input系统之InputReader (七)介 ...

  4. Linux/Android——Input系统之InputReader (七)【转】

    本文转载自:http://blog.csdn.net/jscese/article/details/42739197 在前文Linux/Android——Input系统之frameworks层Inpu ...

  5. Linux/Android——Input系统之frameworks层InputManagerService (六)【转】

    本文转载自:http://blog.csdn.net/u013491946/article/details/72638954 版权声明:免责声明: 本人在此发文(包括但不限于汉字.拼音.拉丁字母)均为 ...

  6. Linux/Android——input系统之 kernel层 与 frameworks层交互 (五)【转】

    本文转载自:http://blog.csdn.net/jscese/article/details/42291149 之前的四篇博文记录的都是linux中的input体系相关的东西,最底层以我调试的u ...

  7. 图解Android - System Service 概论 和 Android GUI 系统

    通过 图解Android - Binder 和 Service 一文中,我们已经分析了Binder 和 Service的工作原理.接下来,我们来简要分析Android 系统里面都有哪些重要的Servi ...

  8. 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)

    Android 的窗口管理系统 (View, Canvas, WindowManager) 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道And ...

  9. [Android] 输入系统(一)

    Android输入系统是人与机器交互最主要的手段.我们通过按键或者触碰屏幕,会先经由linux产生中断,进行统一的处理过后,转换成Android能识别的事件信息,然后Android的输入系统去获取事件 ...

随机推荐

  1. gbdt在回归方面的基本原理以及实例并且可以做分类

    对书法的热爱,和编译器打数学公式很艰难,就这样的正例自己学过的东西,明天更新gbdt在分类方面的应用. 结论,如果要用一个常量来预测y,用log(sum(y)/sum(1-y))是一个最佳的选择. 本 ...

  2. javaweb学习——session和Cookie实现购物车功能

    1.创建Book类,实现对图书信息的封装. package cn.it.sessionDemo.example1; import java.io.Serializable; /** * 该类实现对图书 ...

  3. vue-router中参数传递

    VUE路由之间携带参数 今天在实现一个功能的时候遇到的问题,一个把组件a中的值传输到组件b中时,但是组件a和组件b之间通信的时候路由跳转了 猜想:路由跳转导致监听事件失败,(暂时理解为:当路由跳转后监 ...

  4. CountDownLatch 我的应用场景

    记得我是做一个第三方接口,当时需要拿公司的五万辆车通过每周四的夜间去获取违章数据: 三方当时只提供一个只能一辆车去获取未处理的违章数据: 接口是http的方式获取: 当时我是用CountDownLat ...

  5. 2019-2020-1 20199324《Linux内核原理与分析》第九周作业

    第八章 进程的切换和系统的一般执行过程 1.进程调度的时机 硬中断和软中断 中断:在本质上都是软件或者硬件发生了某种情形而通知处理器的行为,处理器进而停止正在运行的指令流(当前进程),对这些通知做出相 ...

  6. 14 微服务电商【黑马乐优商城】:day06-了解vue-router和webpack的使用

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  7. Opencv笔记(二十一)——傅里叶变换

    参考 Numpy 中的傅里叶变换 首先我们看看如何使用 Numpy 进行傅里叶变换.Numpy 中的 FFT 包可以帮助我们实现快速傅里叶变换.函数 np.fft.fft2() 可以对信号进行频率转换 ...

  8. 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)

    2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A 题意:有 n 个时刻 ...

  9. Canal —— 基本概念及使用

    参考文档 开源数据同步神器--canal [若泽大数据]大数据之实时数据源同步中间件--生产上Canal与Maxwell颠峰对决

  10. K - Wand(组合数+错排公式)

    N wizards are attending a meeting. Everyone has his own magic wand. N magic wands was put in a line, ...