X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Felement.c;h=11450539872aff529d4f9e5149926eacbc73a9ba;hb=76fc6c0e0c2ad9890a5cfde7b503b11276f64a95;hp=9b91ab0775efdfc09d1141d53f655ed783e3f310;hpb=6fc25870e4cb00374c96ce31f012fe188475f4aa;p=connman diff --git a/src/element.c b/src/element.c index 9b91ab0..1145053 100644 --- a/src/element.c +++ b/src/element.c @@ -145,6 +145,28 @@ static const char *subtype2string(enum connman_element_subtype type) return NULL; } +static const char *subtype2description(enum connman_element_subtype type) +{ + switch (type) { + case CONNMAN_ELEMENT_SUBTYPE_UNKNOWN: + case CONNMAN_ELEMENT_SUBTYPE_FAKE: + case CONNMAN_ELEMENT_SUBTYPE_NETWORK: + return NULL; + case CONNMAN_ELEMENT_SUBTYPE_ETHERNET: + return "Ethernet"; + case CONNMAN_ELEMENT_SUBTYPE_WIFI: + return "Wireless"; + case CONNMAN_ELEMENT_SUBTYPE_WIMAX: + return "WiMAX"; + case CONNMAN_ELEMENT_SUBTYPE_MODEM: + return "Modem"; + case CONNMAN_ELEMENT_SUBTYPE_BLUETOOTH: + return "Bluetooth"; + } + + return NULL; +} + const char *__connman_element_policy2string(enum connman_element_policy policy) { switch (policy) { @@ -356,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) { @@ -465,6 +520,15 @@ static DBusMessage *device_get_properties(DBusConnection *conn, DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); + str = subtype2description(element->subtype); + if (str != NULL && element->devname != NULL) { + char *name = g_strdup_printf("%s (%s)", str, element->devname); + if (name != NULL) + connman_dbus_dict_append_variant(&dict, "Name", + DBUS_TYPE_STRING, &name); + g_free(name); + } + str = subtype2string(element->subtype); if (str != NULL) connman_dbus_dict_append_variant(&dict, "Type", @@ -479,7 +543,11 @@ 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) { + element->subtype == CONNMAN_ELEMENT_SUBTYPE_WIMAX || + element->subtype == CONNMAN_ELEMENT_SUBTYPE_BLUETOOTH) { + connman_dbus_dict_append_variant(&dict, "Scanning", + DBUS_TYPE_BOOLEAN, &element->scanning); + dbus_message_iter_open_container(&dict, DBUS_TYPE_DICT_ENTRY, NULL, &entry); append_networks(element, &entry); @@ -569,6 +637,9 @@ static DBusMessage *device_create_network(DBusConnection *conn, DBG("conn %p", conn); + if (element->subtype != CONNMAN_ELEMENT_SUBTYPE_WIFI) + return __connman_error_invalid_arguments(msg); + if (dbus_message_iter_init(msg, &iter) == FALSE) return __connman_error_invalid_arguments(msg); @@ -628,6 +699,10 @@ static DBusMessage *network_get_properties(DBusConnection *conn, DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); + if (element->parent) + connman_dbus_dict_append_variant(&dict, "Device", + DBUS_TYPE_OBJECT_PATH, &element->parent->path); + str = __connman_element_policy2string(element->policy); if (str != NULL) connman_dbus_dict_append_variant(&dict, "Policy", @@ -2091,6 +2166,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;