diff options
-rw-r--r-- | include/device.h | 1 | ||||
-rw-r--r-- | plugins/wifi.c | 21 | ||||
-rw-r--r-- | src/device.c | 4 |
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; |