天天看點

輸入事件錄制與回放

<b>廠商的不同,輸入事件的裝置節點不一樣等,都可能會導緻 sendevent 能否正常使用的原因。 </b>

首先通過如下指令檢視裝置中含有的所有輸入裝置資訊:

shell@PD1613:/proc $ cat /proc/bus/input/devices
cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="qpnp_pon"
P: Phys=qpnp_pon/input0
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=bbk_drivers_log event0
B: PROP=40
B: EV=3
B: KEY=140000 0 0 0

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/soc/soc:gpio_keys/input/input1
U: Uniq=
H: Handlers=bbk_drivers_log event1
B: PROP=0
B: EV=3
B: KEY=40000000 0 0 0 0 0 0 10000 0 0 0 0 0 0 0 0 0 0 0 0 80000 0 0 0

I: Bus=0018 Vendor=dead Product=beef Version=28bb
N: Name="goodix-ts"
P: Phys=l??
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=sysrq mdss_fb kgsl event2
B: PROP=2
B: EV=b
B: KEY=16000000 0 0 8000 680 0 44002 41060000
B: ABS=2658000 0
           

其中, 字段含義如下:

I line:這行包含身份資訊,顯示了 bus type 是 3 (usb), vendor, product, version等資訊。
N line:這行包含了名字資訊。
P line:這行包含了實體裝置資訊。
H line: 這行包含了與裝置關聯的 handler drivers。
B line: 這些行包含了顯示裝置能力的一些位域 (bitfield)。
           

常見proc資訊獲取方式:

$ cat /proc/cpuinfo                    // 檢視CPU資訊
$ cat /proc/meminfo                  // 檢視記憶體資訊
$ cat /proc/bus/usb/devices      // 檢視USB裝置  (lsusb)
$ cat /proc/bus/input/devices    // 檢視鍵盤和滑鼠等輸入設備 
$ cat /proc/interrupts                 // 檢視中斷資訊
           

通過如下指令可以獲取當前設備的輸入事件日志

$ getevent -l
           

通過上述指令可以獲得目前螢幕,按鍵的事件,同時android也提供将這些事件回放給裝置的方式即 sendevent 指令,格式如下:

# sendevent [/dev/input/event2] <事件類型> <事件名稱> <參數>
比如
$ sendevent /dev/input/event2  3  114 1    // KEY_VOLUMEDOWN  KEY_DOWN
$ sendevent /dev/input/event2  0  0  0      // EV_SYN   SYN_REPORT
           

如上述樣例,每條 sendevent 都需要通過 EV_SYN 事件将 KEY 事件送出給系統。

<b>如文章開始提到的,sendevent 指令需要注意 裝置節點是否是目前裝置的輸入節點等,否則都會導緻執行無效。

不同廠商的不同産品都可能不一樣,其适配量比較大</b>

繼續閱讀