diff options
-rw-r--r-- | include/driver.h | 3 | ||||
-rw-r--r-- | include/element.h | 17 | ||||
-rw-r--r-- | src/element.c | 24 |
3 files changed, 43 insertions, 1 deletions
diff --git a/include/driver.h b/include/driver.h index f4c6187a..61ec465f 100644 --- a/include/driver.h +++ b/include/driver.h @@ -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); diff --git a/include/element.h b/include/element.h index d8fa88c1..bc6a2a9e 100644 --- a/include/element.h +++ b/include/element.h @@ -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) { diff --git a/src/element.c b/src/element.c index 73a3c8fe..b68e954e 100644 --- a/src/element.c +++ b/src/element.c @@ -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) { |