Android 下收发input事件的工具 getevent 和 sendevent
来源:互联网 发布:2016总决赛 知乎 编辑:程序博客网 时间:2024/05/16 17:49
关于event设备的获取,在 /proc/bus/input/devices 下面:
$ adb shell cat /proc/bus/input/devices
0 getevent和sendevent用法:
$ adb shell getevent -hUsage: 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
$ adb shell sendevent -h
use: sendevent device type code value
1、模拟发送一个Power键:
$ export KEYCODE_POWER=26$ input keyevent ${KEYCODE_HOME}
或者:
先获取gpio-keys event的设备接口:
$ adb shell cat /proc/bus/input/devices | grep -A 5 gpio-keys | grep event
H: Handlers=event5
# Press power button(Don't release)
$ adb shell sendevent /dev/input/event5 1 $((0x74)) 1
$ adb shell sendevent /dev/input/event5 0 0 0
# Release power button
$ adb shell sendevent /dev/input/event5 1 $((0x74)) 0
$ adb shell sendevent /dev/input/event5 0 0 0
2、模拟获取Power键的事件
先执行$ adb shell getevent /dev/input/event5
然后按下power键并观察输出:
按下时:
0001 0074 00000001
0000 0000 00000000
弹起来时:
0001 0074 00000000
0000 0000 00000000
可以看到更好跟我们上面模拟的一样,注,上面那些值是十六进制的,如果想要 更加直观地分析获取的上报事件可以参考 在 Android 通过 get_event 获得 input 设备 上报event
以上转载自http://blog.csdn.net/hellowxwworld/article/details/10733567
以下为原创部分:
================================================================================================
下面以海思Hi3751V310芯片为例子,讲解下在实际中的使用
130|root@Hi3751V310:/ # 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,按键前面板按键中的信源键
130|root@Hi3751V310:/ # getevent
add device 1: /dev/input/event3
name: "Hi Keypad"
could not get driver version for /dev/input/mouse1, Not a typewriter
add device 2: /dev/input/event2
name: "qwerty"
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 3: /dev/input/event1
name: "Hi mouse"
add device 4: /dev/input/event0
name: "Hi keyboard"
could not get driver version for /dev/input/mice, Not a typewriter
/dev/input/event3: 0001 00fa 00000001
/dev/input/event3: 0001 00fa 00000000
/dev/input/event3: 0000 0000 00000000
对比下红外遥控器,按下信源键
/dev/input/event0: 0001 00fa 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 00fa 00000000
/dev/input/event0: 0000 0000 00000000
分析可得:红外和前面板getevent事件报上来都是fa,在红外上的可以正常使用,说明android框架层的按键适配没有问题。
两者的区别是一个是/dev/input/event3 /dev/input/event0
我们在串口中敲getevent -v
130|root@Hi3751V310:/ # getevent -v
add device 1: /dev/input/event3
bus: 0006
vendor 046d
product 0002
version 0000
name: "Hi Keypad"
location: ""
id: ""
version: 1.0.1
add device 2: /dev/input/event2
bus: 0000
vendor 0000
product 0000
version 0100
name: "qwerty"
location: ""
id: ""
version: 1.0.1
add device 3: /dev/input/event1
bus: 0000
vendor 0001
product 0002
version 0100
name: "Hi mouse"
location: ""
id: ""
version: 1.0.1
add device 4: /dev/input/event0
bus: 0000
vendor 0001
product 0001
version 0100
name: "Hi keyboard"
location: ""
id: ""
version: 1.0.1
由之前的项目经验知道,在红外按键中,用的keylayout文件是Vendor_0001_Product_0001.kl
从上面的打印可以推敲处理,前面板按键用的keylayout文件是Vendor_046d_Product_0002.kl
而在板子上的system/usr/keylayout/ 中是没有Vendor_046d_Product_0002.kl这个文件的。
试着在system/usr/keylayout/ 中增加Vendor_046d_Product_0002.kl,里面的内容和Vendor_0001_Product_0001.kl是一样的,结果发现前面板按键都可以用了。
说明前面板按键用的是Vendor_046d_Product_0002.kl这个keylayout文件
那么为什么只会前面板中信号源键不行,其他都可以呢?
会不会找不到所知道的kl文件时,它就使用了一套默认的keylayout文件,里面除了信号源键外,其他都适配正确的?
我们可以删除掉Vendor_0001_Product_0001.kl文件,让红外按键查找使用一套默认的keylayout文件。
果然,红外上除了信号源键,前面板用到的按键都可以的,证明猜想成立。
- Android 下收发input事件的工具 getevent 和 sendevent
- Android 下收发input事件的工具 getevent 和 sendevent
- Android 下收发input事件的工具 getevent 和 sendevent
- Android 下收发input事件的工具 getevent 和 sendevent
- [Android]getevent,sendevent,input命令的使用
- android之getevent/sendevent/input
- Android getevent,sendevent,input keyevent
- Android getevent/sendevent/input使用方法
- Android input输入设备getevent 和sendevent用法
- 【android学习】getevent和sendevent
- android getevent、sendevent、input keyevent 使用说明
- Android getevent / sendevent的用法
- Android getevent/sendevent的使用
- getevent 工具 和 Android 中input event的分析
- getevent 工具 和 Android 中input event的分析
- 安卓getevent和sendevent的使用
- [android] 调试linux input子系统驱动的用户空间命令 getevent/sendevent
- Android sendevent/getevent 用法
- 多线程求行列式值
- 颜色总结
- [java源码分析]LinkedList源码分析
- [Java] Java 中的进程与线程
- 购物车 ListView 包含了EditText的问题,最终解决换RecyclerView来做,哈哈哈哈
- Android 下收发input事件的工具 getevent 和 sendevent
- UE设置编码
- jpa查询语句学习
- SMBIOS介绍(2):结构表
- cvs update 的输出标志 和 update常用几个参数
- arm-none-linux-gnueabi-gcc: No such file or directory
- MySQL存储过程及游标
- iOS避免出现多控件同时点击的问题
- JavaWeb防止表单重复提交