Android Keyevent定义在KeyEvent.java 截图对应 public static final int KEYCODE_SYSRQ = 120;
adb shell input keyevent SYSRQ
Linux Scancode定义在input-event-codes.h #define KEY_SCALE 120可以看到是不对应的
本来想通过指纹双击实现截图功能,发现上报scancode 120不行,后来才得知Android与Linux的code是有差异的,
最开始想的本办法是同时上报Linux Scancdoe音量下键和电源键 KEY_VOLUMEDOWN + KEY_POWER,后来才得知有键值隐射kl文件
根据以上流程图可以得知fingerprint 是没有vendorid 和prodcutid的,所以直接传的是name: uinput-fpc ,所有对应的文件为uinput-fpc.kl
指纹的HAL 注册input设置的流程如下,后面上报后就通过EventHub.cpp来处理了, 看流程图
(1)open /dev/uinput
(2)ioctl UI_SET_EVBIT -> set_bit
(2)ioctl UI_SET_KEYBIT -> set_bit
(3)write udev->name(uinput-fpc) -> uinput_setup_device_legacy
(4)ioctl UI_DEV_CREATE -> input_register_device
(5)write ev.type ev.code ev.value -> uinput_inject_event -> input_event
# Double Tap
-key 306 BUTTON_C
+key 306 SYSRQ
adb push uinput-fpc.kl system/usr/keylayout