2023-01-23 23:57:15

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 1/5] profiles: Add Support for Metadata, CID and VID

From: "Maheta, Abhay" <[email protected]>

This adds support for Metadata, Company ID and Vendor Codec ID
---
profiles/audio/bap.c | 7 ++-
profiles/audio/media.c | 106 +++++++++++++++++++++++++++++++++----
profiles/audio/transport.c | 4 +-
3 files changed, 105 insertions(+), 12 deletions(-)

diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
index 8f24117681d2..8695260654e0 100644
--- a/profiles/audio/bap.c
+++ b/profiles/audio/bap.c
@@ -484,6 +484,9 @@ static DBusMessage *set_configuration(DBusConnection *conn, DBusMessage *msg,
bt_bap_stream_set_user_data(ep->stream, ep->path);
ep->msg = dbus_message_ref(msg);

+ if (ep->metadata && ep->metadata->iov_len)
+ bt_bap_stream_metadata(ep->stream, ep->metadata, NULL, NULL);
+
return NULL;
}

@@ -612,8 +615,10 @@ static void select_cb(struct bt_bap_pac *pac, int err, struct iovec *caps,

ep->caps = util_iov_dup(caps, 1);

- if (metadata && metadata->iov_base && metadata->iov_len)
+ if (metadata && metadata->iov_base && metadata->iov_len) {
ep->metadata = util_iov_dup(metadata, 1);
+ bt_bap_stream_metadata(ep->stream, ep->metadata, NULL, NULL);
+ }

ep->qos = *qos;

diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index fbb350889564..76a378e69401 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -91,10 +91,14 @@ struct media_endpoint {
char *path; /* Endpoint object path */
char *uuid; /* Endpoint property UUID */
uint8_t codec; /* Endpoint codec */
+ uint16_t cid; /* Endpoint company ID */
+ uint16_t vid; /* Endpoint vendor codec ID */
bool delay_reporting;/* Endpoint delay_reporting */
struct bt_bap_pac_qos qos; /* Endpoint qos */
uint8_t *capabilities; /* Endpoint property capabilities */
size_t size; /* Endpoint capabilities size */
+ uint8_t *metadata; /* Endpoint property metadata */
+ size_t metadata_size; /* Endpoint metadata size */
guint hs_watch;
guint ag_watch;
guint watch;
@@ -178,6 +182,7 @@ static void media_endpoint_destroy(struct media_endpoint *endpoint)

g_dbus_remove_watch(btd_get_dbus_connection(), endpoint->watch);
g_free(endpoint->capabilities);
+ g_free(endpoint->metadata);
g_free(endpoint->sender);
g_free(endpoint->path);
g_free(endpoint->uuid);
@@ -1108,6 +1113,7 @@ static bool endpoint_init_pac(struct media_endpoint *endpoint, uint8_t type,
struct btd_gatt_database *database;
struct gatt_db *db;
struct iovec data;
+ struct iovec *metadata = NULL;
char *name;

if (!(g_dbus_get_flags() & G_DBUS_FLAG_ENABLE_EXPERIMENTAL)) {
@@ -1128,23 +1134,36 @@ static bool endpoint_init_pac(struct media_endpoint *endpoint, uint8_t type,
return false;
}

+ if (!bap_print_cc(endpoint->metadata, endpoint->metadata_size,
+ bap_debug, NULL)) {
+ error("Unable to parse endpoint metadata");
+ return false;
+ }
+
db = btd_gatt_database_get_db(database);

data.iov_base = endpoint->capabilities;
data.iov_len = endpoint->size;

- /* TODO: Add support for metadata */
-
if (asprintf(&name, "%s:%s", endpoint->sender, endpoint->path) < 0) {
error("Could not allocate name for pac %s:%s",
endpoint->sender, endpoint->path);
return false;
}

- endpoint->pac = bt_bap_add_pac(db, name, type, endpoint->codec,
- &endpoint->qos, &data, NULL);
+ /* TODO: Add support for metadata */
+ if (endpoint->metadata_size) {
+ metadata = g_new0(struct iovec, 1);
+ metadata->iov_base = endpoint->metadata;
+ metadata->iov_len = endpoint->metadata_size;
+ }
+
+ endpoint->pac = bt_bap_add_vendor_pac(db, name, type, endpoint->codec,
+ endpoint->cid, endpoint->vid, &endpoint->qos,
+ &data, metadata);
if (!endpoint->pac) {
error("Unable to create PAC");
+ free(metadata);
return false;
}

@@ -1153,6 +1172,7 @@ static bool endpoint_init_pac(struct media_endpoint *endpoint, uint8_t type,
DBG("PAC %s registered", name);

free(name);
+ free(metadata);

return true;
}
@@ -1282,9 +1302,13 @@ media_endpoint_create(struct media_adapter *adapter,
const char *uuid,
gboolean delay_reporting,
uint8_t codec,
+ uint16_t cid,
+ uint16_t vid,
struct bt_bap_pac_qos *qos,
uint8_t *capabilities,
int size,
+ uint8_t *metadata,
+ int metadata_size,
int *err)
{
struct media_endpoint *endpoint;
@@ -1297,6 +1321,8 @@ media_endpoint_create(struct media_adapter *adapter,
endpoint->path = g_strdup(path);
endpoint->uuid = g_strdup(uuid);
endpoint->codec = codec;
+ endpoint->cid = cid;
+ endpoint->vid = vid;
endpoint->delay_reporting = delay_reporting;

if (qos)
@@ -1308,6 +1334,12 @@ media_endpoint_create(struct media_adapter *adapter,
endpoint->size = size;
}

+ if (metadata_size > 0) {
+ endpoint->metadata = g_new(uint8_t, metadata_size);
+ memcpy(endpoint->metadata, metadata, metadata_size);
+ endpoint->metadata_size = metadata_size;
+ }
+
endpoint->adapter = adapter;

for (i = 0; i < ARRAY_SIZE(init_table); i++) {
@@ -1349,8 +1381,10 @@ media_endpoint_create(struct media_adapter *adapter,

static int parse_properties(DBusMessageIter *props, const char **uuid,
gboolean *delay_reporting, uint8_t *codec,
+ uint16_t *cid, uint16_t *vid,
struct bt_bap_pac_qos *qos,
- uint8_t **capabilities, int *size)
+ uint8_t **capabilities, int *size,
+ uint8_t **metadata, int *metadata_size)
{
gboolean has_uuid = FALSE;
gboolean has_codec = FALSE;
@@ -1377,6 +1411,15 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
return -EINVAL;
dbus_message_iter_get_basic(&value, codec);
has_codec = TRUE;
+ } else if (strcasecmp(key, "Vendor") == 0) {
+ if (var != DBUS_TYPE_UINT16)
+ 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);
} else if (strcasecmp(key, "DelayReporting") == 0) {
if (var != DBUS_TYPE_BOOLEAN)
return -EINVAL;
@@ -1390,6 +1433,15 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
dbus_message_iter_recurse(&value, &array);
dbus_message_iter_get_fixed_array(&array, capabilities,
size);
+ } else if (strcasecmp(key, "Metadata") == 0) {
+ DBusMessageIter array;
+
+ if (var != DBUS_TYPE_ARRAY)
+ return -EINVAL;
+
+ dbus_message_iter_recurse(&value, &array);
+ dbus_message_iter_get_fixed_array(&array, metadata,
+ metadata_size);
} else if (strcasecmp(key, "Framing") == 0) {
if (var != DBUS_TYPE_BYTE)
return -EINVAL;
@@ -1434,9 +1486,13 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
const char *sender, *path, *uuid;
gboolean delay_reporting = FALSE;
uint8_t codec = 0;
+ uint16_t cid = 0;
+ uint16_t vid = 0;
struct bt_bap_pac_qos qos = {};
uint8_t *capabilities = NULL;
+ uint8_t *metadata = NULL;
int size = 0;
+ int metadata_size = 0;
int err;

sender = dbus_message_get_sender(msg);
@@ -1453,12 +1509,14 @@ static DBusMessage *register_endpoint(DBusConnection *conn, DBusMessage *msg,
if (dbus_message_iter_get_arg_type(&props) != DBUS_TYPE_DICT_ENTRY)
return btd_error_invalid_args(msg);

- if (parse_properties(&props, &uuid, &delay_reporting, &codec, &qos,
- &capabilities, &size) < 0)
+ if (parse_properties(&props, &uuid, &delay_reporting, &codec, &cid,
+ &vid, &qos, &capabilities, &size, &metadata,
+ &metadata_size) < 0)
return btd_error_invalid_args(msg);

if (media_endpoint_create(adapter, sender, path, uuid, delay_reporting,
- codec, &qos, capabilities, size,
+ codec, cid, vid, &qos, capabilities,
+ size, metadata, metadata_size,
&err) == NULL) {
if (err == -EPROTONOSUPPORT)
return btd_error_not_supported(msg);
@@ -2485,9 +2543,13 @@ 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 bt_bap_pac_qos qos;
uint8_t *capabilities = NULL;
int size = 0;
+ uint8_t *metadata = NULL;
+ int metadata_size = 0;
DBusMessageIter iter, array;
struct media_endpoint *endpoint;

@@ -2514,6 +2576,19 @@ 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)
+ 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);
+ }
+
/* DelayReporting and Capabilities are considered optional */
if (g_dbus_proxy_get_property(proxy, "DelayReporting", &iter)) {
if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_BOOLEAN)
@@ -2530,6 +2605,15 @@ static void app_register_endpoint(void *data, void *user_data)
dbus_message_iter_get_fixed_array(&array, &capabilities, &size);
}

+ if (g_dbus_proxy_get_property(proxy, "Metadata", &iter)) {
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY)
+ goto fail;
+
+ dbus_message_iter_recurse(&iter, &array);
+ dbus_message_iter_get_fixed_array(&array, &metadata,
+ &metadata_size);
+ }
+
/* Parse QoS preferences */
memset(&qos, 0, sizeof(qos));
if (g_dbus_proxy_get_property(proxy, "Framing", &iter)) {
@@ -2582,8 +2666,10 @@ static void app_register_endpoint(void *data, void *user_data)
}

endpoint = media_endpoint_create(app->adapter, app->sender, path, uuid,
- delay_reporting, codec, &qos,
- capabilities, size, &app->err);
+ delay_reporting, codec, cid,
+ vid, &qos, capabilities,
+ size, metadata, metadata_size,
+ &app->err);
if (!endpoint) {
error("Unable to register endpoint %s:%s: %s", app->sender,
path, strerror(-app->err));
diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c
index 41339da51e17..5e057e2a5c61 100644
--- a/profiles/audio/transport.c
+++ b/profiles/audio/transport.c
@@ -1185,6 +1185,7 @@ static guint resume_bap(struct media_transport *transport,
struct media_owner *owner)
{
struct bap_transport *bap = transport->data;
+ struct iovec *meta;
guint id;

if (!bap->stream)
@@ -1202,7 +1203,8 @@ static guint resume_bap(struct media_transport *transport,
return g_idle_add(resume_complete, transport);
}

- id = bt_bap_stream_enable(bap->stream, bap->linked, NULL,
+ meta = bt_bap_stream_get_metadata(bap->stream);
+ id = bt_bap_stream_enable(bap->stream, bap->linked, meta,
bap_enable_complete, owner);
if (!id)
return 0;
--
2.37.3



2023-01-23 23:57:18

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 3/5] shared/util: Check arguments on util_memcpy

From: Luiz Augusto von Dentz <[email protected]>

This avoids having to check for !src or !len before calling util_memcpy
since otherwise it can cause runtime errors.
---
src/shared/util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/shared/util.c b/src/shared/util.c
index 69abfba31978..89f1a2623cc8 100644
--- a/src/shared/util.c
+++ b/src/shared/util.c
@@ -221,7 +221,7 @@ int util_iov_memcmp(const struct iovec *iov1, const struct iovec *iov2)

void util_iov_memcpy(struct iovec *iov, void *src, size_t len)
{
- if (!iov)
+ if (!iov || !src || !len)
return;

iov->iov_base = realloc(iov->iov_base, len);
--
2.37.3


2023-01-23 23:57:17

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 2/5] client/player: Add support for Company ID, Vendor ID

From: Abhay Maheta <[email protected]>

This adds support for Company ID and Vendor Codec ID in BAP profile.
This also adds handling of Vendor Specific Coding format for BAP
Profile.

Now it allows to enter zero codec capabilities for vendor codec.
In order to register zero codec capabilities, 0 shall be
entered when prompted.
---
client/player.c | 61 +++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 54 insertions(+), 7 deletions(-)

diff --git a/client/player.c b/client/player.c
index eba233329276..bab563eec592 100644
--- a/client/player.c
+++ b/client/player.c
@@ -66,6 +66,8 @@ struct endpoint {
char *path;
char *uuid;
uint8_t codec;
+ uint16_t cid;
+ uint16_t vid;
struct iovec *caps;
bool auto_accept;
bool acquiring;
@@ -1815,7 +1817,8 @@ static void endpoint_free(void *data)
struct endpoint *ep = data;

if (ep->caps) {
- g_free(ep->caps->iov_base);
+ if (ep->caps->iov_base)
+ g_free(ep->caps->iov_base);
g_free(ep->caps);
}

@@ -1865,10 +1868,30 @@ static gboolean endpoint_get_capabilities(const GDBusPropertyTable *property,
return TRUE;
}

+static gboolean endpoint_get_vendor(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *data)
+{
+ struct endpoint *ep = data;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &ep->cid);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &ep->vid);
+
+ return TRUE;
+}
+
+static gboolean endpoint_vendor_exists(const GDBusPropertyTable *property,
+ void *data)
+{
+ struct endpoint *ep = data;
+
+ return ep->cid && ep->vid;
+}
+
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 },
{ }
};

@@ -1886,12 +1909,14 @@ static void register_endpoint_setup(DBusMessageIter *iter, void *user_data)

g_dbus_dict_append_entry(&dict, "Codec", DBUS_TYPE_BYTE, &ep->codec);

- g_dbus_dict_append_basic_array(&dict, DBUS_TYPE_STRING, &key,
+ if (ep->caps->iov_len) {
+ g_dbus_dict_append_basic_array(&dict, DBUS_TYPE_STRING, &key,
DBUS_TYPE_BYTE, &ep->caps->iov_base,
ep->caps->iov_len);

- bt_shell_printf("Capabilities:\n");
- bt_shell_hexdump(ep->caps->iov_base, ep->caps->iov_len);
+ bt_shell_printf("Capabilities:\n");
+ bt_shell_hexdump(ep->caps->iov_base, ep->caps->iov_len);
+ }

dbus_message_iter_close_container(iter, &dict);
}
@@ -2014,13 +2039,21 @@ static void endpoint_set_capabilities(const char *input, void *user_data)
{
struct endpoint *ep = user_data;

- if (ep->caps)
+ if (ep->caps && ep->caps->iov_base) {
g_free(ep->caps->iov_base);
- else
+ ep->caps = g_new0(struct iovec, 1);
+ } else
ep->caps = g_new0(struct iovec, 1);

ep->caps->iov_base = str2bytearray((char *) input, &ep->caps->iov_len);

+ if (ep->caps->iov_len == 0x01 &&
+ (*(uint8_t *)(ep->caps->iov_base)) == 0x00) {
+ g_free(ep->caps->iov_base);
+ ep->caps->iov_base = NULL;
+ ep->caps->iov_len = 0x00;
+ }
+
bt_shell_prompt_input(ep->path, "Auto Accept (yes/no):",
endpoint_auto_accept, ep);
}
@@ -2069,14 +2102,28 @@ static void cmd_register_endpoint(int argc, char *argv[])
{
struct endpoint *ep;
char *endptr = NULL;
+ char **list;

ep = g_new0(struct endpoint, 1);
ep->uuid = g_strdup(argv[1]);
ep->codec = strtol(argv[2], &endptr, 0);
+ ep->cid = 0x0000;
+ ep->vid = 0x0000;
ep->path = g_strdup_printf("%s/ep%u", BLUEZ_MEDIA_ENDPOINT_PATH,
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");
+
+ list = g_strsplit(argv[2], ":", 2);
+
+ ep->codec = 0xff;
+ ep->vid = strtol(list[0], &endptr, 0);
+ endptr = NULL;
+ ep->cid = strtol(list[1], &endptr, 0);
+ }
+
if (argc > 3)
endpoint_set_capabilities(argv[3], ep);
else {
@@ -2638,7 +2685,7 @@ static const struct bt_shell_menu endpoint_menu = {
{ "show", "<endpoint>", cmd_show_endpoint,
"Endpoint information",
endpoint_generator },
- { "register", "<UUID> <codec> [capabilities...]",
+ { "register", "<UUID> <codec[:company]> [capabilities...]",
cmd_register_endpoint,
"Register Endpoint",
uuid_generator },
--
2.37.3


2023-01-23 23:57:19

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 5/5] media: Rework support of Vendor to use uint32_t as type

From: Luiz Augusto von Dentz <[email protected]>

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


2023-01-24 02:54:41

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,1/5] profiles: Add Support for Metadata, CID and VID

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=714926

---Test result---

Test Summary:
CheckPatch PASS 2.36 seconds
GitLint PASS 1.39 seconds
BuildEll PASS 28.94 seconds
BluezMake PASS 852.13 seconds
MakeCheck PASS 11.24 seconds
MakeDistcheck PASS 147.20 seconds
CheckValgrind PASS 243.48 seconds
CheckSmatch PASS 325.93 seconds
bluezmakeextell PASS 97.34 seconds
IncrementalBuild PASS 3509.77 seconds
ScanBuild WARNING 987.58 seconds

Details
##############################
Test: ScanBuild - WARNING
Desc: Run Scan Build
Output:
profiles/audio/media.c:2664:13: warning: 7th function call argument is an uninitialized value
endpoint = media_endpoint_create(app->adapter, app->sender, path, uuid,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.



---
Regards,
Linux Bluetooth

2023-02-01 01:10:23

by patchwork-bot+bluetooth

[permalink] [raw]
Subject: Re: [PATCH BlueZ 1/5] profiles: Add Support for Metadata, CID and VID

Hello:

This series was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <[email protected]>:

On Mon, 23 Jan 2023 15:56:45 -0800 you wrote:
> From: "Maheta, Abhay" <[email protected]>
>
> This adds support for Metadata, Company ID and Vendor Codec ID
> ---
> profiles/audio/bap.c | 7 ++-
> profiles/audio/media.c | 106 +++++++++++++++++++++++++++++++++----
> profiles/audio/transport.c | 4 +-
> 3 files changed, 105 insertions(+), 12 deletions(-)

Here is the summary with links:
- [BlueZ,1/5] profiles: Add Support for Metadata, CID and VID
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=17bcd2a37629
- [BlueZ,2/5] client/player: Add support for Company ID, Vendor ID
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=33d99e12c37f
- [BlueZ,3/5] shared/util: Check arguments on util_memcpy
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=be5c49385e4d
- [BlueZ,4/5] media-api: Make Vendor a uint32_t
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=d611a40ffc7b
- [BlueZ,5/5] media: Rework support of Vendor to use uint32_t as type
(no matching commit)

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html