【RK3288 android6 快捷按键gpio 事件上报】(待检查)
需求:
RK3288 android6 UNIK的需求,需要增加两个虚拟按键,出发后可以向应用层触发事件上报
方法:
在内核里面增加自己的keycode, 然后在增加相应的系统键值
kernel
From bef1793dcbb264dea78c6c4758db1a2d27ed1427 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Fri, 10 Mar 2023 14:36:44 +0800
Subject: [PATCH 2/2] feat(key): support key input
Change-Id: I599ac6e9d587d875ebb1c1ef428064fd1c618a86
Signed-off-by: liangji <liangji@keenon.com>
---
arch/arm/boot/dts/rk3288-tb_8846.dts | 6 ++++
drivers/input/keyboard/rk_keys.c | 58 ++++++++++++++++++++++++++++++++++++
include/uapi/linux/input.h | 4 +++
3 files changed, 68 insertions(+)
diff --git a/arch/arm/boot/dts/rk3288-tb_8846.dts b/arch/arm/boot/dts/rk3288-tb_8846.dts
index c4fcd7d..f368048 100644
--- a/arch/arm/boot/dts/rk3288-tb_8846.dts
+++ b/arch/arm/boot/dts/rk3288-tb_8846.dts
@@ -639,6 +639,12 @@
label = "recovery";
rockchip,adc_value = <4>;
};
+ liangji-key {
+ gpios = <&gpio7 GPIO_A1 GPIO_ACTIVE_HIGH>;
+ linux,code = <249>;
+ label = "liangji";
+ gpio-key,wakeup;
+ };
/*
menu-key {
linux,code = <59>;
diff --git a/drivers/input/keyboard/rk_keys.c b/drivers/input/keyboard/rk_keys.c
index 1071b54..a8ea878 100755
--- a/drivers/input/keyboard/rk_keys.c
+++ b/drivers/input/keyboard/rk_keys.c
@@ -36,6 +36,11 @@
#include <linux/of_gpio.h>
#include <linux/of_platform.h>
+//keenon liangji add
+#include <linux/kernel.h>
+#include <linux/timer.h>
+//keenon liangji end
+
#define EMPTY_ADVALUE 950
#define DRIFT_ADVALUE 70
#define INVALID_ADVALUE -1
@@ -53,6 +58,38 @@
#define ADC_SAMPLE_JIFFIES (100 / (MSEC_PER_SEC / HZ)) /* 100ms */
#define WAKE_LOCK_JIFFIES (1 * HZ) /* 1s */
+//keenon liangji add
+static struct timer_list test_timer;
+struct input_dev *input_global;
+bool flag_key = true;
+
+void timer_test_callback(unsigned long data)
+{
+ flag_key = true;
+ mod_timer(&test_timer, jiffies + msecs_to_jiffies(500));
+}
+
+static int __init timer_init(void)
+{
+ int ret;
+ pr_err("liangji timer test begin\n");
+ setup_timer(&test_timer, timer_test_callback, 0);
+ pr_err("liangji Setup timer to print in 3000ms (%ld)\n", jiffies);
+
+ ret = mod_timer(&test_timer, jiffies + msecs_to_jiffies(3000));
+ if(ret){
+ pr_err("liangji Timer start failed\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+static void __exit timer_exit(void) {
+ del_timer(&test_timer);
+}
+//keenon liangji end
+
enum rk_key_type {
TYPE_GPIO = 1,
TYPE_ADC
@@ -148,6 +185,21 @@ static irqreturn_t keys_isr(int irq, void *dev_id)
BUG_ON(irq != gpio_to_irq(button->gpio));
+ //keenon liangji add
+ int irq_status = gpio_get_value(button->gpio);
+ if(flag_key == true)
+ {
+ flag_key = false;
+ pr_err("liangji send input event\n");
+ if(1==irq_status){
+ input_event(input, EV_KEY, button->code, 1-button->state);
+ input_sync(input);
+ udelay(50);
+ pr_err("liangji irq_status == 1 , button->state = %d\n", button->state);
+ }
+ }
+ //keenon liangji end
+
if (button->wakeup && pdata->in_suspend) {
button->state = 1;
key_dbg(pdata,
@@ -382,6 +434,12 @@ static int keys_probe(struct platform_device *pdev)
wake_lock_init(&ddata->wake_lock, WAKE_LOCK_SUSPEND, input->name);
device_init_wakeup(dev, wakeup);
+ //keenon liangji add
+ pr_err("liangji module_init(timer_init)\n");
+ module_init(timer_init);
+ module_exit(timer_exit);
+ //keenon liangji end
+
for (i = 0; i < ddata->nbuttons; i++) {
struct rk_keys_button *button = &ddata->button[i];
diff --git a/include/uapi/linux/input.h b/include/uapi/linux/input.h
index a86f530..c08a5d8 100644
--- a/include/uapi/linux/input.h
+++ b/include/uapi/linux/input.h
@@ -473,6 +473,10 @@ struct input_keymap_entry {
#define KEY_MICMUTE 248 /* Mute / unmute the microphone */
+//keenon liangji add
+#define KEY_LIANGJI 249
+//keenon liangji end
+
/* Code 255 is reserved for special needs of AT keyboard driver */
#define BTN_MISC 0x100
--
2.7.4
framework
From c15d5be1b780a29a8e97e260d929ca0f7ae32837 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Wed, 22 Feb 2023 16:48:01 +0800
Subject: [PATCH] feat: support key input event for unik
Change-Id: Idcd4bf9651793efc20ac9e38c0455a927801e8d6
Signed-off-by: liangji <liangji@keenon.com>
---
native/include/android/keycodes.h | 7 ++++++-
native/include/input/InputEventLabels.h | 1 +
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/native/include/android/keycodes.h b/native/include/android/keycodes.h
index e391dc9..035fc40 100644
--- a/native/include/android/keycodes.h
+++ b/native/include/android/keycodes.h
@@ -728,7 +728,12 @@ enum {
AKEYCODE_TV_KEYMOUSE_RIGHT = 281,
AKEYCODE_TV_KEYMOUSE_UP = 282,
AKEYCODE_TV_KEYMOUSE_DOWN = 283,
- AKEYCODE_TV_KEYMOUSE_MODE_SWITCH = 284
+ AKEYCODE_TV_KEYMOUSE_MODE_SWITCH = 284,
+
+ //keenon liangji add
+ AKEYCODE_HAND_LEFT = 300
+ //keenon liangj end
+
// NOTE: If you add a new keycode here you must also add it to several other files.
// Refer to frameworks/base/core/java/android/view/KeyEvent.java for the full list.
diff --git a/native/include/input/InputEventLabels.h b/native/include/input/InputEventLabels.h
index bcce2d3..ddd94be 100644
--- a/native/include/input/InputEventLabels.h
+++ b/native/include/input/InputEventLabels.h
@@ -67,6 +67,7 @@ static const InputEventLabel KEYCODES[] = {
DEFINE_KEYCODE(VOLUME_DOWN),
DEFINE_KEYCODE(POWER),
DEFINE_KEYCODE(CAMERA),
+ DEFINE_KEYCODE(HAND_LEFT),
DEFINE_KEYCODE(CLEAR),
DEFINE_KEYCODE(A),
DEFINE_KEYCODE(B),
--
2.7.4
framework/base
From ce5bd52b7a751f7e6ce732f336b7b17251d532da Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Wed, 22 Feb 2023 18:42:38 +0800
Subject: [PATCH 2/3] feat: support key input event for unik
Change-Id: Idbb707d26a72a60a33180bdfd212f0a6de238fc1
Signed-off-by: liangji <liangji@keenon.com>
---
api/current.txt | 1 +
api/system-current.txt | 1 +
core/java/android/view/KeyEvent.java | 3 +++
core/res/res/values/attrs.xml | 1 +
data/keyboards/Generic.kl | 3 +++
services/core/java/com/android/server/policy/PhoneWindowManager.java | 5 +++++
6 files changed, 14 insertions(+)
diff --git a/api/current.txt b/api/current.txt
index 21f187a..eb080b0 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -35260,6 +35260,7 @@ package android.view {
field public static final int KEYCODE_GRAVE = 68; // 0x44
field public static final int KEYCODE_GUIDE = 172; // 0xac
field public static final int KEYCODE_H = 36; // 0x24
+ field public static final int KEYCODE_HAND_LEFT = 300; // 0x12c
field public static final int KEYCODE_HEADSETHOOK = 79; // 0x4f
field public static final int KEYCODE_HELP = 259; // 0x103
field public static final int KEYCODE_HENKAN = 214; // 0xd6
diff --git a/api/system-current.txt b/api/system-current.txt
index 9f77759..84fb497 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -37552,6 +37552,7 @@ package android.view {
field public static final int KEYCODE_GRAVE = 68; // 0x44
field public static final int KEYCODE_GUIDE = 172; // 0xac
field public static final int KEYCODE_H = 36; // 0x24
+ field public static final int KEYCODE_HAND_LEFT = 300; // 0x12c
field public static final int KEYCODE_HEADSETHOOK = 79; // 0x4f
field public static final int KEYCODE_HELP = 259; // 0x103
field public static final int KEYCODE_HENKAN = 214; // 0xd6
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index ffbede4..7d12a4a 100755
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -795,6 +795,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
public static final int KEYCODE_TV_MEDIA_MULT_BACKWARD = 292;
public static final int KEYCODE_TV_MEDIA_PLAY = 293;
public static final int KEYCODE_TV_MEDIA_PAUSE = 294;
+ public static final int KEYCODE_HAND_LEFT = 300;
//$_rbox_$_modify_$ end
private static final int LAST_KEYCODE = KEYCODE_TV_MEDIA_PAUSE;
@@ -1837,6 +1838,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
case KeyEvent.KEYCODE_MEDIA_RECORD:
case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
case KeyEvent.KEYCODE_CAMERA:
+ case KeyEvent.KEYCODE_HAND_LEFT:
case KeyEvent.KEYCODE_FOCUS:
case KeyEvent.KEYCODE_SEARCH:
case KeyEvent.KEYCODE_BRIGHTNESS_DOWN:
@@ -1855,6 +1857,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
case KeyEvent.KEYCODE_MENU:
case KeyEvent.KEYCODE_WAKEUP:
case KeyEvent.KEYCODE_PAIRING:
+ case KeyEvent.KEYCODE_HAND_LEFT:
return true;
}
return false;
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index b1fb725..f0af115 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -1570,6 +1570,7 @@ i
<enum name="KEYCODE_VOLUME_DOWN" value="25" />
<enum name="KEYCODE_POWER" value="26" />
<enum name="KEYCODE_CAMERA" value="27" />
+ <enum name="KEYCODE_HAND_LEFT" value="300" />
<enum name="KEYCODE_CLEAR" value="28" />
<enum name="KEYCODE_A" value="29" />
<enum name="KEYCODE_B" value="30" />
diff --git a/data/keyboards/Generic.kl b/data/keyboards/Generic.kl
index f10ba96..3463ea3 100644
--- a/data/keyboards/Generic.kl
+++ b/data/keyboards/Generic.kl
@@ -439,3 +439,6 @@ led 0x07 MUTE
led 0x08 MISC
led 0x09 MAIL
led 0x0a CHARGING
+
+
+key 249 HAND_LEFT
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 037c6c1..23e7fde 100755
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -2682,6 +2682,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
final boolean canceled = event.isCanceled();
+ Log.d(TAG, "liangji2 interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
+ + repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed
+ + " canceled=" + canceled);
+
+
if (DEBUG_INPUT) {
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
+ repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed
--
2.7.4
keyevent 事件第二次拦截放行
From 630425722697ceadd93c5a6bedee29613578464e Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Fri, 10 Mar 2023 15:20:24 +0800
Subject: [PATCH] improvement: set beforedispatching 0 to let input event go
Change-Id: Iaaf7f1a551ae3023daac41824d331522854edfb6
Signed-off-by: liangji <liangji@keenon.com>
---
.../java/com/android/server/policy/PhoneWindowManager.java | 13 ++++++++++---
.../jni/com_android_server_input_InputManagerService.cpp | 7 ++++++-
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 23e7fde..85df545 100755
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -151,7 +151,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
static final String TAG = "WindowManager";
static final boolean DEBUG = false;
static final boolean localLOGV = false;
- static final boolean DEBUG_INPUT = false;
+ static final boolean DEBUG_INPUT = true;
static final boolean DEBUG_KEYGUARD = false;
static final boolean DEBUG_LAYOUT = false;
static final boolean DEBUG_STARTING_WINDOW = false;
@@ -2688,11 +2688,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
if (DEBUG_INPUT) {
- Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
+ Log.d(TAG, "jiajia PhoneWindowManager.java interceptKeyBeforeDispatching keyCode=" + keyCode + " down=" + down + " repeatCount="
+ repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed
+ " canceled=" + canceled);
}
+ if (keyCode == 300)
+ {
+ Log.d(TAG, "liangji3 let key go!");
+ return 0;
+ }
// If we think we might have a volume down & power key chord on the way
// but we're not sure, then tell the dispatcher to wait a little while and
// try again later before dispatching.
@@ -3134,8 +3139,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
if (initialDown) {
+ Log.d(TAG, "liangji keyCode fallbackActions put");
mFallbackActions.put(keyCode, fallbackAction);
} else if (event.getAction() == KeyEvent.ACTION_UP) {
+ Log.d(TAG, "liangji keyCode fallbackActions remove");
mFallbackActions.remove(keyCode);
fallbackAction.recycle();
}
@@ -4953,7 +4960,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mKeyguardDelegate.isShowing()));
if (DEBUG_INPUT) {
- Log.d(TAG, "interceptKeyTq keycode=" + keyCode
+ Log.d(TAG, "jiajia PhoneWindowManager.java interceptKeyBeforeQueueing interceptKeyTq keycode=" + keyCode
+ " interactive=" + interactive + " keyguardActive=" + keyguardActive
+ " policyFlags=" + Integer.toHexString(policyFlags));
}
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index 4f656dd..d126627 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -877,6 +877,8 @@ void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent,
// - Ask the window manager what to do with normal events and trusted injected events.
// - For normal events wake and brighten the screen if currently off or dim.
bool interactive = mInteractive.load();
+ int jiajia_keycode = keyEvent->getKeyCode();
+ ALOGD("jiajia NativeInputManager::interceptKeyBeforeQueueing start keycode= %d", jiajia_keycode);
if (interactive) {
policyFlags |= POLICY_FLAG_INTERACTIVE;
}
@@ -886,16 +888,19 @@ void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent,
jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
jint wmActions;
if (keyEventObj) {
+ ALOGD("jiajia NativeInputManager::interceptKeyBeforeQueueing obtain key event object for interceptKeyBeforeQUeue");
wmActions = env->CallIntMethod(mServiceObj,
gServiceClassInfo.interceptKeyBeforeQueueing,
keyEventObj, policyFlags);
+
+ ALOGD("jiajia NativeInputManager::interceptKeyBeforeQueueing get interceptKeyBeforeQUeueing return vmActions = %d", wmActions);
if (checkAndClearExceptionFromCallback(env, "interceptKeyBeforeQueueing")) {
wmActions = 0;
}
android_view_KeyEvent_recycle(env, keyEventObj);
env->DeleteLocalRef(keyEventObj);
} else {
- ALOGE("Failed to obtain key event object for interceptKeyBeforeQueueing.");
+ ALOGE("jiajia Failed to obtain key event object for interceptKeyBeforeQueueing.");
wmActions = 0;
}
--
2.7.4
device/rockchip/common
From cab7ef471cb91614c9423e1504e0e2ca0f0a711a Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Wed, 22 Feb 2023 16:38:00 +0800
Subject: [PATCH] feat: support key input event for unik
Change-Id: I6a690747348276ade3c2ced935d6809ca691cf3c
Signed-off-by: liangji <liangji@keenon.com>
---
rk29-keypad.kl | 1 +
1 file changed, 1 insertion(+)
diff --git a/rk29-keypad.kl b/rk29-keypad.kl
index f603fd3..ce6c1f9 100755
--- a/rk29-keypad.kl
+++ b/rk29-keypad.kl
@@ -7,3 +7,4 @@ key 143 WAKEUP
key 158 BACK
key 212 CAMERA
key 217 SEARCH
+key 249 HAND_LEFT
--
2.7.4