赞
踩
- diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi
- index 5aae5c613825..4cc1223f9cbf 100755
- --- a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi
- +++ b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi
- +
- + gpio-keys {
- + status = "okay";
- + compatible = "gpio-keys";
- + autorepeat;
- + userf1 {
- + label = "GPIO user key";
- + linux,code = <KEY_USERKEY>;
- + gpios = <&gpio1 RK_PA3 GPIO_ACTIVE_LOW>;
- + debounce-interval = <100>;
- + };
- + userf1_lp {
- + label = "GPIO user key lp";
- + linux,code = <KEY_USERKEY_LP>;
- + gpios = <&gpio1 RK_PD0 GPIO_ACTIVE_LOW>;
- + debounce-interval = <100>;
- + };
- + };
- };
-
-
-
-
- diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
- old mode 100644
- new mode 100755
- index f2d4e4daa818..9e95f3465620
- --- a/drivers/input/keyboard/gpio_keys.c
- +++ b/drivers/input/keyboard/gpio_keys.c
- @@ -29,6 +29,8 @@
- #include <linux/spinlock.h>
- #include <dt-bindings/input/gpio-keys.h>
-
- +static unsigned long start_time = 0;
- +
- struct gpio_button_data {
- const struct gpio_keys_button *button;
- struct input_dev *input;
- @@ -359,7 +361,8 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
- struct input_dev *input = bdata->input;
- unsigned int type = button->type ?: EV_KEY;
- int state;
- -
- + unsigned long press_time = 0;
- +
- state = gpiod_get_value_cansleep(bdata->gpiod);
- if (state < 0) {
- dev_err(input->dev.parent,
- @@ -371,7 +374,27 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
- if (state)
- input_event(input, type, button->code, button->value);
- } else {
- - input_event(input, type, *bdata->code, state);
- + if (*bdata->code == 744) {
- + if (state) {
- + start_time = jiffies;
- + } else {
- + press_time = jiffies_to_msecs(jiffies - start_time);
- + printk(KERN_INFO "Button pressed for %lu milliseconds\n", press_time);
- + if (press_time >= 5000) {
- + printk("factoryreset \n");
- + input_event(input, type, 745, 1);
- + input_sync(input);
- + input_event(input, type, 745, state);
- + } else {
- + input_event(input, type, 744, 1);
- + input_sync(input);
- + input_event(input, type, 744, state);
- + }
- + }
- + } else {
- + input_event(input, type, *bdata->code, state);
- + }
- + printk("gpio_keys_gpio_report_event input_event *bdata->code=%d,state = %d\n",*bdata->code, state);
- }
- input_sync(input);
- }
- @@ -405,6 +428,7 @@ static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id)
- * handler to run.
- */
- input_report_key(bdata->input, button->code, 1);
- + printk("gpio_keys_gpio_isr input_report_key *bdata->code=%d\n",button->code);
- }
- }
-
- @@ -424,6 +448,7 @@ static void gpio_keys_irq_timer(struct timer_list *t)
- spin_lock_irqsave(&bdata->lock, flags);
- if (bdata->key_pressed) {
- input_event(input, EV_KEY, *bdata->code, 0);
- + printk("gpio_keys_irq_timer input_event *bdata->code=%d\n",*bdata->code);
- input_sync(input);
- bdata->key_pressed = false;
- }
- @@ -445,10 +470,12 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
- pm_wakeup_event(bdata->input->dev.parent, 0);
-
- input_event(input, EV_KEY, *bdata->code, 1);
- + printk("gpio_keys_irq_isr input_event *bdata->code=%d\n",*bdata->code);
- input_sync(input);
-
- if (!bdata->release_delay) {
- input_event(input, EV_KEY, *bdata->code, 0);
- + printk("gpio_keys_irq_isr !bdata->release_delay input_event *bdata->code=%d\n",*bdata->code);
- input_sync(input);
- goto out;
- }
-
-
-
-
-
- diff --git a/include/dt-bindings/input/rk-input.h b/include/dt-bindings/input/rk-input.h
- index 00b412927890..06c66d7c6bd4 100644
- --- a/include/dt-bindings/input/rk-input.h
- +++ b/include/dt-bindings/input/rk-input.h
- @@ -578,6 +578,9 @@
- #define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
- #define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
-
- +#define KEY_USERKEY 0x2e8
- +#define KEY_USERKEY_LP 0x2e9
- +
- #define BTN_TRIGGER_HAPPY 0x2c0
- #define BTN_TRIGGER_HAPPY1 0x2c0
- #define BTN_TRIGGER_HAPPY2 0x2c1
- diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
- index 7989d9483ea7..1064395e72c3 100644
- --- a/include/uapi/linux/input-event-codes.h
- +++ b/include/uapi/linux/input-event-codes.h
- @@ -778,6 +778,8 @@
- #define BTN_TRIGGER_HAPPY38 0x2e5
- #define BTN_TRIGGER_HAPPY39 0x2e6
- #define BTN_TRIGGER_HAPPY40 0x2e7
- +#define KEY_USERKEY 0x2e8
- +#define KEY_USERKEY_LP 0x2e9
- diff --git a/core/api/current.txt b/core/api/current.txt
- index 1d610ab7536b..15e5b6487d13 100644
- --- a/core/api/current.txt
- +++ b/core/api/current.txt
- @@ -48634,6 +48634,8 @@ 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 = 305; // 0x131
- + field public static final int KEYCODE_USERKEY_LP = 306; // 0x132
- field public static final int KEYCODE_V = 50; // 0x32
- field public static final int KEYCODE_VIDEO_APP_1 = 289; // 0x121
- field public static final int KEYCODE_VIDEO_APP_2 = 290; // 0x122
- diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
- index c3a638c4c36a..e5a21e3f3e06 100644
- --- a/core/java/android/view/KeyEvent.java
- +++ b/core/java/android/view/KeyEvent.java
- @@ -866,6 +866,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
- public static final int KEYCODE_DEMO_APP_3 = 303;
- /** Key code constant: Demo Application key #4. */
- public static final int KEYCODE_DEMO_APP_4 = 304;
- + public static final int KEYCODE_USERKEY = 305;
- + public static final int KEYCODE_USERKEY_LP = 306;
-
- /**
- * Integer value of the last KEYCODE. Increases as new keycodes are added to KeyEvent.
- diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
- index d86aa1122d3a..fb3bccc7fd80 100644
- --- a/core/res/res/values/attrs.xml
- +++ b/core/res/res/values/attrs.xml
- @@ -2004,7 +2004,9 @@
- <enum name="KEYCODE_DEMO_APP_1" value="301" />
- <enum name="KEYCODE_DEMO_APP_2" value="302" />
- <enum name="KEYCODE_DEMO_APP_3" value="303" />
- - <enum name="KEYCODE_DEMO_APP_4" value="304" />
- + <enum name="KEYCODE_DEMO_APP_4" value="304" />
- + <enum name="KEYCODE_USERKEY" value="305" />
- + <enum name="KEYCODE_USERKEY_LP" value="306" />
- </attr>
-
- <!-- ***************************************************************** -->
- diff --git a/data/keyboards/Generic.kl b/data/keyboards/Generic.kl
- index c81473ddcfc6..0096266539a4 100644
- --- a/data/keyboards/Generic.kl
- +++ b/data/keyboards/Generic.kl
- @@ -410,6 +410,8 @@ key 580 APP_SWITCH
- key 582 VOICE_ASSIST
- # Linux KEY_ASSISTANT
- key 583 ASSIST
- +key 744 USERKEY
- +key 745 USERKEY_LP
-
- # Keys defined by HID usages
- key usage 0x0c0067 WINDOW
- diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
- old mode 100644
- new mode 100755
- index 40643f638ac0..3f573a8a52de
- --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
- +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
- @@ -182,6 +182,8 @@ import android.view.accessibility.AccessibilityManager;
- import android.view.animation.Animation;
- import android.view.animation.AnimationUtils;
- import android.view.autofill.AutofillManagerInternal;
- +import android.os.UserManager;
- +import android.os.RecoverySystem;
-
- import com.android.internal.R;
- import com.android.internal.accessibility.AccessibilityShortcutController;
- @@ -3031,6 +3033,27 @@ public class PhoneWindowManager implements WindowManagerPolicy {
- case KeyEvent.KEYCODE_DEMO_APP_4:
- Slog.wtf(TAG, "KEYCODE_APP_X should be handled in interceptKeyBeforeQueueing");
- return key_consumed;
- + case KeyEvent.KEYCODE_USERKEY:
- + //do nothing
- + PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
- + pm.reboot(null);
- + Slog.wtf(TAG, "KeyEvent.KEYCODE_USERKEY in interceptKeyBeforeQueueing");
- + break;
- + case KeyEvent.KEYCODE_USERKEY_LP:
- + // 检查是否允许当前用户执行恢复出厂设置操作
- + UserManager um = mContext.getSystemService(UserManager.class);
- + if (um.hasUserRestriction(UserManager.DISALLOW_FACTORY_RESET)) {
- + throw new SecurityException("Factory reset is not allowed for this user.");
- + }
- +
- + // 执行恢复出厂设置操作
- + try {
- + RecoverySystem.rebootWipeUserData(mContext);
- + } catch (IOException e) {
- + // 处理异常
- + }
- + Slog.wtf(TAG, "KeyEvent.KEYCODE_USERKEY_LP in interceptKeyBeforeQueueing");
- + break;
- case KeyEvent.KEYCODE_BRIGHTNESS_UP:
- case KeyEvent.KEYCODE_BRIGHTNESS_DOWN:
- if (down) {
-
-
-
-
- diff --git a/include/android/keycodes.h b/include/android/keycodes.h
- index 3357660f5c..52750f400e 100644
- --- a/include/android/keycodes.h
- +++ b/include/android/keycodes.h
- @@ -809,7 +809,8 @@ enum {
- AKEYCODE_DEMO_APP_3 = 303,
- /** Demo Application key #4. */
- AKEYCODE_DEMO_APP_4 = 304,
- -
- + AKEYCODE_USERKEY = 305,
- + AKEYCODE_USERKEY_LP = 306,
- // 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/libs/input/InputEventLabels.cpp b/libs/input/InputEventLabels.cpp
- index 2d768ce573..9cd92a7bef 100644
- --- a/libs/input/InputEventLabels.cpp
- +++ b/libs/input/InputEventLabels.cpp
- @@ -330,7 +330,9 @@ namespace android {
- DEFINE_KEYCODE(DEMO_APP_1), \
- DEFINE_KEYCODE(DEMO_APP_2), \
- DEFINE_KEYCODE(DEMO_APP_3), \
- - DEFINE_KEYCODE(DEMO_APP_4)
- + DEFINE_KEYCODE(DEMO_APP_4), \
- + DEFINE_KEYCODE(USERKEY), \
- + DEFINE_KEYCODE(USERKEY_LP)
-
- // NOTE: If you add a new axis here you must also add it to several other files.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。