summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/device.h1
-rw-r--r--plugins/wifi.c21
-rw-r--r--src/device.c4
3 files changed, 23 insertions, 3 deletions
diff --git a/include/device.h b/include/device.h
index d4f54ece..3749a202 100644
--- a/include/device.h
+++ b/include/device.h
@@ -108,6 +108,7 @@ struct connman_device_driver {
int (*enable) (struct connman_device *device);
int (*disable) (struct connman_device *device);
int (*scan) (struct connman_device *device);
+ int (*scan_fast) (struct connman_device *device);
};
int connman_device_driver_register(struct connman_device_driver *driver);
diff --git a/plugins/wifi.c b/plugins/wifi.c
index 7ab38c54..c392991e 100644
--- a/plugins/wifi.c
+++ b/plugins/wifi.c
@@ -303,6 +303,24 @@ static int wifi_scan(struct connman_device *device)
return ret;
}
+static int wifi_scan_fast(struct connman_device *device)
+{
+ struct wifi_data *wifi = connman_device_get_data(device);
+ int ret;
+
+ DBG("device %p %p", device, wifi->interface);
+
+ if (wifi->tethering == TRUE)
+ return 0;
+
+ ret = g_supplicant_interface_scan(wifi->interface, scan_callback,
+ device);
+ if (ret == 0)
+ connman_device_set_scanning(device, TRUE);
+
+ return ret;
+}
+
static struct connman_device_driver wifi_ng_driver = {
.name = "wifi",
.type = CONNMAN_DEVICE_TYPE_WIFI,
@@ -312,6 +330,7 @@ static struct connman_device_driver wifi_ng_driver = {
.enable = wifi_enable,
.disable = wifi_disable,
.scan = wifi_scan,
+ .scan_fast = wifi_scan_fast,
};
static void system_ready(void)
@@ -578,8 +597,6 @@ static void interface_added(GSupplicantInterface *interface)
if (wifi->tethering == TRUE)
return;
-
- wifi_scan(wifi->device);
}
static connman_bool_t is_idle(struct wifi_data *wifi)
diff --git a/src/device.c b/src/device.c
index 28ecfbde..b4bf2846 100644
--- a/src/device.c
+++ b/src/device.c
@@ -688,7 +688,9 @@ int connman_device_set_powered(struct connman_device *device,
reset_scan_trigger(device);
- if (device->driver && device->driver->scan)
+ if (device->driver && device->driver->scan_fast)
+ device->driver->scan_fast(device);
+ else if (device->driver && device->driver->scan)
device->driver->scan(device);
return 0;