测试平台
Platform: RK3399
OS: Android 7.1.1(industry-71)
现象
修改红外遥控的自定义键值映射表但始终没有生效,始终使用Generic.kl
分析
- 使用命令dumpsys input 查看当前设备对应的 KeyLayoutFile ,发现使用的是Generic.kl
6: ff420030.pwm
Classes: 0x00000421
Path: /dev/input/event2
Descriptor: 9e0e2e03ace6726d18be76b8ddb815cf002c80fb
Location: gpio-keys/remotectl
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0019, vendor=0x0001, product=0x0001, version=0x0100
KeyLayoutFile: /system/usr/keylayout/Generic.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
- 添加log打印发现如下log,提示TV_MEDIA_MULT_BACKWARD未定义
E/KeyLayoutMap( 1437): /system/usr/keylayout/ff420030_pwm.kl:88:Expected key code label, got 'TV_MEDIA_MULT_BACKWARD'.
- 查看了InputEventLabels.h和keycodes.h中都没有定义TV_MEDIA_MULT_BACKWARD这个按键.由于ff420030_pwm.kl是我从tvbox的sdk中拷贝出来的,所以有部分按键在当前sdk没有定义
frameworks/native/include/input/InputEventLabels.h:305: DEFINE_KEYCODE(TV_KEYMOUSE_MODE_SWITCH),
frameworks/native/include/android/keycodes.h:775: AKEYCODE_TV_KEYMOUSE_MODE_SWITCH = 288,
- 屏蔽无效按键,重启机器
cat system/usr/keylayout/ff420030_pwm.kl
key 28 ENTER
key 116 POWER
key 158 BACK
key 139 MENU
key 217 SEARCH
key 232 DPAD_CENTER
key 108 DPAD_DOWN
key 103 DPAD_UP
key 102 HOME
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 115 VOLUME_UP
key 114 VOLUME_DOWN
key 143 NOTIFICATION
key 113 VOLUME_MUTE
key 388 TV_KEYMOUSE_MODE_SWITCH
key 150 EXPLORER
key 400 TV_MEDIA_MULT_BACKWARD
#key 401 TV_MEDIA_MULT_FORWARD
#key 402 TV_MEDIA_PLAY_PAUSE
#key 64 TV_MEDIA_PLAY
#key 65 TV_MEDIA_PAUSE
#key 66 TV_MEDIA_STOP
#key 67 TV_MEDIA_REWIND
#key 68 TV_MEDIA_FAST_FORWARD
#key 87 TV_MEDIA_PREVIOUS
#key 88 TV_MEDIA_NEXT
- 再次使用命令dumpsys input 查看当前设备对应的 KeyLayoutFile ,发现已经改为ff420030_pwm.kl
6: ff420030.pwm
Classes: 0x00000421
Path: /dev/input/event2
Descriptor: 9e0e2e03ace6726d18be76b8ddb815cf002c80fb
Location: gpio-keys/remotectl
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0019, vendor=0x0001, product=0x0001, version=0x0100
KeyLayoutFile: /system/usr/keylayout/ff420030_pwm.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false