summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Havlena <havlenapetr@gmail.com>2010-08-18 23:45:57 +0200
committerSteve Kondik <shade@chemlab.org>2010-08-20 09:25:44 -0400
commitadeeb14b4865b6173db1be1179da67bbbceaea9a (patch)
tree9e15cba4ba25b2b8aabff98ee953f03d856acac2
parenta1b6b6086a30292097d9e3a1ac7e8298954dafce (diff)
downloadframeworks_base-adeeb14b4865b6173db1be1179da67bbbceaea9a.zip
frameworks_base-adeeb14b4865b6173db1be1179da67bbbceaea9a.tar.gz
frameworks_base-adeeb14b4865b6173db1be1179da67bbbceaea9a.tar.bz2
add adhoc support into android framework
-rw-r--r--api/current.xml183
-rw-r--r--core/jni/android_net_wifi_Wifi.cpp2
-rw-r--r--services/java/com/android/server/WifiService.java60
-rw-r--r--wifi/java/android/net/wifi/WifiConfiguration.java52
4 files changed, 294 insertions, 3 deletions
diff --git a/api/current.xml b/api/current.xml
index 4a8ecb7..baff527 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -92324,6 +92324,16 @@
visibility="public"
>
</field>
+<field name="adhocSSID"
+ type="boolean"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="allowedAuthAlgorithms"
type="java.util.BitSet"
transient="false"
@@ -92374,6 +92384,16 @@
visibility="public"
>
</field>
+<field name="frequency"
+ type="int"
+ transient="false"
+ volatile="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="hiddenSSID"
type="boolean"
transient="false"
@@ -92510,6 +92530,169 @@
>
</field>
</class>
+<class name="WifiConfiguration.ChannelFrequency"
+ extends="java.lang.Object"
+ abstract="false"
+ static="true"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<field name="CHANNEL_1"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2412"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_10"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2457"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_11"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2462"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_12"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2467"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_13"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2472"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_14"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2484"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_2"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2417"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_3"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2422"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_4"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2427"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_5"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2432"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_6"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2437"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_7"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2442"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_8"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2447"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+<field name="CHANNEL_9"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="2452"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
+</class>
<class name="WifiConfiguration.GroupCipher"
extends="java.lang.Object"
abstract="false"
diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp
index 5903f09..f25353c 100644
--- a/core/jni/android_net_wifi_Wifi.cpp
+++ b/core/jni/android_net_wifi_Wifi.cpp
@@ -423,8 +423,6 @@ static jboolean android_net_wifi_setBluetoothCoexistenceScanModeCommand(JNIEnv*
static jboolean android_net_wifi_saveConfigCommand(JNIEnv* env, jobject clazz)
{
- // Make sure we never write out a value for AP_SCAN other than 1
- (void)doBooleanCommand("AP_SCAN 1", "OK");
return doBooleanCommand("SAVE_CONFIG", "OK");
}
diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java
index 8d6ad93..6cde606 100644
--- a/services/java/com/android/server/WifiService.java
+++ b/services/java/com/android/server/WifiService.java
@@ -93,7 +93,7 @@ import com.android.internal.R;
*/
public class WifiService extends IWifiManager.Stub {
private static final String TAG = "WifiService";
- private static final boolean DBG = false;
+ private static final boolean DBG = true;
private static final Pattern scanResultPattern = Pattern.compile("\t+");
private final WifiStateTracker mWifiStateTracker;
/* TODO: fetch a configurable interface */
@@ -902,6 +902,15 @@ public class WifiService extends IWifiManager.Stub {
}
}
+ value = mWifiStateTracker.getNetworkVariable(netId, WifiConfiguration.modeVarName);
+ config.adhocSSID = false;
+ if (!TextUtils.isEmpty(value)) {
+ try {
+ config.adhocSSID = Integer.parseInt(value) != 0;
+ } catch (NumberFormatException ignore) {
+ }
+ }
+
value = mWifiStateTracker.getNetworkVariable(netId, WifiConfiguration.wepTxKeyIdxVarName);
config.wepTxKeyIndex = -1;
if (!TextUtils.isEmpty(value)) {
@@ -1080,6 +1089,55 @@ public class WifiService extends IWifiManager.Stub {
break setVariables;
}
+ if(config.adhocSSID) {
+ if (DBG) {
+ Slog.d(TAG, "setting adhoc network");
+ }
+ //Set Adhoc Mode
+ if (!mWifiStateTracker.setNetworkVariable(
+ netId,
+ WifiConfiguration.modeVarName,
+ config.modeAdhoc)) {
+ if (DBG) {
+ Slog.d(TAG, "failed to set adhoc mode: " + config.adhocSSID);
+ }
+ break setVariables;
+ }
+
+ String frequency;
+ if (config.frequency != 0) {
+ frequency = Integer.toString(config.frequency);
+ } else {
+ //Default to channel 11
+ frequency = Integer.toString(WifiConfiguration.ChannelFrequency.CHANNEL_11);
+ }
+
+ //Set frequency
+ if (!mWifiStateTracker.setNetworkVariable(
+ netId,
+ WifiConfiguration.frequencyVarName,
+ frequency)) {
+ if (DBG) {
+ Slog.d(TAG, "failed to set frequency: " + frequency);
+ }
+ break setVariables;
+ }
+ } else {
+ if (DBG) {
+ Slog.d(TAG, "setting non adhoc network");
+ }
+ //Set Infrastructure Mode
+ if (!mWifiStateTracker.setNetworkVariable(
+ netId,
+ WifiConfiguration.modeVarName,
+ config.modeInfrastructure)) {
+ if (DBG) {
+ Slog.d(TAG, "failed to set infrastructure mode: " + config.adhocSSID);
+ }
+ break setVariables;
+ }
+ }
+
String allowedKeyManagementString =
makeString(config.allowedKeyManagement, WifiConfiguration.KeyMgmt.strings);
if (config.allowedKeyManagement.cardinality() != 0 &&
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 01bc919..22ff8dd 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -42,6 +42,41 @@ public class WifiConfiguration implements Parcelable {
public static final String priorityVarName = "priority";
/** {@hide} */
public static final String hiddenSSIDVarName = "scan_ssid";
+ /** {@hide} */
+ public static final String modeVarName = "mode";
+ /** {@hide} */
+ public static final String frequencyVarName = "frequency";
+ /** {@hide} */
+ public static final String modeInfrastructure = "0";
+ /** {@hide} */
+ public static final String modeAdhoc = "1";
+ /**
+ * Channel Frequency Values, to be used for setting up Adhoc Networks
+ */
+ public static class ChannelFrequency {
+ private ChannelFrequency() { }
+
+ /** Channel Frequencies by Channel Number
+ * Allowed use may vary by region
+ * USA allows use of channels 1 through 11
+ * Europe allows channels 1 through 13
+ * Japan uses all channels, with 14 restricted to 802.11b traffic
+ */
+ public static final int CHANNEL_1 = 2412;
+ public static final int CHANNEL_2 = 2417;
+ public static final int CHANNEL_3 = 2422;
+ public static final int CHANNEL_4 = 2427;
+ public static final int CHANNEL_5 = 2432;
+ public static final int CHANNEL_6 = 2437;
+ public static final int CHANNEL_7 = 2442;
+ public static final int CHANNEL_8 = 2447;
+ public static final int CHANNEL_9 = 2452;
+ public static final int CHANNEL_10 = 2457;
+ public static final int CHANNEL_11 = 2462;
+ public static final int CHANNEL_12 = 2467;
+ public static final int CHANNEL_13 = 2472;
+ public static final int CHANNEL_14 = 2484;
+ }
/** {@hide} */
public class EnterpriseField {
@@ -264,6 +299,17 @@ public class WifiConfiguration implements Parcelable {
public boolean hiddenSSID;
/**
+ * This is a adhoc network
+ */
+ public boolean adhocSSID;
+
+ /**
+ * If the signal is Adhoc, then frequency must be set
+ * otherwise, we don't care what the frequency is
+ */
+ public int frequency;
+
+ /**
* The set of key management protocols supported by this configuration.
* See {@link KeyMgmt} for descriptions of the values.
* Defaults to WPA-PSK WPA-EAP.
@@ -300,6 +346,8 @@ public class WifiConfiguration implements Parcelable {
SSID = null;
BSSID = null;
priority = 0;
+ frequency = 0;
+ adhocSSID = false;
hiddenSSID = false;
allowedKeyManagement = new BitSet();
allowedProtocols = new BitSet();
@@ -444,6 +492,8 @@ public class WifiConfiguration implements Parcelable {
dest.writeInt(wepTxKeyIndex);
dest.writeInt(priority);
dest.writeInt(hiddenSSID ? 1 : 0);
+ dest.writeInt(adhocSSID ? 1 : 0);
+ dest.writeInt(frequency);
writeBitSet(dest, allowedKeyManagement);
writeBitSet(dest, allowedProtocols);
@@ -471,6 +521,8 @@ public class WifiConfiguration implements Parcelable {
config.wepTxKeyIndex = in.readInt();
config.priority = in.readInt();
config.hiddenSSID = in.readInt() != 0;
+ config.adhocSSID = in.readInt() != 0;
+ config.frequency = in.readInt();
config.allowedKeyManagement = readBitSet(in);
config.allowedProtocols = readBitSet(in);
config.allowedAuthAlgorithms = readBitSet(in);