From afda5bee3495e4fe070cf59e2f240127c341faf4 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 29 Sep 2008 12:15:49 +0200 Subject: Make sure to always add Alias and Icon property --- src/dbus-hci.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- src/dbus-hci.h | 2 ++ src/device.c | 71 +++++++------------------------------------------ 3 files changed, 89 insertions(+), 67 deletions(-) diff --git a/src/dbus-hci.c b/src/dbus-hci.c index c6f3bb96..d724bf95 100644 --- a/src/dbus-hci.c +++ b/src/dbus-hci.c @@ -60,6 +60,64 @@ static DBusConnection *connection = NULL; +const char *class_to_icon(uint32_t class) +{ + switch ((class & 0x1f00) >> 8) { + case 0x01: + return "computer"; + case 0x02: + switch ((class & 0xfc) >> 2) { + case 0x01: + case 0x02: + case 0x03: + case 0x05: + return "phone"; + case 0x04: + return "modem"; + } + break; + case 0x03: + return "network-wireless"; + case 0x04: + switch ((class & 0xfc) >> 2) { + case 0x01: + case 0x02: + return "audio-card"; /* Headset */ + case 0x06: + return "audio-card"; /* Headphone */ + } + break; + case 0x05: + switch ((class & 0xc0) >> 6) { + case 0x00: + switch ((class & 0x1e) >> 2) { + case 0x01: + case 0x02: + return "input-gaming"; + } + break; + case 0x01: + return "input-keyboard"; + case 0x02: + switch ((class & 0x1e) >> 2) { + case 0x05: + return "input-tablet"; + default: + return "input-mouse"; + } + } + break; + case 0x06: + if (class & 0x80) + return "printer"; + if (class & 0x20) + return "camera-photo"; + break; + } + + return NULL; +} + DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status) { switch (status) { @@ -825,13 +883,12 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, { char filename[PATH_MAX + 1]; struct btd_adapter *adapter; - char local_addr[18], peer_addr[18], *name, *tmp_name; - const char *paddr = peer_addr; + char local_addr[18], peer_addr[18], *alias, *name, *tmp_name; + const char *path, *icon, *paddr = peer_addr; struct remote_dev_info *dev, match; dbus_int16_t tmp_rssi = rssi; uint8_t name_type = 0x00; name_status_t name_status; - const gchar *path; int state; ba2str(local, local_addr); @@ -876,9 +933,20 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, else name_status = NAME_NOT_REQUIRED; + create_name(filename, PATH_MAX, STORAGEDIR, local_addr, "aliases"); + alias = textfile_get(filename, peer_addr); + create_name(filename, PATH_MAX, STORAGEDIR, local_addr, "names"); name = textfile_get(filename, peer_addr); + if (!alias) { + if (!name) { + alias = g_strdup(peer_addr); + g_strdelimit(alias, ":", '-'); + } else + alias = g_strdup(name); + } + tmp_name = extract_eir_name(data, &name_type); if (tmp_name) { if (name_type == 0x09) { @@ -898,6 +966,7 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, } path = adapter_get_path(adapter); + icon = class_to_icon(class); if (name) { if (name_type != 0x08) @@ -906,19 +975,23 @@ void hcid_dbus_inquiry_result(bdaddr_t *local, bdaddr_t *peer, uint32_t class, emit_device_found(path, paddr, "Address", DBUS_TYPE_STRING, &paddr, "Class", DBUS_TYPE_UINT32, &class, + "Icon", DBUS_TYPE_STRING, &icon, "RSSI", DBUS_TYPE_INT16, &tmp_rssi, "Name", DBUS_TYPE_STRING, &name, - NULL); + "Alias", DBUS_TYPE_STRING, &alias, NULL); g_free(name); } else { emit_device_found(path, paddr, "Address", DBUS_TYPE_STRING, &paddr, "Class", DBUS_TYPE_UINT32, &class, + "Icon", DBUS_TYPE_STRING, &icon, "RSSI", DBUS_TYPE_INT16, &tmp_rssi, - NULL); + "Alias", DBUS_TYPE_STRING, &alias, NULL); } + g_free(alias); + /* add in the list to track name sent/pending */ adapter_add_found_device(adapter, peer, rssi, name_status); } diff --git a/src/dbus-hci.h b/src/dbus-hci.h index a9ccbbd5..35a8be7c 100644 --- a/src/dbus-hci.h +++ b/src/dbus-hci.h @@ -59,6 +59,8 @@ int set_service_classes(int dd, const uint8_t *cls, uint8_t value); int set_major_class(int dd, const uint8_t *cls, uint8_t major); int set_minor_class(int dd, const uint8_t *cls, uint8_t minor); +const char *class_to_icon(uint32_t class); + void set_dbus_connection(DBusConnection *conn); DBusConnection *get_dbus_connection(void); diff --git a/src/device.c b/src/device.c index 49c6e80a..9862652a 100644 --- a/src/device.c +++ b/src/device.c @@ -159,64 +159,6 @@ static gboolean device_is_paired(struct btd_device *device) return ret; } -static const char *class_to_icon(uint32_t class) -{ - switch ((class & 0x1f00) >> 8) { - case 0x01: - return "computer"; - case 0x02: - switch ((class & 0xfc) >> 2) { - case 0x01: - case 0x02: - case 0x03: - case 0x05: - return "phone"; - case 0x04: - return "modem"; - } - break; - case 0x03: - return "network-wireless"; - case 0x04: - switch ((class & 0xfc) >> 2) { - case 0x01: - case 0x02: - return "audio-card"; /* Headset */ - case 0x06: - return "audio-card"; /* Headphone */ - } - break; - case 0x05: - switch ((class & 0xc0) >> 6) { - case 0x00: - switch ((class & 0x1e) >> 2) { - case 0x01: - case 0x02: - return "input-gaming"; - } - break; - case 0x01: - return "input-keyboard"; - case 0x02: - switch ((class & 0x1e) >> 2) { - case 0x05: - return "input-tablet"; - default: - return "input-mouse"; - } - } - break; - case 0x06: - if (class & 0x80) - return "printer"; - if (class & 0x20) - return "camera-photo"; - break; - } - - return NULL; -} - static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, void *user_data) { @@ -250,8 +192,8 @@ static DBusMessage *get_properties(DBusConnection *conn, /* Address */ ptr = dstaddr; - dbus_message_iter_append_dict_entry(&dict, "Address", DBUS_TYPE_STRING, - &ptr); + dbus_message_iter_append_dict_entry(&dict, "Address", + DBUS_TYPE_STRING, &ptr); /* Name */ ptr = NULL; @@ -265,10 +207,15 @@ static DBusMessage *get_properties(DBusConnection *conn, DBUS_TYPE_STRING, &ptr); } - if (read_device_alias(srcaddr, dstaddr, name, sizeof(name)) > 0) + /* Alias (fallback to name or address) */ + if (read_device_alias(srcaddr, dstaddr, name, sizeof(name)) < 1) { + if (!ptr) { + g_strdelimit(dstaddr, ":", '-'); + ptr = dstaddr; + } + } else ptr = name; - /* Alias: use Name if Alias doesn't exist */ if (ptr) dbus_message_iter_append_dict_entry(&dict, "Alias", DBUS_TYPE_STRING, &ptr); -- cgit