键值对接

涉及到的文件:

  1. frameworks/native/include/input/KeycodeLabels.h
  2. external/kernel-headers/original/linux/input.h
ScanCode &KeyCode的对应关系

主要log如下:

D/InputReader( 3795): deviceId 1
D/InputReader( 3795): Input event: device=1 type=0x0001 code=0x00ac value=0x00000001 when=563708568000
D/KeyCharacterMap( 3795): mapKey: scanCode=172, usageCode=0x00000000 ~ Failed.
D/KeyLayoutMap( 3795): mapKey: scanCode=172, usageCode=0x00000000 ~ Result keyCode=3, outFlags=0x00000000.
D/InputReader( 3795): scanCode 172, usageCode 0 keyCode 3
D/InputReader( 3795): call keyboard process
D/InputReader( 3795): notifykey in KeyboardInputMapper
D/InputReader( 3795): Input event: device=1 type=0x0000 code=0x0000 value=0x00000000 when=563708568000
D/InputDispatcher( 3795): notifyKey - eventTime=563708568000, deviceId=1, source=0x301, policyFlags=0x0, action=0x0, flags=0x8, keyCode=0x3, scanCode=0xac, metaState=0x0, downTime=563708568000

设备接收到的是ScanCode &Device id。之后将会根据device ID寻找对应的设备。在此次分析的设备中对应的layout为:Vendor_0001_Product_0001.kl
下面截取的文件内容如下:

关键字 ScanCode label
key      172     HOME

文件内容格式为:关键字 ScanCode Label。注意之间用空格隔开。
根据上面的log看出,收到的scancode为172,之后根据scancode就能查询到对应的label,在这面就是“HOME”。
之后再根据label查找frameworks/native/include/input/KeycodeLabels.h文件中的数组。
KeycodeLabels.h文件中相关内容如下:

static const KeycodeLabel KEYCODES[] = {
···
{ "HOME", 3 },
···

从这个地方就能够查询到对应的keycode为3.
之后再把keycode返回给framework层。

其他

以下是从网络抓取的内容,还没进行验证。
Android 4.4 以前版本 frameworks/base/include/ui/KeycodeLabels.h
Android 4.4 在framework/native/include/input/KeyCodelabels.h
Android5.0 以后在framework/native/include/input/InputEventLabels.h

B:kl文件添加到system

将kl文件(通常)放在/device/qcom/XXX/(XXX为项目名称)

(1) AndroidBoard.mk 添加:

include $(CLERA_VARS)
LOCAL_MODULE                    :=  abcxxxx.kl
LOCAL_MODULE_TARGS     := optional   eng
LOCAL_MODULE_CLASS      := ETC
LOCAL_SRC_FILES                  := $(LOCAL_MODULE)
LOCAL_MODULE_PATH       := $(TARGET_OUT_KEYLAYOUT)
include $(BUILD_PREBUILT)

(2)/device/qcom/common/base.mk添加

KEYPAD += abcxxxx.kl

注:不加会导致kl文件不被打包进/system/usr/keylayout/

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