summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-09-29 12:15:49 +0200
committerMarcel Holtmann <marcel@holtmann.org>2008-09-29 12:15:49 +0200
commitafda5bee3495e4fe070cf59e2f240127c341faf4 (patch)
tree7ece7ba91088bdb09437b6d897a3cc729e651772
parent993a8c55125f988f34a0471d4cf9a99bb7460d90 (diff)
Make sure to always add Alias and Icon property
-rw-r--r--src/dbus-hci.c83
-rw-r--r--src/dbus-hci.h2
-rw-r--r--src/device.c71
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);