wlan: Error handling on PNO failure due to active P2P session

If set PNO fails due to concurrent active p2p sessions,
handle the error condition in framework and issue a
regular scan for every framework background scan interval
until set PNO is either success or disabled.

Change-Id: Ia4e8d9aef9ed24e534cb57cea7c8ba7a7ffc509e
CRs-Fixed: 586875
diff --git a/service/java/com/android/server/wifi/WifiNative.java b/service/java/com/android/server/wifi/WifiNative.java
index 7523c51..0e01e27 100644
--- a/service/java/com/android/server/wifi/WifiNative.java
+++ b/service/java/com/android/server/wifi/WifiNative.java
@@ -582,11 +582,13 @@
         return doBooleanCommand("DRIVER COUNTRY " + countryCode.toUpperCase(Locale.ROOT));
     }
 
-    public void enableBackgroundScan(boolean enable) {
+    public boolean enableBackgroundScan(boolean enable) {
         if (enable) {
-            doBooleanCommand("SET pno 1");
+            Log.e(mTAG, "doBoolean: enable");
+            return doBooleanCommand("SET pno 1");
         } else {
-            doBooleanCommand("SET pno 0");
+            Log.e(mTAG, "doBoolean: disable");
+            return doBooleanCommand("SET pno 0");
         }
     }
 
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 13d6404..aa28da7 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -2982,7 +2982,15 @@
                 + " startBackgroundScanIfNeeded:" + startBackgroundScanIfNeeded);
 
         if (startBackgroundScanIfNeeded) {
-            mWifiNative.enableBackgroundScan(mEnableBackgroundScan);
+            if (mEnableBackgroundScan) {
+                if (!mWifiNative.enableBackgroundScan(true)) {
+                    setScanAlarm(true, 200);
+                } else {
+                    setScanAlarm(false, 0);
+                }
+            } else {
+               mWifiNative.enableBackgroundScan(false);
+            }
         }
 
         if (DBG) log("handleScreenStateChanged Exit: " + screenOn);
@@ -7628,7 +7636,11 @@
                  * cleared
                  */
                 if (!mIsScanOngoing) {
-                    mWifiNative.enableBackgroundScan(true);
+                    if (!mWifiNative.enableBackgroundScan(true)) {
+                        setScanAlarm(true, 200);
+                    } else {
+                        setScanAlarm(false, 0);
+                    }
                 }
             } else {
                 setScanAlarm(true, 200);
@@ -7714,7 +7726,11 @@
                 case WifiMonitor.SCAN_RESULTS_EVENT:
                     /* Re-enable background scan when a pending scan result is received */
                     if (mEnableBackgroundScan && mIsScanOngoing) {
-                        mWifiNative.enableBackgroundScan(true);
+                        if (!mWifiNative.enableBackgroundScan(true)) {
+                            setScanAlarm(true, 200);
+                        } else {
+                            setScanAlarm(false, 0);
+                        }
                     }
                     /* Handled in parent state */
                     ret = NOT_HANDLED;