This email list is read-only. Emails sent to this list will be discarded ---------------------------------- include/element.h | 2 + plugins/wifi.c | 14 +++---- src/element.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++---- test/monitor-connman | 6 ++- 4 files changed, 106 insertions(+), 17 deletions(-)
New commits: commit 99515f9c0d4818aa99eb227657954a2d9f1d3ae3 Author: Marcel Holtmann <[email protected]> Date: Sun Dec 14 00:37:10 2008 +0100 Print signal strength as integer commit 9c4dd9603160c08f38109571d7c6eebfdfc86d83 Author: Marcel Holtmann <[email protected]> Date: Sun Dec 14 00:30:08 2008 +0100 Indicate changes to the signal strength commit 1dcb48fa42e97ec8addb292976887a80ac42e450 Author: Marcel Holtmann <[email protected]> Date: Sun Dec 14 00:29:30 2008 +0100 Add support for changing static properties Diff in this email is a maximum of 400 lines. diff --git a/include/element.h b/include/element.h index aede0d9..bc03011 100644 --- a/include/element.h +++ b/include/element.h @@ -123,6 +123,8 @@ extern void connman_element_unref(struct connman_element *element); extern int connman_element_add_static_property(struct connman_element *element, const char *name, int type, const void *value); +extern int connman_element_set_static_property(struct connman_element *element, + const char *name, int type, const void *value); extern int connman_element_add_static_array_property(struct connman_element *element, const char *name, int type, const void *value, int len); extern int connman_element_define_properties(struct connman_element *element, ...); diff --git a/plugins/wifi.c b/plugins/wifi.c index 6dafad4..77d8370 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -299,6 +299,7 @@ static void scan_result(struct connman_element *device, { struct wifi_data *data = connman_element_get_data(device); struct connman_element *element; + guint8 strength = network->quality; gchar *temp; int i; @@ -324,8 +325,6 @@ static void scan_result(struct connman_element *device, element = find_pending_element(data, network->identifier); if (element == NULL) { - guint8 strength; - element = connman_element_create(temp); element->type = CONNMAN_ELEMENT_TYPE_NETWORK; @@ -352,21 +351,20 @@ static void scan_result(struct connman_element *device, element->wifi.security = g_strdup(security); } - strength = network->quality; - connman_element_add_static_property(element, "WiFi.Strength", DBUS_TYPE_BYTE, &strength); - //connman_element_add_static_property(element, "WiFi.Noise", - // DBUS_TYPE_INT32, &network->noise); - DBG("%s (%s) strength %d", network->identifier, element->wifi.security, strength); connman_element_register(element, device); - } else + } else { data->pending = g_slist_remove(data->pending, element); + connman_element_set_static_property(element, "WiFi.Strength", + DBUS_TYPE_BYTE, &strength); + } + data->current = g_slist_append(data->current, element); element->available = TRUE; diff --git a/src/element.c b/src/element.c index 3c329b8..375b871 100644 --- a/src/element.c +++ b/src/element.c @@ -343,10 +343,8 @@ static void emit_enabled_signal(DBusConnection *conn, 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->enabled); - dbus_message_iter_close_container(&entry, &value); g_dbus_send_message(conn, signal); @@ -1116,6 +1114,99 @@ int connman_element_add_static_property(struct connman_element *element, return 0; } +static void emit_property_changed(DBusConnection *conn, + struct connman_element *element, + const char *name, int type, const void *data) +{ + DBusMessage *signal; + DBusMessageIter entry, value; + const char *iface, *sig; + + DBG("conn %p", conn); + + switch (element->type) { + case CONNMAN_ELEMENT_TYPE_DEVICE: + iface = CONNMAN_DEVICE_INTERFACE; + break; + case CONNMAN_ELEMENT_TYPE_NETWORK: + iface = CONNMAN_NETWORK_INTERFACE; + break; + default: + return; + } + + signal = dbus_message_new_signal(element->path, + iface, "PropertyChanged"); + if (signal == NULL) + return; + + dbus_message_iter_init_append(signal, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &name); + + switch (type) { + case DBUS_TYPE_STRING: + sig = DBUS_TYPE_STRING_AS_STRING; + break; + case DBUS_TYPE_BYTE: + sig = DBUS_TYPE_BYTE_AS_STRING; + break; + default: + sig = DBUS_TYPE_VARIANT_AS_STRING; + break; + } + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + sig, &value); + dbus_message_iter_append_basic(&value, type, data); + dbus_message_iter_close_container(&entry, &value); + + g_dbus_send_message(conn, signal); +} + +int connman_element_set_static_property(struct connman_element *element, + const char *name, int type, const void *value) +{ + GSList *list; + + DBG("element %p name %s", element, element->name); + + if (type != DBUS_TYPE_STRING && type != DBUS_TYPE_BYTE) + return -EINVAL; + + __connman_element_lock(element); + + for (list = element->properties; list; list = list->next) { + struct connman_property *property = list->data; + + if (g_str_equal(property->name, name) == FALSE) + continue; + + if (!(property->flags & CONNMAN_PROPERTY_FLAG_STATIC)) + continue; + + property->type = type; + g_free(property->value); + + switch (type) { + case DBUS_TYPE_STRING: + property->value = g_strdup(*((const char **) value)); + break; + case DBUS_TYPE_BYTE: + property->value = g_try_malloc(1); + if (property->value != NULL) + memcpy(property->value, value, 1); + break; + } + } + + __connman_element_unlock(element); + + emit_property_changed(connection, element, name, type, value); + + return 0; +} + int connman_element_add_static_array_property(struct connman_element *element, const char *name, int type, const void *value, int len) { @@ -1527,9 +1618,7 @@ static void append_devices(DBusMessageIter *entry) dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH_AS_STRING, &iter); - __connman_element_list(NULL, CONNMAN_ELEMENT_TYPE_DEVICE, &iter); - dbus_message_iter_close_container(&value, &iter); dbus_message_iter_close_container(entry, &value); @@ -1590,9 +1679,7 @@ static void append_connections(DBusMessageIter *entry) dbus_message_iter_open_container(&value, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH_AS_STRING, &iter); - __connman_element_list(NULL, CONNMAN_ELEMENT_TYPE_CONNECTION, &iter); - dbus_message_iter_close_container(&value, &iter); dbus_message_iter_close_container(entry, &value); @@ -1626,9 +1713,7 @@ static void append_state(DBusMessageIter *entry, const char *state) dbus_message_iter_open_container(entry, DBUS_TYPE_VARIANT, DBUS_TYPE_STRING_AS_STRING, &value); - dbus_message_iter_append_basic(&value, DBUS_TYPE_STRING, &state); - dbus_message_iter_close_container(entry, &value); } diff --git a/test/monitor-connman b/test/monitor-connman index 2c4b9bd..0c4a2ef 100755 --- a/test/monitor-connman +++ b/test/monitor-connman @@ -7,7 +7,11 @@ import dbus.mainloop.glib def property_changed(name, value, path, interface): iface = interface[interface.rfind(".") + 1:] - print "{%s} [%s] %s = %s" % (iface, path, name, str(value)) + if (name == "WiFi.Strength"): + val = int(value) + else: + val = str(value) + print "{%s} [%s] %s = %s" % (iface, path, name, val) if __name__ == '__main__': dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) _______________________________________________ Commits mailing list [email protected] https://lists.moblin.org/mailman/listinfo/commits
