当时是为了解决TP或者鼠标在设备重启的时候偶尔会失灵的问题。(系统启动后软件模拟重新插拔otg)
USB设备重启功能的添加和权限修改
这个修改主要是在Android的WindowManagerService.java中添加了一个USB设备重启的功能,并且修改了在usb20.c中的USB设备的权限。
修改的文件:
- frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
- 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