【RK3288 android6 快捷按键gpio 事件上报】

【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 inputChange-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 #include +//keenon liangji add
+#include 
+#include 
+//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 unikChange-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 unikChange-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; // 0x44field public static final int KEYCODE_GUIDE = 172; // 0xacfield public static final int KEYCODE_H = 36; // 0x24
+    field public static final int KEYCODE_HAND_LEFT = 300; // 0x12cfield public static final int KEYCODE_HEADSETHOOK = 79; // 0x4ffield public static final int KEYCODE_HELP = 259; // 0x103field 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; // 0x44field public static final int KEYCODE_GUIDE = 172; // 0xacfield public static final int KEYCODE_H = 36; // 0x24
+    field public static final int KEYCODE_HAND_LEFT = 300; // 0x12cfield public static final int KEYCODE_HEADSETHOOK = 79; // 0x4ffield public static final int KEYCODE_HELP = 259; // 0x103field 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_$ endprivate 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 MUTEled 0x08 MISCled 0x09 MAILled 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 goChange-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 unikChange-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   WAKEUPkey 158   BACKkey 212   CAMERAkey 217   SEARCH
+key 249   HAND_LEFT
-- 
2.7.4


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部