Android添加USB模式设置:otg、host、peripheral

Android->usb_mode_switch: Store the usb mode when it was changed at Settings app, restore it on boot

diff --git a/packages/apps/Settings/src/com/android/settings/UsbModeSetting.java b/packages/apps/Settings/src/com/android/settings/UsbModeSetting.java
index 3845fa9..7959fa2 100644
--- a/packages/apps/Settings/src/com/android/settings/UsbModeSetting.java
+++ b/packages/apps/Settings/src/com/android/settings/UsbModeSetting.java
@@ -34,6 +34,7 @@ import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
+import android.os.SystemProperties;
import android.support.v7.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.support.v7.preference.Preference;
@@ -61,12 +62,18 @@ public class UsbModeSetting extends SettingsPreferenceFragment implements
     private CheckBoxPreference mConnectToPc;
     private File mFile = null;
     private String mMode = null;
+    private static final String OTG_MODE = "0";
     private static final String HOST_MODE = new String("1");
     private static final String SLAVE_MODE = new String("2");
+    private static final String OTG_MODE_STR = "otg";
+    private static final String HOST_MODE_STR = "host";
+    private static final String SLAVE_MODE_STR = "peripheral";
     private Handler mHandler;
     private static final String KEY_CONNECT_TO_PC = "connect_to_pc";
     public static final String SYS_FILE = "/sys/kernel/debug/usb@fe800000/rk_usb_force_mode";
+    public static final String SYS_FILE1 = "/sys/kernel/debug/usb@fe900000/rk_usb_force_mode";
+    public static final String PERSIST_PRO = "persist.usb.mode";
     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
@@ -90,6 +97,9 @@ public class UsbModeSetting extends SettingsPreferenceFragment implements
         getActivity().registerReceiver(mReceiver, filter);
         mFile = new File(SYS_FILE);
+        if(!mFile.exists()){
+            mFile = new File(SYS_FILE1);
+        }
         mHandler = new Handler() {
             @Override
@@ -104,6 +114,8 @@ public class UsbModeSetting extends SettingsPreferenceFragment implements
                     } else if(SLAVE_MODE.equals(mode)) {
                         mConnectToPc.setChecked(true);
                     }
+                    
+                    SystemProperties.set(PERSIST_PRO, mode);
                 } else {
                     Log.e(TAG, "unexpect msg:"+ msg.what); 
                }
@@ -123,6 +135,16 @@ public class UsbModeSetting extends SettingsPreferenceFragment implements
                 BufferedReader reader= new BufferedReader(new InputStreamReader(fin));
                 String config = reader.readLine();
                 fin.close();
+
+                Log.d(TAG, "Usb mode: " + config);
+                if (HOST_MODE_STR.equals(config)) {
+                    config = HOST_MODE;
+                } else if (SLAVE_MODE_STR.equals(config)) {
+                    config = SLAVE_MODE;
+                } else if (OTG_MODE_STR.equals(config)) {
+                    config = OTG_MODE;
+                }
+
                 return config;
             } catch(IOException e) {
                 e.printStackTrace();
@@ -159,9 +181,9 @@ public class UsbModeSetting extends SettingsPreferenceFragment implements
                     mConnectToPc.setChecked(false);
                 } else if(SLAVE_MODE.equals(mMode)) {
                     mConnectToPc.setChecked(true);
-                } else if ("0".equals(mMode)) {
+                } else if (OTG_MODE.equals(mMode)) {
                     mConnectToPc.setChecked(true);
-                    Write2File(mFile, "2");
+                    Write2File(mFile, SLAVE_MODE);
                 }
                 mConnectToPc.setEnabled(true);
             }
diff --git a/vendor/firefly/usb_mode_switch/usb_mode_switch.sh b/vendor/firefly/usb_mode_switch/usb_mode_switch.sh
index 937db86..e34a4e0 100644
--- a/vendor/firefly/usb_mode_switch/usb_mode_switch.sh
+++ b/vendor/firefly/usb_mode_switch/usb_mode_switch.sh
@@ -10,5 +10,14 @@
#
FILE_USB_MODE="/sys/kernel/debug/usb@fe800000/rk_usb_force_mode"
-[ -e "$FILE_USB_MODE" ] &&  echo  "host" > "$FILE_USB_MODE"
+FILE_USB_MODE1="/sys/kernel/debug/usb@fe900000/rk_usb_force_mode"
+MODE=$(getprop persist.usb.mode)
+
+if [ -z "$MODE" ];then
+    MODE="host";
+fi
+
+[ -e "$FILE_USB_MODE" ] &&  echo  "$MODE" > "$FILE_USB_MODE"
+
+[ -e "$FILE_USB_MODE1" ] &&  echo  "$MODE" > "$FILE_USB_MODE1"
发布了234 篇原创文章 · 获赞 64 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/zhoumushui/article/details/101428543