linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mikel Astiz <mikel.astiz.oss@gmail.com>
To: linux-bluetooth@vger.kernel.org
Cc: Mikel Astiz <mikel.astiz.oss@gmail.com>
Subject: [PATCH BlueZ v2 4/6] media: Split media_endpoint_create
Date: Mon, 30 Apr 2012 10:56:37 +0200	[thread overview]
Message-ID: <1335776199-16704-5-git-send-email-mikel.astiz.oss@gmail.com> (raw)
In-Reply-To: <1335776199-16704-1-git-send-email-mikel.astiz.oss@gmail.com>

This function is starting to be too long and needs to be split.

After this patch, the resulting code should be exactly equivalent as the
previous implementation.
---
 audio/media.c |  119 +++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 78 insertions(+), 41 deletions(-)

diff --git a/audio/media.c b/audio/media.c
index fd5a369..88b994f 100644
--- a/audio/media.c
+++ b/audio/media.c
@@ -658,6 +658,64 @@ static void gateway_state_changed(struct audio_device *dev,
 	}
 }
 
+static gboolean endpoint_init_a2dp_source(struct media_endpoint *endpoint,
+						gboolean delay_reporting,
+						int *err)
+{
+	endpoint->sep = a2dp_add_sep(&endpoint->adapter->src,
+					AVDTP_SEP_TYPE_SOURCE, endpoint->codec,
+					delay_reporting, &a2dp_endpoint,
+					endpoint, a2dp_destroy_endpoint, err);
+	if (endpoint->sep == NULL)
+		return FALSE;
+
+	return TRUE;
+}
+
+static gboolean endpoint_init_a2dp_sink(struct media_endpoint *endpoint,
+						gboolean delay_reporting,
+						int *err)
+{
+	endpoint->sep = a2dp_add_sep(&endpoint->adapter->src,
+					AVDTP_SEP_TYPE_SINK, endpoint->codec,
+					delay_reporting, &a2dp_endpoint,
+					endpoint, a2dp_destroy_endpoint, err);
+	if (endpoint->sep == NULL)
+		return FALSE;
+
+	return TRUE;
+}
+
+static gboolean endpoint_init_ag(struct media_endpoint *endpoint, int *err)
+{
+	struct audio_device *dev;
+
+	endpoint->hs_watch = headset_add_state_cb(headset_state_changed,
+								endpoint);
+	dev = manager_find_device(NULL, &endpoint->adapter->src, BDADDR_ANY,
+						AUDIO_HEADSET_INTERFACE, TRUE);
+	if (dev)
+		set_configuration(endpoint, dev, NULL, 0,
+						headset_setconf_cb, dev, NULL);
+
+	return TRUE;
+}
+
+static gboolean endpoint_init_hs(struct media_endpoint *endpoint, int *err)
+{
+	struct audio_device *dev;
+
+	endpoint->ag_watch = gateway_add_state_cb(gateway_state_changed,
+								endpoint);
+	dev = manager_find_device(NULL, &endpoint->adapter->src, BDADDR_ANY,
+						AUDIO_GATEWAY_INTERFACE, TRUE);
+	if (dev)
+		set_configuration(endpoint, dev, NULL, 0,
+						gateway_setconf_cb, dev, NULL);
+
+	return TRUE;
+}
+
 static struct media_endpoint *media_endpoint_create(struct media_adapter *adapter,
 						const char *sender,
 						const char *path,
@@ -669,6 +727,7 @@ static struct media_endpoint *media_endpoint_create(struct media_adapter *adapte
 						int *err)
 {
 	struct media_endpoint *endpoint;
+	gboolean succeeded;
 
 	endpoint = g_new0(struct media_endpoint, 1);
 	endpoint->sender = g_strdup(sender);
@@ -684,46 +743,28 @@ static struct media_endpoint *media_endpoint_create(struct media_adapter *adapte
 
 	endpoint->adapter = adapter;
 
-	if (strcasecmp(uuid, A2DP_SOURCE_UUID) == 0) {
-		endpoint->sep = a2dp_add_sep(&adapter->src,
-					AVDTP_SEP_TYPE_SOURCE, codec,
-					delay_reporting, &a2dp_endpoint,
-					endpoint, a2dp_destroy_endpoint, err);
-		if (endpoint->sep == NULL)
-			goto failed;
-	} else if (strcasecmp(uuid, A2DP_SINK_UUID) == 0) {
-		endpoint->sep = a2dp_add_sep(&adapter->src,
-					AVDTP_SEP_TYPE_SINK, codec,
-					delay_reporting, &a2dp_endpoint,
-					endpoint, a2dp_destroy_endpoint, err);
-		if (endpoint->sep == NULL)
-			goto failed;
-	} else if (strcasecmp(uuid, HFP_AG_UUID) == 0 ||
-					strcasecmp(uuid, HSP_AG_UUID) == 0) {
-		struct audio_device *dev;
-
-		endpoint->hs_watch = headset_add_state_cb(headset_state_changed,
-								endpoint);
-		dev = manager_find_device(NULL, &adapter->src, BDADDR_ANY,
-						AUDIO_HEADSET_INTERFACE, TRUE);
-		if (dev)
-			set_configuration(endpoint, dev, NULL, 0,
-						headset_setconf_cb, dev, NULL);
-	} else if (strcasecmp(uuid, HFP_HS_UUID) == 0 ||
-					strcasecmp(uuid, HSP_HS_UUID) == 0) {
-		struct audio_device *dev;
+	if (strcasecmp(uuid, A2DP_SOURCE_UUID) == 0)
+		succeeded = endpoint_init_a2dp_source(endpoint,
+							delay_reporting, err);
+	else if (strcasecmp(uuid, A2DP_SINK_UUID) == 0)
+		succeeded = endpoint_init_a2dp_sink(endpoint,
+							delay_reporting, err);
+	else if (strcasecmp(uuid, HFP_AG_UUID) == 0 ||
+					strcasecmp(uuid, HSP_AG_UUID) == 0)
+		succeeded = endpoint_init_ag(endpoint, err);
+	else if (strcasecmp(uuid, HFP_HS_UUID) == 0 ||
+					strcasecmp(uuid, HSP_HS_UUID) == 0)
+		succeeded = endpoint_init_hs(endpoint, err);
+	else {
+		succeeded = FALSE;
 
-		endpoint->ag_watch = gateway_add_state_cb(gateway_state_changed,
-								endpoint);
-		dev = manager_find_device(NULL, &adapter->src, BDADDR_ANY,
-						AUDIO_GATEWAY_INTERFACE, TRUE);
-		if (dev)
-			set_configuration(endpoint, dev, NULL, 0,
-						gateway_setconf_cb, dev, NULL);
-	} else {
 		if (err)
 			*err = -EINVAL;
-		goto failed;
+	}
+
+	if (!succeeded) {
+		g_free(endpoint);
+		return NULL;
 	}
 
 	endpoint->watch = g_dbus_add_disconnect_watch(adapter->conn, sender,
@@ -736,10 +777,6 @@ static struct media_endpoint *media_endpoint_create(struct media_adapter *adapte
 	if (err)
 		*err = 0;
 	return endpoint;
-
-failed:
-	g_free(endpoint);
-	return NULL;
 }
 
 static struct media_endpoint *media_adapter_find_endpoint(
-- 
1.7.7.6


  parent reply	other threads:[~2012-04-30  8:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-30  8:56 [PATCH BlueZ v2 0/6] Multiple Bluetooth SCO connections (userspace) Mikel Astiz
2012-04-30  8:56 ` [PATCH BlueZ v2 1/6] audio: Fix gateway state check Mikel Astiz
2012-04-30  8:56 ` [PATCH BlueZ v2 2/6] audio: Add multiple device search to manager Mikel Astiz
2012-05-02 18:25   ` Vinicius Costa Gomes
2012-04-30  8:56 ` [PATCH BlueZ v2 3/6] media: Support multiple transports per endpoint Mikel Astiz
2012-04-30  8:56 ` Mikel Astiz [this message]
2012-05-02 12:21   ` [PATCH BlueZ v2 4/6] media: Split media_endpoint_create Luiz Augusto von Dentz
2012-04-30  8:56 ` [PATCH BlueZ v2 5/6] media: Create multiple transports if needed Mikel Astiz
2012-04-30  8:56 ` [PATCH BlueZ v2 6/6] media: Enable parallel requests to endpoint Mikel Astiz

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=1335776199-16704-5-git-send-email-mikel.astiz.oss@gmail.com \
    --to=mikel.astiz.oss@gmail.com \
    --cc=linux-bluetooth@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).