summaryrefslogtreecommitdiffstats
path: root/service/java/com/android/server/wifi/WifiMonitor.java
diff options
context:
space:
mode:
Diffstat (limited to 'service/java/com/android/server/wifi/WifiMonitor.java')
-rw-r--r--service/java/com/android/server/wifi/WifiMonitor.java36
1 files changed, 29 insertions, 7 deletions
diff --git a/service/java/com/android/server/wifi/WifiMonitor.java b/service/java/com/android/server/wifi/WifiMonitor.java
index ffca502..cd324b4 100644
--- a/service/java/com/android/server/wifi/WifiMonitor.java
+++ b/service/java/com/android/server/wifi/WifiMonitor.java
@@ -27,6 +27,7 @@ import android.net.wifi.p2p.WifiP2pGroup;
import android.net.wifi.p2p.WifiP2pProvDiscEvent;
import android.net.wifi.p2p.nsd.WifiP2pServiceResponse;
import android.os.Message;
+import android.os.SystemProperties;
import android.text.TextUtils;
import android.util.LocalLog;
import android.util.Log;
@@ -421,6 +422,12 @@ public class WifiMonitor {
*/
private static final String P2P_SERV_DISC_RESP_STR = "P2P-SERV-DISC-RESP";
+ /* P2P-REMOVE-AND-REFORM-GROUP */
+ /* Supplicant is supposed to generate this event only when p2p
+ * is connected
+ */
+ private static final String P2P_REMOVE_AND_REFORM_GROUP_STR = "P2P-REMOVE-AND-REFORM-GROUP";
+
private static final String HOST_AP_EVENT_PREFIX_STR = "AP";
/* AP-STA-CONNECTED 42:fc:89:a8:96:09 dev_addr=02:90:4c:a0:92:54 */
private static final String AP_STA_CONNECTED_STR = "AP-STA-CONNECTED";
@@ -488,6 +495,7 @@ public class WifiMonitor {
public static final int P2P_FIND_STOPPED_EVENT = BASE + 37;
public static final int P2P_SERV_DISC_RESP_EVENT = BASE + 38;
public static final int P2P_PROV_DISC_FAILURE_EVENT = BASE + 39;
+ public static final int P2P_REMOVE_AND_REFORM_GROUP_EVENT = BASE + 40;
/* hostap events */
public static final int AP_STA_DISCONNECTED_EVENT = BASE + 41;
@@ -559,8 +567,8 @@ public class WifiMonitor {
mStateMachine2 = stateMachine;
}
- public void startMonitoring() {
- WifiMonitorSingleton.sInstance.startMonitoring(mInterfaceName);
+ public boolean startMonitoring() {
+ return WifiMonitorSingleton.sInstance.startMonitoring(mInterfaceName);
}
public void stopMonitoring() {
@@ -585,11 +593,11 @@ public class WifiMonitor {
private WifiMonitorSingleton() {
}
- public synchronized void startMonitoring(String iface) {
+ public synchronized boolean startMonitoring(String iface) {
WifiMonitor m = mIfaceMap.get(iface);
if (m == null) {
Log.e(TAG, "startMonitor called with unknown iface=" + iface);
- return;
+ return false;
}
Log.d(TAG, "startMonitoring(" + iface + ") with mConnected = " + mConnected);
@@ -597,7 +605,12 @@ public class WifiMonitor {
if (mConnected) {
m.mMonitoring = true;
m.mStateMachine.sendMessage(SUP_CONNECTION_EVENT);
+ return true;
} else {
+ if (iface.equals("p2p0")) {
+ Log.e(TAG, "Monitoring(" + iface +") failed!, wlan0 interface restarted");
+ return false;
+ }
if (DBG) Log.d(TAG, "connecting to supplicant");
int connectTries = 0;
while (true) {
@@ -606,11 +619,11 @@ public class WifiMonitor {
m.mStateMachine.sendMessage(SUP_CONNECTION_EVENT);
mConnected = true;
new MonitorThread(mWifiNative, this).start();
- break;
+ return true;
}
- if (connectTries++ < 5) {
+ if (connectTries++ < 50) {
try {
- Thread.sleep(1000);
+ Thread.sleep(100);
} catch (InterruptedException ignore) {
}
} else {
@@ -620,6 +633,7 @@ public class WifiMonitor {
}
}
}
+ return false;
}
public synchronized void stopMonitoring(String iface) {
@@ -672,6 +686,11 @@ public class WifiMonitor {
int space = eventStr.indexOf(' ');
if (space != -1) {
iface = eventStr.substring(7, space);
+ if ((SystemProperties.getInt("persist.fst.rate.upgrade.en", 0) == 1) &&
+ iface.startsWith("wlan1")) {
+ Log.i(TAG, "Ignoring fst rate upgrade event: " + eventStr);
+ return false;
+ }
if (!mIfaceMap.containsKey(iface) && iface.startsWith("p2p-")) {
// p2p interfaces are created dynamically, but we have
// only one P2p state machine monitoring all of them; look
@@ -1189,6 +1208,9 @@ public class WifiMonitor {
} else {
Log.e(TAG, "Null service resp " + dataString);
}
+ } else if (dataString.startsWith(P2P_REMOVE_AND_REFORM_GROUP_STR)) {
+ Log.d(TAG, "Received event= " + dataString);
+ mStateMachine.sendMessage(P2P_REMOVE_AND_REFORM_GROUP_EVENT);
}
}