OSDN Git Service

Add USB RNDIS enable/disable control
authorRobert Greenwalt <robdroid@android.com>
Thu, 18 Feb 2010 19:25:54 +0000 (11:25 -0800)
committerRobert Greenwalt <robdroid@android.com>
Thu, 18 Feb 2010 20:10:55 +0000 (12:10 -0800)
core/java/android/os/INetworkManagementService.aidl
services/java/com/android/server/NetworkManagementService.java

index f48f45f..92041d8 100644 (file)
@@ -148,4 +148,18 @@ interface INetworkManagementService
      */
     void detachPppd(String tty);
 
+    /**
+     * Turn on USB RNDIS support - this will turn off thinks like adb/mass-storage
+     */
+    void startUsbRNDIS();
+
+    /**
+     * Turn off USB RNDIS support
+     */
+    void stopUsbRNDIS();
+
+    /**
+     * Check the status of USB RNDIS support
+     */
+    boolean isUsbRNDISStarted();
 }
index 1015028..958d089 100644 (file)
@@ -425,4 +425,35 @@ class NetworkManagementService extends INetworkManagementService.Stub {
                 android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
         mConnector.doCommand(String.format("pppd detach %s", tty));
     }
+
+    public void startUsbRNDIS() throws IllegalStateException {
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
+        mConnector.doCommand("usb startrndis");
+    }
+
+    public void stopUsbRNDIS() throws IllegalStateException {
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.CHANGE_NETWORK_STATE, "NetworkManagementService");
+        mConnector.doCommand("usb stoprndis");
+    }
+
+    public boolean isUsbRNDISStarted() throws IllegalStateException {
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.ACCESS_NETWORK_STATE, "NetworkManagementService");
+        ArrayList<String> rsp = mConnector.doCommand("usb rndisstatus");
+
+        for (String line : rsp) {
+            String []tok = line.split(" ");
+            int code = Integer.parseInt(tok[0]);
+            if (code == NetdResponseCode.UsbRNDISStatusResult) {
+                if (tok[2].equals("started"))
+                    return true;
+                return false;
+            } else {
+                throw new IllegalStateException(String.format("Unexpected response code %d", code));
+            }
+        }
+        throw new IllegalStateException("Got an empty response");
+    }
 }