From patchwork Mon Jan 23 23:56:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 13113191 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E0935C05027 for ; Mon, 23 Jan 2023 23:57:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232512AbjAWX5P (ORCPT ); Mon, 23 Jan 2023 18:57:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231702AbjAWX5O (ORCPT ); Mon, 23 Jan 2023 18:57:14 -0500 Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 154DE2CFD8 for ; Mon, 23 Jan 2023 15:56:52 -0800 (PST) Received: by mail-pl1-x62f.google.com with SMTP id k13so13161380plg.0 for ; Mon, 23 Jan 2023 15:56:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=PJNtVxq/ioUYJB2xV0JeU7c1714UJLue9o9iQTiRSUY=; b=C+3t69M6bD6xfRwjGd2JI6Erv47CBz4hFZXzAi7gzF4wBoB4DOnzwyzhJCmt19TqJM yTPg1q0H0dHUF/mE1J7nSUfjq086SbUYGYmBT5PxsO0X/RBtxbteCtotELTonfxoXnZ9 +MIQSnUPaEeEtVfbdBOqjNylmlCkX+iJONymssJxhwnFSEH9a4W5vVaejmehKlWQRKcu YaUK5KCCGc3Ex5jzY/A92Hjy2ca2mOYi1ziFcVmx7k277Z7DD5Sei9lubmLdRXQLpkMF 5+oxLnBhU3TImqsX5oQ08m0lKfcjI30e44NZd1RKDMDu+mDbwt/5xTldC83ZA6u2MMos EnZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=PJNtVxq/ioUYJB2xV0JeU7c1714UJLue9o9iQTiRSUY=; b=4zN20/lltx8LR94ncKGdM1qGurnDfwfQWYVGlXqrHv7tLr3mq9vK08K5SCLLXyD2Yu ky1HeJzrUuaAkM+P0HJ0p86+p0SN8LES/cjnuesYeGQvK8FVT7FTe1EKvm/YZdt7zMvA hxggeeAoq9fL+YxjR2fU1FZ6FLAYReXxTL6PVLFAp/DwjjArDlPXOmodMW9xIz5kY6Ky 5XU4Z2bNrDhVEwbHHhRh18Zgx3PHam1rdxcO70A2QfbyFFcYbsaxsJxK5Zhu1xX6NilT 2jMaEUTM3jm6GXH/bqygfJuma6Q+GbYgzxdDF3LSYaZQcmH5zwpaoIpB1zOiyPfEu0nw SXvA== X-Gm-Message-State: AFqh2ko3Oz+fTiNC4GTvu2HMe9zPcK8X2q2h3G8jUuaqVfbGCRLVKBDX G53unNgbpwiDCt0iViaWQvHN6zMefCE= X-Google-Smtp-Source: AMrXdXt5LhGosn/8W2bmNr1jS0DyNxxsmqT2vmOHWWjhaBovjwJRZRs2jXRh7PoGYsTTYb5Dm/6DOA== X-Received: by 2002:a17:902:7c15:b0:189:77c1:b5a7 with SMTP id x21-20020a1709027c1500b0018977c1b5a7mr25767302pll.41.1674518210913; Mon, 23 Jan 2023 15:56:50 -0800 (PST) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id w14-20020a170902d70e00b001960706141fsm268130ply.149.2023.01.23.15.56.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 15:56:50 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 1/5] profiles: Add Support for Metadata, CID and VID Date: Mon, 23 Jan 2023 15:56:45 -0800 Message-Id: <20230123235649.3231488-1-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: "Maheta, Abhay" 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; From patchwork Mon Jan 23 23:56:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 13113193 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56E14C54EAA for ; Mon, 23 Jan 2023 23:57:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231671AbjAWX5Q (ORCPT ); Mon, 23 Jan 2023 18:57:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35112 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229502AbjAWX5O (ORCPT ); Mon, 23 Jan 2023 18:57:14 -0500 Received: from mail-pj1-x1033.google.com (mail-pj1-x1033.google.com [IPv6:2607:f8b0:4864:20::1033]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F35A30190 for ; Mon, 23 Jan 2023 15:56:53 -0800 (PST) Received: by mail-pj1-x1033.google.com with SMTP id x2-20020a17090a46c200b002295ca9855aso16857772pjg.2 for ; Mon, 23 Jan 2023 15:56:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=5vdqUAl2gOIPgCHnq/4ur3vqxgMO5fNyrawOAWTo2Jw=; b=PbG3nAWHfTDA2hcIGHVsUDnmzUvM7bzFFvj/fwrNK20yM5TkOzbkYMN+L23Hmy0Kct FrxjPWZIWrq+UO1jadLtvWZo+HA6u+C0vUZj1WmRcr+EN2ktAOWk41bhr5ApY1gKn6Pr I0Yjt1AizDMHW+UeFc4F8+/qUP5XlSYtXT8ZgvfHBBbEe2b0w4+oQK0lyEWlpfy8UAoX BGT/2uVTxrGuTHLfsX+C85I5zJaVFOh7j+ts2rckYJsd+B+uk+OOr/DylcoSfFyNODei xAeLquSQprJWaghWU8AQFnqJJ6i/lXCU0pj+Twqbk3UD/r4PpykxlnSuPrbVMDibh267 NmbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5vdqUAl2gOIPgCHnq/4ur3vqxgMO5fNyrawOAWTo2Jw=; b=N8+Tw/P3vyU5/iemehSP8x2NWC7j9nOPgrGDdkiycuNJkEik0KI3zWUVRwRt2H2hTh KoBBMXlXGfV/g1pg9xeVz0Nw7/Ebn3cU2Fmqj4XsdGE0juDClb8zbyeZJdpaRB96YpSE 6ZPkU+mnUp05Yj7mCw+MH6RpecCayvxygwvzZd7BH1TNnb/CbRYNMLFe36wd1RWmg1xz qq87KzMJ6wtWEKrgPY/cnM2goBWNw3ILVTfcjv4C2U7Vclx/3l0zi8pLTRGMnU9T4sIZ 5AW+v54Z5k0FykjMeRLVy9IYN14jStHcAP8/8MqtP2gjiWjC+vSpbiv/HcPKMGKapgVl 9aaQ== X-Gm-Message-State: AFqh2kpkd37O8YtTfeYw8AgSi3Q+MJWavztLWm5KB5RuI7NO8MVhwthT vo8+292yan5q7i54Y1wa4rmQCdkYYyA= X-Google-Smtp-Source: AMrXdXsNPIoEf9XGZJLVTHR284qf6xLdXjTQ9XrKsj0JJkzlnkw1TTCLj7Ave72uXZyfHnSGN60xQQ== X-Received: by 2002:a17:902:e9cd:b0:194:6627:d7ab with SMTP id 13-20020a170902e9cd00b001946627d7abmr28011730plk.12.1674518212227; Mon, 23 Jan 2023 15:56:52 -0800 (PST) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id w14-20020a170902d70e00b001960706141fsm268130ply.149.2023.01.23.15.56.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 15:56:51 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 2/5] client/player: Add support for Company ID, Vendor ID Date: Mon, 23 Jan 2023 15:56:46 -0800 Message-Id: <20230123235649.3231488-2-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20230123235649.3231488-1-luiz.dentz@gmail.com> References: <20230123235649.3231488-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Abhay Maheta 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", "", cmd_show_endpoint, "Endpoint information", endpoint_generator }, - { "register", " [capabilities...]", + { "register", " [capabilities...]", cmd_register_endpoint, "Register Endpoint", uuid_generator }, From patchwork Mon Jan 23 23:56:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 13113192 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B324C54EED for ; Mon, 23 Jan 2023 23:57:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232564AbjAWX5R (ORCPT ); Mon, 23 Jan 2023 18:57:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232116AbjAWX5O (ORCPT ); Mon, 23 Jan 2023 18:57:14 -0500 Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBF7B30EA9 for ; Mon, 23 Jan 2023 15:56:54 -0800 (PST) Received: by mail-pl1-x629.google.com with SMTP id g23so13069155plq.12 for ; Mon, 23 Jan 2023 15:56:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=nyLRrRCeQMXGL6cSSpBhFpwFf82XrwNffex770n9JJs=; b=dz8pIxmdqS09e6VZt4z1Y9fqJwQefef78BGlyCa+pR0IwOuN2gHgxYpqhX9OUoH+bq yXgNPVTbQslf5MP1LzBNvdaOWcbETXzsmB+2/mOHl2ymFbgL0NmlYZbS8yxidGS8NxO2 fzv0zodiUAi8MWWJ23uUj0VIzoseRB0U6jrE/Tozcs8N4cTC/ijc608lNVT0VvkumMpH Bh8FwYNFOgjA+SVZ6shpsSJP7ANk8IsTXnz8M54gT6wTGEkO6VTUex6V1T2423/fU8A9 PwAtlQc/dXR5n5q35a5X0keROVjeRsic3ota5h6wod74gBecK6k0EDOmxEu4Ud/6jA86 RBJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nyLRrRCeQMXGL6cSSpBhFpwFf82XrwNffex770n9JJs=; b=VppqaSEOMFv6VwKQM+StG5wskXaG2v1IVDsEtA596sIYawdNdCmF4Y7PdJ4K3KwpyR aRqY0AiKtXdtZRypx8tCWHp5LxM2KXTn8oNt4ztUsx+P1TIkGbU5s6QtF8xi1yt07DHC aH49R6BwgNbiY1CsgsA0D87HxnltgNYfoLWwp3IHotZfvtTZrj9YKqWLhI/YyqepaQvL PW3YC8zVjKXhEBeKHCzMLDPK6FJKOt87OKPxs70rSTthcL7wzwRcw1SPtYCHAOexjO6w ZnFAv2g/Rg9ASx71e2V0B4hdNW03WJFlDHq7GzQGH7j8+DfnAJISp+D70uf0sRf/QxTb n/4w== X-Gm-Message-State: AFqh2kqae0xP+66TpRu6zfGz8tyEMoqBRoPqYYspuYmKjiSt8FyPD6Xh uUHKrpBDOzKL/Qs7wEFH4vu8QSz2ok8= X-Google-Smtp-Source: AMrXdXuMmeAJlQAFjQVOZJn5s+0FpzzxnfMi+h/ASlGUZxKKsazPKSQZBb+1Zk/oBXllt+o9FN3VIQ== X-Received: by 2002:a17:902:e54b:b0:194:7efa:702f with SMTP id n11-20020a170902e54b00b001947efa702fmr34862746plf.53.1674518213809; Mon, 23 Jan 2023 15:56:53 -0800 (PST) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id w14-20020a170902d70e00b001960706141fsm268130ply.149.2023.01.23.15.56.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 15:56:53 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 3/5] shared/util: Check arguments on util_memcpy Date: Mon, 23 Jan 2023 15:56:47 -0800 Message-Id: <20230123235649.3231488-3-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20230123235649.3231488-1-luiz.dentz@gmail.com> References: <20230123235649.3231488-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz 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); From patchwork Mon Jan 23 23:56:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 13113190 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 874B2C25B50 for ; Mon, 23 Jan 2023 23:57:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232240AbjAWX5P (ORCPT ); Mon, 23 Jan 2023 18:57:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229569AbjAWX5O (ORCPT ); Mon, 23 Jan 2023 18:57:14 -0500 Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39B4633451 for ; Mon, 23 Jan 2023 15:56:56 -0800 (PST) Received: by mail-pl1-x62b.google.com with SMTP id g23so13069198plq.12 for ; Mon, 23 Jan 2023 15:56:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=kyRzQcZPxdyeDqeK4B+byIMEyu9YD7hxZfGEHEzdfTM=; b=hQUcr6U4sSlvUOZlBg+MQiJJNqz8pgQaoVX/Nx9zHG66xQL+ytfHvS4t+NXVFv+yRV NLpQyEbd87oYqw89nu5TPq+AhOw99e/7qctyXqYCrGerAK/hBYC2Jv00GNEzOJFAjn2r kug5zbXseu2hLj2FcvGVACdmLSo+aEwtpWUb0hAB4dI2bca4+PJexDwUzaBHLWtcGLog G8MIVmKgJLkBIOIZ0iyvooWVlT84ffGPdSErCtAqugs6MHit6r6pGfBCUWsELXNYJAgR +Ec4YmxiiDK4+gaE36loMRWoHirlZqI6blImI+lNmCDSMBhOLDHVkMh1Vysb4NMyLDHJ uHYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kyRzQcZPxdyeDqeK4B+byIMEyu9YD7hxZfGEHEzdfTM=; b=HYhzmV5Mq8eF4ReoiRQhBXJ8EvXm7EXX6QJ0rCiofpZ7ds5qUndYJ/1NA4sqyH7ZCn xfFs4/6FXCuw0ouVHFO/F+I9/SbKMbZwgw7HEHc7OAMvbUAcypZ3rDduCj9doVN8CuWs QEj6kExyU6tMAe22ZH87eY08BY3+8zSFMR9iuKaKSWOdBM8JK9L3HgABiN5YK3OC6Pmq 6CLK8wAKrl9RHR3nQd+kSn/5fNVOtXFd/+y2r6Ds6UYRrMf37J7Kv95exRdgi6SxntCG 1Rvjzq0R50IT+nVSDAvg2CtUvQmjSdxk5sbabE30KTfthbr3J8WuvH0gSm5LlXpnBgpe yXQw== X-Gm-Message-State: AFqh2koSsLA0qGi6293Y5OmXVN013RzQuxtQag/9t15Que//9sKQ3lzV XTmDcMAZVjsWdcpF8rib9zFf8HIM2pM= X-Google-Smtp-Source: AMrXdXv2WJ0E5md+sx6xQYQUCD2+qD6ZQIO5qWNfbR3EklLW2X4dujofIRiZe1RuFc2wuwjcW3S8ag== X-Received: by 2002:a17:902:d58a:b0:192:dfdb:9ebe with SMTP id k10-20020a170902d58a00b00192dfdb9ebemr28626845plh.10.1674518215272; Mon, 23 Jan 2023 15:56:55 -0800 (PST) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id w14-20020a170902d70e00b001960706141fsm268130ply.149.2023.01.23.15.56.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 15:56:54 -0800 (PST) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 4/5] media-api: Make Vendor a uint32_t Date: Mon, 23 Jan 2023 15:56:48 -0800 Message-Id: <20230123235649.3231488-4-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20230123235649.3231488-1-luiz.dentz@gmail.com> References: <20230123235649.3231488-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz Using two uint16_t requires the use of a container which makes things a lot more complicated so this switch to use a single uint32_t. --- doc/media-api.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/media-api.txt b/doc/media-api.txt index 26527622cfe9..281f72c1e4ce 100644 --- a/doc/media-api.txt +++ b/doc/media-api.txt @@ -34,7 +34,7 @@ Methods void RegisterEndpoint(object endpoint, dict properties) match the profile specification which is indicated by the UUID. - uint16_t, uint16_t Vendor [Optional]: + uint32_t Vendor [Optional]: Vendor-specific Company ID, Codec ID tuple that the endpoint implements. @@ -649,7 +649,7 @@ Properties string UUID [readonly, optional]: The values should match the profile specification which is indicated by the UUID. - uint16_t, uint16_t Vendor [readonly, Optional]: + uint32_t Vendor [readonly, Optional]: Vendor-specific Company ID, Codec ID tuple that the endpoint implements. From patchwork Mon Jan 23 23:56:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 13113194 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E846C05027 for ; Mon, 23 Jan 2023 23:57:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232588AbjAWX5S (ORCPT ); Mon, 23 Jan 2023 18:57:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35124 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232119AbjAWX5O (ORCPT ); Mon, 23 Jan 2023 18:57:14 -0500 Received: from mail-pl1-x62a.google.com (mail-pl1-x62a.google.com [IPv6:2607:f8b0:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CEB343251D for ; Mon, 23 Jan 2023 15:56:57 -0800 (PST) Received: by mail-pl1-x62a.google.com with SMTP id a18so550203plm.2 for ; Mon, 23 Jan 2023 15:56:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=XZvXSJ4zmXkv5lVqObYR6fX8TtPkDBm6+BtCHY7i/Fk=; b=T87o6hCYXF2AGp9ZEFZKLwwhuv9HzvvTElaWvtV58EG6qwph3LkFeIyZmFYF/XS8UK Z76QRS/POmIjXKz/h1mrF+rd/yWGVRhIIQlXhtdrYBoRuOYbUP1H6v/0Uy/sNW6JjE7/ 94ouPzO/dpvdmZJ7Ok3jQSbZQfaShcsrtlR+LcQDxvj+tDkAzpyG9qphHI5sNjfiLF/d TUPTEf2H6oGjmPOzb/Q2PkdkVB4NLWAsaDSneMDwNHGamK/yZFDvvmHI58neHEvlU5hs sAURTCSw39BVTLrRqcVk5wy9VBX4GklSZG/oNEDLOMwXMEBxSOAw+qDWBlhfFGhj9hJp koHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XZvXSJ4zmXkv5lVqObYR6fX8TtPkDBm6+BtCHY7i/Fk=; b=eioRpz6AfKoA7UYJXb4T+sqCTa+d8r+FtOcZSGODsq2PKRY+EH4DNogpPRSLyUUHNY RtpXOkkBFYy7x9chyv4Ia4aHphar8PL66u4+3uqCknu1EBncTvsCKMMxN1FLy75hSSsc 0V29elE58JEdAh7u2ZlGfgDk0iD4eEh8tTTBfjtoSPfEOb97c6htXSsRXXySV4epI/EF u2P7uIPoDNZVr+BH2uzc7OLxyqEY5fYnFyXWNUQ/3y6r6OSyiwRC9csIXkkdk/MgV6dV /I+OYVYCWzByaWiQZPsyh3498PiFyyj21A+s5GuwVPGKv7CGx4vH2xDzwLaCORFdDkH7 QBcQ== X-Gm-Message-State: AFqh2kpBsSMdb5J+I49wCTCUv0RU6BoN32AJdvAOqgDU3DplQ3/BRX1x TQG165Kj5nKpBDEFFk8LRRrhcyjLFEs= X-Google-Smtp-Source: AMrXdXsq5kQYINAMZgzxVJXf01WSpHoRtUUG0LsjmzSBApK5Pzj6nNJXE4kQhNSxFB1Taa2lq+WAbg== X-Received: by 2002:a17:902:eb86:b0:194:7696:c024 with SMTP id q6-20020a170902eb8600b001947696c024mr27362556plg.5.1674518216772; Mon, 23 Jan 2023 15:56:56 -0800 (PST) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id w14-20020a170902d70e00b001960706141fsm268130ply.149.2023.01.23.15.56.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 15:56:56 -0800 (PST) From: Luiz Augusto von Dentz 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 Message-Id: <20230123235649.3231488-5-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20230123235649.3231488-1-luiz.dentz@gmail.com> References: <20230123235649.3231488-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz 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,