平台:Android12
SOC:RK3568
kernel:Linux-4.19
首先按键驱动那块不用我们自己写,内核本身有支持可以查看kernel-4.19-driver/input/keyboard/gpio_keys.c
我们先描述好设备树
添加GPIO4-A0的按键
gpio-keys {
compatible = "gpio-keys";
#address-cells = <1>;
#size-cells = <0>;
autorepeat;
pinctrl-names = "default";
pinctrl-0 = <&zy_key_pin>;
zy_key: zy-key {
label = "GPIO Key zy_key";
gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
linux,code = <KEY_ZY>;
};
};
&pinctrl {
keys {
zy_key_pin: pwr-key-pin {
rockchip,pins = <4 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
添加linux KEY值
include/dt-bindings/input/rk-input.h:581:#define KEY_ZY 0x27A
include/uapi/linux/input-event-codes.h:650:#define KEY_ZY 0x27A
在Linux层添加完,烧录进去后使用getevent可以查看按键上报
Android framework层:
添加Linux 映射 到 Android的kl文件
我的kl在framework下,大部分人一般在device里
1.添加如下
frameworks/base/data/keyboards/qwerty.kl:132:key 634 WSD_ZY
frameworks/base/data/keyboards/Generic.kl:413:key 634 WSD_ZY
2.然后是
frameworks/base/core/res/res/values/attrs.xml:1987: <enum name="KEYCODE_WSD_ZY" value="289" />
3.添加KeyEvent.java (一定要给注释,不然编译不过)
frameworks/base/core/java/android/view/KeyEvent.java:
/**
* Integer value of the last KEYCODE. Nokia custom WSD_ZY key.
* @hide
*/
public static final int KEYCODE_WSD_ZY = 289;
@TestApi
public static final int LAST_KEYCODE = KEYCODE_WSD_ZY;
4.添加定义 (一定要给注释,不然编译不过)
framewors/native/include/android/keycodes.h:
/** WSD_ZY key */
AKEYCODE_WSD_ZY = 289,
framewors/native/libs/input/InputEventLabels.cpp:318: DEFINE_KEYCODE(WSD_ZY),
打开Android log
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java:
static final boolean localLOGV = true;
static final boolean DEBUG_INPUT = true;
static final boolean DEBUG_KEYGUARD = true;
static final boolean DEBUG_SPLASH_SCREEN = true;
static final boolean DEBUG_WAKEUP = true;
static final boolean SHOW_SPLASH_SCREENS = true;
编译前执行一下
make update-api
make api-stubs-docs-non-updatable-update-current-api
编译完烧录到板子,按下按键
logcat:
会看到下面打印,就代表所有流程正常了
uioverrides.QuickstepLauncher, action=0, flags=8, keyCode=289, scanCode=634, metaState=0, repeatCount=0, policyFlags=1644167168