Add set_enabled and rescan funtions
authorMarcel Holtmann <marcel@holtmann.org>
Wed, 15 Oct 2008 19:42:40 +0000 (21:42 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 15 Oct 2008 19:42:40 +0000 (21:42 +0200)
include/element.h
src/connman.h
src/element.c

index 4669332..9054c83 100644 (file)
@@ -128,6 +128,9 @@ extern void connman_element_unregister(struct connman_element *element);
 extern void connman_element_unregister_children(struct connman_element *element);
 extern void connman_element_update(struct connman_element *element);
 
+extern int connman_element_set_enabled(struct connman_element *element,
+                                                       gboolean enabled);
+
 static inline void *connman_element_get_data(struct connman_element *element)
 {
        return element->driver_data;
index 8b1e6fd..57f97bf 100644 (file)
@@ -62,6 +62,9 @@ void __connman_plugin_cleanup(void);
 int __connman_security_check_privileges(DBusMessage *message);
 
 #include <connman/driver.h>
+
+void __connman_driver_rescan(struct connman_driver *driver);
+
 #include <connman/element.h>
 
 int __connman_element_init(DBusConnection *conn, const char *device);
@@ -76,6 +79,11 @@ const char *__connman_element_subtype2string(enum connman_element_subtype type);
 int __connman_element_load(struct connman_element *element);
 int __connman_element_store(struct connman_element *element);
 
+#include <connman/device.h>
+
+int __connman_device_init(void);
+void __connman_device_cleanup(void);
+
 #include <connman/rtnl.h>
 
 int __connman_rtnl_init(void);
index 78a550e..dd78c69 100644 (file)
@@ -518,6 +518,22 @@ static gboolean probe_driver(GNode *node, gpointer data)
        return FALSE;
 }
 
+void __connman_driver_rescan(struct connman_driver *driver)
+{
+       DBG("driver %p name %s", driver, driver->name);
+
+       if (!driver->probe)
+               return;
+
+       g_static_rw_lock_writer_lock(&element_lock);
+
+       if (element_root != NULL)
+               g_node_traverse(element_root, G_PRE_ORDER,
+                               G_TRAVERSE_ALL, -1, probe_driver, driver);
+
+       g_static_rw_lock_writer_unlock(&element_lock);
+}
+
 /**
  * connman_driver_register:
  * @driver: driver definition
@@ -1053,6 +1069,19 @@ void connman_element_update(struct connman_element *element)
        g_static_rw_lock_reader_unlock(&element_lock);
 }
 
+int connman_element_set_enabled(struct connman_element *element,
+                                                       gboolean enabled)
+{
+       if (element->enabled == enabled)
+               return 0;
+
+       element->enabled = enabled;
+
+       connman_element_update(element);
+
+       return 0;
+}
+
 static void register_element(gpointer data, gpointer user_data)
 {
        struct connman_element *element = data;