diff options
| author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-04-11 14:37:42 +0000 | 
|---|---|---|
| committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-04-11 14:37:42 +0000 | 
| commit | 09853246daa61419004e35f85ba81efa20dd4b0d (patch) | |
| tree | 3d49a6eef172a17c3408596b78e466771015357b | |
| parent | c1c8c6366c341a90c2f22741e52b225171a1d3c5 (diff) | |
Added remote device info dictionary
| -rw-r--r-- | hcid/dbus-adapter.c | 110 | 
1 files changed, 106 insertions, 4 deletions
| diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c index 272f6d35..2fad51d6 100644 --- a/hcid/dbus-adapter.c +++ b/hcid/dbus-adapter.c @@ -1113,10 +1113,19 @@ static DBusHandlerResult adapter_set_name(DBusConnection *conn,  static DBusHandlerResult adapter_get_remote_info(DBusConnection *conn,  						DBusMessage *msg, void *data)  { +	struct adapter *adapter = data;  	DBusMessage *reply;  	DBusMessageIter iter;  	DBusMessageIter dict; +	bdaddr_t src, dst;  	const char *addr_ptr; +	char filename[PATH_MAX + 1]; +	char buf[64]; +	const char *ptr; +	char *str; +	dbus_bool_t boolean; +	uint32_t class; +	int compid, ver, subver;  	if (!dbus_message_get_args(msg, NULL,  				DBUS_TYPE_STRING, &addr_ptr, @@ -1137,8 +1146,103 @@ static DBusHandlerResult adapter_get_remote_info(DBusConnection *conn,  			DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING  			DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); -	/* append dict entries here */ +	/* Name */ +	create_name(filename, PATH_MAX, STORAGEDIR, adapter->address, "names"); +	str = textfile_caseget(filename, addr_ptr); +	if (str) { +		append_dict_entry(&dict, "name", DBUS_TYPE_STRING, &str); +		free(str); +	} + +	str2ba(adapter->address, &src); +	str2ba(addr_ptr, &dst); + +	/* Major/Minor Class */ +	if (read_remote_class(&src, &dst, &class) == 0) { +		ptr = major_class_str(class); +		append_dict_entry(&dict, "major_class", +				DBUS_TYPE_STRING, &ptr); + +		ptr = minor_class_str(class); +		append_dict_entry(&dict, "minor_class", +				DBUS_TYPE_STRING, &ptr); +	} + +	/* Alias */ +	if (get_device_alias(adapter->dev_id, &dst, buf, sizeof(buf)) > 0) { +		ptr = buf; +		append_dict_entry(&dict, "alias", +				DBUS_TYPE_STRING, &ptr); +	} + +	/* Bonded */ +	create_name(filename, PATH_MAX, STORAGEDIR, +			adapter->address, "linkkeys"); +	str = textfile_caseget(filename, addr_ptr); +	if (str) { +		boolean = TRUE; +		free(str); +	} else { +		boolean = FALSE; +	} + +	append_dict_entry(&dict, "bonded", +			DBUS_TYPE_BOOLEAN, &boolean); + +	/* Trusted */ +	boolean = read_trust(&src, addr_ptr, GLOBAL_TRUST); +	append_dict_entry(&dict, "trusted", +			DBUS_TYPE_BOOLEAN, &boolean); + +	/* HCI Revision/Manufacturer/Version */ +	create_name(filename, PATH_MAX, STORAGEDIR, +			adapter->address, "manufacturers"); +	str = textfile_caseget(filename, addr_ptr); +	if (!str) +		goto done; + +	if (sscanf(str, "%d %d %d", &compid, &ver, &subver) != 3) { +		/* corrupted file data */ +		free(str); +		goto done; +	} + +	free(str); + +	ptr = buf; +	snprintf(buf, 16, "HCI 0x%X", subver); +	append_dict_entry(&dict, "revision", +			DBUS_TYPE_STRING, &ptr); + +	ptr = bt_compidtostr(compid); +	append_dict_entry(&dict, "manufacturer", +			DBUS_TYPE_STRING, &ptr); + +	ptr = lmp_vertostr(ver); + +	snprintf(buf, 64, "Bluetooth %s", ptr); + +	create_name(filename, PATH_MAX, STORAGEDIR, +			adapter->address, "features"); + +	str = textfile_caseget(filename, addr_ptr); +	if (str) { +		if (strlen(str) == 16) { +			uint8_t features; +			/* Getting the third byte */ +			features  = ((str[6] - 48) << 4) | (str[7] - 48); +			if (features & (LMP_EDR_ACL_2M | LMP_EDR_ACL_3M)) +				snprintf(buf, 64, "Bluetooth %s + EDR", ptr); + +		} +		free(str); +	} +	ptr = buf; +	append_dict_entry(&dict, "version", +			DBUS_TYPE_STRING, &ptr); + +done:  	dbus_message_iter_close_container(&iter, &dict);  	return send_message_and_unref(conn, reply); @@ -1173,7 +1277,6 @@ static DBusHandlerResult adapter_get_remote_version(DBusConnection *conn,  	const char *str_ver;  	char info_array[64], *info = info_array;  	int compid, ver, subver; -	uint8_t features;  	memset(info_array, 0, 64); @@ -1212,10 +1315,9 @@ static DBusHandlerResult adapter_get_remote_version(DBusConnection *conn,  	if (!str)  		goto failed; -	printf("%s\n", str); -  	/* Check if the data is not corrupted */  	if (strlen(str) == 16) { +		uint8_t features;  		/* Getting the third byte */  		features  = ((str[6] - 48) << 4) | (str[7] - 48);  		if (features & (LMP_EDR_ACL_2M | LMP_EDR_ACL_3M)) | 
