Add definitions for element states and errors
authorMarcel Holtmann <marcel@holtmann.org>
Tue, 24 Mar 2009 14:13:09 +0000 (15:13 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 24 Mar 2009 14:13:09 +0000 (15:13 +0100)
include/driver.h
include/element.h
src/element.c

index f4c6187..61ec465 100644 (file)
@@ -44,7 +44,8 @@ struct connman_driver {
        int priority;
        int (*probe) (struct connman_element *element);
        void (*remove) (struct connman_element *element);
-       int (*update) (struct connman_element *element);
+       void (*update) (struct connman_element *element);
+       void (*change) (struct connman_element *element);
 };
 
 extern int connman_driver_register(struct connman_driver *driver);
index d8fa88c..bc6a2a9 100644 (file)
@@ -56,6 +56,19 @@ enum connman_element_type {
        CONNMAN_ELEMENT_TYPE_VENDOR     = 10000,
 };
 
+enum connman_element_state {
+       CONNMAN_ELEMENT_STATE_UNKNOWN = 0,
+       CONNMAN_ELEMENT_STATE_ERROR   = 1,
+       CONNMAN_ELEMENT_STATE_IDLE    = 2,
+       CONNMAN_ELEMENT_STATE_DONE    = 3,
+};
+
+enum connman_element_error {
+       CONNMAN_ELEMENT_ERROR_UNKNOWN     = 0,
+       CONNMAN_ELEMENT_ERROR_FAILED      = 1,
+       CONNMAN_ELEMENT_ERROR_DHCP_FAILED = 2,
+};
+
 struct connman_driver;
 
 struct connman_element {
@@ -64,6 +77,8 @@ struct connman_element {
        gchar *name;
        gchar *path;
        enum connman_element_type type;
+       enum connman_element_state state;
+       enum connman_element_error error;
        gboolean enabled;
        gboolean configuring;
        gchar *devname;
@@ -122,6 +137,8 @@ extern void connman_element_update(struct connman_element *element);
 
 extern int connman_element_set_enabled(struct connman_element *element,
                                                        gboolean enabled);
+extern void connman_element_set_error(struct connman_element *element,
+                                       enum connman_element_error error);
 
 static inline void *connman_element_get_data(struct connman_element *element)
 {
index 73a3c8f..b68e954 100644 (file)
@@ -433,6 +433,8 @@ void __connman_element_initialize(struct connman_element *element)
 
        element->name    = NULL;
        element->type    = CONNMAN_ELEMENT_TYPE_UNKNOWN;
+       element->state   = CONNMAN_ELEMENT_STATE_UNKNOWN;
+       element->error   = CONNMAN_ELEMENT_ERROR_UNKNOWN;
        element->index   = -1;
        element->enabled = FALSE;
 
@@ -1239,6 +1241,28 @@ int connman_element_set_enabled(struct connman_element *element,
        return 0;
 }
 
+/**
+ * connman_element_set_error:
+ * @element: element structure
+ * @error: error identifier
+ *
+ * Set error state and specific error identifier
+ */
+void connman_element_set_error(struct connman_element *element,
+                                       enum connman_element_error error)
+{
+       DBG("element %p error %d", element, error);
+
+       if (element->type == CONNMAN_ELEMENT_TYPE_ROOT)
+               return;
+
+       element->state = CONNMAN_ELEMENT_STATE_ERROR;
+       element->error = error;
+
+       if (element->driver && element->driver->change)
+               element->driver->change(element);
+}
+
 int __connman_element_init(DBusConnection *conn, const char *device,
                                                        const char *nodevice)
 {