wifi: Add support to multi scan type
authorMohamed Abbas <mohamed.abbas@intel.com>
Tue, 13 Sep 2011 06:55:14 +0000 (09:55 +0300)
committerSamuel Ortiz <sameo@linux.intel.com>
Tue, 13 Sep 2011 08:53:33 +0000 (10:53 +0200)
Allow multi scan type for fast connect.

Scanning request removed from interface_added() because it is already
called in connman_device_set_powered() so no need to call it again
immediately (fix by Jukka Rissanen <jukka.rissanen@linux.intel.com>)

include/device.h
plugins/wifi.c
src/device.c

index d4f54ec..3749a20 100644 (file)
@@ -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);
index 7ab38c5..c392991 100644 (file)
@@ -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)
index 28ecfbd..b4bf284 100644 (file)
@@ -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;