有人知道getevent的输出意味着什么吗?

15
我正在尝试弄清楚在adb shell中使用getevent命令的输出格式。
例如,输出结果如下: adb shell getevent -t | grep event1 -t标志提供时间戳,grep用于过滤消息,只保留触摸屏事件。
问题在于我不知道如何处理这些信息。虽然秒数最后一个字段在两个代码之间交替(据说对应于X和Y值),但最后一个字段似乎包含巨大或非常小的数字。
此外,时间戳对我也很陌生。我想知道破折号后面的部分是否是纳秒?
有人知道我可以在哪里找到有关这些内容格式的信息吗?

2
很遗憾,关于GetEvent的信息不多... 你有没有读过http://source.android.com/tech/input/getevent.html? - shkschneider
是的,我做到了,谢谢。最终我不得不修改Android的源代码,以获得我理解的格式所需的信息。 - pypmannetjies
这个对我帮助很大。 - Mooncrater
4个回答

15

/dev/input/eventX 是被 evdev Linux 内核子系统所使用的,它是通用的输入事件层处理事件并将其时间戳传递给应用程序。您可以尝试使用 getevent 工具来获得更加人性化的输出,了解在 Android 上正在发生什么,例如:

$ adb shell getevent -lp /dev/input/event1

要获取所有 getevent 的选项,请执行以下操作:

$ adb shell getevent --help

您可以在此处了解有关getevent工具的更多信息,以及在Wiki上此处了解有关evdev的信息。

根据内核源代码,evdev使用纳秒分辨率时间格式(ktime),源代码位于linux/next/include/linux/ktime.h此处(如果您希望在线查看)。


3
getevent sources(http://code.metager.de/source/xref/android/4.0.4/system/core/toolbox/getevent.c#645)也许也会有用。 - Alexander Malakhov
1
您提供的链接(https://source.android.com/tech/input/getevent)似乎已失效。是否有新的文档可用? - boltup_im_coding
是的,第一个链接已经失效了。这个链接是正确的吗? - Mooncrater

2
在您的代码片段中似乎没有触摸屏触摸操作,或者可能没有记录x和y坐标。
通常,触摸屏的X坐标在0003 0035下,Y坐标在0003 0036下,而0003 0039通常用于手指按下(最后一个字段看起来更像00000000),手指抬起时为ffffffff(最后一个字段也看起来更像)。
不太确定0003 003a是什么,但似乎并不重要,它绝对不是X或Y的十六进制。
此外,时间戳以秒为单位测量。时间戳中破折号前的部分表示UTC上1970年1月1日的Unix Epox,破折号后的时间戳基于自那时起的秒数成为日期。
希望这能增加一些清晰度。

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接