From patchwork Fri Apr 28 18:46:32 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: 678473 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 150AFC77B61 for ; Fri, 28 Apr 2023 18:46:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346390AbjD1Squ (ORCPT ); Fri, 28 Apr 2023 14:46:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60428 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232045AbjD1Sqo (ORCPT ); Fri, 28 Apr 2023 14:46:44 -0400 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 BEA8A2128 for ; Fri, 28 Apr 2023 11:46:43 -0700 (PDT) Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1a516fb6523so2862455ad.3 for ; Fri, 28 Apr 2023 11:46:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707602; x=1685299602; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=R5PZrWIw9wJtuIkYP9O2VU+XSk2bbMScan7h1oDUe4c=; b=HvHUhHfBB4xTFA1HwP2QMYPm9IT6neWuUFtbtsU0BSERKoBVqQLPmSRbXrHkAHTdeu WgdeTFKKInKn8BanBiTcqH5pisG+iRHSfuC6wNOHZZ42cCbgbko6RyzviPmuPi/6MgqY bJvg6/tyaSF9ca1ayGRLWBBXH5c7yIVjQ+Mf+p3/C4MWm8AEMchvQRmdkKl7tXH9qeeY TXh1EJfNRiAPsrAvl+nuPyCVr8iCOl6SntBWwEJYeMxwMi+cueUASZZ6qrZ23TcaxT+A 1Lgn7iKUlev+6DxRptsHvB/tjYUeomS4iob4tw/Q0NLIiqg3CmTh7KymiytbRDDr4sRX xniw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707602; x=1685299602; 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=R5PZrWIw9wJtuIkYP9O2VU+XSk2bbMScan7h1oDUe4c=; b=HnTBMNPCwPvu+QlvfNdghMWMgSFEkm8+9gMOkzX5L1uac4wEyI4a9awFCABERDn5wg gdUrGauAR/fmySH2v+Dks678CCk4/dRL1RBP6VYvLybdx1BPdkakeYGqUySs7T/47F/U o1MdrXL3F5BH8f+Wo1rM9UMTZFQI7A7syHvszCP3VnsjcQnPIsEne3fkTXZFfk5LUKHQ V4Qj7YOW4yIMDzPOC+hKeByRpdkUal3oHBWE/Fg3eYJr21ZGpiuMnW4KFGvzTu9g2F3N KManL8qVOkcogT+pLlXkIWN/XYg4hys5yJdKL/szFFXU36HdhiVqNIMp8linoDr4pu16 ZF9w== X-Gm-Message-State: AC+VfDySd/6NaaEdC1M/5HxxwTy/4AssthEE5+ON7d5OvHzQVEfrqaz3 lAoqY4ZOArQ/As+PFOf5GGoQnO1hM4Y= X-Google-Smtp-Source: ACHHUZ4xKeAsQT6d521E3mWeUMBoUHSYgZ9EM4PV0Hxg8Ij2zO9YXJiVvW5tOdAzUhKImdRHisQKhQ== X-Received: by 2002:a17:902:f552:b0:1a1:a06c:4892 with SMTP id h18-20020a170902f55200b001a1a06c4892mr7461662plf.13.1682707602280; Fri, 28 Apr 2023 11:46:42 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:41 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 1/9] media: Fix not storing Preferred Delay properly Date: Fri, 28 Apr 2023 11:46:32 -0700 Message-Id: <20230428184640.849066-1-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz Preferred Delay properties were being stored as qos->pd_* instead of qos->ppd_*. --- profiles/audio/media.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profiles/audio/media.c b/profiles/audio/media.c index 52c4bd80a94c..6ce668e31303 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c @@ -1483,11 +1483,11 @@ static int parse_properties(DBusMessageIter *props, const char **uuid, } else if (strcasecmp(key, "PreferredMinimumDelay") == 0) { if (var != DBUS_TYPE_UINT16) return -EINVAL; - dbus_message_iter_get_basic(&value, &qos->pd_min); + dbus_message_iter_get_basic(&value, &qos->ppd_min); } else if (strcasecmp(key, "PreferredMaximumDelay") == 0) { if (var != DBUS_TYPE_UINT16) return -EINVAL; - dbus_message_iter_get_basic(&value, &qos->pd_max); + dbus_message_iter_get_basic(&value, &qos->ppd_max); } dbus_message_iter_next(props); From patchwork Fri Apr 28 18:46:33 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: 678472 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 9B15AC77B7E for ; Fri, 28 Apr 2023 18:46:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346487AbjD1Sqw (ORCPT ); Fri, 28 Apr 2023 14:46:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346075AbjD1Squ (ORCPT ); Fri, 28 Apr 2023 14:46:50 -0400 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 8AE942128 for ; Fri, 28 Apr 2023 11:46:45 -0700 (PDT) Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1a686260adcso3239395ad.0 for ; Fri, 28 Apr 2023 11:46:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707604; x=1685299604; 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=2TxEgwLhiQ41y0of/BgNY+ugH8sfqwBu6KV8WR5vgIE=; b=KZKya94pUZBD0K+tRAu0hsjsrWOsfSyJaYHEmzTsUGXJc+geKRbuCu0hv6vSu2rlCd LH3bLNiT8sjx52Ew4bphnmfMXBiTA90NFd6VUzDTB86Bp0L4/0MgJIG14OjPPy3Tcv6g g8wZKLeBqY6dCs5RXle8ac07lBFHJk8vKfgdIlkkn3BJoJ4oEbd8G8ekqsT966l3uiOn 70K+gAFr7Zo4VgujLDScj46u6IaCHaKo76v/hlJJwB2L+QrzTeqALup/aOFZCUAwVSQ0 /eY1TIY4DjSxnPTyFGZumdEKdrElt2WcIA3Ast0mOpK0x3vlV4TDJ2azdlguhC+/Ia+s q05w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707604; x=1685299604; 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=2TxEgwLhiQ41y0of/BgNY+ugH8sfqwBu6KV8WR5vgIE=; b=TCj9x8C4YjBO2kqznGpikq6wAH29wJLZ5/5qoyoiBnQbTj0++SAr2so/fJdue4BvAT Ncd7wfS+zZXKWjEDJumnPtYvztWu0uPrl30FAOl5QAckRqpilvQbWWtZyqnwmonLcuuy P2xw6GZx63VMWj+sPJMexAy9sspv9O/mWi6ATpnD7jEnL/tDmoHo5p9xEJuzzPhkS3ng sKnUZYvAdJofI2XwgoIbH/knga79UQXfFXPROoxO7kuz3V4WySnSOy5gl0HPW2Qvn41n dOHAymexFvLsRq0X08FjhrZVCixsGltpqdcWy/LT29Bbs7w0AKMoyIUZOUc2dOOnvgiM K7Eg== X-Gm-Message-State: AC+VfDxVj3NLqKZ18xJ1UBNqJa1DCALjTxoMJhgww3cxpUj+O+/yD6/J dFIiEIih53YHM2B0cLUzyarx1NVzEv0= X-Google-Smtp-Source: ACHHUZ4F4TFtdZoTWMeLmlnFgTXdeAxxIlJ6f2T/VtyLU2HBB9Kw1q6ChT3Qkl5VeiBbK8zEvsXPrw== X-Received: by 2002:a17:902:e748:b0:1a9:b637:4332 with SMTP id p8-20020a170902e74800b001a9b6374332mr7075331plf.69.1682707604104; Fri, 28 Apr 2023 11:46:44 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:42 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 2/9] shared/bap: Fix crash detaching streams Date: Fri, 28 Apr 2023 11:46:33 -0700 Message-Id: <20230428184640.849066-2-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 If a stream is being detached but bt_bap reference is already 0 don't attempt to detach the stream as they would be freed anyway: Invalid read of size 8 at 0x19A360: bap_free (bap.c:2576) by 0x19A360: bt_bap_unref (bap.c:2735) by 0x19A360: bt_bap_unref (bap.c:2727) by 0x160E9A: test_teardown (test-bap.c:412) by 0x1A8BCA: teardown_callback (tester.c:434) Address 0x55e05e0 is 16 bytes inside a block of size 160 free'd at 0x48480E4: free (vg_replace_malloc.c:872) by 0x1AD5F6: queue_foreach (queue.c:207) by 0x19A1C5: bt_bap_detach (bap.c:3879) by 0x19A1C5: bt_bap_detach (bap.c:3855) by 0x19A33F: bap_free (bap.c:2574) --- src/shared/bap.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/shared/bap.c b/src/shared/bap.c index 5a12a64d292b..bc6177a5ba90 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -1168,6 +1168,14 @@ static void bap_stream_set_io(void *data, void *user_data) } } +static struct bt_bap *bt_bap_ref_safe(struct bt_bap *bap) +{ + if (!bap || !bap->ref_count) + return NULL; + + return bt_bap_ref(bap); +} + static void bap_stream_state_changed(struct bt_bap_stream *stream) { struct bt_bap *bap = stream->bap; @@ -1178,7 +1186,14 @@ static void bap_stream_state_changed(struct bt_bap_stream *stream) bt_bap_stream_statestr(stream->ep->old_state), bt_bap_stream_statestr(stream->ep->state)); - bt_bap_ref(bap); + /* Check if ref_count is already 0 which means detaching is in + * progress. + */ + bap = bt_bap_ref_safe(bap); + if (!bap) { + bap_stream_detach(stream); + return; + } /* Pre notification updates */ switch (stream->ep->state) { @@ -2730,14 +2745,6 @@ struct bt_bap *bt_bap_ref(struct bt_bap *bap) return bap; } -static struct bt_bap *bt_bap_ref_safe(struct bt_bap *bap) -{ - if (!bap || !bap->ref_count) - return NULL; - - return bt_bap_ref(bap); -} - void bt_bap_unref(struct bt_bap *bap) { if (!bap) From patchwork Fri Apr 28 18:46:34 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: 677735 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 EDEFAC77B60 for ; Fri, 28 Apr 2023 18:46:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346446AbjD1Sqv (ORCPT ); Fri, 28 Apr 2023 14:46:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346036AbjD1Squ (ORCPT ); Fri, 28 Apr 2023 14:46:50 -0400 Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D4E3268D for ; Fri, 28 Apr 2023 11:46:47 -0700 (PDT) Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-63b5c4c769aso395832b3a.3 for ; Fri, 28 Apr 2023 11:46:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707606; x=1685299606; 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=E/6BjiB3CztTfLUdP27sBZNVOKuIvJqXf2EZ0PwMXGE=; b=nf54Jp9isPKtHSFJCQs2Bt1sklZhnhDM+kfr3Dikc2BsnL0ctCkYq475ANBhY3Ep4b wOU/+/4gcc5X9KaS0Oeoye9hl3idZv/p+4IQK+NwXbd8DhA8T6bkZzBsxeo+F6IlhtZH Z7kSkxCj56cpVw0K28nZ9WLghMtnriGloDSl94iPonWcEtiA+kEQzkQlBsbRX4aoxgQt PSqTp1scZfWxubDQFIvm51RDPkunD6oQcW9SincrlT0LQZ5ziHyB7/prFZ4m8Vz3TZ0y eU+Wtg0WnPFSe6F8b+yPV5v5g8J6nmaPsCNcCypFi2Q/cbQh5OfsWgeiIQmSIIj1145v R06w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707606; x=1685299606; 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=E/6BjiB3CztTfLUdP27sBZNVOKuIvJqXf2EZ0PwMXGE=; b=Wyt0rS4Fk/Bdc6qZAhzsQDmp90e/s/6ScZ4pvatIPH0fCYt+Sa5xL+CVIRBNASi9Wv wn07BCM29wUSK1pZemr9vnM+PaWbuVgMQbTK/iCk3/pzGoEw9AOKZhYGEzGtOM4/7rUb U+/ys+t5oD2SaSSJWYdX/N5cp7tfTqhWa+jPMJ2yWxcQd1LcmE1oocynUqbRmcNIN729 XU6gKWFFfOqidCtxZQMPUBeErLXExC2D30PLr3o1FrZpXgM52HLxoPh7hK5PfGLVAmbD RChBZCWSZV4QLwcd7XlnOjlf9r6Qyi0KT5Rpt3j7cJelSkKmO3mdPFQhAJ4kHSigaBtc 1wfg== X-Gm-Message-State: AC+VfDysFVVHtSoziQjcnbIvKtr/VfPS7BSiOc6MUXPUkXaXdI8oDIBD 65esmofb5ZlxIuyNqAovIuamQpaecfY= X-Google-Smtp-Source: ACHHUZ62k9Dg25FtLalPM7VJfisiTXCefHa5L166CnLky774iv53WDwkY4Vp2W7+69vw0HqhVF2r0g== X-Received: by 2002:a17:902:ec92:b0:1a9:b8c3:c2c2 with SMTP id x18-20020a170902ec9200b001a9b8c3c2c2mr7133114plg.37.1682707605959; Fri, 28 Apr 2023 11:46:45 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:44 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 3/9] share/bap: Fix not removing timeout on bap_free Date: Fri, 28 Apr 2023 11:46:34 -0700 Message-Id: <20230428184640.849066-3-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 fixes not removing the process_id timeout when freeing the session which can cause the following crash: Invalid read of size 8 at 0x18EB39: bap_debug (bap.c:553) by 0x1913A8: bap_process_queue (bap.c:3542) by 0x1A8630: timeout_callback (timeout-glib.c:25) Address 0x55e0650 is 128 bytes inside a block of size 160 free'd at 0x48480E4: free (vg_replace_malloc.c:872) --- src/shared/bap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shared/bap.c b/src/shared/bap.c index bc6177a5ba90..6131c312865a 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -2600,6 +2600,8 @@ static void bap_free(void *data) { struct bt_bap *bap = data; + timeout_remove(bap->process_id); + bt_bap_detach(bap); bap_db_free(bap->rdb); From patchwork Fri Apr 28 18:46:35 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: 677734 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 CB4A8C77B61 for ; Fri, 28 Apr 2023 18:46:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346506AbjD1Sqx (ORCPT ); Fri, 28 Apr 2023 14:46:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60446 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346101AbjD1Squ (ORCPT ); Fri, 28 Apr 2023 14:46:50 -0400 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 BEA2A270A for ; Fri, 28 Apr 2023 11:46:48 -0700 (PDT) Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-1a516fb6523so2863595ad.3 for ; Fri, 28 Apr 2023 11:46:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707607; x=1685299607; 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=hh7rTdclx+rMZsADTYgRxxv+iG2kixOgWMrPKtsLTdw=; b=dBk6cBnFHSfDHX5mSzbRQN8CcIaheooK6tCi4Fyer7OZaTZcR54GbPuPx2ia4Gun2u zhSpVnfX9hS7R3lJH+UmptUDfY0gdu2ent63fCAuRWuPv17CzwJeQft0RpyJwdP4lHgj BFrJyHsQn+blOcklCsjPOcdQSeQf4jJDw0PLTHLUpV1srO5C1hUYNQ6aaT9RVFUzz+me vXIszf8zCH5ePsiKhYzL+2t9TXj+7rTrZX4ZLEU0XvKHXpeJ491aCwliDqpe3Ry/4gL7 8pU0qYujrjHDNLKFdvXL4/WPyg19Qa9n6sQDLOxDNB9bPLVT9eBLdKDExXItugJ9Q5Wh vecQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707607; x=1685299607; 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=hh7rTdclx+rMZsADTYgRxxv+iG2kixOgWMrPKtsLTdw=; b=A94VrNTwIslSKd2Dz8JaTHvWOZqiKPr9dN7dcC2zARn//LDSprGK6SLnBtZ0ZuDNoh T7S3Rqiuc3e/T+J2OGOa156gLE9oh29NL6GOAe1dKdNH87c188SkB2Ms8aCp7mjoo75W dbMBZa18w2/64mk216wamxggNcUvt6yMM2CLG9i8nQfPy9PI4e+LhzwHcw8C/AKEaxiq t0kmr8TydV7Ri6FNlOC0Pt9HPmLJDUqtPYHD7wjuGx9NZq2eHBjdiRcQdx7xutBGrw66 iM5zur9TPDZOtb8qcn7Od5/gQWWAvv0o+NKwNZaDazi0Y87At3YdgKvYrbCwPTlUJrk9 gefg== X-Gm-Message-State: AC+VfDzpvEZ+i9knCWImavOPrw1bgRrhtjaTf4swP74hr8RvtekJlwcW aH9Z+N21qWX4IbqcImPUXq+n3TOXMbg= X-Google-Smtp-Source: ACHHUZ5L4a7felYjC4zCWJ9fgieMtqwYggPmoIOyxzVGdxduNycLP9Hc6oxOEiKmlcOkgXzvrUI7Ww== X-Received: by 2002:a17:903:1250:b0:1a9:8907:ae4e with SMTP id u16-20020a170903125000b001a98907ae4emr6907857plh.9.1682707607638; Fri, 28 Apr 2023 11:46:47 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:46 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 4/9] shared/tester: Add support for NULL PDUs Date: Fri, 28 Apr 2023 11:46:35 -0700 Message-Id: <20230428184640.849066-4-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 adds support for NULL PDUs which can be used to skip a round of TX/RX. --- src/shared/tester.c | 6 +++++- src/shared/tester.h | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/shared/tester.c b/src/shared/tester.c index 1feaba48335c..34f807556144 100644 --- a/src/shared/tester.c +++ b/src/shared/tester.c @@ -914,8 +914,12 @@ static bool test_io_send(struct io *io, void *user_data) g_assert_cmpint(len, ==, iov->iov_len); - if (!test->iovcnt && test->io_complete_func) + if (!test->iovcnt && test->io_complete_func) { test->io_complete_func(test->test_data); + } else if (test->iovcnt && !test->iov->iov_base) { + test_get_iov(test); + return test_io_send(io, user_data); + } return false; } diff --git a/src/shared/tester.h b/src/shared/tester.h index 49610185a444..16f41022db2b 100644 --- a/src/shared/tester.h +++ b/src/shared/tester.h @@ -21,6 +21,8 @@ .iov_len = sizeof(data(args)), \ } +#define IOV_NULL {} + void tester_init(int *argc, char ***argv); int tester_run(void); From patchwork Fri Apr 28 18:46:36 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: 678471 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 02900C7EE21 for ; Fri, 28 Apr 2023 18:46:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346101AbjD1Sqz (ORCPT ); Fri, 28 Apr 2023 14:46:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60460 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346404AbjD1Sqv (ORCPT ); Fri, 28 Apr 2023 14:46:51 -0400 Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A6872268D for ; Fri, 28 Apr 2023 11:46:50 -0700 (PDT) Received: by mail-pg1-x536.google.com with SMTP id 41be03b00d2f7-517ab9a4a13so129877a12.1 for ; Fri, 28 Apr 2023 11:46:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707609; x=1685299609; 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=6pK5TjJ5FkDFV3GQCfWI9bCv3wKiC+Ep60HITp76X6o=; b=d4e4kmcFyhtYDZMNIXfC3Y9b8Lak/AU0NcmpqY3hqQuQ1n2eSFxV0CtJIvJlQ9AAje JpyaBoH/kTBv+UAE8AYMXQJJbDqEe53/gejXXowwdSvb55+r36NTr+OTutaUqffpGeaI fztc95YW1ldEVNtVElAFYuRohxNqazXuGBe/hIAdAr+tt6TklIG/uIHl5KY98+bdJ26M oZvjQ2cSgLhWRx0S/N2gCZfIx4eLmPGja+UFkgHxXMmNUQzAq9qTRdnyH7gec+iPEbxi 2NG0M5vQ4Uu/YrVvB4wUQWCiJxnIpner9RDXONiaVyAEP7yHSV627d+WxOURAYY1nS5A bPGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707609; x=1685299609; 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=6pK5TjJ5FkDFV3GQCfWI9bCv3wKiC+Ep60HITp76X6o=; b=Ux4eUdzgm0I7YTs0KA0BHsHd0iM1pJ9sUG9SmUsp68sXH2BU6NVsdHZN1Gv6V02qW9 qpMJZa1smnljFMeoO3kLBN9UJq2eZuG+S8iqU4DcPTEzd4qSKx+fkjlUUXR3YDyL1i3i 1+bE7qFXtUrelQaKIWqkHuQrQKbWL1nBu+AEtICcKnm2V9vtbF22DoJdT/y/sR5e3TJF DD12pCSluLTh2yZEQBwDylQVb4CwfKP2dCF62kUzwk3YfqMd7l86uwvSkb9UWP7TTO8V R2ldx6oUHaVlqw13K2SJcff9g0txS+pK2Lot+XFsbu+nKU6u4WG1jpyGytpt+4u2jqhY dNBA== X-Gm-Message-State: AC+VfDy6iqeqVN0l+4KOJv4+LLPpkS3T8E4l76MD7hupoLxORe2yqh+3 vzndyx12N5HXhhoNvuNYAsoEV3ei5vU= X-Google-Smtp-Source: ACHHUZ4EFGRzCoy9HIdmF3SMeMQD0MPt+BAMEdUNatvkalFektmlh9Jl6bFgGrs/FhShwRnRDuMLWA== X-Received: by 2002:a17:903:230e:b0:1a9:7424:7758 with SMTP id d14-20020a170903230e00b001a974247758mr7210494plh.0.1682707609361; Fri, 28 Apr 2023 11:46:49 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:48 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 5/9] shared/bap: Fix typo Date: Fri, 28 Apr 2023 11:46:36 -0700 Message-Id: <20230428184640.849066-5-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 Fix typo s/BT_BAP_CONFIG_LATENCY_BALACED/BT_BAP_CONFIG_LATENCY_BALANCED --- src/shared/bap.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/bap.h b/src/shared/bap.h index 0d419aa74982..e9f769d0ef3a 100644 --- a/src/shared/bap.h +++ b/src/shared/bap.h @@ -26,7 +26,7 @@ #define BT_BAP_STREAM_STATE_RELEASING 0x06 #define BT_BAP_CONFIG_LATENCY_LOW 0x01 -#define BT_BAP_CONFIG_LATENCY_BALACED 0x02 +#define BT_BAP_CONFIG_LATENCY_BALANCED 0x02 #define BT_BAP_CONFIG_LATENCY_HIGH 0x03 #define BT_BAP_CONFIG_PHY_1M 0x01 From patchwork Fri Apr 28 18:46:37 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: 677733 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 50DB2C77B61 for ; Fri, 28 Apr 2023 18:46:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346508AbjD1Sq4 (ORCPT ); Fri, 28 Apr 2023 14:46:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346075AbjD1Sqx (ORCPT ); Fri, 28 Apr 2023 14:46:53 -0400 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 51D562D51 for ; Fri, 28 Apr 2023 11:46:52 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1a92513abebso2901365ad.2 for ; Fri, 28 Apr 2023 11:46:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707611; x=1685299611; 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=fDu9ngCUhq7egRGnT1zXnnBvaz72CpY739h6yjYjBd8=; b=ZrRiCwRv9zdoj4XsSp/YN2RL5PwejGcZP3roehm2lJeBI1ZjJjsvQ0Iq7pFFJhhsQT 7Lcys2brORlb4tovzfeXfioWqOme2XswjdlydZC9JKZbdq/NZh0QUQ1gN7kU9tvCevue hSgoSPMKvj3B8rZBNh14816pnU90mm/+qn5+XkTH/qw8s8Hq12VlydhuVojxBHcRWUp2 E7aShf7KW0yOjQKricUH0GsjFry3e72hkqWR2WvkO2ddW03iy41U6Wj0VFgR0GvNjVeX M8lSP/089Mu5yVoN/eAGHUiQnbcIe9aXsBomY6+jn7Za041R57EgjNyB/jvVqUA15K+U gpiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707611; x=1685299611; 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=fDu9ngCUhq7egRGnT1zXnnBvaz72CpY739h6yjYjBd8=; b=JFMiz9su5nlASs3NlmOTBZfO+DBZMxajwyBbOAMFqlcFrGyRT8oqDmwM8nO5qLB3al 0/IzNcPEDcVNQnC6zCdKNWaych2z3mlLB2kr+2DCGi8TpmF2+Om1z2eBtW6QTe3ozjEK 576EalEImCglIFPiJxtqJEHlNCBTfKiLPg8ck4kv85F9dV4a2w5reV4ef/K/2kJpYzi4 Q9NW0WS7JDKIe+bTfSn8wH7UCDGGV0AoFJQiub7ord8j07Cq0flIvO/aWWJW7kLDQQdQ Gbi/TUPoflIfVg3eyx3tS+8URgTpbSiC/kNXLujWdjWiQcR1WAuE/EdE35iks5xqHE5U 4Qxw== X-Gm-Message-State: AC+VfDyXEuB9bScfor6tUL32rGoRBhWtMuZA0bIfOFpdHx3LXfReWzIL x/dy+rEd/3hsuHCCkFppg82AL0KfRls= X-Google-Smtp-Source: ACHHUZ5rW0PnoiQ2Hf7/SFDzOJJ5i6Y96mIMax5xZPn+nfH4XWa0giwnLrXXKKJ0XWonKUT6xqtmFw== X-Received: by 2002:a17:902:c745:b0:1a9:9a18:345c with SMTP id q5-20020a170902c74500b001a99a18345cmr5430391plq.44.1682707611029; Fri, 28 Apr 2023 11:46:51 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:49 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 6/9] shared/lc3: Update configuration to use iovec Date: Fri, 28 Apr 2023 11:46:37 -0700 Message-Id: <20230428184640.849066-6-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 use iovec as expected storage for capabilities and configuration so it is inline with what bluetoothctl has been using making it simpler to reuse these definitions. --- src/shared/lc3.h | 93 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 69 insertions(+), 24 deletions(-) diff --git a/src/shared/lc3.h b/src/shared/lc3.h index fd9eb15a73ea..ae193f9e2fa7 100644 --- a/src/shared/lc3.h +++ b/src/shared/lc3.h @@ -7,11 +7,12 @@ * */ -#define LTV(_type, _bytes...) \ +#define data(args...) ((const unsigned char[]) { args }) + +#define LC3_IOV(args...) \ { \ - .len = 1 + sizeof((uint8_t []) { _bytes }), \ - .type = _type, \ - .data = { _bytes }, \ + .iov_base = (void *)data(args), \ + .iov_len = sizeof(data(args)), \ } #define LC3_ID 0x06 @@ -52,13 +53,11 @@ #define LC3_FRAME_COUNT (LC3_BASE + 4) #define LC3_CAPABILITIES(_freq, _duration, _chan_count, _len_min, _len_max) \ - { \ - LTV(LC3_FREQ, _freq), \ - LTV(LC3_DURATION, _duration), \ - LTV(LC3_CHAN_COUNT, _chan_count), \ - LTV(LC3_FRAME_LEN, _len_min, _len_min >> 8, \ - _len_max, _len_max >> 8), \ - } + LC3_IOV(0x02, LC3_FREQ, _freq, _freq >> 8, \ + 0x02, LC3_DURATION, _duration, \ + 0x02, LC3_CHAN_COUNT, _chan_count, \ + 0x05, LC3_FRAME_LEN, _len_min, _len_min >> 8, \ + _len_max, _len_max >> 8) #define LC3_CONFIG_BASE 0x01 @@ -81,32 +80,78 @@ #define LC3_CONFIG_FRAME_LEN (LC3_CONFIG_BASE + 3) #define LC3_CONFIG(_freq, _duration, _len) \ - { \ - LTV(LC3_CONFIG_FREQ, _freq), \ - LTV(LC3_CONFIG_DURATION, _duration), \ - LTV(LC3_CONFIG_FRAME_LEN, _len, _len >> 8), \ - } + LC3_IOV(0x02, LC3_CONFIG_FREQ, _freq, \ + 0x02, LC3_CONFIG_DURATION, _duration, \ + 0x03, LC3_CONFIG_FRAME_LEN, _len, _len >> 8) -#define LC3_CONFIG_8KHZ(_duration, _len) \ +#define LC3_CONFIG_8(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_8KHZ, _duration, _len) -#define LC3_CONFIG_11KHZ(_duration, _len) \ +#define LC3_CONFIG_11(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_11KHZ, _duration, _len) -#define LC3_CONFIG_16KHZ(_duration, _len) \ +#define LC3_CONFIG_16(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_16KHZ, _duration, _len) -#define LC3_CONFIG_22KHZ(_duration, _len) \ +#define LC3_CONFIG_22(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_22KHZ, _duration, _len) -#define LC3_CONFIG_24KHZ(_duration, _len) \ +#define LC3_CONFIG_24(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_24KHZ, _duration, _len) -#define LC3_CONFIG_32KHZ(_duration, _len) \ +#define LC3_CONFIG_32(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_32KHZ, _duration, _len) -#define LC3_CONFIG_44KHZ(_duration, _len) \ +#define LC3_CONFIG_44(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_44KHZ, _duration, _len) -#define LC3_CONFIG_48KHZ(_duration, _len) \ +#define LC3_CONFIG_48(_duration, _len) \ LC3_CONFIG(LC3_CONFIG_FREQ_48KHZ, _duration, _len) + +#define LC3_CONFIG_8_1 \ + LC3_CONFIG_8(LC3_CONFIG_DURATION_7_5, 26u) + +#define LC3_CONFIG_8_2 \ + LC3_CONFIG_8(LC3_CONFIG_DURATION_10, 30u) + +#define LC3_CONFIG_16_1 \ + LC3_CONFIG_16(LC3_CONFIG_DURATION_7_5, 30u) + +#define LC3_CONFIG_16_2 \ + LC3_CONFIG_16(LC3_CONFIG_DURATION_10, 40u) + +#define LC3_CONFIG_24_1 \ + LC3_CONFIG_24(LC3_CONFIG_DURATION_7_5, 45u) + +#define LC3_CONFIG_24_2 \ + LC3_CONFIG_24(LC3_CONFIG_DURATION_10, 60u) + +#define LC3_CONFIG_32_1 \ + LC3_CONFIG_32(LC3_CONFIG_DURATION_7_5, 60u) + +#define LC3_CONFIG_32_2 \ + LC3_CONFIG_32(LC3_CONFIG_DURATION_10, 80u) + +#define LC3_CONFIG_44_1 \ + LC3_CONFIG_44(LC3_CONFIG_DURATION_7_5, 98u) + +#define LC3_CONFIG_44_2 \ + LC3_CONFIG_44(LC3_CONFIG_DURATION_10, 130u) + +#define LC3_CONFIG_48_1 \ + LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 75u) + +#define LC3_CONFIG_48_2 \ + LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 100u) + +#define LC3_CONFIG_48_3 \ + LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 90u) + +#define LC3_CONFIG_48_4 \ + LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 120u) + +#define LC3_CONFIG_48_5 \ + LC3_CONFIG_48(LC3_CONFIG_DURATION_7_5, 117u) + +#define LC3_CONFIG_48_6 \ + LC3_CONFIG_48(LC3_CONFIG_DURATION_10, 155u) From patchwork Fri Apr 28 18:46:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 677732 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 C508FC77B60 for ; Fri, 28 Apr 2023 18:46:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346521AbjD1Sq6 (ORCPT ); Fri, 28 Apr 2023 14:46:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346516AbjD1Sq5 (ORCPT ); Fri, 28 Apr 2023 14:46:57 -0400 Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 866762D51 for ; Fri, 28 Apr 2023 11:46:54 -0700 (PDT) Received: by mail-pg1-x534.google.com with SMTP id 41be03b00d2f7-5144a9c11c7so105202a12.2 for ; Fri, 28 Apr 2023 11:46:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707613; x=1685299613; 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=PkMxcOuV3hGZ9O7uCLlBgXJ9G5s3hfg1WaWodTfqpfs=; b=PlzDU9EYhT38pNcqPxhoto1k5VMZM4CQUKJw5mYNVlULk1wi43q3dbu4cKHFOKjAAj 53ueYl9R3jDwpLXtcQo5q51Q94YXwHSULtZSHYNzy3oCtuCJw3nL1FNDVMZvgIx4V6a4 qg0YIMzpG7OikfAyt3D20HqJmVG7gW/YgpBA4d6b5TSfoqCN4MD9l5sHJRVHmu1a/Z7F vL8n6LpTpRGXTnkHLIr9R+uRi6BIXovJ7j8U01HkAQ6OyTpuIF/QZGOicQhGWqqe/8Zo D5EGw7VCFHoOuaZ9mazY9B59BoT1/YaG8gaGUkMDFk7c3OmQ6eL1kmifi7DiGIYpQ9CH SPWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707613; x=1685299613; 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=PkMxcOuV3hGZ9O7uCLlBgXJ9G5s3hfg1WaWodTfqpfs=; b=R9LpKVOpK5ORH/3qzq6wA9FJBSvXD/3Soqbt8oiHuzYxf7LtcVbAeifTRhmx1IwIGf nxbvOpnOm/NF4rz0V0Vo2b3sRMuMY8IKcaJlMpcbgI5FGkhjXdgCGwlwyQ1PXWlQhJGI uaMd2p+8ZNlylNUZW0trREpxJLA5ud8AJU+5mOTdG0rQhZ0fE4wDv07cZjfDwDBBXtGL Fz+GjqiRDtn/e0S3qNpDT9iugZ1cmPXCB/W9vEsOxDj0BwKThcqKWSfNYSk3J/UUP8EE QJvsgyLbJA0LT79KWw+BXIzGER8TzhBeTPkkBSYl889kC/7+eaVKkyqKmj5Cn3Fx6le/ zaOw== X-Gm-Message-State: AC+VfDyyMUoMFb2h+0mNYMahqr5+N2dKFpL3de7l0JOQIoa7tZ9rMie6 8qzKMkHZL4ItgPzg8yM0KrTqXa3KFIA= X-Google-Smtp-Source: ACHHUZ7S+WXRw+N63u3fr6qcjdhv8KdYEVeykQwQH9rWWobj/qjXEkXzMHpO0BcICRUNbpzhGhkhDQ== X-Received: by 2002:a17:903:104c:b0:1a6:ba5a:cae0 with SMTP id f12-20020a170903104c00b001a6ba5acae0mr5974272plc.27.1682707612635; Fri, 28 Apr 2023 11:46:52 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:51 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 7/9] test-bap: Introduce SCC tests for LC3 Date: Fri, 28 Apr 2023 11:46:38 -0700 Message-Id: <20230428184640.849066-7-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 4.8.1 Unicast Client Initiates a Config Codec Operation – LC3 (Page 39): Test Purpose: Verify that a Unicast Client IUT can initiate a Config Codec operation for an LC3 codec. Test Case Configuration: BAP/UCL/SCC/BV-001-C [UCL SRC Config Codec, LC3 8_1] BAP/UCL/SCC/BV-002-C [UCL SRC Config Codec, LC3 8_2] BAP/UCL/SCC/BV-003-C [UCL SRC Config Codec, LC3 16_1] BAP/UCL/SCC/BV-004-C [UCL SRC Config Codec, LC3 16_2] BAP/UCL/SCC/BV-005-C [UCL SRC Config Codec, LC3 24_1] BAP/UCL/SCC/BV-006-C [UCL SRC Config Codec, LC3 24_2] BAP/UCL/SCC/BV-007-C [UCL SRC Config Codec, LC3 32_1] BAP/UCL/SCC/BV-008-C [UCL SRC Config Codec, LC3 32_2] BAP/UCL/SCC/BV-009-C [UCL SRC Config Codec, LC3 44.1_1] BAP/UCL/SCC/BV-010-C [UCL SRC Config Codec, LC3 44.1_2] BAP/UCL/SCC/BV-011-C [UCL SRC Config Codec, LC3 48_1] BAP/UCL/SCC/BV-012-C [UCL SRC Config Codec, LC3 48_2] BAP/UCL/SCC/BV-013-C [UCL SRC Config Codec, LC3 48_3] BAP/UCL/SCC/BV-014-C [UCL SRC Config Codec, LC3 48_4] BAP/UCL/SCC/BV-015-C [UCL SRC Config Codec, LC3 48_5] BAP/UCL/SCC/BV-016-C [UCL SRC Config Codec, LC3 48_6] BAP/UCL/SCC/BV-017-C [UCL SNK Config Codec, LC3 8_1] BAP/UCL/SCC/BV-018-C [UCL SNK Config Codec, LC3 8_2] BAP/UCL/SCC/BV-019-C [UCL SNK Config Codec, LC3 16_1] BAP/UCL/SCC/BV-020-C [UCL SNK Config Codec, LC3 16_2] BAP/UCL/SCC/BV-021-C [UCL SNK Config Codec, LC3 24_1] BAP/UCL/SCC/BV-022-C [UCL SNK Config Codec, LC3 24_2] BAP/UCL/SCC/BV-023-C [UCL SNK Config Codec, LC3 32_1] BAP/UCL/SCC/BV-024-C [UCL SNK Config Codec, LC3 32_2] BAP/UCL/SCC/BV-025-C [UCL SNK Config Codec, LC3 44.1_1] BAP/UCL/SCC/BV-026-C [UCL SNK Config Codec, LC3 44.1_2] BAP/UCL/SCC/BV-027-C [UCL SNK Config Codec, LC3 48_1] BAP/UCL/SCC/BV-028-C [UCL SNK Config Codec, LC3 48_2] BAP/UCL/SCC/BV-029-C [UCL SNK Config Codec, LC3 48_3] BAP/UCL/SCC/BV-030-C [UCL SNK Config Codec, LC3 48_4] BAP/UCL/SCC/BV-031-C [UCL SNK Config Codec, LC3 48_5] BAP/UCL/SCC/BV-032-C [UCL SNK Config Codec, LC3 48_6] Pass verdict: The IUT successfully writes to the ASE Control point with the opcode set to 0x01 (Config Codec) and correctly formatted parameter values from Table 4.9. The Codec_ID field is a 5-octet field with octet 0 set to the LC3 Coding_Format value defined in Bluetooth Assigned Numbers, octets 1–4 set to 0x0000. Test Summary ------------ BAP/UCL/SCC/BV-001-C [UCL SRC Config Codec, LC3 8_1] Passed BAP/UCL/SCC/BV-002-C [UCL SRC Config Codec, LC3 8_2] Passed BAP/UCL/SCC/BV-003-C [UCL SRC Config Codec, LC3 16_1] Passed BAP/UCL/SCC/BV-004-C [UCL SRC Config Codec, LC3 16_2] Passed BAP/UCL/SCC/BV-005-C [UCL SRC Config Codec, LC3 24_1] Passed BAP/UCL/SCC/BV-006-C [UCL SRC Config Codec, LC3 24_2] Passed BAP/UCL/SCC/BV-007-C [UCL SRC Config Codec, LC3 32_1] Passed BAP/UCL/SCC/BV-008-C [UCL SRC Config Codec, LC3 32_2] Passed BAP/UCL/SCC/BV-009-C [UCL SRC Config Codec, LC3 44.1_1] Passed BAP/UCL/SCC/BV-010-C [UCL SRC Config Codec, LC3 44.1_2] Passed BAP/UCL/SCC/BV-011-C [UCL SRC Config Codec, LC3 48_1] Passed BAP/UCL/SCC/BV-012-C [UCL SRC Config Codec, LC3 48_2] Passed BAP/UCL/SCC/BV-013-C [UCL SRC Config Codec, LC3 48_3] Passed BAP/UCL/SCC/BV-014-C [UCL SRC Config Codec, LC3 48_4] Passed BAP/UCL/SCC/BV-015-C [UCL SRC Config Codec, LC3 48_5] Passed BAP/UCL/SCC/BV-016-C [UCL SRC Config Codec, LC3 48_6] Passed BAP/UCL/SCC/BV-017-C [UCL SNK Config Codec, LC3 8_1] Passed BAP/UCL/SCC/BV-018-C [UCL SNK Config Codec, LC3 8_2] Passed BAP/UCL/SCC/BV-019-C [UCL SNK Config Codec, LC3 16_1] Passed BAP/UCL/SCC/BV-020-C [UCL SNK Config Codec, LC3 16_2] Passed BAP/UCL/SCC/BV-021-C [UCL SNK Config Codec, LC3 24_1] Passed BAP/UCL/SCC/BV-022-C [UCL SNK Config Codec, LC3 24_2] Passed BAP/UCL/SCC/BV-023-C [UCL SNK Config Codec, LC3 32_1] Passed BAP/UCL/SCC/BV-024-C [UCL SNK Config Codec, LC3 32_2] Passed BAP/UCL/SCC/BV-025-C [UCL SNK Config Codec, LC3 44.1_1] Passed BAP/UCL/SCC/BV-026-C [UCL SNK Config Codec, LC3 44.1_2] Passed BAP/UCL/SCC/BV-027-C [UCL SNK Config Codec, LC3 48_1] Passed BAP/UCL/SCC/BV-028-C [UCL SNK Config Codec, LC3 48_2] Passed BAP/UCL/SCC/BV-029-C [UCL SNK Config Codec, LC3 48_3] Passed BAP/UCL/SCC/BV-030-C [UCL SNK Config Codec, LC3 48_4] Passed BAP/UCL/SCC/BV-031-C [UCL SNK Config Codec, LC3 48_5] Passed BAP/UCL/SCC/BV-032-C [UCL SNK Config Codec, LC3 48_6] Passed Total: 32, Passed: 32 (100.0%), Failed: 0, Not Run: 0 --- unit/test-bap.c | 543 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 536 insertions(+), 7 deletions(-) diff --git a/unit/test-bap.c b/unit/test-bap.c index afeefac84091..ab48a15d32b4 100644 --- a/unit/test-bap.c +++ b/unit/test-bap.c @@ -30,20 +30,45 @@ #include "src/shared/gatt-db.h" #include "src/shared/gatt-client.h" #include "src/shared/bap.h" +#include "src/shared/lc3.h" + +struct test_config { + struct bt_bap_pac_qos pqos; + struct iovec cc; + struct bt_bap_qos qos; + bool snk; + bool src; +}; struct test_data { struct bt_gatt_client *client; struct bt_bap *bap; + struct bt_bap_pac *snk; + struct bt_bap_pac *src; + struct iovec *caps; + struct test_config *cfg; + struct bt_bap_stream *stream; size_t iovcnt; struct iovec *iov; }; +/* + * Frequencies: 8Khz 11Khz 16Khz 22Khz 24Khz 32Khz 44.1Khz 48Khz + * Duration: 7.5 ms 10 ms + * Channel count: 3 + * Frame length: 30-240 + */ +static struct iovec lc3_caps = LC3_CAPABILITIES(LC3_FREQ_ANY, LC3_DURATION_ANY, + 3u, 30, 240); + #define iov_data(args...) ((const struct iovec[]) { args }) -#define define_test(name, function, args...) \ +#define define_test(name, function, _cfg, args...) \ do { \ const struct iovec iov[] = { args }; \ static struct test_data data; \ + data.caps = &lc3_caps; \ + data.cfg = _cfg; \ data.iovcnt = ARRAY_SIZE(iov_data(args)); \ data.iov = util_iov_dup(iov, ARRAY_SIZE(iov_data(args))); \ tester_add(name, &data, test_setup, function, \ @@ -307,6 +332,38 @@ static void test_complete_cb(const void *user_data) tester_test_passed(); } +static void bap_config(struct bt_bap_stream *stream, + uint8_t code, uint8_t reason, + void *user_data) +{ + if (code) + tester_test_failed(); +} + +static bool pac_found(struct bt_bap_pac *lpac, struct bt_bap_pac *rpac, + void *user_data) +{ + struct test_data *data = user_data; + unsigned int config_id; + + data->stream = bt_bap_stream_new(data->bap, lpac, rpac, + &data->cfg->qos, + &data->cfg->cc); + g_assert(data->stream); + + config_id = bt_bap_stream_config(data->stream, &data->cfg->qos, + &data->cfg->cc, bap_config, data); + g_assert(config_id); + + return true; +} + +static void bap_ready(struct bt_bap *bap, void *user_data) +{ + bt_bap_foreach_pac(bap, BT_BAP_SINK, pac_found, user_data); + bt_bap_foreach_pac(bap, BT_BAP_SOURCE, pac_found, user_data); +} + static void test_client(const void *user_data) { struct test_data *data = (void *)user_data; @@ -321,11 +378,29 @@ static void test_client(const void *user_data) db = gatt_db_new(); g_assert(db); + if (data->cfg) { + if (data->cfg->src) { + data->snk = bt_bap_add_pac(db, "test-bap-snk", + BT_BAP_SINK, LC3_ID, + NULL, data->caps, NULL); + g_assert(data->snk); + } + + if (data->cfg->snk) { + data->src = bt_bap_add_pac(db, "test-bap-src", + BT_BAP_SOURCE, LC3_ID, + NULL, data->caps, NULL); + g_assert(data->src); + } + } + data->bap = bt_bap_new(db, bt_gatt_client_get_db(data->client)); g_assert(data->bap); bt_bap_set_debug(data->bap, print_debug, "bt_bap:", NULL); + bt_bap_ready_register(data->bap, bap_ready, data, NULL); + bt_bap_attach(data->bap, data->client); } @@ -531,22 +606,22 @@ static void test_disc(void) * The IUT reads the values of the characteristics specified in the PAC * Characteristic and Location Characteristic columns. */ - define_test("BAP/UCL/DISC/BV-01-C", test_client, DISC_SINK_PAC); - define_test("BAP/UCL/DISC/BV-02-C", test_client, DISC_SOURCE_PAC); + define_test("BAP/UCL/DISC/BV-01-C", test_client, NULL, DISC_SINK_PAC); + define_test("BAP/UCL/DISC/BV-02-C", test_client, NULL, DISC_SOURCE_PAC); /* BAP/UCL/DISC/BV-06-C [Discover Available Audio Contexts] * * The IUT successfully reads the value of the Available Audio Contexts * characteristic on the LowerTester. */ - define_test("BAP/UCL/DISC/BV-06-C", test_client, DISC_CTX); + define_test("BAP/UCL/DISC/BV-06-C", test_client, NULL, DISC_CTX); /* BAP/UCL/DISC/BV-05-C [Discover Supported Audio Contexts] * * The IUT successfully reads the value of the Supported Audio Contexts * characteristic on the Lower Tester. */ - define_test("BAP/UCL/DISC/BV-05-C", test_client, DISC_SUP_CTX); + define_test("BAP/UCL/DISC/BV-05-C", test_client, NULL, DISC_SUP_CTX); /* BAP/UCL/DISC/BV-03-C [Discover Sink ASE_ID] * BAP/UCL/DISC/BV-04-C [Discover Source ASE_ID] @@ -554,8 +629,461 @@ static void test_disc(void) * The IUT successfully reads the ASE_ID values of each discovered ASE * characteristic on the LowerTester. */ - define_test("BAP/UCL/DISC/BV-03-C", test_client, DISC_SINK_ASE); - define_test("BAP/UCL/DISC/BV-04-C", test_client, DISC_SOURCE_ASE); + define_test("BAP/UCL/DISC/BV-03-C", test_client, NULL, DISC_SINK_ASE); + define_test("BAP/UCL/DISC/BV-04-C", test_client, NULL, DISC_SOURCE_ASE); +} + +/* ATT: Write Command (0x52) len 23 + * Handle: 0x0022 + * Data: 010101020206000000000_cfg + * ATT: Handle Value Notification (0x1b) len 7 + * Handle: 0x0022 + * Data: 0101010000 + * ATT: Handle Value Notification (0x1b) len 37 + * Handle: 0x0016 + * Data: 01010102010a00204e00409c00204e00409c000600000000_cfg + */ +#define SCC_SNK(_cfg...) \ + DISC_SOURCE_ASE, \ + IOV_DATA(0x52, 0x22, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x06, 0x00, \ + 0x00, 0x00, 0x00, _cfg), \ + IOV_DATA(0x1b, 0x22, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00), \ + IOV_NULL, \ + IOV_DATA(0x1b, 0x16, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x0a, 0x00, \ + 0x20, 0x4e, 0x00, 0x40, 0x9c, 0x00, 0x20, 0x4e, 0x00, \ + 0x40, 0x9c, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, _cfg) + +#define QOS_BALANCED_2M \ + { \ + .target_latency = BT_BAP_CONFIG_LATENCY_BALANCED, \ + .phy = BT_BAP_CONFIG_PHY_2M, \ + } + +static struct test_config cfg_snk_8_1 = { + .cc = LC3_CONFIG_8_1, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_8_1 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1a, \ + 0x00) + +static struct test_config cfg_snk_8_2 = { + .cc = LC3_CONFIG_8_2, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_8_2 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x04, 0x1e, \ + 0x00) + +static struct test_config cfg_snk_16_1 = { + .cc = LC3_CONFIG_16_1, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_16_1 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1e, \ + 0x00) + +static struct test_config cfg_snk_16_2 = { + .cc = LC3_CONFIG_16_2, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_16_2 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x04, 0x28, \ + 0x00) + +static struct test_config cfg_snk_24_1 = { + .cc = LC3_CONFIG_24_1, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_24_1 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x00, 0x03, 0x04, 0x2d, \ + 0x00) + +static struct test_config cfg_snk_24_2 = { + .cc = LC3_CONFIG_24_2, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_24_2 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x01, 0x03, 0x04, 0x3c, \ + 0x00) + +static struct test_config cfg_snk_32_1 = { + .cc = LC3_CONFIG_32_1, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_32_1 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x00, 0x03, 0x04, 0x3c, \ + 0x00) + +static struct test_config cfg_snk_32_2 = { + .cc = LC3_CONFIG_32_2, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_32_2 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x01, 0x03, 0x04, 0x50, \ + 0x00) + +static struct test_config cfg_snk_44_1 = { + .cc = LC3_CONFIG_44_1, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_44_1 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x00, 0x03, 0x04, 0x62, \ + 0x00) + +static struct test_config cfg_snk_44_2 = { + .cc = LC3_CONFIG_44_2, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_44_2 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x01, 0x03, 0x04, 0x82, \ + 0x00) + +static struct test_config cfg_snk_48_1 = { + .cc = LC3_CONFIG_48_1, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_48_1 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x4b, \ + 0x00) + +static struct test_config cfg_snk_48_2 = { + .cc = LC3_CONFIG_48_2, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_48_2 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x64, \ + 0x00) + +static struct test_config cfg_snk_48_3 = { + .cc = LC3_CONFIG_48_3, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_48_3 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x5a, \ + 0x00) + +static struct test_config cfg_snk_48_4 = { + .cc = LC3_CONFIG_48_4, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_48_4 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x78, \ + 0x00) + +static struct test_config cfg_snk_48_5 = { + .cc = LC3_CONFIG_48_5, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_48_5 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x75, \ + 0x00) + +static struct test_config cfg_snk_48_6 = { + .cc = LC3_CONFIG_48_6, + .qos = QOS_BALANCED_2M, + .snk = true, +}; + +#define SCC_SNK_48_6 \ + SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x9b, \ + 0x00) + +/* ATT: Write Command (0x52) len 23 + * Handle: 0x0022 + * Data: 010103020206000000000_cfg + * ATT: Handle Value Notification (0x1b) len 7 + * Handle: 0x0022 + * Data: 0101030000 + * ATT: Handle Value Notification (0x1b) len 37 + * Handle: 0x001c + * Data: 03010102010a00204e00409c00204e00409c000600000000_cfg + */ +#define SCC_SRC(_cfg...) \ + DISC_SOURCE_ASE, \ + IOV_DATA(0x52, 0x22, 0x00, 0x01, 0x01, 0x03, 0x02, 0x02, 0x06, 0x00, \ + 0x00, 0x00, 0x00, _cfg), \ + IOV_DATA(0x1b, 0x22, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00), \ + IOV_NULL, \ + IOV_DATA(0x1b, 0x1c, 0x00, 0x03, 0x01, 0x01, 0x02, 0x01, 0x0a, 0x00, \ + 0x20, 0x4e, 0x00, 0x40, 0x9c, 0x00, 0x20, 0x4e, 0x00, \ + 0x40, 0x9c, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, _cfg) + +static struct test_config cfg_src_8_1 = { + .cc = LC3_CONFIG_8_1, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_8_1 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1a, \ + 0x00) + +static struct test_config cfg_src_8_2 = { + .cc = LC3_CONFIG_8_2, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_8_2 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x04, 0x1e, \ + 0x00) + +static struct test_config cfg_src_16_1 = { + .cc = LC3_CONFIG_16_1, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_16_1 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1e, \ + 0x00) + +static struct test_config cfg_src_16_2 = { + .cc = LC3_CONFIG_16_2, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_16_2 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x04, 0x28, \ + 0x00) + +static struct test_config cfg_src_24_1 = { + .cc = LC3_CONFIG_24_1, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_24_1 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x00, 0x03, 0x04, 0x2d, \ + 0x00) + +static struct test_config cfg_src_24_2 = { + .cc = LC3_CONFIG_24_2, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_24_2 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x01, 0x03, 0x04, 0x3c, \ + 0x00) + +static struct test_config cfg_src_32_1 = { + .cc = LC3_CONFIG_32_1, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_32_1 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x00, 0x03, 0x04, 0x3c, \ + 0x00) + +static struct test_config cfg_src_32_2 = { + .cc = LC3_CONFIG_32_2, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_32_2 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x01, 0x03, 0x04, 0x50, \ + 0x00) + +static struct test_config cfg_src_44_1 = { + .cc = LC3_CONFIG_44_1, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_44_1 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x00, 0x03, 0x04, 0x62, \ + 0x00) + +static struct test_config cfg_src_44_2 = { + .cc = LC3_CONFIG_44_2, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_44_2 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x01, 0x03, 0x04, 0x82, \ + 0x00) + +static struct test_config cfg_src_48_1 = { + .cc = LC3_CONFIG_48_1, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_48_1 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x4b, \ + 0x00) + +static struct test_config cfg_src_48_2 = { + .cc = LC3_CONFIG_48_2, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_48_2 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x64, \ + 0x00) + +static struct test_config cfg_src_48_3 = { + .cc = LC3_CONFIG_48_3, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_48_3 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x5a, \ + 0x00) + +static struct test_config cfg_src_48_4 = { + .cc = LC3_CONFIG_48_4, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_48_4 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x78, \ + 0x00) + +static struct test_config cfg_src_48_5 = { + .cc = LC3_CONFIG_48_5, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_48_5 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x75, \ + 0x00) + +static struct test_config cfg_src_48_6 = { + .cc = LC3_CONFIG_48_6, + .qos = QOS_BALANCED_2M, + .src = true, +}; + +#define SCC_SRC_48_6 \ + SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x9b, 0x00) + +/* Test Purpose: + * Verify that a Unicast Client IUT can initiate a Config Codec + * operation for an LC3 codec. + * + * Pass verdict: + * The IUT successfully writes to the ASE Control point with the opcode + * set to 0x01 (Config Codec) and correctly formatted parameter values + * from Table 4.9. The Codec_ID field is a 5-octet field with octet 0 + * set to the LC3 Coding_Format value defined in Bluetooth Assigned + * Numbers, octets 1–4 set to 0x0000. Each parameter (if present) + * included in the data sent in Codec_Specific_Configuration is + * formatted in an LTV structure with the length, type, and value + * specified in Table 4.10. + */ +static void test_scc_cc_lc3(void) +{ + define_test("BAP/UCL/SCC/BV-001-C [UCL SRC Config Codec, LC3 8_1]", + test_client, &cfg_snk_8_1, SCC_SNK_8_1); + define_test("BAP/UCL/SCC/BV-002-C [UCL SRC Config Codec, LC3 8_2]", + test_client, &cfg_snk_8_2, SCC_SNK_8_2); + define_test("BAP/UCL/SCC/BV-003-C [UCL SRC Config Codec, LC3 16_1]", + test_client, &cfg_snk_16_1, SCC_SNK_16_1); + define_test("BAP/UCL/SCC/BV-004-C [UCL SRC Config Codec, LC3 16_2]", + test_client, &cfg_snk_16_2, SCC_SNK_16_2); + define_test("BAP/UCL/SCC/BV-005-C [UCL SRC Config Codec, LC3 24_1]", + test_client, &cfg_snk_24_1, SCC_SNK_24_1); + define_test("BAP/UCL/SCC/BV-006-C [UCL SRC Config Codec, LC3 24_2]", + test_client, &cfg_snk_24_2, SCC_SNK_24_2); + define_test("BAP/UCL/SCC/BV-007-C [UCL SRC Config Codec, LC3 32_1]", + test_client, &cfg_snk_32_1, SCC_SNK_32_1); + define_test("BAP/UCL/SCC/BV-008-C [UCL SRC Config Codec, LC3 32_2]", + test_client, &cfg_snk_32_2, SCC_SNK_32_2); + define_test("BAP/UCL/SCC/BV-009-C [UCL SRC Config Codec, LC3 44.1_1]", + test_client, &cfg_snk_44_1, SCC_SNK_44_1); + define_test("BAP/UCL/SCC/BV-010-C [UCL SRC Config Codec, LC3 44.1_2]", + test_client, &cfg_snk_44_2, SCC_SNK_44_2); + define_test("BAP/UCL/SCC/BV-011-C [UCL SRC Config Codec, LC3 48_1]", + test_client, &cfg_snk_48_1, SCC_SNK_48_1); + define_test("BAP/UCL/SCC/BV-012-C [UCL SRC Config Codec, LC3 48_2]", + test_client, &cfg_snk_48_2, SCC_SNK_48_2); + define_test("BAP/UCL/SCC/BV-013-C [UCL SRC Config Codec, LC3 48_3]", + test_client, &cfg_snk_48_3, SCC_SNK_48_3); + define_test("BAP/UCL/SCC/BV-014-C [UCL SRC Config Codec, LC3 48_4]", + test_client, &cfg_snk_48_4, SCC_SNK_48_4); + define_test("BAP/UCL/SCC/BV-015-C [UCL SRC Config Codec, LC3 48_5]", + test_client, &cfg_snk_48_5, SCC_SNK_48_5); + define_test("BAP/UCL/SCC/BV-016-C [UCL SRC Config Codec, LC3 48_6]", + test_client, &cfg_snk_48_6, SCC_SNK_48_6); + define_test("BAP/UCL/SCC/BV-017-C [UCL SNK Config Codec, LC3 8_1]", + test_client, &cfg_src_8_1, SCC_SRC_8_1); + define_test("BAP/UCL/SCC/BV-018-C [UCL SNK Config Codec, LC3 8_2]", + test_client, &cfg_src_8_2, SCC_SRC_8_2); + define_test("BAP/UCL/SCC/BV-019-C [UCL SNK Config Codec, LC3 16_1]", + test_client, &cfg_src_16_1, SCC_SRC_16_1); + define_test("BAP/UCL/SCC/BV-020-C [UCL SNK Config Codec, LC3 16_2]", + test_client, &cfg_src_16_2, SCC_SRC_16_2); + define_test("BAP/UCL/SCC/BV-021-C [UCL SNK Config Codec, LC3 24_1]", + test_client, &cfg_src_24_1, SCC_SRC_24_1); + define_test("BAP/UCL/SCC/BV-022-C [UCL SNK Config Codec, LC3 24_2]", + test_client, &cfg_src_24_2, SCC_SRC_24_2); + define_test("BAP/UCL/SCC/BV-023-C [UCL SNK Config Codec, LC3 32_1]", + test_client, &cfg_src_32_1, SCC_SRC_32_1); + define_test("BAP/UCL/SCC/BV-024-C [UCL SNK Config Codec, LC3 32_2]", + test_client, &cfg_src_32_2, SCC_SRC_32_2); + define_test("BAP/UCL/SCC/BV-025-C [UCL SNK Config Codec, LC3 44.1_1]", + test_client, &cfg_src_44_1, SCC_SRC_44_1); + define_test("BAP/UCL/SCC/BV-026-C [UCL SNK Config Codec, LC3 44.1_2]", + test_client, &cfg_src_44_2, SCC_SRC_44_2); + define_test("BAP/UCL/SCC/BV-027-C [UCL SNK Config Codec, LC3 48_1]", + test_client, &cfg_src_48_1, SCC_SRC_48_1); + define_test("BAP/UCL/SCC/BV-028-C [UCL SNK Config Codec, LC3 48_2]", + test_client, &cfg_src_48_2, SCC_SRC_48_2); + define_test("BAP/UCL/SCC/BV-029-C [UCL SNK Config Codec, LC3 48_3]", + test_client, &cfg_src_48_3, SCC_SRC_48_3); + define_test("BAP/UCL/SCC/BV-030-C [UCL SNK Config Codec, LC3 48_4]", + test_client, &cfg_src_48_4, SCC_SRC_48_4); + define_test("BAP/UCL/SCC/BV-031-C [UCL SNK Config Codec, LC3 48_5]", + test_client, &cfg_src_48_5, SCC_SRC_48_5); + define_test("BAP/UCL/SCC/BV-032-C [UCL SNK Config Codec, LC3 48_6]", + test_client, &cfg_src_48_6, SCC_SRC_48_6); +} + +static void test_scc(void) +{ + test_scc_cc_lc3(); } int main(int argc, char *argv[]) @@ -563,6 +1091,7 @@ int main(int argc, char *argv[]) tester_init(&argc, &argv); test_disc(); + test_scc(); return tester_run(); } From patchwork Fri Apr 28 18:46:39 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: 678470 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 D9252C77B7E for ; Fri, 28 Apr 2023 18:46:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346520AbjD1Sq6 (ORCPT ); Fri, 28 Apr 2023 14:46:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60562 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346513AbjD1Sq4 (ORCPT ); Fri, 28 Apr 2023 14:46:56 -0400 Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1EF2A5BA9 for ; Fri, 28 Apr 2023 11:46:55 -0700 (PDT) Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-63b5465fb99so316619b3a.1 for ; Fri, 28 Apr 2023 11:46:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707614; x=1685299614; 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=1Zf1jMK3UJ9SfKs4kbWstHqgU/7a87nWIjklSePkN28=; b=Ls+uvENs64o+8/zeyjC81G/7ipfo99ps8dN+90HzYYrUkDv1BkwLxaYUHgaHjXTadY gF2NpEnFdXQIzX9YCJdfhdqN3CnAzIwQfaEcuvBszTEd2S/v1HTViBjutJd5pLC2S07P aEQrKoIBNsQjaEP2GWjrWnp+YpaTia5EzYs3+g57tgLvHp8U3As4ZNUWHpqf6QSOd4Ss FIY9RifBqw8aOiBw31fJMZqTbO76TGDWl01wkSuesVV2D9H0L3jtdWisbSDis96DHkdq wUw9ozs4oiRatlHbfDRX1OMoxG4PiOCDgugq14BmaCxGwUsC+fwgJeguD2MX3yTkY7d9 VeVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707614; x=1685299614; 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=1Zf1jMK3UJ9SfKs4kbWstHqgU/7a87nWIjklSePkN28=; b=Du9v+Lu6aPCLtoQT7hb5JL8GCl+IupHlHNS5DENkdJq6SSe3w1I4LCKKad9D+cvWGm 7P5O8qobixG7CbcJ+fbXkOpI+60GxpjFHcwaNdIum6GRdaqqbhS8xVK02Q2I81djF4q4 6H+aqG/p5VQOLcXDTxot2k4kI7qOikC1/295id7zi5Hy2sk9xcENeiJG4RU/0XkldMty oWXtMl2lQ8XIXLGNkS4eDAKCCSIzdrygjs3R5AZZUPXOZ1MYDbARywPVsQ9dpeqAfdFG jLQ/RA86P2oFTfRhntPv3GVkVCBeaN/TsSYhuOFmxIbYCY6VtYFNPw0Qx/YqROS0SSWE F/cw== X-Gm-Message-State: AC+VfDw9e0V2BUDhotlZjhIjWWcxyIROk2N3ohzIvEE5zuyHfEoT2nT3 CXDDMcaSruj81Ifxdu67ow4YqglF9gU= X-Google-Smtp-Source: ACHHUZ5wiiYnCHY0Rn2SC/EEMrhZtJhT/vpWIFG5p1k+RD0kwG0cbPoPwQzA1Bk2PuR7yt4jkngODg== X-Received: by 2002:a17:903:40c6:b0:1a5:2592:89c6 with SMTP id t6-20020a17090340c600b001a5259289c6mr6018797pld.29.1682707613892; Fri, 28 Apr 2023 11:46:53 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:53 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 8/9] shared/util: Fix runtime error Date: Fri, 28 Apr 2023 11:46:39 -0700 Message-Id: <20230428184640.849066-8-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 fixes the following errors: src/shared/util.c:271:2: runtime error: null pointer passed as argument 2, which is declared to never be null --- src/shared/util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/shared/util.c b/src/shared/util.c index d31daacc4b93..9a4a8d77abce 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -268,7 +268,8 @@ void *util_iov_push_mem(struct iovec *iov, size_t len, const void *data) if (!p) return NULL; - memcpy(p, data, len); + if (data) + memcpy(p, data, len); return p; } From patchwork Fri Apr 28 18:46:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 678469 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 310DDC77B61 for ; Fri, 28 Apr 2023 18:47:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346523AbjD1SrC (ORCPT ); Fri, 28 Apr 2023 14:47:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60674 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346516AbjD1SrA (ORCPT ); Fri, 28 Apr 2023 14:47:00 -0400 Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 51E6155AD for ; Fri, 28 Apr 2023 11:46:57 -0700 (PDT) Received: by mail-pg1-x52c.google.com with SMTP id 41be03b00d2f7-51b603bb360so106362a12.2 for ; Fri, 28 Apr 2023 11:46:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682707616; x=1685299616; 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=h71Wp6CGGIsIQf6ZJMLT8lFniP02LpnNLiy629RiZEI=; b=DFJpmzcUmxreAhn6RD14LylYPy7WCEl+zvp/hHAtrR7wVMzaQilO6loONynis+ubtL +KTRq2q5xyyUfg/uukjJ6vfCy3sAPujDvq4KGFON75swEcGXVOyAVvXhFFEjSC3l9nx8 psd3hdempZ1pMaEAbveAxK4gP1+moZptH007WTm/X+UErc9DlutOA0h7zndGhkJd5ccr l8vI+TdJGLZId8GHQ9MeD9DiUOaUR42C6R5xrSKmC+HlRvoJKn7wrvNAfsF3tGAm5f48 kZC4tMtW9JAaqbH/gEZ6470cSc7ozpO7PzdECaKF+Tt5GBMpDj1THW8RtbPUpIZhLqDr AURw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682707616; x=1685299616; 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=h71Wp6CGGIsIQf6ZJMLT8lFniP02LpnNLiy629RiZEI=; b=iVOXSdxYCUW1Zzafly9IGGPrZ5MWYuli/qOKkcOB+ciPnPbvC8fHOIS/NjoYKJ+r1c D5xtMZIu8nXh6ZuB0Oq25Nv1pJbMW0wHNBZEoqPZ5voOdrd4c/Pch8Rk2H65oxHkhUJo qMYv6bwyzutpDPMKFpzsrtHv7NT7cZs/dDS4ZnKKJnt/nxGKcnau8xvXaS6gAgsKGyPv 8vdwS6IK6KwhpqBvUoAa104aw7WMnQrKa245bhjLamZHWofLfNC+YO2ySXwCKhqlIIUm Tscz4NMoc170mD3u/cwIe/UAsdHuUtKrOnIlgrfmb2BTJXgn/GYTOq6rwwCJLaFyoZ/T TCGg== X-Gm-Message-State: AC+VfDxenBleiReyzdsejFSEHLXvTAfn4b5m37NsYPBHLRy/JUKcT0RH NGutHqPmooMOj0PiutTmW2LDk2KNdSM= X-Google-Smtp-Source: ACHHUZ719SjP1LimdpVsLZKnG0+Fvy2WxTp6FM9e7Q4z/GFqnQ/XvX/YojtOYHTQaOMIjQQtoc5LVw== X-Received: by 2002:a17:903:18f:b0:1a5:2540:729 with SMTP id z15-20020a170903018f00b001a525400729mr6527717plg.56.1682707615720; Fri, 28 Apr 2023 11:46:55 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-59-129-171.hsd1.or.comcast.net. [71.59.129.171]) by smtp.gmail.com with ESMTPSA id bf9-20020a170902b90900b0019f9fd10f62sm13626366plb.70.2023.04.28.11.46.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 11:46:55 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v4 9/9] test-bap: Add SCC tests for Vendor-Specific codec Date: Fri, 28 Apr 2023 11:46:40 -0700 Message-Id: <20230428184640.849066-9-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230428184640.849066-1-luiz.dentz@gmail.com> References: <20230428184640.849066-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 4.8.2 Unicast Client Initiates a Config Codec Operation – Vendor-Specific (page 42): Test Purpose: Verify that a Unicast Client IUT can initiate a Config Codec operation for a vendor-specific codec. Test Case Configuration: BAP/UCL/SCC/BV-033-C [UCL SRC Config Codec, VS] BAP/UCL/SCC/BV-034-C [UCL SNK Config Codec, VS] Pass verdict: The IUT successfully writes to the ASE Control Point characteristic with the opcode set to 0x01 (Config Codec) and the specified parameters. The Codec_ID parameter is formatted with octet 0 set to 0xFF, octets 1–2 set to TSPX_VS_Company_ID, and octets 3–4 set to TSPX_VS_Codec_ID. Test Summary ------------ BAP/UCL/SCC/BV-033-C [UCL SRC Config Codec, VS] Passed BAP/UCL/SCC/BV-034-C [UCL SNK Config Codec, VS] Passed Total: 2, Passed: 2 (100.0%), Failed: 0, Not Run: 0 --- unit/test-bap.c | 336 +++++++++++++++++++++++++++++++----------------- 1 file changed, 219 insertions(+), 117 deletions(-) diff --git a/unit/test-bap.c b/unit/test-bap.c index ab48a15d32b4..bf525742df25 100644 --- a/unit/test-bap.c +++ b/unit/test-bap.c @@ -38,10 +38,12 @@ struct test_config { struct bt_bap_qos qos; bool snk; bool src; + bool vs; }; struct test_data { struct bt_gatt_client *client; + struct gatt_db *db; struct bt_bap *bap; struct bt_bap_pac *snk; struct bt_bap_pac *src; @@ -364,37 +366,56 @@ static void bap_ready(struct bt_bap *bap, void *user_data) bt_bap_foreach_pac(bap, BT_BAP_SOURCE, pac_found, user_data); } +static void test_client_config(struct test_data *data) +{ + if (!data->cfg) + return; + + if (data->cfg->src) { + if (data->cfg->vs) + data->snk = bt_bap_add_vendor_pac(data->db, + "test-bap-snk", + BT_BAP_SINK, 0x0ff, + 0x0001, 0x0001, + NULL, data->caps, NULL); + else + data->snk = bt_bap_add_pac(data->db, "test-bap-snk", + BT_BAP_SINK, LC3_ID, + NULL, data->caps, NULL); + g_assert(data->snk); + } + + if (data->cfg->snk) { + if (data->cfg->vs) + data->src = bt_bap_add_vendor_pac(data->db, + "test-bap-src", + BT_BAP_SOURCE, 0x0ff, + 0x0001, 0x0001, + NULL, data->caps, NULL); + else + data->src = bt_bap_add_pac(data->db, "test-bap-src", + BT_BAP_SOURCE, LC3_ID, + NULL, data->caps, NULL); + g_assert(data->src); + } +} + static void test_client(const void *user_data) { struct test_data *data = (void *)user_data; struct io *io; - struct gatt_db *db; io = tester_setup_io(data->iov, data->iovcnt); g_assert(io); tester_io_set_complete_func(test_complete_cb); - db = gatt_db_new(); - g_assert(db); + data->db = gatt_db_new(); + g_assert(data->db); - if (data->cfg) { - if (data->cfg->src) { - data->snk = bt_bap_add_pac(db, "test-bap-snk", - BT_BAP_SINK, LC3_ID, - NULL, data->caps, NULL); - g_assert(data->snk); - } + test_client_config(data); - if (data->cfg->snk) { - data->src = bt_bap_add_pac(db, "test-bap-src", - BT_BAP_SOURCE, LC3_ID, - NULL, data->caps, NULL); - g_assert(data->src); - } - } - - data->bap = bt_bap_new(db, bt_gatt_client_get_db(data->client)); + data->bap = bt_bap_new(data->db, bt_gatt_client_get_db(data->client)); g_assert(data->bap); bt_bap_set_debug(data->bap, print_debug, "bt_bap:", NULL); @@ -412,6 +433,10 @@ static void test_teardown(const void *user_data) bt_gatt_client_unref(data->client); util_iov_free(data->iov, data->iovcnt); + bt_bap_remove_pac(data->snk); + bt_bap_remove_pac(data->src); + gatt_db_unref(data->db); + tester_teardown_complete(); } @@ -452,14 +477,17 @@ static void test_teardown(const void *user_data) * Front Left (0x00000001) * Front Right (0x00000002) */ -#define DISC_SINK_PAC \ +#define DISC_SNK_PAC(_caps...) \ IOV_DATA(0x0a, 0x03, 0x00), \ - IOV_DATA(0x0b, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ - 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ - 0x1e, 0x00, 0xf0, 0x00, 0x00), \ + IOV_DATA(0x0b, 0x01, _caps), \ IOV_DATA(0x0a, 0x06, 0x00), \ IOV_DATA(0x0b, 0x03, 0x00, 0x00, 0x00) +#define DISC_SNK_LC3 \ + DISC_SNK_PAC(0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ + 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ + 0x1e, 0x00, 0xf0, 0x00, 0x00) + /* ATT: Read Request (0x0a) len 2 * Handle: 0x0009 Type: Source PAC (0x2bcb) * ATT: Read Response (0x0b) len 24 @@ -497,37 +525,50 @@ static void test_teardown(const void *user_data) * Front Left (0x00000001) * Front Right (0x00000002) */ -#define DISC_SOURCE_PAC \ - DISC_SINK_PAC, \ +#define DISC_SRC_PAC(_caps...) \ + DISC_SNK_PAC(_caps), \ IOV_DATA(0x0a, 0x09, 0x00), \ - IOV_DATA(0x0b, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ - 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ - 0x1e, 0x00, 0xf0, 0x00, 0x00), \ + IOV_DATA(0x0b, 0x01, _caps), \ IOV_DATA(0x0a, 0x0c, 0x00), \ IOV_DATA(0x0b, 0x03, 0x00, 0x00, 0x00) +#define DISC_SRC_LC3 \ + DISC_SRC_PAC(0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ + 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ + 0x1e, 0x00, 0xf0, 0x00, 0x00) + /* ATT: Read Request (0x0a) len 2 * Handle: 0x000f Type: Available Audio Contexts (0x2bcd) * ATT: Read Response (0x0b) len 4 * Value: ff0f0e00 * Handle: 0x000f Type: Available Audio Contexts (0x2bcd) */ -#define DISC_CTX \ - DISC_SOURCE_PAC, \ +#define DISC_CTX(_caps...) \ + DISC_SRC_PAC(_caps), \ IOV_DATA(0x0a, 0x0f, 0x00), \ IOV_DATA(0x0b, 0xff, 0x0f, 0x0e, 0x00) +#define DISC_CTX_LC3 \ + DISC_CTX(0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ + 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ + 0x1e, 0x00, 0xf0, 0x00, 0x00) + /* ATT: Read Request (0x0a) len 2 * Handle: 0x0012 Type: Supported Audio Contexts (0x2bce) * ATT: Read Response (0x0b) len 4 * Value: ff0f0e00 * Handle: 0x0012 Type: Supported Audio Contexts (0x2bce) */ -#define DISC_SUP_CTX \ - DISC_CTX, \ +#define DISC_SUP_CTX(_caps...) \ + DISC_CTX(_caps), \ IOV_DATA(0x0a, 0x12, 0x00), \ IOV_DATA(0x0b, 0xff, 0x0f, 0x0e, 0x00) +#define DISC_SUP_CTX_LC3 \ + DISC_SUP_CTX(0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ + 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ + 0x1e, 0x00, 0xf0, 0x00, 0x00) + /* ATT: Read Request (0x0a) len 2 * Handle: 0x0016 Type: Sink ASE (0x2bc4) * ATT: Read Response (0x0b) len 4 @@ -549,8 +590,8 @@ static void test_teardown(const void *user_data) * Notification (0x01) * ATT: Write Response (0x13) len 0 */ -#define DISC_SINK_ASE \ - DISC_SUP_CTX, \ +#define DISC_SNK_ASE(_caps...) \ + DISC_SUP_CTX(_caps), \ IOV_DATA(0x0a, 0x16, 0x00), \ IOV_DATA(0x0b, 0x01, 0x00), \ IOV_DATA(0x12, 0x17, 0x00, 0x01, 0x00), \ @@ -560,6 +601,11 @@ static void test_teardown(const void *user_data) IOV_DATA(0x12, 0x1a, 0x00, 0x01, 0x00), \ IOV_DATA(0x13) +#define DISC_SNK_ASE_LC3 \ + DISC_SNK_ASE(0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ + 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ + 0x1e, 0x00, 0xf0, 0x00, 0x00) + /* ATT: Read Request (0x0a) len 2 * Handle: 0x001c Type: Source ASE (0x2bc5) * ATT: Read Response (0x0b) len 4 @@ -586,8 +632,8 @@ static void test_teardown(const void *user_data) * Notification (0x01) * ATT: Write Response (0x13) len 0 */ -#define DISC_SOURCE_ASE \ - DISC_SINK_ASE, \ +#define DISC_SRC_ASE(_cfg...) \ + DISC_SNK_ASE(_cfg), \ IOV_DATA(0x0a, 0x1c, 0x00), \ IOV_DATA(0x0b, 0x03, 0x00), \ IOV_DATA(0x12, 0x1d, 0x00, 0x01, 0x00), \ @@ -599,6 +645,11 @@ static void test_teardown(const void *user_data) IOV_DATA(0x12, 0x23, 0x00, 0x01, 0x00), \ IOV_DATA(0x13) +#define DISC_SRC_ASE_LC3 \ + DISC_SRC_ASE(0x06, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x01, \ + 0xff, 0x00, 0x02, 0x02, 0x03, 0x02, 0x03, 0x03, 0x05, 0x04, \ + 0x1e, 0x00, 0xf0, 0x00, 0x00) + static void test_disc(void) { /* The IUT discovers the characteristics specified in the PAC @@ -606,22 +657,23 @@ static void test_disc(void) * The IUT reads the values of the characteristics specified in the PAC * Characteristic and Location Characteristic columns. */ - define_test("BAP/UCL/DISC/BV-01-C", test_client, NULL, DISC_SINK_PAC); - define_test("BAP/UCL/DISC/BV-02-C", test_client, NULL, DISC_SOURCE_PAC); + define_test("BAP/UCL/DISC/BV-01-C", test_client, NULL, DISC_SNK_LC3); + define_test("BAP/UCL/DISC/BV-02-C", test_client, NULL, DISC_SRC_LC3); /* BAP/UCL/DISC/BV-06-C [Discover Available Audio Contexts] * * The IUT successfully reads the value of the Available Audio Contexts * characteristic on the LowerTester. */ - define_test("BAP/UCL/DISC/BV-06-C", test_client, NULL, DISC_CTX); + define_test("BAP/UCL/DISC/BV-06-C", test_client, NULL, DISC_CTX_LC3); /* BAP/UCL/DISC/BV-05-C [Discover Supported Audio Contexts] * * The IUT successfully reads the value of the Supported Audio Contexts * characteristic on the Lower Tester. */ - define_test("BAP/UCL/DISC/BV-05-C", test_client, NULL, DISC_SUP_CTX); + define_test("BAP/UCL/DISC/BV-05-C", test_client, NULL, + DISC_SUP_CTX_LC3); /* BAP/UCL/DISC/BV-03-C [Discover Sink ASE_ID] * BAP/UCL/DISC/BV-04-C [Discover Source ASE_ID] @@ -629,29 +681,33 @@ static void test_disc(void) * The IUT successfully reads the ASE_ID values of each discovered ASE * characteristic on the LowerTester. */ - define_test("BAP/UCL/DISC/BV-03-C", test_client, NULL, DISC_SINK_ASE); - define_test("BAP/UCL/DISC/BV-04-C", test_client, NULL, DISC_SOURCE_ASE); + define_test("BAP/UCL/DISC/BV-03-C", test_client, NULL, + DISC_SNK_ASE_LC3); + define_test("BAP/UCL/DISC/BV-04-C", test_client, NULL, + DISC_SRC_ASE_LC3); } /* ATT: Write Command (0x52) len 23 * Handle: 0x0022 - * Data: 010101020206000000000_cfg + * Data: 0101010202_cfg * ATT: Handle Value Notification (0x1b) len 7 * Handle: 0x0022 * Data: 0101010000 * ATT: Handle Value Notification (0x1b) len 37 * Handle: 0x0016 - * Data: 01010102010a00204e00409c00204e00409c000600000000_cfg + * Data: 01010102010a00204e00409c00204e00409c00_cfg */ #define SCC_SNK(_cfg...) \ - DISC_SOURCE_ASE, \ - IOV_DATA(0x52, 0x22, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x06, 0x00, \ - 0x00, 0x00, 0x00, _cfg), \ + IOV_DATA(0x52, 0x22, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, _cfg), \ IOV_DATA(0x1b, 0x22, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00), \ IOV_NULL, \ IOV_DATA(0x1b, 0x16, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x0a, 0x00, \ 0x20, 0x4e, 0x00, 0x40, 0x9c, 0x00, 0x20, 0x4e, 0x00, \ - 0x40, 0x9c, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, _cfg) + 0x40, 0x9c, 0x00, _cfg) + +#define SCC_SNK_LC3(_cc...) \ + DISC_SRC_ASE_LC3, \ + SCC_SNK(0x06, 0x00, 0x00, 0x00, 0x00, _cc) #define QOS_BALANCED_2M \ { \ @@ -666,8 +722,8 @@ static struct test_config cfg_snk_8_1 = { }; #define SCC_SNK_8_1 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1a, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x1a, 0x00) static struct test_config cfg_snk_8_2 = { .cc = LC3_CONFIG_8_2, @@ -676,8 +732,8 @@ static struct test_config cfg_snk_8_2 = { }; #define SCC_SNK_8_2 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x04, 0x1e, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x1e, 0x00) static struct test_config cfg_snk_16_1 = { .cc = LC3_CONFIG_16_1, @@ -686,8 +742,8 @@ static struct test_config cfg_snk_16_1 = { }; #define SCC_SNK_16_1 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1e, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x1e, 0x00) static struct test_config cfg_snk_16_2 = { .cc = LC3_CONFIG_16_2, @@ -696,8 +752,8 @@ static struct test_config cfg_snk_16_2 = { }; #define SCC_SNK_16_2 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x04, 0x28, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x28, 0x00) static struct test_config cfg_snk_24_1 = { .cc = LC3_CONFIG_24_1, @@ -706,8 +762,8 @@ static struct test_config cfg_snk_24_1 = { }; #define SCC_SNK_24_1 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x00, 0x03, 0x04, 0x2d, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x2d, 0x00) static struct test_config cfg_snk_24_2 = { .cc = LC3_CONFIG_24_2, @@ -716,8 +772,8 @@ static struct test_config cfg_snk_24_2 = { }; #define SCC_SNK_24_2 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x01, 0x03, 0x04, 0x3c, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x3c, 0x00) static struct test_config cfg_snk_32_1 = { .cc = LC3_CONFIG_32_1, @@ -726,8 +782,8 @@ static struct test_config cfg_snk_32_1 = { }; #define SCC_SNK_32_1 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x00, 0x03, 0x04, 0x3c, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x3c, 0x00) static struct test_config cfg_snk_32_2 = { .cc = LC3_CONFIG_32_2, @@ -736,8 +792,8 @@ static struct test_config cfg_snk_32_2 = { }; #define SCC_SNK_32_2 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x01, 0x03, 0x04, 0x50, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x50, 0x00) static struct test_config cfg_snk_44_1 = { .cc = LC3_CONFIG_44_1, @@ -746,8 +802,8 @@ static struct test_config cfg_snk_44_1 = { }; #define SCC_SNK_44_1 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x00, 0x03, 0x04, 0x62, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x62, 0x00) static struct test_config cfg_snk_44_2 = { .cc = LC3_CONFIG_44_2, @@ -756,8 +812,8 @@ static struct test_config cfg_snk_44_2 = { }; #define SCC_SNK_44_2 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x01, 0x03, 0x04, 0x82, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x82, 0x00) static struct test_config cfg_snk_48_1 = { .cc = LC3_CONFIG_48_1, @@ -766,8 +822,8 @@ static struct test_config cfg_snk_48_1 = { }; #define SCC_SNK_48_1 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x4b, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x4b, 0x00) static struct test_config cfg_snk_48_2 = { .cc = LC3_CONFIG_48_2, @@ -776,8 +832,8 @@ static struct test_config cfg_snk_48_2 = { }; #define SCC_SNK_48_2 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x64, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x64, 0x00) static struct test_config cfg_snk_48_3 = { .cc = LC3_CONFIG_48_3, @@ -786,8 +842,8 @@ static struct test_config cfg_snk_48_3 = { }; #define SCC_SNK_48_3 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x5a, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x5a, 0x00) static struct test_config cfg_snk_48_4 = { .cc = LC3_CONFIG_48_4, @@ -796,8 +852,8 @@ static struct test_config cfg_snk_48_4 = { }; #define SCC_SNK_48_4 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x78, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x78, 0x00) static struct test_config cfg_snk_48_5 = { .cc = LC3_CONFIG_48_5, @@ -806,8 +862,8 @@ static struct test_config cfg_snk_48_5 = { }; #define SCC_SNK_48_5 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x75, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x75, 0x00) static struct test_config cfg_snk_48_6 = { .cc = LC3_CONFIG_48_6, @@ -816,28 +872,30 @@ static struct test_config cfg_snk_48_6 = { }; #define SCC_SNK_48_6 \ - SCC_SNK(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x9b, \ - 0x00) + SCC_SNK_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x9b, 0x00) /* ATT: Write Command (0x52) len 23 * Handle: 0x0022 - * Data: 010103020206000000000_cfg + * Data: 0101030202_cfg * ATT: Handle Value Notification (0x1b) len 7 * Handle: 0x0022 * Data: 0101030000 * ATT: Handle Value Notification (0x1b) len 37 * Handle: 0x001c - * Data: 03010102010a00204e00409c00204e00409c000600000000_cfg + * Data: 03010102010a00204e00409c00204e00409c00_cfg */ #define SCC_SRC(_cfg...) \ - DISC_SOURCE_ASE, \ - IOV_DATA(0x52, 0x22, 0x00, 0x01, 0x01, 0x03, 0x02, 0x02, 0x06, 0x00, \ - 0x00, 0x00, 0x00, _cfg), \ + IOV_DATA(0x52, 0x22, 0x00, 0x01, 0x01, 0x03, 0x02, 0x02, _cfg), \ IOV_DATA(0x1b, 0x22, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00), \ IOV_NULL, \ IOV_DATA(0x1b, 0x1c, 0x00, 0x03, 0x01, 0x01, 0x02, 0x01, 0x0a, 0x00, \ 0x20, 0x4e, 0x00, 0x40, 0x9c, 0x00, 0x20, 0x4e, 0x00, \ - 0x40, 0x9c, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, _cfg) + 0x40, 0x9c, 0x00, _cfg) + +#define SCC_SRC_LC3(_cc...) \ + DISC_SRC_ASE_LC3, \ + SCC_SRC(0x06, 0x00, 0x00, 0x00, 0x00, _cc) static struct test_config cfg_src_8_1 = { .cc = LC3_CONFIG_8_1, @@ -846,8 +904,8 @@ static struct test_config cfg_src_8_1 = { }; #define SCC_SRC_8_1 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1a, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x1a, 0x00) static struct test_config cfg_src_8_2 = { .cc = LC3_CONFIG_8_2, @@ -856,8 +914,8 @@ static struct test_config cfg_src_8_2 = { }; #define SCC_SRC_8_2 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x04, 0x1e, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x1e, 0x00) static struct test_config cfg_src_16_1 = { .cc = LC3_CONFIG_16_1, @@ -866,8 +924,8 @@ static struct test_config cfg_src_16_1 = { }; #define SCC_SRC_16_1 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x04, 0x1e, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x1e, 0x00) static struct test_config cfg_src_16_2 = { .cc = LC3_CONFIG_16_2, @@ -876,8 +934,8 @@ static struct test_config cfg_src_16_2 = { }; #define SCC_SRC_16_2 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x04, 0x28, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x03, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x28, 0x00) static struct test_config cfg_src_24_1 = { .cc = LC3_CONFIG_24_1, @@ -886,8 +944,8 @@ static struct test_config cfg_src_24_1 = { }; #define SCC_SRC_24_1 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x00, 0x03, 0x04, 0x2d, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x2d, 0x00) static struct test_config cfg_src_24_2 = { .cc = LC3_CONFIG_24_2, @@ -896,8 +954,8 @@ static struct test_config cfg_src_24_2 = { }; #define SCC_SRC_24_2 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x01, 0x03, 0x04, 0x3c, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x05, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x3c, 0x00) static struct test_config cfg_src_32_1 = { .cc = LC3_CONFIG_32_1, @@ -906,8 +964,8 @@ static struct test_config cfg_src_32_1 = { }; #define SCC_SRC_32_1 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x00, 0x03, 0x04, 0x3c, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x3c, 0x00) static struct test_config cfg_src_32_2 = { .cc = LC3_CONFIG_32_2, @@ -916,8 +974,8 @@ static struct test_config cfg_src_32_2 = { }; #define SCC_SRC_32_2 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x01, 0x03, 0x04, 0x50, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x06, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x50, 0x00) static struct test_config cfg_src_44_1 = { .cc = LC3_CONFIG_44_1, @@ -926,8 +984,8 @@ static struct test_config cfg_src_44_1 = { }; #define SCC_SRC_44_1 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x00, 0x03, 0x04, 0x62, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x62, 0x00) static struct test_config cfg_src_44_2 = { .cc = LC3_CONFIG_44_2, @@ -936,8 +994,8 @@ static struct test_config cfg_src_44_2 = { }; #define SCC_SRC_44_2 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x01, 0x03, 0x04, 0x82, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x07, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x82, 0x00) static struct test_config cfg_src_48_1 = { .cc = LC3_CONFIG_48_1, @@ -946,8 +1004,8 @@ static struct test_config cfg_src_48_1 = { }; #define SCC_SRC_48_1 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x4b, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x4b, 0x00) static struct test_config cfg_src_48_2 = { .cc = LC3_CONFIG_48_2, @@ -956,8 +1014,8 @@ static struct test_config cfg_src_48_2 = { }; #define SCC_SRC_48_2 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x64, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x64, 0x00) static struct test_config cfg_src_48_3 = { .cc = LC3_CONFIG_48_3, @@ -966,8 +1024,8 @@ static struct test_config cfg_src_48_3 = { }; #define SCC_SRC_48_3 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x5a, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x5a, 0x00) static struct test_config cfg_src_48_4 = { .cc = LC3_CONFIG_48_4, @@ -976,8 +1034,8 @@ static struct test_config cfg_src_48_4 = { }; #define SCC_SRC_48_4 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x78, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x78, 0x00) static struct test_config cfg_src_48_5 = { .cc = LC3_CONFIG_48_5, @@ -986,8 +1044,8 @@ static struct test_config cfg_src_48_5 = { }; #define SCC_SRC_48_5 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, 0x75, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x00, 0x03, 0x04, \ + 0x75, 0x00) static struct test_config cfg_src_48_6 = { .cc = LC3_CONFIG_48_6, @@ -996,7 +1054,7 @@ static struct test_config cfg_src_48_6 = { }; #define SCC_SRC_48_6 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ 0x9b, 0x00) /* Test Purpose: @@ -1081,9 +1139,53 @@ static void test_scc_cc_lc3(void) test_client, &cfg_src_48_6, SCC_SRC_48_6); } +static struct test_config cfg_snk_vs = { + .cc = IOV_NULL, + .qos = QOS_BALANCED_2M, + .snk = true, + .vs = true, +}; + +#define DISC_SRC_ASE_VS \ + DISC_SRC_ASE(0xff, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00) + +#define SCC_SNK_VS \ + DISC_SRC_ASE_VS, \ + SCC_SNK(0xff, 0x01, 0x00, 0x01, 0x00, 0x00) + +static struct test_config cfg_src_vs = { + .cc = IOV_NULL, + .qos = QOS_BALANCED_2M, + .src = true, + .vs = true, +}; + +#define SCC_SRC_VS \ + DISC_SRC_ASE_VS, \ + SCC_SRC(0xff, 0x01, 0x00, 0x01, 0x00, 0x00) + +/* Test Purpose: + * Verify that a Unicast Client IUT can initiate a Config Codec operation for a + * vendor-specific codec. + * + * Pass verdict: + * The IUT successfully writes to the ASE Control Point characteristic with the + * opcode set to 0x01 (Config Codec) and the specified parameters. The Codec_ID + * parameter is formatted with octet 0 set to 0xFF, octets 1–2 set to + * TSPX_VS_Company_ID, and octets 3–4 set to TSPX_VS_Codec_ID. + */ +static void test_scc_cc_vs(void) +{ + define_test("BAP/UCL/SCC/BV-033-C [UCL SRC Config Codec, VS]", + test_client, &cfg_snk_vs, SCC_SNK_VS); + define_test("BAP/UCL/SCC/BV-034-C [UCL SNK Config Codec, VS]", + test_client, &cfg_src_vs, SCC_SRC_VS); +} + static void test_scc(void) { test_scc_cc_lc3(); + test_scc_cc_vs(); } int main(int argc, char *argv[])