From: hyunuk.tak Date: Fri, 4 Sep 2020 06:57:33 +0000 (+0900) Subject: Update rssi from strength signal of connman X-Git-Tag: submit/tizen/20200909.082135^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7ec7556081a47935972cb8317cc3ac22e9f97350;p=platform%2Fcore%2Fconnectivity%2Fnet-config.git Update rssi from strength signal of connman Change-Id: I6001209db19f69a5af4000e947d879d20a8b684f Signed-off-by: hyunuk.tak --- diff --git a/include/wifi-indicator.h b/include/wifi-indicator.h index 53355f5..9ecc549 100755 --- a/include/wifi-indicator.h +++ b/include/wifi-indicator.h @@ -24,11 +24,10 @@ extern "C" { #endif -int netconfig_wifi_get_rssi(void); -unsigned int netconfig_wifi_get_freq(void); -int netconfig_wifi_rssi_level(const int rssi_dbm); +void netconfig_wifi_indicator_update(const char *interface_name, + const char *path, int rssi_dbm); -void netconfig_wifi_indicator_start(const char *interface_name); +void netconfig_wifi_indicator_start(const char *interface_name, const char *profile_path); void netconfig_wifi_indicator_stop(const char *interface_name); #ifdef __cplusplus diff --git a/include/wifi-state.h b/include/wifi-state.h index 9f74014..9a2da28 100755 --- a/include/wifi-state.h +++ b/include/wifi-state.h @@ -81,7 +81,8 @@ gboolean wifi_state_is_bss_found(void); gboolean wifi_state_update_device_list(void); GSList *wifi_state_get_device_list(void); -void wifi_state_set_service_state(const char *interface_name, wifi_service_state_e new_state); +void wifi_state_set_service_state(const char *interface_name, + const char *service, wifi_service_state_e new_state); wifi_service_state_e wifi_state_get_service_state(const char *interface_name); void wifi_state_set_technology_state(const char *interface_name, wifi_tech_state_e new_state); diff --git a/src/signal-handler.c b/src/signal-handler.c index 30a549b..bd7004b 100755 --- a/src/signal-handler.c +++ b/src/signal-handler.c @@ -32,6 +32,7 @@ #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" @@ -404,6 +405,7 @@ static void _service_signal_cb(GDBusConnection *conn, 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) @@ -435,14 +437,14 @@ static void _service_signal_cb(GDBusConnection *conn, 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); @@ -453,9 +455,9 @@ static void _service_signal_cb(GDBusConnection *conn, } 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); @@ -618,6 +620,10 @@ static void _service_signal_cb(GDBusConnection *conn, 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); diff --git a/src/wifi-indicator.c b/src/wifi-indicator.c index 681ee67..5b0810a 100755 --- a/src/wifi-indicator.c +++ b/src/wifi-indicator.c @@ -40,7 +40,7 @@ #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 @@ -58,13 +58,12 @@ 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) { @@ -95,6 +94,16 @@ static rssi_data_s *__get_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); @@ -104,70 +113,10 @@ static void __destroy_rssi_data(const char *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; @@ -222,7 +171,7 @@ static int __netconfig_wifi_convert_dbm_to_level_50(int rssi_dbm) 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; @@ -239,7 +188,7 @@ int netconfig_wifi_rssi_level(const int rssi_dbm) } 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; @@ -249,15 +198,17 @@ static void __netconfig_wifi_set_rssi_level(const char *interface_name, 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; + } } } @@ -339,7 +290,7 @@ static void __netconfig_wifi_data_activity_booster(int 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; @@ -404,10 +355,8 @@ static void __netconfig_wifi_update_indicator(void) } } -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; @@ -421,16 +370,28 @@ static gboolean __wifi_indicator_monitor(gpointer 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; @@ -438,16 +399,19 @@ void netconfig_wifi_indicator_start(const char *interface_name) __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); } @@ -456,10 +420,7 @@ void netconfig_wifi_indicator_stop(const char *interface_name) { 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); } diff --git a/src/wifi-power.c b/src/wifi-power.c index 8294eaf..1d3368b 100755 --- a/src/wifi-power.c +++ b/src/wifi-power.c @@ -206,7 +206,7 @@ static int _remove_driver_and_supplicant(const char *interface_name) wifi_state_set_technology_state(interface_name, NETCONFIG_WIFI_TECH_OFF); // reset service state - wifi_state_set_service_state(interface_name, NETCONFIG_WIFI_IDLE); + wifi_state_set_service_state(interface_name, NULL, NETCONFIG_WIFI_IDLE); if (wifi_firmware_recovery_mode == TRUE) { if (wifi_power_on(interface_name) < 0) diff --git a/src/wifi-state.c b/src/wifi-state.c index bfcc389..74d0830 100755 --- a/src/wifi-state.c +++ b/src/wifi-state.c @@ -713,7 +713,8 @@ static gboolean __state_update_device_list(gpointer data) return FALSE; } -void wifi_state_set_service_state(const char *interface_name, wifi_service_state_e new_state) +void wifi_state_set_service_state(const char *interface_name, + const char *service, wifi_service_state_e new_state) { static gboolean dhcp_stage = FALSE; wifi_device_data_s *device_data = NULL; @@ -751,7 +752,7 @@ void wifi_state_set_service_state(const char *interface_name, wifi_service_state __set_wifi_connected_essid(); - netconfig_wifi_indicator_start(interface_name); + netconfig_wifi_indicator_start(interface_name, service); } else if (old_state == NETCONFIG_WIFI_CONNECTED) { netconfig_send_notification_to_net_popup(NETCONFIG_DEL_PORTAL_NOTI, NULL);