void __connman_notifier_disable(enum connman_service_type type) { DBG("type %d", type); __sync_synchronize(); if (enabled[type] == 0) { connman_error("notifier disable underflow"); return; } switch (type) { case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: case CONNMAN_SERVICE_TYPE_GADGET: return; case CONNMAN_SERVICE_TYPE_ETHERNET: case CONNMAN_SERVICE_TYPE_WIFI: case CONNMAN_SERVICE_TYPE_WIMAX: case CONNMAN_SERVICE_TYPE_BLUETOOTH: case CONNMAN_SERVICE_TYPE_CELLULAR: break; } if (__sync_fetch_and_sub(&enabled[type], 1) != 1) return; technology_enabled(type, FALSE); }
void __connman_notifier_disable(enum connman_service_type type) { DBG("type %d", type); if (g_atomic_int_get(&enabled[type]) == 0) { connman_error("notifier disable underflow"); return; } switch (type) { case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: case CONNMAN_SERVICE_TYPE_GADGET: return; case CONNMAN_SERVICE_TYPE_ETHERNET: case CONNMAN_SERVICE_TYPE_WIFI: case CONNMAN_SERVICE_TYPE_WIMAX: case CONNMAN_SERVICE_TYPE_BLUETOOTH: case CONNMAN_SERVICE_TYPE_CELLULAR: break; } if (g_atomic_int_dec_and_test(&enabled[type]) == TRUE) technology_enabled(type, FALSE); }
int __connman_technology_enabled(enum connman_service_type type) { struct connman_technology *technology; technology = technology_find(type); if (technology == NULL) return -ENXIO; if (technology->rfkill_driven == TRUE) return 0; return technology_enabled(technology); }
int __connman_technology_enabled(enum connman_service_type type) { struct connman_technology *technology; technology = technology_find(type); if (technology == NULL) return -ENXIO; DBG("technology %p type %s rfkill %d enabled %d", technology, get_name(type), technology->rfkill_driven, technology->enabled); if (technology->rfkill_driven == TRUE) { if (technology->tethering_persistent == TRUE) enable_tethering(technology); return 0; } return technology_enabled(technology); }
void __connman_notifier_enable(enum connman_service_type type) { DBG("type %d", type); switch (type) { case CONNMAN_SERVICE_TYPE_UNKNOWN: case CONNMAN_SERVICE_TYPE_SYSTEM: case CONNMAN_SERVICE_TYPE_GPS: case CONNMAN_SERVICE_TYPE_VPN: case CONNMAN_SERVICE_TYPE_GADGET: return; case CONNMAN_SERVICE_TYPE_ETHERNET: case CONNMAN_SERVICE_TYPE_WIFI: case CONNMAN_SERVICE_TYPE_WIMAX: case CONNMAN_SERVICE_TYPE_BLUETOOTH: case CONNMAN_SERVICE_TYPE_CELLULAR: break; } if (__sync_fetch_and_add(&enabled[type], 1) == 0) technology_enabled(type, TRUE); }
static connman_bool_t technology_apply_rfkill_change(struct connman_technology *technology, connman_bool_t softblock, connman_bool_t hardblock, connman_bool_t new_rfkill) { gboolean hardblock_changed = FALSE; gboolean apply = TRUE; GList *start, *list; DBG("technology %p --> %d/%d vs %d/%d", technology, softblock, hardblock, technology->softblocked, technology->hardblocked); if (technology->hardblocked == hardblock) goto softblock_change; if (!(new_rfkill == TRUE && hardblock == FALSE)) { start = g_hash_table_get_values(rfkill_list); for (list = start; list != NULL; list = list->next) { struct connman_rfkill *rfkill = list->data; if (rfkill->type != technology->type) continue; if (rfkill->hardblock != hardblock) apply = FALSE; } g_list_free(start); } if (apply == FALSE) goto softblock_change; technology->hardblocked = hardblock; hardblock_changed = TRUE; softblock_change: if (apply == FALSE && technology->softblocked != softblock) apply = TRUE; if (apply == FALSE) return technology->hardblocked; technology->softblocked = softblock; if (technology->hardblocked == TRUE || technology->softblocked == TRUE) { if (technology_disabled(technology) != -EALREADY) technology_affect_devices(technology, FALSE); } else if (technology->hardblocked == FALSE && technology->softblocked == FALSE) { if (technology_enabled(technology) != -EALREADY) technology_affect_devices(technology, TRUE); } if (hardblock_changed == TRUE) { if (technology->hardblocked == TRUE) { DBG("%s is switched off.", get_name(technology->type)); technology_dbus_unregister(technology); } else technology_dbus_register(technology); } return technology->hardblocked; }