Create temporary file to check wifi firmware state #2
[platform/core/connectivity/net-config.git] / src / wifi-indicator.c
index 1c99a18..dd6c7b5 100755 (executable)
@@ -82,22 +82,16 @@ static int __netconfig_wifi_update_and_get_rssi(void)
        }
 
        message = netconfig_invoke_dbus_method(SUPPLICANT_SERVICE, if_path,
-                               SUPPLICANT_INTERFACE ".Interface", "SignalPoll", NULL);
-
-       g_free(if_path);
+                       SUPPLICANT_INTERFACE ".Interface", "SignalPoll", NULL);
        if (message == NULL) {
                ERR("Fail to get SignalPoll from wpa_supplicant");
+               g_free(if_path);
                return 0;
        }
 
        g_variant_get(message, "(v)", &value);
 
        g_variant_get(value, "a{sv}", &iter);
-       if (iter == NULL) {
-               ERR("Fail to get list from SignalPoll");
-               return 0;
-       }
-
        while (g_variant_iter_loop(iter, "{sv}", &key, &variant)) {
                key_value = g_variant_get_int32(variant);
 
@@ -115,30 +109,81 @@ static int __netconfig_wifi_update_and_get_rssi(void)
        if (value)
                g_variant_unref(value);
 
+       g_variant_unref(message);
+
+       g_free(if_path);
+
        netconfig_wifi_rssi = rssi_dbm;
 
        return rssi_dbm;
 }
 
-int netconfig_wifi_rssi_level(const int rssi_dbm)
+static int __netconfig_wifi_convert_dbm_to_level_24(int rssi_dbm)
 {
-       int snr_level = 0;
+       int rssi_level = 0;
 
-       /* Wi-Fi Signal Strength Display
+       /* Wi-Fi Signal Strength Display (for 2.4G (dB))
         *
-        * Excellent :  -63 ~
-        * Good:                -74 ~ -64
-        * Weak:                -82 ~ -75
-        * Very weak:           ~ -83
+        * Excellent :     ~ -63
+        * Good      : -64 ~ -74
+        * Weak      : -75 ~ -82
+        * Very weak : -83 ~ -88
+        * No signal : -89 ~
         */
+
        if (rssi_dbm >= -63)
-               snr_level = 4;
+               rssi_level = 4;
        else if (rssi_dbm >= -74)
-               snr_level = 3;
+               rssi_level = 3;
        else if (rssi_dbm >= -82)
-               snr_level = 2;
+               rssi_level = 2;
+       else if (rssi_dbm >= -88)
+               rssi_level = 1;
+       else
+               rssi_level = 0;
+
+       return rssi_level;
+}
+
+static int __netconfig_wifi_convert_dbm_to_level_50(int rssi_dbm)
+{
+       int rssi_level = 0;
+
+       /* Wi-Fi Signal Strength Display (for 5G (dB))
+        *
+        * Excellent :     ~ -72
+        * Good      : -73 ~ -78
+        * Weak      : -79 ~ -83
+        * Very weak : -84 ~ -88
+        * No signal : -89 ~
+        */
+
+       if (rssi_dbm >= -72)
+               rssi_level = 4;
+       else if (rssi_dbm >= -78)
+               rssi_level = 3;
+       else if (rssi_dbm >= -83)
+               rssi_level = 2;
+       else if (rssi_dbm >= -88)
+               rssi_level = 1;
+       else
+               rssi_level = 0;
+
+       return rssi_level;
+}
+
+int netconfig_wifi_rssi_level(const int rssi_dbm)
+{
+       int snr_level = 0;
+       int freq = 0;
+       int ret = 0;
+
+       ret = netconfig_vconf_get_int("memory/private/wifi/frequency", &freq);
+
+       if (!ret && freq > 4900)
+               snr_level = __netconfig_wifi_convert_dbm_to_level_50(rssi_dbm);
        else
-               snr_level = 1;
+               snr_level = __netconfig_wifi_convert_dbm_to_level_24(rssi_dbm);
 
        return snr_level;
 }