RK系列(RK3568) GPIO按键驱动 和Android key新值添加

平台: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

猜你喜欢

转载自blog.csdn.net/yinsui1839/article/details/129871392