sendevent、getevent解析及底层操作

发布时间 2023-11-28 17:08:10作者: Naihe\

getevent实时获取触控事件

getevent -lt /dev/input/event1
-t 时间
-l 文本显示状态

记录示例

// 事件类型      事件码              事件值
EV_ABS       ABS_MT_TRACKING_ID   0000000f
EV_ABS       ABS_MT_POSITION_X    00002bbc
EV_ABS       ABS_MT_POSITION_Y    00001b6d
EV_KEY       BTN_TOUCH            DOWN
EV_ABS       ABS_X                00002bbc
EV_ABS       ABS_Y                00001b6d
EV_SYN       SYN_REPORT           00000000
EV_ABS       ABS_MT_TRACKING_ID   ffffffff
EV_KEY       BTN_TOUCH            UP
EV_SYN       SYN_REPORT           00000000

sendevent需要4个参数,如下:

use: sendevent device type code value
sendevent /dev/input/event1 0 0 0

type含义如下:

type 0000 Synchronization events
type 0001 Keys and buttons
type 0003 Absolute axes,即描述运动事件的值

code含义如下

0000 0000 SYN_REPORT,这里笔者简单理解为与io的flush类似
0003 0039 开始接触设备的唯一标识号,这里为0xc3a, 0xffffffff代表结束接触
0001 014a 标明触摸事件,1代表按下,0代表放开
0001 0145 表明是用手指触摸的,同样1代表按下,0代表放开
0003 0032 点击力度
0003 0035 触摸的x坐标
0003 0036 触摸的y坐标
0003 0030 接触面椭圆长轴,非必需
0003 0031 接触面椭圆短轴,非必需

记录触控事件

cat /dev/input/event1 > /sdcard/tmp.bin

重放触控事件

cat /sdcard/tmp.bin > /dev/input/event1

弱相关

踩坑点,shell中用标准输出会把0x00当作停止符,后面的信息会被截断
echo "17 51 63 65 00 00 00 00 68 89 01 00 00 00 00 00 00 00 00 00 00 00 00 00" | xdd -r -p > /dev/input/event1
可行方法,cat /sdcard/tmp.bin > /dev/input/event1
或者写代码Runtime.getRuntime().exec("su")提升写入权限

参考:
通过向输入设备直接写入数据实现多点连续滑动 https://blog.seeflower.dev/archives/45/#title-6
通过sendevent实现多点连续滑动
https://bbs.kanxue.com/thread-252052.htm
Exploring /dev/input
https://thehackerdiary.wordpress.com/2017/04/21/exploring-devinput-1/
man xxd
https://man.archlinux.org/man/xxd.1.zh_CN
Read-Write data from /dev/test file in android root file system in rooted device from android app
https://stackoverflow.com/questions/29468717/read-write-data-from-dev-test-file-in-android-root-file-system-in-rooted-device