Android 支持TP触摸唤醒

简介: Android 支持TP触摸唤醒

这个修改是我在全志6.0上增加的 , 当时的需求是 屏幕3分钟灭屏后可以通过触摸TP从而唤醒屏幕。原理是通过TP接收到触摸上报了个power key 灰常简单  思路万古不变 希望能帮到有需要的人。

这个修改主要对 Android 系统的触摸屏和显示驱动进行了优化,包括对触摸屏的睡眠唤醒功能的改进,以及对显示驱动的运行时挂起和恢复的优化。

修改的文件:

  1. android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
  2. lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx.c
  3. lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx_ts.h
  4. lichee/linux-3.10/drivers/video/sunxi/disp2/disp/dev_disp.c

文件修改说明:

  1. defaults.xml: 修改了默认的屏幕关闭超时时间,从无限制改为180000毫秒。
  2. gt9xx.c: 添加了触摸屏的睡眠唤醒功能,当触摸屏处于睡眠状态时,可以通过触摸屏来唤醒设备。同时,也在驱动的初始化和挂起恢复过程中添加了相关的打印信息。
  3. gt9xx_ts.h: 在头文件中定义了一个宏GTP_WAKEUP_SLEEP_ENABLE,用于控制触摸屏的睡眠唤醒功能是否启用。
  4. dev_disp.c: 在显示驱动的运行时挂起和恢复过程中,添加了一个全局变量g_sleep_flag_for_tp,用于标记设备的睡眠状态。当设备处于睡眠状态时,g_sleep_flag_for_tp被设置为1,当设备恢复运行时,g_sleep_flag_for_tp被设置为0。这个变量的值可以通过函数get_sleep_state获取,从而在触摸屏驱动中判断设备是否处于睡眠状态。
 
---
 .../SettingsProvider/res/values/defaults.xml      |  2 +-
 .../drivers/input/touchscreen/gt9xx_new/gt9xx.c   | 15 ++++++++++++---
 .../input/touchscreen/gt9xx_new/gt9xx_ts.h        |  2 +-
 .../drivers/video/sunxi/disp2/disp/dev_disp.c     | 14 +++++++++++---
 4 files changed, 25 insertions(+), 8 deletions(-)
 
diff --git a/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index 98291007a0..d8fece99cd 100755
--- a/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -18,7 +18,7 @@
 -->
 <resources>
     <bool name="def_dim_screen">true</bool>
-    <integer name="def_screen_off_timeout">-1</integer>
+    <integer name="def_screen_off_timeout">180000</integer>
     <integer name="def_sleep_timeout">-1</integer>
     <bool name="def_airplane_mode_on">false</bool>
     <bool name="def_theater_mode_on">false</bool>
diff --git a/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx.c b/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx.c
index babdd7e72b..96ce48b5e8 100755
--- a/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx.c
+++ b/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx.c
@@ -463,6 +463,7 @@ static void gtp_touch_down(struct goodix_ts_data* ts,s32 id,s32 x,s32 y,s32 w)
 
 }
 
