Diff between d1bb05e3edbce3f474fff4ff592aa39b4a2f667d and df75d2f37ca34f4ac5850688c40d376a9b295ae4

Changed Files

File Additions Deletions Status
profiles/audio/bap.c +3 -12 modified
profiles/audio/media.c +65 -40 modified
profiles/audio/media.h +1 -2 modified

Full Patch

diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
index b05d7a2..ed02db4 100644
--- a/profiles/audio/bap.c
+++ b/profiles/audio/bap.c
@@ -457,19 +457,10 @@ static int parse_properties(DBusMessageIter *props, struct iovec **caps,
 
 			framing = val;
 		} else if (!strcasecmp(key, "PHY")) {
-			const char *str;
-
-			if (var != DBUS_TYPE_STRING)
+			if (var != DBUS_TYPE_BYTE)
 				goto fail;
 
-			dbus_message_iter_get_basic(&value, &str);
-
-			if (!strcasecmp(str, "1M"))
-				io_qos.phy = 0x01;
-			else if (!strcasecmp(str, "2M"))
-				io_qos.phy = 0x02;
-			else
-				goto fail;
+			dbus_message_iter_get_basic(&value, &io_qos.phy);
 		} else if (!strcasecmp(key, "SDU")) {
 			if (var != DBUS_TYPE_UINT16)
 				goto fail;
@@ -546,7 +537,7 @@ static int parse_properties(DBusMessageIter *props, struct iovec **caps,
 
 			dbus_message_iter_get_basic(&value,
 							&qos->bcast.timeout);
-		} else if (!strcasecmp(key, "BroadcastCode")) {
+		} else if (!strcasecmp(key, "BCode")) {
 			if (var != DBUS_TYPE_ARRAY)
 				goto fail;
 			parse_array(&value, &qos->bcast.bcode);
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 66f512e..8345487 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -743,20 +743,20 @@ static int parse_array(DBusMessageIter *iter, struct iovec *iov)
 	return 0;
 }
 
-static int parse_select_properties(DBusMessageIter *props, struct iovec *caps,
-					struct iovec *metadata,
-					struct bt_bap_qos *qos)
+static int parse_ucast_qos(DBusMessageIter *iter, struct bt_bap_qos *qos)
 {
+	DBusMessageIter array;
 	const char *key;
 	struct bt_bap_io_qos io_qos;
-	uint8_t framing = 0;
+
+	dbus_message_iter_recurse(iter, &array);
 
 	memset(&io_qos, 0, sizeof(io_qos));
-	while (dbus_message_iter_get_arg_type(props) == DBUS_TYPE_DICT_ENTRY) {
+	while (dbus_message_iter_get_arg_type(&array) == DBUS_TYPE_DICT_ENTRY) {
 		DBusMessageIter value, entry;
 		int var;
 
-		dbus_message_iter_recurse(props, &entry);
+		dbus_message_iter_recurse(&array, &entry);
 		dbus_message_iter_get_basic(&entry, &key);
 
 		dbus_message_iter_next(&entry);
@@ -764,19 +764,7 @@ static int parse_select_properties(DBusMessageIter *props, struct iovec *caps,
 
 		var = dbus_message_iter_get_arg_type(&value);
 
-		if (!strcasecmp(key, "Capabilities")) {
-			if (var != DBUS_TYPE_ARRAY)
-				goto fail;
-
-			if (parse_array(&value, caps))
-				goto fail;
-		} else if (!strcasecmp(key, "Metadata")) {
-			if (var != DBUS_TYPE_ARRAY)
-				goto fail;
-
-			if (parse_array(&value, metadata))
-				goto fail;
-		} else if (!strcasecmp(key, "CIG")) {
+		if (!strcasecmp(key, "CIG")) {
 			if (var != DBUS_TYPE_BYTE)
 				goto fail;
 
@@ -792,28 +780,16 @@ static int parse_select_properties(DBusMessageIter *props, struct iovec *caps,
 
 			dbus_message_iter_get_basic(&value, &io_qos.interval);
 		} else if (!strcasecmp(key, "Framing")) {
-			dbus_bool_t val;
-
-			if (var != DBUS_TYPE_BOOLEAN)
+			if (var != DBUS_TYPE_BYTE)
 				goto fail;
 
-			dbus_message_iter_get_basic(&value, &val);
-
-			framing = val;
+			dbus_message_iter_get_basic(&value,
+							&qos->ucast.framing);
 		} else if (!strcasecmp(key, "PHY")) {
-			const char *str;
-
-			if (var != DBUS_TYPE_STRING)
+			if (var != DBUS_TYPE_BYTE)
 				goto fail;
 
-			dbus_message_iter_get_basic(&value, &str);
-
-			if (!strcasecmp(str, "1M"))
-				io_qos.phy = 0x01;
-			else if (!strcasecmp(str, "2M"))
-				io_qos.phy = 0x02;
-			else
-				goto fail;
+			dbus_message_iter_get_basic(&value, &io_qos.phy);
 		} else if (!strcasecmp(key, "SDU")) {
 			if (var != DBUS_TYPE_UINT16)
 				goto fail;
@@ -829,7 +805,7 @@ static int parse_select_properties(DBusMessageIter *props, struct iovec *caps,
 				goto fail;
 
 			dbus_message_iter_get_basic(&value, &io_qos.latency);
-		} else if (!strcasecmp(key, "Delay")) {
+		} else if (!strcasecmp(key, "PresentationDelay")) {
 			if (var != DBUS_TYPE_UINT32)
 				goto fail;
 
@@ -842,11 +818,60 @@ static int parse_select_properties(DBusMessageIter *props, struct iovec *caps,
 						&qos->ucast.target_latency);
 		}
 
-		dbus_message_iter_next(props);
+		dbus_message_iter_next(&array);
 	}
 
 	memcpy(&qos->ucast.io_qos, &io_qos, sizeof(io_qos));
-	qos->ucast.framing = framing;
+
+	return 0;
+
+fail:
+	DBG("Failed parsing %s", key);
+
+	return -EINVAL;
+}
+
+static int parse_select_properties(DBusMessageIter *props, struct iovec *caps,
+					struct iovec *metadata,
+					struct bt_bap_qos *qos)
+{
+	const char *key;
+
+	while (dbus_message_iter_get_arg_type(props) == DBUS_TYPE_DICT_ENTRY) {
+		DBusMessageIter value, entry;
+		int var;
+
+		dbus_message_iter_recurse(props, &entry);
+		dbus_message_iter_get_basic(&entry, &key);
+
+		dbus_message_iter_next(&entry);
+		dbus_message_iter_recurse(&entry, &value);
+
+		var = dbus_message_iter_get_arg_type(&value);
+
+		if (!strcasecmp(key, "Capabilities")) {
+			if (var != DBUS_TYPE_ARRAY)
+				goto fail;
+
+			if (parse_array(&value, caps))
+				goto fail;
+		} else if (!strcasecmp(key, "Metadata")) {
+			if (var != DBUS_TYPE_ARRAY)
+				goto fail;
+
+			if (parse_array(&value, metadata))
+				goto fail;
+		} else if (!strcasecmp(key, "QoS")) {
+			if (var != DBUS_TYPE_ARRAY)
+				goto fail;
+
+			if (parse_ucast_qos(&value, qos))
+				goto fail;
+		}
+
+		dbus_message_iter_next(props);
+	}
+
 	return 0;
 
 fail:
@@ -1549,7 +1574,7 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
 			if (var != DBUS_TYPE_BYTE)
 				return -EINVAL;
 			dbus_message_iter_get_basic(&value, &qos->phy);
-		} else if (strcasecmp(key, "RTN") == 0) {
+		} else if (strcasecmp(key, "Retransmissions") == 0) {
 			if (var != DBUS_TYPE_BYTE)
 				return -EINVAL;
 			dbus_message_iter_get_basic(&value, &qos->rtn);
diff --git a/profiles/audio/media.h b/profiles/audio/media.h
index 0eeb574..2b57987 100644
--- a/profiles/audio/media.h
+++ b/profiles/audio/media.h
@@ -22,6 +22,5 @@ const char *media_endpoint_get_uuid(struct media_endpoint *endpoint);
 uint8_t media_endpoint_get_codec(struct media_endpoint *endpoint);
 struct btd_adapter *media_endpoint_get_btd_adapter(
 					struct media_endpoint *endpoint);
-bool media_endpoint_is_broadcast(
-	struct media_endpoint *endpoint);
+bool media_endpoint_is_broadcast(struct media_endpoint *endpoint);
 int8_t media_player_get_device_volume(struct btd_device *device);