From aeba8aa9f46dfe8c70f59118147a0229d2fb2741 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Mon, 23 Dec 2019 17:08:08 +0800 Subject: Wifi: abort ongoing scan on p2p group join If P2P connection is requested while STA scan is ongoing, it takes time to establish connection because of waiting for STA scan completion. Bug: 131378508 Test: atest FrameworksWifiTests Change-Id: I0f1ec33236ad75b1300684ee375362a1f6431b8a --- .../java/com/android/server/wifi/WifiInjector.java | 6 +++++- .../com/android/server/wifi/p2p/WifiP2pNative.java | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) (limited to 'service') diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 080b76d9e..3fbd58ed5 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -228,7 +228,7 @@ public class WifiInjector { wifiHandler, new Random(), this); mWifiP2pMonitor = new WifiP2pMonitor(this); mSupplicantP2pIfaceHal = new SupplicantP2pIfaceHal(mWifiP2pMonitor); - mWifiP2pNative = new WifiP2pNative( + mWifiP2pNative = new WifiP2pNative(this, mWifiVendorHal, mSupplicantP2pIfaceHal, mHalDeviceManager, mPropertyService); @@ -786,4 +786,8 @@ public class WifiInjector { } return mNetdWrapper; } + + public WifiCondManager getWifiCondManager() { + return mWifiCondManager; + } } diff --git a/service/java/com/android/server/wifi/p2p/WifiP2pNative.java b/service/java/com/android/server/wifi/p2p/WifiP2pNative.java index 7eba9d34c..0732510b3 100644 --- a/service/java/com/android/server/wifi/p2p/WifiP2pNative.java +++ b/service/java/com/android/server/wifi/p2p/WifiP2pNative.java @@ -24,14 +24,19 @@ import android.net.wifi.p2p.WifiP2pConfig; import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pGroupList; import android.net.wifi.p2p.nsd.WifiP2pServiceInfo; +import android.net.wifi.wificond.WifiCondManager; import android.os.Handler; import android.text.TextUtils; import android.util.Log; import com.android.server.wifi.HalDeviceManager; import com.android.server.wifi.PropertyService; +import com.android.server.wifi.WifiInjector; +import com.android.server.wifi.WifiNative; import com.android.server.wifi.WifiVendorHal; +import java.util.Set; + /** * Native calls for bring up/shut down of the supplicant daemon and for * sending requests to the supplicant daemon @@ -42,6 +47,7 @@ public class WifiP2pNative { private static final String TAG = "WifiP2pNative"; private boolean mVerboseLoggingEnabled = false; private final SupplicantP2pIfaceHal mSupplicantP2pIfaceHal; + private final WifiInjector mWifiInjector; private final HalDeviceManager mHalDeviceManager; private final PropertyService mPropertyService; private final WifiVendorHal mWifiVendorHal; @@ -108,9 +114,10 @@ public class WifiP2pNative { } } - public WifiP2pNative(WifiVendorHal wifiVendorHal, + public WifiP2pNative(WifiInjector wifiInjector, WifiVendorHal wifiVendorHal, SupplicantP2pIfaceHal p2pIfaceHal, HalDeviceManager halDeviceManager, PropertyService propertyService) { + mWifiInjector = wifiInjector; mWifiVendorHal = wifiVendorHal; mSupplicantP2pIfaceHal = p2pIfaceHal; mHalDeviceManager = halDeviceManager; @@ -597,6 +604,7 @@ public class WifiP2pNative { default: freq = config.groupOwnerBand; } + abortWifiRunningScanIfNeeded(join); return mSupplicantP2pIfaceHal.groupAdd( config.networkName, config.passphrase, @@ -604,6 +612,18 @@ public class WifiP2pNative { freq, config.deviceAddress, join); } + private void abortWifiRunningScanIfNeeded(boolean isJoin) { + if (!isJoin) return; + + WifiCondManager wifiCondManager = mWifiInjector.getWifiCondManager(); + WifiNative wifiNative = mWifiInjector.getWifiNative(); + Set wifiClientInterfaces = wifiNative.getClientInterfaceNames(); + + for (String interfaceName: wifiClientInterfaces) { + wifiCondManager.abortScan(interfaceName); + } + } + /** * Terminate a P2P group. If a new virtual network interface was used for * the group, it must also be removed. The network interface name of the -- cgit v1.2.3