From 5072ab74a2f791b5cb9312886a2ab95286c3d63d Mon Sep 17 00:00:00 2001 From: Bruno Randolf Date: Sat, 2 Feb 2013 11:09:55 +0000 Subject: [PATCH] Wifi: Enable Ad-Hoc (IBSS) network configuration This adds two public but hidden variables to WifiConfiguration: isIBSS and frequency. These are used for configuring IBSS mode. WifiConfigStore is exended to get and set these variables to wpa_supplicant (via WifiNative). Change-Id: Iab02c3d738c05c2de036350ea77b78789213e357 --- .../android/net/wifi/WifiConfigStore.java | 35 +++++++++++++++++++ .../android/net/wifi/WifiConfiguration.java | 24 +++++++++++++ 2 files changed, 59 insertions(+) diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java index bbaa0ace192a..614bd114d723 100644 --- a/wifi/java/android/net/wifi/WifiConfigStore.java +++ b/wifi/java/android/net/wifi/WifiConfigStore.java @@ -1006,6 +1006,23 @@ private NetworkUpdateResult addOrUpdateNetworkNative(WifiConfiguration config) { break setVariables; } + if (config.isIBSS) { + if(!mWifiNative.setNetworkVariable( + netId, + WifiConfiguration.modeVarName, + "1")) { + loge("failed to set adhoc mode"); + break setVariables; + } + if(!mWifiNative.setNetworkVariable( + netId, + WifiConfiguration.frequencyVarName, + Integer.toString(config.frequency))) { + loge("failed to set frequency"); + break setVariables; + } + } + String allowedKeyManagementString = makeString(config.allowedKeyManagement, WifiConfiguration.KeyMgmt.strings); if (config.allowedKeyManagement.cardinality() != 0 && @@ -1356,6 +1373,24 @@ private void readNetworkVariables(WifiConfiguration config) { } } + value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.modeVarName); + config.isIBSS = false; + if (!TextUtils.isEmpty(value)) { + try { + config.isIBSS = Integer.parseInt(value) != 0; + } catch (NumberFormatException ignore) { + } + } + + value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.frequencyVarName); + config.frequency = 0; + if (!TextUtils.isEmpty(value)) { + try { + config.frequency = Integer.parseInt(value); + } catch (NumberFormatException ignore) { + } + } + value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.wepTxKeyIdxVarName); config.wepTxKeyIndex = -1; if (!TextUtils.isEmpty(value)) { diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index c4fe1b4b35fb..162862b546e4 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -77,6 +77,10 @@ public class WifiConfiguration implements Parcelable { /** {@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 int INVALID_NETWORK_ID = -1; /** {@hide} */ @@ -327,6 +331,18 @@ private Status() { } */ public boolean hiddenSSID; + /** + * This is an Ad-Hoc (IBSS) network + * {@hide} + */ + public boolean isIBSS; + + /** + * Frequency of the Ad-Hoc (IBSS) network, if newly created + * {@hide} + */ + public int frequency; + /** * The set of key management protocols supported by this configuration. * See {@link KeyMgmt} for descriptions of the values. @@ -405,6 +421,8 @@ public WifiConfiguration() { BSSID = null; priority = 0; hiddenSSID = false; + isIBSS = false; + frequency = 0; disableReason = DISABLED_UNKNOWN_REASON; allowedKeyManagement = new BitSet(); allowedProtocols = new BitSet(); @@ -600,6 +618,8 @@ public WifiConfiguration(WifiConfiguration source) { wepTxKeyIndex = source.wepTxKeyIndex; priority = source.priority; hiddenSSID = source.hiddenSSID; + isIBSS = source.isIBSS; + frequency = source.frequency; allowedKeyManagement = (BitSet) source.allowedKeyManagement.clone(); allowedProtocols = (BitSet) source.allowedProtocols.clone(); allowedAuthAlgorithms = (BitSet) source.allowedAuthAlgorithms.clone(); @@ -628,6 +648,8 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(wepTxKeyIndex); dest.writeInt(priority); dest.writeInt(hiddenSSID ? 1 : 0); + dest.writeInt(isIBSS ? 1 : 0); + dest.writeInt(frequency); writeBitSet(dest, allowedKeyManagement); writeBitSet(dest, allowedProtocols); @@ -659,6 +681,8 @@ public WifiConfiguration createFromParcel(Parcel in) { config.wepTxKeyIndex = in.readInt(); config.priority = in.readInt(); config.hiddenSSID = in.readInt() != 0; + config.isIBSS = in.readInt() != 0; + config.frequency = in.readInt(); config.allowedKeyManagement = readBitSet(in); config.allowedProtocols = readBitSet(in); config.allowedAuthAlgorithms = readBitSet(in);