#include "wifi-agent.h"
#include "wifi-power.h"
#include "wifi-state.h"
+#include "wifi-indicator.h"
#include "wifi-scan.h"
#include "wifi-bssid-scan.h"
#include "wifi-background-scan.h"
struct sock_data *sd = NULL;
gchar *pf = NULL;
int idx = 0;
+ unsigned char strength = 0;
const char *interface_name = NULL;
if (path == NULL || param == NULL)
if (g_strcmp0(property, "ready") == 0 || g_strcmp0(property, "online") == 0) {
netconfig_update_default_profile();
- wifi_state_set_service_state(interface_name, NETCONFIG_WIFI_CONNECTED);
+ wifi_state_set_service_state(interface_name, path, NETCONFIG_WIFI_CONNECTED);
} else if (g_strcmp0(property, "failure") == 0 ||
g_strcmp0(property, "disconnect") == 0 || g_strcmp0(property, "idle") == 0) {
if (g_strcmp0(property, "failure") == 0)
- wifi_state_set_service_state(interface_name, NETCONFIG_WIFI_FAILURE);
+ wifi_state_set_service_state(interface_name, path, NETCONFIG_WIFI_FAILURE);
else
- wifi_state_set_service_state(interface_name, NETCONFIG_WIFI_IDLE);
+ wifi_state_set_service_state(interface_name, path, NETCONFIG_WIFI_IDLE);
if (g_strcmp0(path, netconfig_get_default_profile()) != 0) {
g_free(property);
} else if (g_strcmp0(property, "association") == 0 || g_strcmp0(property, "configuration") == 0) {
if (g_strcmp0(property, "association") == 0)
- wifi_state_set_service_state(interface_name, NETCONFIG_WIFI_ASSOCIATION);
+ wifi_state_set_service_state(interface_name, path, NETCONFIG_WIFI_ASSOCIATION);
else
- wifi_state_set_service_state(interface_name, NETCONFIG_WIFI_CONFIGURATION);
+ wifi_state_set_service_state(interface_name, path, NETCONFIG_WIFI_CONFIGURATION);
if (g_strcmp0(path, netconfig_get_default_profile()) != 0) {
g_free(property);
goto done;
__netconfig_extract_ipv6_signal_data(variant, path);
+ } else if (g_strcmp0(sigvalue, "Strength") == 0) {
+ strength = g_variant_get_byte(variant);
+
+ netconfig_wifi_indicator_update(interface_name, path, strength - 120);
} else if (g_strcmp0(sigvalue, "Error") == 0) {
g_variant_get(variant, "s", &property);
INFO("[%s] Property : %s", sigvalue, property);
#define VCONFKEY_WIFI_SNR_MIN -89
#if !defined TIZEN_WEARABLE
-#define WIFI_INDICATOR_INTERVAL 1
+#define WIFI_INDICATOR_INTERVAL 2
#else
#define WIFI_INDICATOR_INTERVAL 10
#endif
typedef struct {
char *interface_name;
+ char *default_path;
int last_snr_level;
} rssi_data_s;
-static int netconfig_wifi_rssi = VCONFKEY_WIFI_SNR_MIN;
-static guint32 netconfig_wifi_freq = 0;
-static guint netconfig_wifi_indicator_timer = 0;
static GSList *g_rssi_list = NULL;
+static guint netconfig_wifi_statistics_timer = 0;
static rssi_data_s *__create_rssi_data(const char *interface_name)
{
return rssi_data;
}
+static void __set_rssi_data_default_path(const char *interface_name,
+ const char *path)
+{
+ rssi_data_s *rssi_data = __get_rssi_data(interface_name);
+ if (rssi_data == NULL)
+ return;
+
+ rssi_data->default_path = g_strdup(path);
+}
+
static void __destroy_rssi_data(const char *interface_name)
{
rssi_data_s *rssi_data = __get_rssi_data(interface_name);
g_rssi_list = g_slist_remove(g_rssi_list, rssi_data);
g_free(rssi_data->interface_name);
+ g_free(rssi_data->default_path);
g_free(rssi_data);
}
-int netconfig_wifi_get_rssi(void)
-{
- return netconfig_wifi_rssi;
-}
-
-unsigned int netconfig_wifi_get_freq(void)
-{
- return netconfig_wifi_freq;
-}
-
-static int __netconfig_wifi_update_and_get_rssi(const char *interface_name)
-{
- char *if_path = NULL;
- GVariant *message = NULL;
- GVariant *value = NULL;
- gchar *key;
- GVariantIter *iter;
- GVariant *variant;
- gint32 key_value;
- int rssi_dbm = VCONFKEY_WIFI_SNR_MIN;
-
- if_path = netconfig_wifi_get_supplicant_interface_path(interface_name);
- if (if_path == NULL) {
- ERR("Fail to get wpa_supplicant DBus path");
- return 0;
- }
-
- message = netconfig_invoke_dbus_method(SUPPLICANT_SERVICE, 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);
- while (g_variant_iter_loop(iter, "{sv}", &key, &variant)) {
-
- if (g_strcmp0(key, "rssi") == 0) {
- key_value = g_variant_get_int32(variant);
- rssi_dbm = (int)key_value;
- /* DBG("Currently signal dbm value [%d]", rssi_dbm); */
- } else if (g_strcmp0(key, "frequency") == 0) {
- netconfig_wifi_freq = g_variant_get_uint32(variant);
- /* DBG("Currently frequency [%u]", netconfig_wifi_freq); */
- }
- }
-
- g_variant_iter_free(iter);
-
- g_variant_unref(message);
-
- g_free(if_path);
-
- netconfig_wifi_rssi = rssi_dbm;
-
- return rssi_dbm;
-}
-
static int __netconfig_wifi_convert_dbm_to_level_24(int rssi_dbm)
{
int rssi_level = 0;
return rssi_level;
}
-int netconfig_wifi_rssi_level(const int rssi_dbm)
+static int __netconfig_wifi_get_rssi_level(const int rssi_dbm)
{
int snr_level = 0;
int freq = 0;
}
static void __netconfig_wifi_set_rssi_level(const char *interface_name,
- const int snr_level)
+ const char *path, const int snr_level)
{
rssi_data_s *rssi_data = NULL;
const char *default_ifname = NULL;
return;
if (snr_level != rssi_data->last_snr_level) {
- wifi_emit_rssi_changed((Wifi *)get_wifi_object(), interface_name, snr_level);
-
default_ifname = netconfig_get_default_ifname();
if (g_strcmp0(default_ifname, interface_name) == 0)
netconfig_set_vconf_int(VCONFKEY_WIFI_STRENGTH, snr_level);
- netconfig_battery_update_wifi_rssi(snr_level);
+ if (g_strcmp0(rssi_data->default_path, path) == 0) {
+ wifi_emit_rssi_changed((Wifi *)get_wifi_object(), interface_name, snr_level);
+
+ netconfig_battery_update_wifi_rssi(snr_level);
- rssi_data->last_snr_level = snr_level;
+ rssi_data->last_snr_level = snr_level;
+ }
}
}
old_level = level;
}
-static void __netconfig_wifi_update_indicator(void)
+static void __netconfig_wifi_get_statistics(void)
{
static int last_transfer_state = 0;
static guint64 netconfig_wifi_tx_bytes = 0;
}
}
-static gboolean __wifi_indicator_monitor(gpointer data)
+static gboolean __netconfig_wifi_update_statistics(gpointer data)
{
- int rssi_dbm = 0;
- int snr_level = 0;
int pm_state = VCONFKEY_PM_STATE_NORMAL;
char *interface_name = data;
if (pm_state >= VCONFKEY_PM_STATE_LCDOFF)
return TRUE;
- rssi_dbm = __netconfig_wifi_update_and_get_rssi(interface_name);
- snr_level = netconfig_wifi_rssi_level(rssi_dbm);
- __netconfig_wifi_set_rssi_level(interface_name, snr_level);
-
- __netconfig_wifi_update_indicator();
+ __netconfig_wifi_get_statistics();
return TRUE;
}
-void netconfig_wifi_indicator_start(const char *interface_name)
+void netconfig_wifi_indicator_update(const char *interface_name,
+ const char *path, int rssi_dbm)
+{
+ int pm_state = VCONFKEY_PM_STATE_NORMAL;
+ int snr_level = 0;
+
+ /* In case of LCD off, we don't need to update Wi-Fi indicator */
+ netconfig_vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
+ if (pm_state >= VCONFKEY_PM_STATE_LCDOFF)
+ return;
+
+ snr_level = __netconfig_wifi_get_rssi_level(rssi_dbm);
+ __netconfig_wifi_set_rssi_level(interface_name, path, snr_level);
+}
+
+void netconfig_wifi_indicator_start(const char *interface_name,
+ const char *profile_path)
{
const char *default_ifname = NULL;
__create_rssi_data(interface_name);
- wifi_emit_rssi_changed((Wifi *)get_wifi_object(),
- interface_name, VCONFKEY_WIFI_STRENGTH_MAX);
+ if (profile_path)
+ __set_rssi_data_default_path(interface_name, profile_path);
default_ifname = netconfig_get_default_ifname();
if (g_strcmp0(default_ifname, interface_name) == 0)
netconfig_set_vconf_int(VCONFKEY_WIFI_STRENGTH, VCONFKEY_WIFI_STRENGTH_MAX);
+ wifi_emit_rssi_changed((Wifi *)get_wifi_object(),
+ interface_name, VCONFKEY_WIFI_STRENGTH_MAX);
+
netconfig_start_timer_seconds(WIFI_INDICATOR_INTERVAL,
- __wifi_indicator_monitor, g_strdup(interface_name),
- &netconfig_wifi_indicator_timer);
+ __netconfig_wifi_update_statistics, g_strdup(interface_name),
+ &netconfig_wifi_statistics_timer);
netconfig_battery_update_wifi_rssi(VCONFKEY_WIFI_STRENGTH_MAX);
}
{
INFO("Stop Wi-Fi indicator");
- netconfig_stop_timer(&netconfig_wifi_indicator_timer);
-
- netconfig_wifi_rssi = VCONFKEY_WIFI_SNR_MIN;
- netconfig_wifi_freq = 0;
+ netconfig_stop_timer(&netconfig_wifi_statistics_timer);
__destroy_rssi_data(interface_name);
}