diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-09-29 12:15:49 +0200 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-09-29 12:15:49 +0200 | 
| commit | afda5bee3495e4fe070cf59e2f240127c341faf4 (patch) | |
| tree | 7ece7ba91088bdb09437b6d897a3cc729e651772 | |
| parent | 993a8c55125f988f34a0471d4cf9a99bb7460d90 (diff) | |
Make sure to always add Alias and Icon property
| -rw-r--r-- | src/dbus-hci.c | 83 | ||||
| -rw-r--r-- | src/dbus-hci.h | 2 | ||||
| -rw-r--r-- | 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); | 
