int (*probe) (struct connman_element *element);
void (*remove) (struct connman_element *element);
int (*update) (struct connman_element *element);
- int (*enable) (struct connman_element *element);
- int (*disable) (struct connman_element *element);
};
extern int connman_driver_register(struct connman_driver *driver);
return FALSE;
}
-static void enable_element(struct connman_element *element)
-{
- if (element->type != CONNMAN_ELEMENT_TYPE_DEVICE)
- return;
-
- if (element->policy != CONNMAN_ELEMENT_POLICY_AUTO)
- return;
-
- if (element->driver && element->driver->enable) {
- if (element->driver->enable(element) == 0)
- element->enabled = TRUE;
- }
-}
-
static gboolean probe_driver(GNode *node, gpointer data)
{
struct connman_element *element = node->data;
__connman_element_lock(element);
element->driver = driver;
__connman_element_unlock(element);
-
- enable_element(element);
}
return FALSE;
return 0;
}
-static void disable_element(struct connman_element *element)
-{
- if (element->policy != CONNMAN_ELEMENT_POLICY_AUTO)
- return;
-
- if (element->enabled == FALSE)
- return;
-
- if (element->driver && element->driver->disable) {
- if (element->driver->disable(element) == 0)
- element->enabled = FALSE;
- }
-}
-
static gboolean remove_driver(GNode *node, gpointer data)
{
struct connman_element *element = node->data;
DBG("element %p name %s", element, element->name);
if (element->driver == driver) {
- disable_element(element);
-
if (driver->remove)
driver->remove(element);
__connman_element_lock(element);
element->driver = driver;
__connman_element_unlock(element);
-
- enable_element(element);
break;
}
}
g_node_unlink(node);
if (element->driver) {
- disable_element(element);
-
if (element->driver->remove)
element->driver->remove(element);
DBG("element %p name %s", element, element->name);
if (element->driver) {
- disable_element(element);
-
if (element->driver->remove)
element->driver->remove(element);