Switch to cfg based signal_poll command

Bug: 5352916
Change-Id: Id2ba7091a5e4cc4c1e14aa2c49e5b943519019bf
diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp
index 84a50f0..84c636b 100644
--- a/core/jni/android_net_wifi_Wifi.cpp
+++ b/core/jni/android_net_wifi_Wifi.cpp
@@ -402,30 +402,6 @@
     return (jint)rssi;
 }
 
-static jint android_net_wifi_getRssiCommand(JNIEnv* env, jobject)
-{
-    return android_net_wifi_getRssiHelper("DRIVER RSSI");
-}
-
-static jint android_net_wifi_getRssiApproxCommand(JNIEnv* env, jobject)
-{
-    return android_net_wifi_getRssiHelper("DRIVER RSSI-APPROX");
-}
-
-static jint android_net_wifi_getLinkSpeedCommand(JNIEnv* env, jobject)
-{
-    char reply[BUF_SIZE];
-    int linkspeed;
-
-    if (doCommand("DRIVER LINKSPEED", reply, sizeof(reply)) != 0) {
-        return (jint)-1;
-    }
-    // reply comes back in the form "LinkSpeed XX" where XX is the
-    // number we're interested in.
-    sscanf(reply, "%*s %u", &linkspeed);
-    return (jint)linkspeed;
-}
-
 static jstring android_net_wifi_getMacAddressCommand(JNIEnv* env, jobject)
 {
     char reply[BUF_SIZE];
@@ -625,10 +601,6 @@
     		(void*) android_net_wifi_setBluetoothCoexistenceModeCommand },
     { "setBluetoothCoexistenceScanModeCommand", "(Z)Z",
     		(void*) android_net_wifi_setBluetoothCoexistenceScanModeCommand },
-    { "getRssiCommand", "()I", (void*) android_net_wifi_getRssiCommand },
-    { "getRssiApproxCommand", "()I",
-            (void*) android_net_wifi_getRssiApproxCommand},
-    { "getLinkSpeedCommand", "()I", (void*) android_net_wifi_getLinkSpeedCommand },
     { "getMacAddressCommand", "()Ljava/lang/String;", (void*) android_net_wifi_getMacAddressCommand },
     { "saveConfigCommand", "()Z", (void*) android_net_wifi_saveConfigCommand },
     { "reloadConfigCommand", "()Z", (void*) android_net_wifi_reloadConfigCommand },
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
index a6ea6d4..6ff1bc2 100644
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ b/wifi/java/android/net/wifi/WifiNative.java
@@ -106,12 +106,6 @@
 
     public native static String statusCommand();
 
-    public native static int getRssiCommand();
-
-    public native static int getRssiApproxCommand();
-
-    public native static int getLinkSpeedCommand();
-
     public native static String getMacAddressCommand();
 
     public native static String scanResultsCommand();
@@ -209,6 +203,16 @@
 
     private native static String doStringCommand(String command);
 
+    /** Example output:
+     * RSSI=-65
+     * LINKSPEED=48
+     * NOISE=9999
+     * FREQUENCY=0
+     */
+    public static String signalPoll() {
+        return doStringCommand("SIGNAL_POLL");
+    }
+
     public static boolean wpsPbc() {
         return doBooleanCommand("WPS_PBC");
     }
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
index 052d332..41fc55d 100644
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ b/wifi/java/android/net/wifi/WifiStateMachine.java
@@ -1362,7 +1362,28 @@
      * Fetch RSSI and linkspeed on current connection
      */
     private void fetchRssiAndLinkSpeedNative() {
-        int newRssi = WifiNative.getRssiCommand();
+        int newRssi = -1;
+        int newLinkSpeed = -1;
+
+        String signalPoll = WifiNative.signalPoll();
+
+        if (signalPoll != null) {
+            String[] lines = signalPoll.split("\n");
+            for (String line : lines) {
+                String[] prop = line.split("=");
+                if (prop.length < 2) continue;
+                try {
+                    if (prop[0].equals("RSSI")) {
+                        newRssi = Integer.parseInt(prop[1]);
+                    } else if (prop[0].equals("LINKSPEED")) {
+                        newLinkSpeed = Integer.parseInt(prop[1]);
+                    }
+                } catch (NumberFormatException e) {
+                    //Ignore, defaults on rssi and linkspeed are assigned
+                }
+            }
+        }
+
         if (newRssi != -1 && MIN_RSSI < newRssi && newRssi < MAX_RSSI) { // screen out invalid values
             /* some implementations avoid negative values by adding 256
              * so we need to adjust for that here.
@@ -1390,7 +1411,7 @@
         } else {
             mWifiInfo.setRssi(MIN_RSSI);
         }
-        int newLinkSpeed = WifiNative.getLinkSpeedCommand();
+
         if (newLinkSpeed != -1) {
             mWifiInfo.setLinkSpeed(newLinkSpeed);
         }