diff options
author | Petr Havlena <havlenapetr@gmail.com> | 2010-08-18 23:45:57 +0200 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2010-08-20 09:25:44 -0400 |
commit | adeeb14b4865b6173db1be1179da67bbbceaea9a (patch) | |
tree | 9e15cba4ba25b2b8aabff98ee953f03d856acac2 | |
parent | a1b6b6086a30292097d9e3a1ac7e8298954dafce (diff) | |
download | frameworks_base-adeeb14b4865b6173db1be1179da67bbbceaea9a.zip frameworks_base-adeeb14b4865b6173db1be1179da67bbbceaea9a.tar.gz frameworks_base-adeeb14b4865b6173db1be1179da67bbbceaea9a.tar.bz2 |
add adhoc support into android framework
-rw-r--r-- | api/current.xml | 183 | ||||
-rw-r--r-- | core/jni/android_net_wifi_Wifi.cpp | 2 | ||||
-rw-r--r-- | services/java/com/android/server/WifiService.java | 60 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiConfiguration.java | 52 |
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); |