+extern int get_sleep_state(void);
 /*******************************************************
 Function:
  Touch up report function.
@@ -484,6 +485,12 @@ static void gtp_touch_up(struct goodix_ts_data* ts, s32 id)
         input_report_abs(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0);
         input_mt_sync(ts->input_dev);
 #endif
+#if GTP_WAKEUP_SLEEP_ENABLE == 1
+ if(get_sleep_state()) {
+   input_report_key(ts->input_dev, KEY_POWER, 1); 
+   input_report_key(ts->input_dev, KEY_POWER, 0);    
+ }
+#endif
 }
 
 /*******************************************************
@@ -998,7 +1005,9 @@ static s8 gtp_request_input_dev(struct goodix_ts_data *ts)
                 input_set_capability(ts->input_dev,EV_KEY,touch_key_array[index]); 
         }
 #endif
-
+#if GTP_WAKEUP_SLEEP_ENABLE == 1
+    input_set_capability(ts->input_dev,EV_KEY,KEY_POWER);
+#endif    
 //#if GTP_CHANGE_X2Y
 //        GTP_SWAP(ts->abs_x_max, ts->abs_y_max);
 //#endif
@@ -1214,7 +1223,7 @@ static void goodix_ts_early_suspend(struct early_suspend *h)
         struct goodix_ts_data *ts;
         s8 ret = -1; 
         ts = container_of(h, struct goodix_ts_data, early_suspend);
-
+ printk(" goodix_ts_early_suspend\n");
 #if GTP_ESD_PROTECT
         ts->gtp_is_suspend = 1;
         cancel_delayed_work_sync(&gtp_esd_check_work);
@@ -1248,7 +1257,7 @@ static void goodix_ts_late_resume(struct early_suspend *h)
 {
         struct goodix_ts_data *ts;
         ts = container_of(h, struct goodix_ts_data, early_suspend);
- 
+  printk(" goodix_ts_late_resume\n");
         queue_work(goodix_resume_wq, &goodix_resume_work);//gandy
 
 #if GTP_ESD_PROTECT
diff --git a/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx_ts.h b/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx_ts.h
index a766d628b9..fccb141cb4 100755
--- a/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx_ts.h
+++ b/lichee/linux-3.10/drivers/input/touchscreen/gt9xx_new/gt9xx_ts.h
@@ -106,7 +106,7 @@ extern struct ctp_config_info config_info;
 #define GTP_DEBUG_ON          0
 #define GTP_DEBUG_ARRAY_ON    0
 #define GTP_DEBUG_FUNC_ON     0
-
+#define GTP_WAKEUP_SLEEP_ENABLE      1
 //***************************PART2:TODO define**********************************
 //STEP_1(REQUIRED):Change config table.
 /*TODO: puts the config info corresponded to your TP here, the following is just 
diff --git a/lichee/linux-3.10/drivers/video/sunxi/disp2/disp/dev_disp.c b/lichee/linux-3.10/drivers/video/sunxi/disp2/disp/dev_disp.c
index 2c6fc65b25..b7a95bbf95 100755
--- a/lichee/linux-3.10/drivers/video/sunxi/disp2/disp/dev_disp.c
+++ b/lichee/linux-3.10/drivers/video/sunxi/disp2/disp/dev_disp.c
@@ -36,6 +36,14 @@ static struct device *display_dev;
 static unsigned int g_disp = 0, g_enhance_mode = 0, g_cvbs_enhance_mode = 0;
 static u32 DISP_print = 0xffff;   //print cmd which eq DISP_print
 static bool g_pm_runtime_enable = 0; //when open the CONFIG_PM_RUNTIME,this bool can also control if use the PM_RUNTIME.
+
+static int g_sleep_flag_for_tp = 0;
+
+int get_sleep_state(void)
+{
+ return g_sleep_flag_for_tp;
+}
+EXPORT_SYMBOL(get_sleep_state);
 #ifndef CONFIG_OF
 static struct sunxi_disp_mod disp_mod[] = {
  {DISP_MOD_DE      ,    "de"   },
@@ -1437,7 +1445,7 @@ static int disp_runtime_suspend(struct device *dev)
  struct list_head* disp_list= NULL;
 
  pr_info("%s\n", __func__);
-
+ 
  if (!g_pm_runtime_enable)
    return 0;
 
@@ -1481,7 +1489,7 @@ static int disp_runtime_resume(struct device *dev)
  struct list_head* disp_list= NULL;
 
  pr_info("%s\n", __func__);
-
+ g_sleep_flag_for_tp = 0;
  if (!g_pm_runtime_enable)
    return 0;
 
@@ -1531,7 +1539,7 @@ static int disp_runtime_resume(struct device *dev)
 static int disp_runtime_idle(struct device *dev)
 {
  pr_info("%s\n", __func__);
-
+ g_sleep_flag_for_tp = 1;
  if (g_disp_drv.dev) {
    pm_runtime_mark_last_busy(g_disp_drv.dev);
    pm_request_autosuspend(g_disp_drv.dev);
-- 
2.25.1




相关文章
|
6月前
|
Java Android开发
Android 触摸音的播放
Android 触摸音的播放
47 5
|
6月前
|
Java Android开发
修改Android 触摸提示音及音量大小
修改Android 触摸提示音及音量大小
256 4
|
6月前
|
存储 Android开发
Android 解决USB TP驱动中触摸卡顿和防抖动问题
Android 解决USB TP驱动中触摸卡顿和防抖动问题
169 1
|
6月前
|
Android开发
Android 12修改usb tp触摸唤醒
Android 12修改usb tp触摸唤醒
130 0
|
6月前
|
XML 存储 Android开发
Android系统 添加动态控制USB TP触摸方向、触摸唤醒
Android系统 添加动态控制USB TP触摸方向、触摸唤醒
217 0
|
5天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
7天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
9天前
|
XML 存储 Java
探索安卓开发之旅:从新手到专家
【10月更文挑战第35天】在数字化时代,安卓应用的开发成为了一个热门话题。本文旨在通过浅显易懂的语言,带领初学者了解安卓开发的基础知识,同时为有一定经验的开发者提供进阶技巧。我们将一起探讨如何从零开始构建第一个安卓应用,并逐步深入到性能优化和高级功能的实现。无论你是编程新手还是希望提升技能的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
7天前
|
存储 API 开发工具
探索安卓开发:从基础到进阶
【10月更文挑战第37天】在这篇文章中,我们将一起探索安卓开发的奥秘。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和建议。我们将从安卓开发的基础开始,逐步深入到更复杂的主题,如自定义组件、性能优化等。最后,我们将通过一个代码示例来展示如何实现一个简单的安卓应用。让我们一起开始吧!
|
8天前
|
存储 XML JSON
探索安卓开发:从新手到专家的旅程
【10月更文挑战第36天】在这篇文章中,我们将一起踏上一段激动人心的旅程,从零基础开始,逐步深入安卓开发的奥秘。无论你是编程新手,还是希望扩展技能的老手,这里都有适合你的知识宝藏等待发掘。通过实际的代码示例和深入浅出的解释,我们将解锁安卓开发的关键技能,让你能够构建自己的应用程序,甚至贡献于开源社区。准备好了吗?让我们开始吧!
21 2