Add signal strength to connection objects
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 15 Dec 2008 01:57:43 +0000 (02:57 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 15 Dec 2008 01:57:43 +0000 (02:57 +0100)
doc/connection-api.txt
include/element.h
src/element.c

index e2cf474..7356b34 100644 (file)
@@ -21,6 +21,12 @@ Properties   string Type [readonly]
 
                        The connection type (for example wifi etc.)
 
+               uint8 Strength [readonly]
+
+                       Indicates the signal strength of the connection.
+
+                       This property is optional and not always present.
+
                string IPv4.Method [readonly]
 
                        Indicates the way how the IPv4 settings were
index bc03011..48e46f2 100644 (file)
@@ -93,6 +93,7 @@ struct connman_element {
        gboolean available;
        gboolean remember;
        guint16 priority;
+       guint8 strength;
        gchar *devname;
 
        struct connman_element *parent;
index d1e6de3..a78a2be 100644 (file)
@@ -705,6 +705,11 @@ static DBusMessage *connection_get_properties(DBusConnection *conn,
                connman_dbus_dict_append_variant(&dict, "Type",
                                                DBUS_TYPE_STRING, &str);
 
+       if (element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIFI ||
+                       element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIMAX)
+               connman_dbus_dict_append_variant(&dict, "Strength",
+                                       DBUS_TYPE_BYTE, &element->strength);
+
        add_common_properties(element, &dict);
 
        dbus_message_iter_close_container(&array, &dict);
@@ -1739,6 +1744,20 @@ static void emit_state_change(DBusConnection *conn, const char *state)
        g_dbus_send_message(conn, signal);
 }
 
+static void set_signal_strength(struct connman_element *connection)
+{
+       struct connman_element *element = connection;
+
+       while (element != NULL) {
+               if (element->type == CONNMAN_ELEMENT_TYPE_NETWORK) {
+                       connection->strength = element->strength;
+                       break;
+               }
+
+               element = element->parent;
+       }
+}
+
 static void register_element(gpointer data, gpointer user_data)
 {
        struct connman_element *element = data;
@@ -1805,6 +1824,7 @@ static void register_element(gpointer data, gpointer user_data)
                        connman_error("Failed to register %s connection",
                                                                element->path);
                else {
+                       set_signal_strength(element);
                        emit_connections_signal(connection);
                        emit_state_change(connection, "online");
                }