All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH BlueZ 5/5] media: Rework support of Vendor to use uint32_t as type
Date: Mon, 23 Jan 2023 15:56:49 -0800	[thread overview]
Message-ID: <20230123235649.3231488-5-luiz.dentz@gmail.com> (raw)
In-Reply-To: <20230123235649.3231488-1-luiz.dentz@gmail.com>

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

This reworks the handlings of Vendor property to use a single uint32_t.
---
 client/player.c        | 24 +++++++++++++++++-------
 profiles/audio/media.c | 37 +++++++++++++++++--------------------
 2 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/client/player.c b/client/player.c
index bab563eec592..65cac3b50376 100644
--- a/client/player.c
+++ b/client/player.c
@@ -1868,13 +1868,18 @@ static gboolean endpoint_get_capabilities(const GDBusPropertyTable *property,
 	return TRUE;
 }
 
+struct vendor {
+	uint16_t cid;
+	uint16_t vid;
+} __packed;
+
 static gboolean endpoint_get_vendor(const GDBusPropertyTable *property,
 					DBusMessageIter *iter, void *data)
 {
 	struct endpoint *ep = data;
+	struct vendor vendor = { ep->cid, ep->vid };
 
-	dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &ep->cid);
-	dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &ep->vid);
+	dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &vendor);
 
 	return TRUE;
 }
@@ -1891,7 +1896,7 @@ static const GDBusPropertyTable endpoint_properties[] = {
 	{ "UUID", "s", endpoint_get_uuid, NULL, NULL },
 	{ "Codec", "y", endpoint_get_codec, NULL, NULL },
 	{ "Capabilities", "ay", endpoint_get_capabilities, NULL, NULL },
-	{ "Vendor", "qq", endpoint_get_vendor, NULL, endpoint_vendor_exists },
+	{ "Vendor", "u", endpoint_get_vendor, NULL, endpoint_vendor_exists },
 	{ }
 };
 
@@ -1909,7 +1914,14 @@ static void register_endpoint_setup(DBusMessageIter *iter, void *user_data)
 
 	g_dbus_dict_append_entry(&dict, "Codec", DBUS_TYPE_BYTE, &ep->codec);
 
-	if (ep->caps->iov_len) {
+	if (ep->cid && ep->vid) {
+		struct vendor vendor = { ep->cid, ep->vid };
+
+		g_dbus_dict_append_entry(&dict, "Vendor", DBUS_TYPE_UINT32,
+						 &vendor);
+	}
+
+	if (ep->caps) {
 		g_dbus_dict_append_basic_array(&dict, DBUS_TYPE_STRING, &key,
 					DBUS_TYPE_BYTE, &ep->caps->iov_base,
 					ep->caps->iov_len);
@@ -2113,9 +2125,7 @@ static void cmd_register_endpoint(int argc, char *argv[])
 					g_list_length(local_endpoints));
 	local_endpoints = g_list_append(local_endpoints, ep);
 
-	if (g_strstr_len(argv[2], -1, ":")) {
-		bt_shell_printf("Found split\r\n");
-
+	if (strrchr(argv[2], ':')) {
 		list = g_strsplit(argv[2], ":", 2);
 
 		ep->codec = 0xff;
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 76a378e69401..889cd59b00f9 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -1379,6 +1379,11 @@ media_endpoint_create(struct media_adapter *adapter,
 	return endpoint;
 }
 
+struct vendor {
+	uint16_t cid;
+	uint16_t vid;
+} __packed;
+
 static int parse_properties(DBusMessageIter *props, const char **uuid,
 				gboolean *delay_reporting, uint8_t *codec,
 				uint16_t *cid, uint16_t *vid,
@@ -1388,6 +1393,7 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
 {
 	gboolean has_uuid = FALSE;
 	gboolean has_codec = FALSE;
+	struct vendor vendor;
 
 	while (dbus_message_iter_get_arg_type(props) == DBUS_TYPE_DICT_ENTRY) {
 		const char *key;
@@ -1412,14 +1418,11 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
 			dbus_message_iter_get_basic(&value, codec);
 			has_codec = TRUE;
 		} else if (strcasecmp(key, "Vendor") == 0) {
-			if (var != DBUS_TYPE_UINT16)
+			if (var != DBUS_TYPE_UINT32)
 				return -EINVAL;
-			dbus_message_iter_get_basic(&value, cid);
-			dbus_message_iter_next(&value);
-			var = dbus_message_iter_get_arg_type(&value);
-			if (var != DBUS_TYPE_UINT16)
-				return -EINVAL;
-			dbus_message_iter_get_basic(&value, vid);
+			dbus_message_iter_get_basic(&value, &vendor);
+			*cid = vendor.cid;
+			*vid = vendor.vid;
 		} else if (strcasecmp(key, "DelayReporting") == 0) {
 			if (var != DBUS_TYPE_BOOLEAN)
 				return -EINVAL;
@@ -2543,8 +2546,7 @@ static void app_register_endpoint(void *data, void *user_data)
 	const char *uuid;
 	gboolean delay_reporting = FALSE;
 	uint8_t codec;
-	uint16_t cid = 0;
-	uint16_t vid = 0;
+	struct vendor vendor;
 	struct bt_bap_pac_qos qos;
 	uint8_t *capabilities = NULL;
 	int size = 0;
@@ -2577,16 +2579,10 @@ static void app_register_endpoint(void *data, void *user_data)
 	dbus_message_iter_get_basic(&iter, &codec);
 
 	if (g_dbus_proxy_get_property(proxy, "Vendor", &iter)) {
-		if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT16)
+		if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
 			goto fail;
 
-		dbus_message_iter_get_basic(&iter, &cid);
-
-		dbus_message_iter_next(&iter);
-		if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT16)
-			goto fail;
-
-		dbus_message_iter_get_basic(&iter, &vid);
+		dbus_message_iter_get_basic(&iter, &vendor);
 	}
 
 	/* DelayReporting and Capabilities are considered optional */
@@ -2666,9 +2662,10 @@ static void app_register_endpoint(void *data, void *user_data)
 	}
 
 	endpoint = media_endpoint_create(app->adapter, app->sender, path, uuid,
-						delay_reporting, codec, cid,
-						vid, &qos, capabilities,
-						size, metadata, metadata_size,
+						delay_reporting, codec,
+						vendor.cid, vendor.vid, &qos,
+						capabilities, size,
+						metadata, metadata_size,
 						&app->err);
 	if (!endpoint) {
 		error("Unable to register endpoint %s:%s: %s", app->sender,
-- 
2.37.3


  parent reply	other threads:[~2023-01-23 23:57 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-23 23:56 [PATCH BlueZ 1/5] profiles: Add Support for Metadata, CID and VID Luiz Augusto von Dentz
2023-01-23 23:56 ` [PATCH BlueZ 2/5] client/player: Add support for Company ID, Vendor ID Luiz Augusto von Dentz
2023-01-23 23:56 ` [PATCH BlueZ 3/5] shared/util: Check arguments on util_memcpy Luiz Augusto von Dentz
2023-01-23 23:56 ` [PATCH BlueZ 4/5] media-api: Make Vendor a uint32_t Luiz Augusto von Dentz
2023-01-23 23:56 ` Luiz Augusto von Dentz [this message]
2023-01-24  2:54 ` [BlueZ,1/5] profiles: Add Support for Metadata, CID and VID bluez.test.bot
2023-02-01  1:10 ` [PATCH BlueZ 1/5] " patchwork-bot+bluetooth

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=20230123235649.3231488-5-luiz.dentz@gmail.com \
    --to=luiz.dentz@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.