diff options
Diffstat (limited to 'service/java/com/android/server/wifi/WifiMonitor.java')
-rw-r--r-- | service/java/com/android/server/wifi/WifiMonitor.java | 36 |
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); } } |