Open Source Telephony
 help / color / mirror / Atom feed
From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: ofono@ofono.org
Subject: [PATCH 2/3] bluetooth: make uuid profile detection more generic
Date: Fri, 01 Jul 2011 10:12:23 +0300	[thread overview]
Message-ID: <1309504344-23058-2-git-send-email-luiz.dentz@gmail.com> (raw)
In-Reply-To: <1309504344-23058-1-git-send-email-luiz.dentz@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4013 bytes --]

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

---
 plugins/bluetooth.c |   31 ++++++++++++++++++-------------
 plugins/bluetooth.h |    4 +---
 2 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index f9bc0b5..7e0705f 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -226,9 +226,9 @@ done:
 	g_slist_free(prop_handlers);
 }
 
-static void has_uuid(DBusMessageIter *array, gpointer user_data)
+static void parse_uuids(DBusMessageIter *array, gpointer user_data)
 {
-	gboolean *profiles = user_data;
+	GSList **uuids = user_data;
 	DBusMessageIter value;
 
 	if (dbus_message_iter_get_arg_type(array) != DBUS_TYPE_ARRAY)
@@ -241,8 +241,7 @@ static void has_uuid(DBusMessageIter *array, gpointer user_data)
 
 		dbus_message_iter_get_basic(&value, &uuid);
 
-		if (!strcasecmp(uuid, HFP_AG_UUID))
-			*profiles |= HFP_AG;
+		*uuids = g_slist_prepend(*uuids, (char *) uuid);
 
 		dbus_message_iter_next(&value);
 	}
@@ -262,14 +261,13 @@ static void parse_string(DBusMessageIter *iter, gpointer user_data)
 static void device_properties_cb(DBusPendingCall *call, gpointer user_data)
 {
 	DBusMessage *reply;
-	int have_uuid = 0;
 	const char *path = user_data;
 	const char *adapter = NULL;
 	const char *adapter_addr = NULL;
 	const char *device_addr = NULL;
 	const char *alias = NULL;
-	struct bluetooth_profile *profile;
 	struct DBusError derr;
+	GSList *uuids = NULL;
 
 	reply = dbus_pending_call_steal_reply(call);
 
@@ -284,7 +282,7 @@ static void device_properties_cb(DBusPendingCall *call, gpointer user_data)
 
 	DBG("");
 
-	bluetooth_parse_properties(reply, "UUIDs", has_uuid, &have_uuid,
+	bluetooth_parse_properties(reply, "UUIDs", parse_uuids, &uuids,
 				"Adapter", parse_string, &adapter,
 				"Address", parse_string, &device_addr,
 				"Alias", parse_string, &alias, NULL);
@@ -293,15 +291,22 @@ static void device_properties_cb(DBusPendingCall *call, gpointer user_data)
 		adapter_addr = g_hash_table_lookup(adapter_address_hash,
 							adapter);
 
-	if ((have_uuid & HFP_AG) && device_addr && adapter_addr) {
-		profile = g_hash_table_lookup(uuid_hash, HFP_AG_UUID);
+	if (!device_addr && !adapter_addr)
+		goto done;
+
+	for (; uuids; uuids = uuids->next) {
+		struct bluetooth_profile *profile;
+		const char *uuid = uuids->data;
+
+		profile = g_hash_table_lookup(uuid_hash, uuid);
 		if (profile == NULL || profile->create == NULL)
-			goto done;
+			continue;
 
 		profile->create(path, device_addr, adapter_addr, alias);
 	}
 
 done:
+	g_slist_free(uuids);
 	dbus_message_unref(reply);
 }
 
@@ -342,7 +347,7 @@ static gboolean property_changed(DBusConnection *connection, DBusMessage *msg,
 
 	dbus_message_iter_get_basic(&iter, &property);
 	if (g_str_equal(property, "UUIDs") == TRUE) {
-		int profiles = 0;
+		GSList *uuids = NULL;
 		const char *path = dbus_message_get_path(msg);
 		DBusMessageIter variant;
 
@@ -354,13 +359,13 @@ static gboolean property_changed(DBusConnection *connection, DBusMessage *msg,
 
 		dbus_message_iter_recurse(&iter, &variant);
 
-		has_uuid(&variant, &profiles);
+		parse_uuids(&variant, &uuids);
 
 		/* We need the full set of properties to be able to create
 		 * the modem properly, including Adapter and Alias, so
 		 * refetch everything again
 		 */
-		if (profiles)
+		if (uuids)
 			bluetooth_send_with_reply(path, BLUEZ_DEVICE_INTERFACE,
 					"GetProperties", device_properties_cb,
 					g_strdup(path), g_free, -1,
diff --git a/plugins/bluetooth.h b/plugins/bluetooth.h
index 318e4b0..ff0ea52 100644
--- a/plugins/bluetooth.h
+++ b/plugins/bluetooth.h
@@ -28,9 +28,7 @@
 #define DBUS_TIMEOUT 15
 
 #define HFP_AG_UUID	"0000111f-0000-1000-8000-00805f9b34fb"
-
-/* Profiles bitfield */
-#define HFP_AG 0x01
+#define HFP_HS_UUID	"0000111e-0000-1000-8000-00805f9b34fb"
 
 struct bluetooth_profile {
 	const char *name;
-- 
1.7.5.4


  reply	other threads:[~2011-07-01  7:12 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-01  7:12 [PATCH 1/3] bluetooth: use lower case for UUIDs Luiz Augusto von Dentz
2011-07-01  7:12 ` Luiz Augusto von Dentz [this message]
2011-07-01  8:14   ` [PATCH 2/3] bluetooth: make uuid profile detection more generic Denis Kenzior
2011-07-01  7:12 ` [PATCH 3/3] bluetooth: fix not removing data when devices/adapters are removed Luiz Augusto von Dentz
2011-07-01  8:21   ` Denis Kenzior
2011-07-02 19:04     ` Luiz Augusto von Dentz
2011-07-01  8:13 ` [PATCH 1/3] bluetooth: use lower case for UUIDs Denis Kenzior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1309504344-23058-2-git-send-email-luiz.dentz@gmail.com \
    --to=luiz.dentz@gmail.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox