gboolean handle_set_bgscan(Wifi *wifi, GDBusMethodInvocation *context,
const gchar *ifname, guint scan_mode);
+gboolean handle_set_bgscan_interval(Wifi *wifi, GDBusMethodInvocation *context,
+ const gchar *ifname, const gchar *mode, guint interval);
+gboolean handle_get_bgscan_interval(Wifi *wifi, GDBusMethodInvocation *context,
+ const gchar *ifname, const gchar *mode);
gboolean handle_resume_bgscan(Wifi *wifi, GDBusMethodInvocation *context,
const gchar *ifname);
gboolean handle_pause_bgscan(Wifi *wifi, GDBusMethodInvocation *context,
#if defined TIZEN_WEARABLE
#define SCAN_PERIODIC_DELAY 15
+#define SCAN_PERIODIC_DELAY_MIN 5
+#define SCAN_PERIODIC_DELAY_MAX 120
#define SCAN_EXPONENTIAL_MIN 5
#define SCAN_EXPONENTIAL_MAX 320
#else
#define SCAN_PERIODIC_DELAY 10
+#define SCAN_PERIODIC_DELAY_MIN 5
+#define SCAN_PERIODIC_DELAY_MAX 120
#define SCAN_EXPONENTIAL_MIN 4
#define SCAN_EXPONENTIAL_MAX 128
#endif
gboolean netconfig_wifi_bgscan_set_mode(const char *interface_name, guint mode);
guint netconfig_wifi_bgscan_get_mode(const char *interface_name);
+gboolean netconfig_wifi_bgscan_set_periodic_interval(const char *interface_name, guint interval);
+guint netconfig_wifi_bgscan_get_periodic_interval(const char *interface_name);
void netconfig_wifi_bgscan_set_timer_id(const char *interface_name, guint timer_id);
guint netconfig_wifi_bgscan_get_timer_id(const char *interface_name);
-gboolean netconfig_wifi_bgscan_set_interval(const char *interface_name, guint interval);
-guint netconfig_wifi_bgscan_get_interval(const char *interface_name);
+gboolean netconfig_wifi_bgscan_set_exp_interval(const char *interface_name, guint interval);
+guint netconfig_wifi_bgscan_get_exp_interval(const char *interface_name);
void netconfig_wifi_bgscan_set_pause(const char *interface_name, gboolean pause);
gboolean netconfig_wifi_bgscan_is_paused(const char *interface_name);
void netconfig_wifi_bgscan_start_timer(const char *interface_name, gboolean immediate_scan);
<arg type="s" name="ifname" direction="in"/>
<arg type="u" name="ScanMode" direction="in"/>
</method>
+ <method name="SetBgscanInterval">
+ <arg type="s" name="ifname" direction="in"/>
+ <arg type="s" name="mode" direction="in"/>
+ <arg type="u" name="interval" direction="in"/>
+ </method>
+ <method name="GetBgscanInterval">
+ <arg type="s" name="ifname" direction="in"/>
+ <arg type="s" name="mode" direction="in"/>
+ <arg type="u" name="interval" direction="out"/>
+ </method>
<method name="ResumeBgscan">
<arg type="s" name="ifname" direction="in"/>
</method>
Name: net-config
Summary: TIZEN Network Configuration service
-Version: 1.2.13
+Version: 1.2.14
Release: 1
Group: System/Network
License: Apache-2.0
<check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="RemoveDriver" privilege="http://tizen.org/privilege/network.set" />
<check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="GetWifiState" privilege="http://tizen.org/privilege/network.get" />
<check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="SetBgscan" privilege="http://tizen.org/privilege/network.set" />
+ <check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="SetBgscanInterval" privilege="http://tizen.org/privilege/network.set" />
+ <check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="GetBgscanInterval" privilege="http://tizen.org/privilege/network.get" />
<check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="ResumeBgscan" privilege="http://tizen.org/privilege/network.set" />
<check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="PauseBgscan" privilege="http://tizen.org/privilege/network.set" />
<check send_destination="net.netconfig" send_interface="net.netconfig.wifi" send_member="ResetBgscanInterval" privilege="http://tizen.org/privilege/network.set" />
{
wifi_tech_state_e wifi_tech_state;
wifi_service_state_e wifi_service_state;
+ int ug_state = VCONFKEY_WIFI_UG_RUN_STATE_OFF;
+ guint bg_mode = WIFI_BGSCAN_MODE_EXPONENTIAL;
+
+ netconfig_vconf_get_int(VCONFKEY_WIFI_UG_RUN_STATE, &ug_state);
if (netconfig_wifi_bgscan_get_timer_id(interface_name) > 0)
netconfig_wifi_bgscan_stop_timer(interface_name);
if (wifi_tech_state < NETCONFIG_WIFI_TECH_POWERED)
return;
- if (netconfig_wifi_bgscan_get_mode(interface_name) == WIFI_BGSCAN_MODE_EXPONENTIAL &&
- wifi_service_state == NETCONFIG_WIFI_CONNECTED)
+ bg_mode = netconfig_wifi_bgscan_get_mode(interface_name);
+
+ if (wifi_service_state == NETCONFIG_WIFI_CONNECTED &&
+ (bg_mode == WIFI_BGSCAN_MODE_EXPONENTIAL ||
+ (bg_mode == WIFI_BGSCAN_MODE_PERIODIC &&
+ ug_state != VCONFKEY_WIFI_UG_RUN_STATE_ON_FOREGROUND)))
return;
DBG("[%s] Wi-Fi background scan started or re-started(%d)",
netconfig_wifi_bgscan_stop_timer(interface_name);
}
+void netconfig_wifi_bgscan_restart(const gchar *interface_name)
+{
+ int pm_state = VCONFKEY_PM_STATE_NORMAL;
+
+ /* In case of LCD off, we don't need Wi-Fi scan right now */
+ netconfig_vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
+ if (pm_state >= VCONFKEY_PM_STATE_LCDOFF)
+ netconfig_wifi_bgscan_start(interface_name, FALSE);
+ else
+ netconfig_wifi_bgscan_start(interface_name, TRUE);
+}
+
gboolean handle_set_bgscan(Wifi *wifi, GDBusMethodInvocation *context,
const gchar *ifname, guint scan_mode)
{
gint old_mode = 0;
- int pm_state = VCONFKEY_PM_STATE_NORMAL;
old_mode = netconfig_wifi_bgscan_get_mode(ifname);
if (old_mode == scan_mode) {
INFO("[%s] Wi-Fi scan mode is changed [%d]", ifname, scan_mode);
- /* In case of LCD off, we don't need Wi-Fi scan right now */
- netconfig_vconf_get_int(VCONFKEY_PM_STATE, &pm_state);
- if (pm_state >= VCONFKEY_PM_STATE_LCDOFF)
- netconfig_wifi_bgscan_start(ifname, FALSE);
- else
- netconfig_wifi_bgscan_start(ifname, TRUE);
+ netconfig_wifi_bgscan_restart(ifname);
wifi_complete_set_bgscan(wifi, context);
return TRUE;
}
+gboolean handle_set_bgscan_interval(Wifi *wifi, GDBusMethodInvocation *context,
+ const gchar *ifname, const gchar *mode, guint interval)
+{
+ guint old_interval = 0;
+ gboolean rv = FALSE;
+
+ if (g_strcmp0(mode, "Periodic") == 0) {
+ old_interval = netconfig_wifi_bgscan_get_periodic_interval(ifname);
+ } else if (g_strcmp0(mode, "Exponential") == 0) {
+ old_interval = netconfig_wifi_bgscan_get_exp_interval(ifname);
+ } else {
+ ERR("invalid mode %s", mode);
+ netconfig_error_invalid_parameter(context);
+ return TRUE;
+ }
+
+ if (old_interval == interval) {
+ wifi_complete_set_bgscan_interval(wifi, context);
+ return TRUE;
+ }
+
+ if (g_strcmp0(mode, "Periodic") == 0)
+ rv = netconfig_wifi_bgscan_set_periodic_interval(ifname, interval);
+ else
+ rv = netconfig_wifi_bgscan_set_exp_interval(ifname, interval);
+
+ if (!rv) {
+ netconfig_error_invalid_parameter(context);
+ return TRUE;
+ }
+
+ INFO("[%s] Wi-Fi periodic scan interval is changed to [%d] from [%d]",
+ ifname, interval, old_interval);
+
+ netconfig_wifi_bgscan_restart(ifname);
+
+ wifi_complete_set_bgscan_interval(wifi, context);
+ return TRUE;
+}
+
+gboolean handle_get_bgscan_interval(Wifi *wifi, GDBusMethodInvocation *context,
+ const gchar *ifname, const gchar *mode)
+{
+ guint bgscan_interval = 0;
+
+ if (g_strcmp0(mode, "Periodic") == 0) {
+ bgscan_interval = netconfig_wifi_bgscan_get_periodic_interval(ifname);
+ } else if (g_strcmp0(mode, "Exponential") == 0) {
+ bgscan_interval = netconfig_wifi_bgscan_get_exp_interval(ifname);
+ } else {
+ ERR("invalid mode %s", mode);
+ netconfig_error_invalid_parameter(context);
+ return TRUE;
+ }
+
+ wifi_complete_get_bgscan_interval(wifi, context, bgscan_interval);
+ return TRUE;
+}
+
gboolean handle_resume_bgscan(Wifi *wifi, GDBusMethodInvocation *context,
const gchar *ifname)
{
gboolean handle_reset_bgscan_interval(Wifi *wifi, GDBusMethodInvocation *context,
const gchar *ifname)
{
- netconfig_wifi_bgscan_set_interval(ifname, SCAN_EXPONENTIAL_MIN);
+ netconfig_wifi_bgscan_set_exp_interval(ifname, SCAN_EXPONENTIAL_MIN);
wifi_complete_reset_bgscan_interval(wifi, context);
return TRUE;
DBG("Unset early suspend [%s]", device_data->interface_name);
}
netconfig_wifi_bgscan_stop(device_data->interface_name);
- netconfig_wifi_bgscan_set_interval(device_data->interface_name, SCAN_EXPONENTIAL_MIN);
+ netconfig_wifi_bgscan_set_exp_interval(device_data->interface_name, SCAN_EXPONENTIAL_MIN);
netconfig_wifi_bgscan_start(device_data->interface_name, TRUE);
}
} else if ((new_state == VCONFKEY_PM_STATE_LCDOFF) && (prev_state < VCONFKEY_PM_STATE_LCDOFF) && (wifi_state != VCONFKEY_WIFI_OFF)) {
const char *interface_name;
/* background scan */
- guint bg_interval;
+ guint bg_exp_interval;
+ guint bg_periodic_interval;
guint bg_mode;
guint bg_timer_id;
gboolean bg_paused;
scan_data->scanning = FALSE;
- scan_data->bg_interval = SCAN_EXPONENTIAL_MIN;
+ scan_data->bg_exp_interval = SCAN_EXPONENTIAL_MIN;
+ scan_data->bg_periodic_interval = SCAN_PERIODIC_DELAY;
scan_data->bg_mode = WIFI_BGSCAN_MODE_EXPONENTIAL;
scan_data->bg_timer_id = 0;
scan_data->bg_paused = FALSE;
return scan_data->bg_mode;
}
+guint netconfig_wifi_bgscan_get_periodic_interval(const char *interface_name)
+{
+ scan_data_s *scan_data = __wifi_scan_get_data(interface_name);
+
+ if (!scan_data)
+ return 0;
+
+ return scan_data->bg_periodic_interval;
+}
+
+gboolean netconfig_wifi_bgscan_set_periodic_interval(const char *interface_name, guint interval)
+{
+ scan_data_s *scan_data = __wifi_scan_get_data(interface_name);
+
+ if (!scan_data)
+ return FALSE;
+
+ if ((interval < SCAN_PERIODIC_DELAY_MIN) || (interval > SCAN_PERIODIC_DELAY_MAX)) {
+ ERR("Invalid interval [%d]", interval);
+ return FALSE;
+ }
+
+ scan_data->bg_periodic_interval = interval;
+
+ return TRUE;
+}
+
void netconfig_wifi_bgscan_set_timer_id(const char *interface_name, guint timer_id)
{
scan_data_s *scan_data = __wifi_scan_get_data(interface_name);
return scan_data->bg_timer_id;
}
-gboolean netconfig_wifi_bgscan_set_interval(const char *interface_name, guint interval)
+gboolean netconfig_wifi_bgscan_set_exp_interval(const char *interface_name, guint interval)
{
scan_data_s *scan_data = __wifi_scan_get_data(interface_name);
return FALSE;
}
- scan_data->bg_interval = interval;
+ scan_data->bg_exp_interval = interval;
return TRUE;
}
-guint netconfig_wifi_bgscan_get_interval(const char *interface_name)
+guint netconfig_wifi_bgscan_get_exp_interval(const char *interface_name)
{
scan_data_s *scan_data = __wifi_scan_get_data(interface_name);
if (!scan_data)
return SCAN_EXPONENTIAL_MIN;
- return scan_data->bg_interval;
+ return scan_data->bg_exp_interval;
}
void netconfig_wifi_bgscan_set_pause(const char *interface_name, gboolean pause)
static int retries = 0;
scan_data_s *scan_data = data;
guint state = 0;
+ int ug_state = VCONFKEY_WIFI_UG_RUN_STATE_OFF;
+ guint bg_mode = WIFI_BGSCAN_MODE_EXPONENTIAL;
if (!scan_data)
return FALSE;
+ netconfig_vconf_get_int(VCONFKEY_WIFI_UG_RUN_STATE, &ug_state);
+
state = wifi_state_get_service_state(scan_data->interface_name);
#if !defined TIZEN_WEARABLE
#endif
if (state == NETCONFIG_WIFI_CONNECTED) {
- if (netconfig_wifi_bgscan_get_mode(scan_data->interface_name) == WIFI_BGSCAN_MODE_EXPONENTIAL) {
+ bg_mode = netconfig_wifi_bgscan_get_mode(scan_data->interface_name);
+ if (bg_mode == WIFI_BGSCAN_MODE_EXPONENTIAL ||
+ (bg_mode == WIFI_BGSCAN_MODE_PERIODIC &&
+ ug_state != VCONFKEY_WIFI_UG_RUN_STATE_ON_FOREGROUND)) {
DBG("[%s] Wi-Fi state is connected, scan is paused", scan_data->interface_name);
return FALSE;
}
return FALSE;
if (scan_data->bg_mode == WIFI_BGSCAN_MODE_EXPONENTIAL) {
- scan_data->bg_interval = scan_data->bg_interval * 2;
- if (scan_data->bg_interval > SCAN_EXPONENTIAL_MAX)
- scan_data->bg_interval = SCAN_EXPONENTIAL_MAX;
+ scan_data->bg_exp_interval = scan_data->bg_exp_interval * 2;
+ if (scan_data->bg_exp_interval > SCAN_EXPONENTIAL_MAX)
+ scan_data->bg_exp_interval = SCAN_EXPONENTIAL_MAX;
}
/* In case of LCD off, we don't need Wi-Fi scan */
void netconfig_wifi_bgscan_start_timer(const char *interface_name, gboolean immediate_scan)
{
scan_data_s *scan_data = __wifi_scan_get_data(interface_name);
+ guint bg_interval = 0;
if (!scan_data)
return;
switch (scan_data->bg_mode) {
case WIFI_BGSCAN_MODE_EXPONENTIAL:
- if (scan_data->bg_interval < SCAN_EXPONENTIAL_MIN ||
- scan_data->bg_interval == SCAN_PERIODIC_DELAY)
- scan_data->bg_interval = SCAN_EXPONENTIAL_MIN;
+ if (scan_data->bg_exp_interval < SCAN_EXPONENTIAL_MIN)
+ scan_data->bg_exp_interval = SCAN_EXPONENTIAL_MIN;
+
+ bg_interval = scan_data->bg_exp_interval;
break;
case WIFI_BGSCAN_MODE_PERIODIC:
- scan_data->bg_interval = SCAN_PERIODIC_DELAY;
+ bg_interval = scan_data->bg_periodic_interval;
break;
default:
DBG("Invalid Wi-Fi background scan mode[%d]", scan_data->bg_mode);
if (immediate_scan)
DBG("[%s] Scan immediately[%d], mode[%d](0 exponential / 1 periodic), next[%d]",
- interface_name, immediate_scan, scan_data->bg_mode, scan_data->bg_interval);
+ interface_name, immediate_scan, scan_data->bg_mode, bg_interval);
else
DBG("[%s] Scan immediately[%d], mode[%d](0 exponential / 1 periodic), next[%d]",
- interface_name, immediate_scan, scan_data->bg_mode, scan_data->bg_interval);
+ interface_name, immediate_scan, scan_data->bg_mode, bg_interval);
if (immediate_scan)
g_timeout_add(500, __wifi_bgscan_immediate_scan, scan_data);
- netconfig_start_timer_seconds(scan_data->bg_interval,
+ netconfig_start_timer_seconds(bg_interval,
__wifi_bgscan_next_scan, scan_data, &(scan_data->bg_timer_id));
}
netconfig_set_system_event(SYS_EVT_WIFI_STATE, EKEY_WIFI_STATE, EVAL_WIFI_ON);
netconfig_wifi_bgscan_stop(interface_name);
- netconfig_wifi_bgscan_set_interval(interface_name, SCAN_EXPONENTIAL_MIN);
+ netconfig_wifi_bgscan_set_exp_interval(interface_name, SCAN_EXPONENTIAL_MIN);
netconfig_wifi_bgscan_start(interface_name, TRUE);
/* Add callback to track change in notification setting */
netconfig_wifi_indicator_stop(interface_name);
netconfig_wifi_bgscan_stop(interface_name);
- netconfig_wifi_bgscan_set_interval(interface_name, SCAN_EXPONENTIAL_MIN);
+ netconfig_wifi_bgscan_set_exp_interval(interface_name, SCAN_EXPONENTIAL_MIN);
netconfig_wifi_bgscan_start(interface_name, TRUE);
} else if ((old_state > NETCONFIG_WIFI_IDLE && old_state < NETCONFIG_WIFI_CONNECTED) && new_state == NETCONFIG_WIFI_IDLE) {
/* in ipv6 case disconnect/association -> association */
} else if (old_state == NETCONFIG_WIFI_FAILURE && new_state == NETCONFIG_WIFI_IDLE) {
DBG("reset the bg scan period, in failure case");
netconfig_wifi_bgscan_stop(interface_name);
- netconfig_wifi_bgscan_set_interval(interface_name, SCAN_EXPONENTIAL_MIN);
+ netconfig_wifi_bgscan_set_exp_interval(interface_name, SCAN_EXPONENTIAL_MIN);
netconfig_wifi_bgscan_start(interface_name, FALSE);
}
/* BG scan mode */
g_signal_connect(wifi_object, "handle-set-bgscan",
G_CALLBACK(handle_set_bgscan), NULL);
+ g_signal_connect(wifi_object, "handle-set-bgscan-interval",
+ G_CALLBACK(handle_set_bgscan_interval), NULL);
+ g_signal_connect(wifi_object, "handle-get-bgscan-interval",
+ G_CALLBACK(handle_get_bgscan_interval), NULL);
g_signal_connect(wifi_object, "handle-resume-bgscan",
G_CALLBACK(handle_resume_bgscan), NULL);
g_signal_connect(wifi_object, "handle-pause-bgscan",