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

Reply via email to