【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 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值