Angler Should Not Use Channel 11 for SoftAP
b/22541346
Change-Id: I300605d8d305214e81803d5d54549e7c3e5bc5bb
diff --git a/service/java/com/android/server/wifi/WifiApConfigStore.java b/service/java/com/android/server/wifi/WifiApConfigStore.java
index c06db02..ed5ddf7 100644
--- a/service/java/com/android/server/wifi/WifiApConfigStore.java
+++ b/service/java/com/android/server/wifi/WifiApConfigStore.java
@@ -37,6 +37,7 @@
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.UUID;
/**
@@ -59,6 +60,7 @@
private WifiConfiguration mWifiApConfig = null;
private AsyncChannel mReplyChannel = new AsyncChannel();
+ public ArrayList <Integer> allowed2GChannel = null;
WifiApConfigStore(Context context, Handler target) {
super(TAG, target.getLooper());
@@ -69,6 +71,17 @@
addState(mActiveState, mDefaultState);
setInitialState(mInactiveState);
+ String ap2GChannelListStr = (mContext.getResources().getString(
+ R.string.config_wifi_framework_sap_2G_channel_list));
+ Log.d(TAG, "2G band allowed channels are:" + ap2GChannelListStr);
+
+ if (ap2GChannelListStr != null) {
+ allowed2GChannel = new ArrayList<Integer>();
+ String channelList[] = ap2GChannelListStr.split(",");
+ for (String tmp : channelList) {
+ allowed2GChannel.add(Integer.parseInt(tmp));
+ }
+ }
}
public static WifiApConfigStore makeWifiApConfigStore(Context context, Handler target) {
@@ -167,6 +180,7 @@
if (authType != KeyMgmt.NONE) {
config.preSharedKey = in.readUTF();
}
+
mWifiApConfig = config;
} catch (IOException ignore) {
setDefaultApConfiguration();
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index f1d8c3b..c2f6081 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -193,7 +193,7 @@
private INetworkManagementService mNwService;
private ConnectivityManager mCm;
private WifiLogger mWifiLogger;
-
+ private WifiApConfigStore mWifiApConfigStore;
private final boolean mP2pSupported;
private final AtomicBoolean mP2pConnected = new AtomicBoolean(false);
private boolean mTemporarilyDisconnectWifi = false;
@@ -5110,8 +5110,17 @@
int[] channel;
if (apBand == 0) {
- //for 2.4GHz, we only set the AP at channel 1,6,11
- apChannel = 5 * mRandom.nextInt(3) + 1;
+ if (mWifiApConfigStore.allowed2GChannel == null ||
+ mWifiApConfigStore.allowed2GChannel.size() == 0) {
+ //most safe channel to use
+ if(DBG) {
+ Log.d(TAG, "No specified 2G allowed channel list");
+ }
+ apChannel = 6;
+ } else {
+ int index = mRandom.nextInt(mWifiApConfigStore.allowed2GChannel.size());
+ apChannel = mWifiApConfigStore.allowed2GChannel.get(index).intValue();
+ }
} else {
//5G without DFS
channel = mWifiNative.getChannelsForBand(2);
@@ -5597,11 +5606,11 @@
if (mWifiApConfigChannel == null) {
mWifiApConfigChannel = new AsyncChannel();
- WifiApConfigStore wifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
+ mWifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
mContext, getHandler());
- wifiApConfigStore.loadApConfiguration();
+ mWifiApConfigStore.loadApConfiguration();
mWifiApConfigChannel.connectSync(mContext, getHandler(),
- wifiApConfigStore.getMessenger());
+ mWifiApConfigStore.getMessenger());
}
if (mWifiConfigStore.enableHalBasedPno.get()) {