1,kernel中增加键值定义,如下:
--- a/kernel-5.10/include/dt-bindings/input/rk-input.h
+++ b/kernel-5.10/include/dt-bindings/input/rk-input.h
@@ -620,6 +620,13 @@
#define BTN_TRIGGER_HAPPY39 0x2e6
#define BTN_TRIGGER_HAPPY40 0x2e7
+#define KEY_USERKEY 0x2e8
/* We avoid low common keys in module aliases so they don't get huge. */
#define KEY_MIN_INTERESTING KEY_MUTE
#define KEY_MAX 0x2ff
diff --git a/kernel-5.10/include/uapi/linux/input-event-codes.h b/kernel-5.10/include/uapi/linux/input-event-codes.h
old mode 100644
new mode 100755
index 7989d9483e..2a2cf5e2fd
--- a/kernel-5.10/include/uapi/linux/input-event-codes.h
+++ b/kernel-5.10/include/uapi/linux/input-event-codes.h
@@ -779,6 +779,13 @@
#define BTN_TRIGGER_HAPPY39 0x2e6
#define BTN_TRIGGER_HAPPY40 0x2e7
+#define KEY_USERKEY 0x2e8
/* We avoid low common keys in module aliases so they don't get huge. */
#define KEY_MIN_INTERESTING KEY_MUTE
2,dts中设置按键的配置(adc或gpio),比如:
+ gpio_keys: gpio-keys {^M
+ status = "okay";^M
+ compatible = "gpio-keys";^M
+ autorepeat;^M
+ userf1 {^M
+ debounce-interval = <100>;^M
+ gpios = <&gpio2 RK_PA7 GPIO_ACTIVE_LOW>;^M
+ label = "GPIO user key";^M
+ linux,code = <KEY_USERKEY>;^M
+ };^M
3,framework中增加新按键的相关定义,包括如下文件的修改:
1)
--- a/frameworks/native/include/android/keycodes.h
+++ b/frameworks/native/include/android/keycodes.h
@@ -776,7 +776,19 @@ enum {
AKEYCODE_THUMBS_DOWN = 287,
/** Used to switch current account that is consuming content.
* May be consumed by system to switch current viewer profile. */
- AKEYCODE_PROFILE_SWITCH = 288
+ AKEYCODE_PROFILE_SWITCH = 288,
+
+ AKEYCODE_USERKEY = 289,
2)
--- a/frameworks/native/libs/input/InputEventLabels.cpp
+++ b/frameworks/native/libs/input/InputEventLabels.cpp
@@ -314,7 +314,13 @@ namespace android {
DEFINE_KEYCODE(REFRESH), \
DEFINE_KEYCODE(THUMBS_UP), \
DEFINE_KEYCODE(THUMBS_DOWN), \
- DEFINE_KEYCODE(PROFILE_SWITCH)
+ DEFINE_KEYCODE(PROFILE_SWITCH),\
+ DEFINE_KEYCODE(USERKEY)
3)
--- a/frameworks/base/core/res/res/values/attrs.xml
+++ b/frameworks/base/core/res/res/values/attrs.xml
@@ -1984,6 +1984,12 @@
<enum name="KEYCODE_THUMBS_UP" value="286" />
<enum name="KEYCODE_THUMBS_DOWN" value="287" />
<enum name="KEYCODE_PROFILE_SWITCH" value="288" />
+ <enum name="KEYCODE_USERKEY" value="289" />
4)
--- a/frameworks/base/core/java/android/view/KeyEvent.java
+++ b/frameworks/base/core/java/android/view/KeyEvent.java
@@ -830,6 +830,18 @@ public class KeyEvent extends InputEvent implements Parcelable {
* consuming content. May be consumed by system to set account globally.
*/
public static final int KEYCODE_PROFILE_SWITCH = 288;
+
+ public static final int KEYCODE_USERKEY = 289;
5)
--- a/frameworks/base/core/api/current.txt
+++ b/frameworks/base/core/api/current.txt
@@ -47756,6 +47756,12 @@ package android.view {
field public static final int KEYCODE_TV_ZOOM_MODE = 255; // 0xff
field public static final int KEYCODE_U = 49; // 0x31
field public static final int KEYCODE_UNKNOWN = 0; // 0x0
+ field public static final int KEYCODE_USERKEY = 289; // 0x121
4,修改按键映射文件,增加内核键值到android键值的映射,如下:
--- a/frameworks/base/data/keyboards/Generic.kl
+++ b/frameworks/base/data/keyboards/Generic.kl
@@ -411,6 +411,13 @@ key 582 VOICE_ASSIST
# Linux KEY_ASSISTANT
key 583 ASSIST
+key 744 USERKEY
这里也有可能是修改device\rockchip\common\rk29-keypad.kl文件,根据实际情况进行修改。
5,在PhoneWindowManager.java中的interceptKeyBeforeDispatching和interceptKeyBeforeQueueing中添加新按键事件的case,如下:
case KeyEvent.KEYCODE_USERKEY:
+ //do nothing
+ break;