summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Greenwalt <robdroid@android.com>2010-02-18 11:25:54 -0800
committerRobert Greenwalt <robdroid@android.com>2010-02-18 12:10:55 -0800
commitce1200d42c46ae5d3ec637587b07dfdc02ad21c0 (patch)
tree093e3d8693a3e8e1f5e36fbc8032711a8a964b90
parent0a073274d82443e7fbb964f069fed58215641aa8 (diff)
downloadframeworks_base-ce1200d42c46ae5d3ec637587b07dfdc02ad21c0.zip
frameworks_base-ce1200d42c46ae5d3ec637587b07dfdc02ad21c0.tar.gz
frameworks_base-ce1200d42c46ae5d3ec637587b07dfdc02ad21c0.tar.bz2
Add USB RNDIS enable/disable control
-rw-r--r--core/java/android/os/INetworkManagementService.aidl14
-rw-r--r--services/java/com/android/server/NetworkManagementService.java31
2 files changed, 45 insertions, 0 deletions
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index f48f45f..92041d8 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -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();
}
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 1015028..958d089 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -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");
+ }
}