/** * connman_device_set_powered: * @device: device structure * @powered: powered state * * Change power state of device */ int connman_device_set_powered(struct connman_device *device, connman_bool_t powered) { enum connman_service_type type; DBG("driver %p powered %d", device, powered); if (device->powered == powered) return -EALREADY; clear_pending_trigger(device); device->powered_pending = PENDING_NONE; device->powered = powered; type = __connman_device_get_service_type(device); if (device->powered == FALSE) { __connman_technology_disabled(type); return 0; } __connman_technology_enabled(type); connman_device_set_disconnected(device, FALSE); device->scanning = FALSE; if (device->driver && device->driver->scan) device->driver->scan(device, NULL, 0, NULL, NULL, NULL); return 0; }
/** * connman_device_set_powered: * @device: device structure * @powered: powered state * * Change power state of device */ int connman_device_set_powered(struct connman_device *device, bool powered) { enum connman_service_type type; DBG("driver %p powered %d", device, powered); if (device->powered == powered) return -EALREADY; clear_pending_trigger(device); device->powered_pending = PENDING_NONE; device->powered = powered; type = __connman_device_get_service_type(device); if (!device->powered) { __connman_technology_disabled(type); return 0; } __connman_technology_enabled(type); connman_device_set_disconnected(device, false); device->scanning = false; if (device->driver && device->driver->scan) device->driver->scan(CONNMAN_SERVICE_TYPE_UNKNOWN, device, NULL, 0, NULL, NULL, NULL, NULL); return 0; }
int __connman_technology_add_device(struct connman_device *device) { struct connman_technology *technology; enum connman_service_type type; type = __connman_device_get_service_type(device); DBG("device %p type %s", device, get_name(type)); technology = technology_get(type); if (technology == NULL) { /* * Since no driver can be found for this device at the moment we * add it to the techless device list. */ techless_device_list = g_slist_prepend(techless_device_list, device); return -ENXIO; } __sync_synchronize(); if (technology->rfkill_driven == TRUE) { if (technology->enabled == TRUE && global_offlinemode == FALSE) __connman_device_enable(device); else __connman_device_disable(device); goto done; } if (technology->enable_persistent == TRUE && global_offlinemode == FALSE) { int err = __connman_device_enable(device); /* * connman_technology_add_device() calls __connman_device_enable() * but since the device is already enabled, the calls does not * propagate through to connman_technology_enabled via * connman_device_set_powered. */ if (err == -EALREADY) __connman_technology_enabled(type); } /* if technology persistent state is offline */ if (technology->enable_persistent == FALSE) __connman_device_disable(device); done: technology->device_list = g_slist_prepend(technology->device_list, device); return 0; }