diff options
-rw-r--r-- | include/element.h | 3 | ||||
-rw-r--r-- | src/element.c | 53 |
2 files changed, 52 insertions, 4 deletions
diff --git a/include/element.h b/include/element.h index f5d2d56f..327b8df0 100644 --- a/include/element.h +++ b/include/element.h @@ -90,6 +90,7 @@ struct connman_element { enum connman_element_state state; enum connman_element_policy policy; gboolean enabled; + gboolean scanning; gboolean available; gboolean remember; guint16 priority; @@ -150,6 +151,8 @@ extern void connman_element_update(struct connman_element *element); extern int connman_element_set_enabled(struct connman_element *element, gboolean enabled); +extern int connman_element_set_scanning(struct connman_element *element, + gboolean scanning); static inline void *connman_element_get_data(struct connman_element *element) { diff --git a/src/element.c b/src/element.c index a39cc096..c2cf05f7 100644 --- a/src/element.c +++ b/src/element.c @@ -378,6 +378,39 @@ static void emit_enabled_signal(DBusConnection *conn, g_dbus_send_message(conn, signal); } +static void emit_scanning_signal(DBusConnection *conn, + struct connman_element *element) +{ + DBusMessage *signal; + DBusMessageIter entry, value; + const char *key = "Scanning"; + + DBG("conn %p", conn); + + if (element == NULL) + return; + + if (element->type != CONNMAN_ELEMENT_TYPE_DEVICE) + return; + + signal = dbus_message_new_signal(element->path, + CONNMAN_DEVICE_INTERFACE, "PropertyChanged"); + if (signal == NULL) + return; + + dbus_message_iter_init_append(signal, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + DBUS_TYPE_BOOLEAN_AS_STRING, &value); + dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, + &element->scanning); + dbus_message_iter_close_container(&entry, &value); + + g_dbus_send_message(conn, signal); +} + static DBusMessage *do_update(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -510,11 +543,10 @@ static DBusMessage *device_get_properties(DBusConnection *conn, DBUS_TYPE_BOOLEAN, &element->enabled); if (element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIFI || - element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIMAX) { - dbus_bool_t scanning = FALSE; - + element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIMAX || + element->subtype == CONNMAN_ELEMENT_SUBTYPE_BLUETOOTH) { connman_dbus_dict_append_variant(&dict, "Scanning", - DBUS_TYPE_BOOLEAN, &scanning); + DBUS_TYPE_BOOLEAN, &element->scanning); dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); @@ -2127,6 +2159,19 @@ int connman_element_set_enabled(struct connman_element *element, return 0; } +int connman_element_set_scanning(struct connman_element *element, + gboolean scanning) +{ + if (element->scanning == scanning) + return 0; + + element->scanning = scanning; + + emit_scanning_signal(connection, element); + + return 0; +} + int __connman_element_init(DBusConnection *conn, const char *device) { struct connman_element *element; |