Android Mediatek 应用层重置USB设备功能

简介: Android Mediatek 应用层重置USB设备功能

当时是为了解决TP或者鼠标在设备重启的时候偶尔会失灵的问题。(系统启动后软件模拟重新插拔otg)

USB设备重启功能的添加和权限修改

这个修改主要是在Android的WindowManagerService.java中添加了一个USB设备重启的功能,并且修改了在usb20.c中的USB设备的权限。

修改的文件:

  1. frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
  2. kernel-3.10/drivers/misc/mediatek/usb20/mt6735/usb20.c

文件修改说明:

1. WindowManagerService.java

在这个文件中,添加了一个新的方法resetMtUsbCMode(),这个方法用于重启USB设备。首先,检查一个标志位mtUsbCmode,如果这个标志位为true,那么就不进行任何操作。如果这个标志位为false,那么就将其设置为true,并且调用setPathValue()方法来修改USB设备的状态。这个方法会在2秒后再次被调用,以重启USB设备。

还添加了一个新的方法setPathValue(),这个方法用于修改给定路径下的文件的值。使用FileWriter来打开文件,并将新的值写入文件。如果在这个过程中发生了IO异常,就打印出错误信息。

2. usb20.c

在这个文件中,修改了DEVICE_ATTR()宏的权限参数,将其从0664改为0666。这样,所有用户都可以读写这个设备文件。


 

 .../android/server/wm/WindowManagerService.java    | 38 ++++++++++++++++++++--
 .../drivers/misc/mediatek/usb20/mt6735/usb20.c     |  2 +-
 2 files changed, 37 insertions(+), 3 deletions(-)
 
diff --git a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
index 9a36a38..935e2de 100755
--- a/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -149,6 +149,8 @@ import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.view.animation.Transformation;
 
+import java.io.DataOutputStream;
+import java.io.FileWriter;
 import java.io.BufferedWriter;
 import java.io.DataInputStream;
 import java.io.File;
@@ -1217,8 +1219,6 @@ public class WindowManagerService extends IWindowManager.Stub
         /// @}
 
    //updateRotation(true, true);
-
-   
     }
 
     public InputMonitor getInputMonitor() {
@@ -8288,7 +8288,41 @@ public class WindowManagerService extends IWindowManager.Stub
     public void systemReady() {
         mPolicy.systemReady();
    //mPolicy.setRotationLw(Surface.ROTATION_270);
+   resetMtUsbCMode();
+    }
+ 
+ //shh add ===============================================
+ /**
+     * 重启usb设备
+     */
+ private boolean mtUsbCmode = false;
+    private synchronized void resetMtUsbCMode(){
+   if(mtUsbCmode){
+     return;
+   }
+   mtUsbCmode = true;
+        setPathValue("/sys/devices/platform/mt_usb/cmode",0);
+        new Handler().postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                setPathValue("/sys/devices/platform/mt_usb/cmode",1);
+            }
+        },2000);
+    }
+
+    private void setPathValue(String path,int v) {
+        try {
+            FileWriter fw = new FileWriter(path);
+            fw.write(""+v);
+            fw.flush();
+            fw.close();
+        }catch (IOException e){
+     e.printStackTrace()
+            Log.e("kevin", "IO Exception");
+        }
     }
+ //shh add ===============================================
+ 
 
     // -------------------------------------------------------------
     // Async Handler
diff --git a/kernel-3.10/drivers/misc/mediatek/usb20/mt6735/usb20.c b/kernel-3.10/drivers/misc/mediatek/usb20/mt6735/usb20.c
index d9f828a..f6bba8b 100755
--- a/kernel-3.10/drivers/misc/mediatek/usb20/mt6735/usb20.c
+++ b/kernel-3.10/drivers/misc/mediatek/usb20/mt6735/usb20.c
@@ -778,7 +778,7 @@ static ssize_t mt_usb_store_cmode(struct device* dev, struct device_attribute *a
  return count;
 }
 
-DEVICE_ATTR(cmode,  0664, mt_usb_show_cmode, mt_usb_store_cmode);
+DEVICE_ATTR(cmode,  0666, mt_usb_show_cmode, mt_usb_store_cmode);
 
 static bool saving_mode = false;
 
-- 
1.9.1




相关文章
|
1天前
|
Shell 开发工具 Android开发
|
2天前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
9 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
10天前
|
Android开发
Android获取蓝牙设备列表的方法
Android获取蓝牙设备列表的方法
17 5
|
10天前
|
Android开发
Android监听USB设备插拔
Android监听USB设备插拔
31 7
|
10天前
|
Android开发
Android 获取 USB设备列表
Android 获取 USB设备列表 【5月更文挑战第6天】
22 4
|
10天前
|
Android开发
获取Android设备屏幕大小
获取Android设备屏幕大小
18 3
|
10天前
|
Shell Android开发
ADB更改Android设备屏幕显示方向
ADB更改Android设备屏幕显示方向
20 5
|
11天前
|
存储 监控 Java
Android Service之设备存储空间监控 DeviceStorageMonitorService
Android Service之设备存储空间监控 DeviceStorageMonitorService
25 2
|
11天前
|
安全 物联网 Android开发
构建未来:Android与IoT设备的无缝集成
【5月更文挑战第10天】 在数字化时代的浪潮中,智能设备与互联网的结合日益紧密。本文深入探讨了Android系统如何通过其开放性和灵活性成为连接物联网(IoT)设备的关键枢纽。我们将分析Android平台与IoT设备集成的技术途径,探索它们如何共同塑造智能家居、可穿戴技术以及工业自动化等领域的未来。文中不仅阐述了当前的发展状况,还展望了未来的发展趋势,特别是安全性和隐私保护方面的挑战及对策。
17 1
|
11天前
|
Android开发 异构计算
高通android设备themal读取cpu温度
高通android设备themal读取cpu温度
15 0