From patchwork Thu Apr 27 23:13:44 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: 13225835 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 E1F2EC77B73 for ; Thu, 27 Apr 2023 23:13:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344396AbjD0XN7 (ORCPT ); Thu, 27 Apr 2023 19:13:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229750AbjD0XN5 (ORCPT ); Thu, 27 Apr 2023 19:13:57 -0400 Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E70F12728 for ; Thu, 27 Apr 2023 16:13:56 -0700 (PDT) Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-63b4dfead1bso7544154b3a.3 for ; Thu, 27 Apr 2023 16:13:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637235; x=1685229235; 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=fD98UNrGVnUOStAHNsRFI4ocEt9N8+GJ0roKMNIkbdiNcNAnGTKJBUnkZyK/gEROHC yZBsutVwBdrAQNyOQFTqGAUEjq9Q3YZJeDBNWCIetuk32Yz15XbzBZh037+HinEKwj+3 ahYyuxQuvT7Doho1PaIFIVPqGaciY6ijLs0ooaCeUwsMReBTcPojKfGXZ5hgsUS6mk3Y 9xx/RD+T/62iv/9Lp4Zi1JAHu1Xbl0HSyHfFClYmEAViioj/sBTG37+4W3oEQKdyj3ie ILgBwMN04LW4z+xo5FRtCDRC4zTcPDFQVfN2Fwz6zK1dkdjRjApuH8ORkYgjhWFai8cf d4PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637235; x=1685229235; 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=UanokI+pCUAj9/PGVrd5iDzM06qy6b9HO7XHgdBASelOMzs/vLfrJlufZCvlCym8PN 61PC8mk02FAvLzXDjyv/V7G4X551OsKy8G46Dle9Tz9c0cHKZtA9vdR8Lmq4BUEVNJt9 TRzSCYtKF6CS8PqCngSxrTfJCft3rt4CbhwsZDFvOMiDYYQj/zE2it8G/TnMzkxBumq3 4V5VVlKuDCC5TNEKAxIXcm+xIsZeJwRE+LMcH1flJ+uAKNyKUk9Vcl+RW7sHroRVS7bJ SE6kJyIKaq2XBWASxQ4be1YzXP63kv4r1Js/GaKwJjhGMxbX/C9Sr+pW5KsRVYzWUrw8 WcFQ== X-Gm-Message-State: AC+VfDxu1d8Kp55hTLCboGCNAFf5cvGTw+emCd/kDTa3DK7Ztzcs+r98 1GVdruAnoneNSAu/kaZhmBlpPj1HoW0= X-Google-Smtp-Source: ACHHUZ66pbIUfdsFfc/i4PVo6F1xmrPBh+mU1/jwMkD01n6BBtThtY/m5Wyk9SJ5D360pCbgsocKWQ== X-Received: by 2002:a17:902:e414:b0:1a2:87a2:c910 with SMTP id m20-20020a170902e41400b001a287a2c910mr2419676ple.53.1682637234695; Thu, 27 Apr 2023 16:13:54 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.13.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:13:53 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 1/9] media: Fix not storing Preferred Delay properly Date: Thu, 27 Apr 2023 16:13:44 -0700 Message-Id: <20230427231352.576337-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 Thu Apr 27 23:13: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: 13225836 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 AE517C77B7C for ; Thu, 27 Apr 2023 23:14:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344397AbjD0XN7 (ORCPT ); Thu, 27 Apr 2023 19:13:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344392AbjD0XN6 (ORCPT ); Thu, 27 Apr 2023 19:13:58 -0400 Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B442272E for ; Thu, 27 Apr 2023 16:13:57 -0700 (PDT) Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1a6c5acf6ccso68627305ad.3 for ; Thu, 27 Apr 2023 16:13:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637236; x=1685229236; 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=AUsdcvOUV2SYGTtqt85wN9HDnKzS1ZZjKAW3gyYUK2WoRPGdoRpFJ5HmY+dZwYw6pV +Nk02P/zZy4F/aZIlwlOEWy8EyJ9ZyrZnN4AuPlKmx5H1vuDeAZc+xU1PGgLjMG/zlO5 7wOyI3LwWa0fc3gP5KJ0NAtuvPshW1smTzzHRxfudeNHIML83t35FUuSCOI5xWoPxeAm ZaH3a7y017k1f4XS0MQxk+R8NcmgCVYj1oekNe2lZx9nx2M17NL59i0PlmUYiWkf22Lp juLNndzj9BSz/tGjdA/GfsO0nLrV07G31TQS9dSR91jqEz8TwU4yXmc0+OY7nn1KTIpG sr8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637236; x=1685229236; 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=GnQAoZavMef6eGs2jvX3g4Qae7/ynGBVx/iq32hbkX4h4Ddyu95V837LLaBJ7BSlAb I/1uO571oRRN89GRpkJEh6wz9sJoxMsy/U6mBJQaS96QkaahbrMXQlKyA0xxDCLV+TFq dCaFvcoPLrPMohNqz1KvPo+9XEoIVSS79iUH2ZyB0rFcecQv0V1yXXms9FXkYFrF9b3f D2K7iRRwP6O6DsMFYREiXpQdUNcE9b+TDxeUsxwuE7CDS7vpikGMuJskq4+Y1NsQ8/Xp N2w0yOLJXPYq8x7Kh94aPxGeyCTQTUx6bDv+ttembcQ4blg/imbbzhD3uHGVYRk9emlV sXWg== X-Gm-Message-State: AC+VfDzztT26gTw2Mmua8SGhvL63nx2OSlrNrAyCuNIo++Pavyj+vVYl 8Z8oY3YQm1d5SCibBdKL4fSfo77IWms= X-Google-Smtp-Source: ACHHUZ7s6hCcX/obmYzC4AwT+FB71nm0BKbRpqkxnpH1ytzzmc1l2ldd4A3l5pmF/GU2+KqQyDtPww== X-Received: by 2002:a17:902:8c91:b0:1a9:2b7f:a594 with SMTP id t17-20020a1709028c9100b001a92b7fa594mr3100044plo.29.1682637236184; Thu, 27 Apr 2023 16:13:56 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.13.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:13:55 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 2/9] shared/bap: Fix crash detaching streams Date: Thu, 27 Apr 2023 16:13:45 -0700 Message-Id: <20230427231352.576337-2-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Thu Apr 27 23:13: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: 13225837 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 09C6FC77B61 for ; Thu, 27 Apr 2023 23:14:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344392AbjD0XOB (ORCPT ); Thu, 27 Apr 2023 19:14:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33156 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344399AbjD0XOA (ORCPT ); Thu, 27 Apr 2023 19:14:00 -0400 Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76A8F272E for ; Thu, 27 Apr 2023 16:13:59 -0700 (PDT) Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-1a516fb6523so92930795ad.3 for ; Thu, 27 Apr 2023 16:13:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637238; x=1685229238; 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=UKOCOv/CBXUfnQVbEq4cO4b+YoohtaUpo8Hcr3T4Xoajzxy/LxRrRIawdCqrjxCz4R ezj58lUMhqLjM4l3JxNjlkARzG31rTN8gbSppYGiz+M7ZHy+IwQQvAKdNLUzMFOeOc3w psWB7OSaV4C7TI2yx+ijHkgvGS/GMpWFXb98xaPCwAUH+CNKOYfoE05kMtgZKug2FkZq B0D13SSDdMEIsIQKZzkIdCExcmwwvWvW+MbcBhcmLNAgK8vWtR/M10vYcb9dUrYcfTBu LBs/pJBiOjQz4zrhLfCINmFazVyLabsunGlWe0SNQB4M+tAR08qVCpTID/ZBX9XCABIb QAsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637238; x=1685229238; 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=J+y7xpCPUbnqPlvWv86E9UQZvYOb4HHina7AYW+/gqtPiYmUwxopHad2IEfwrQA7ia b3jTYGV7SDO5p18s380frN4YHHpK0fiS4Xl/owucE1i4pc9VFJ/TluAQqQSqv+EMkfky uyOr2Idd5iZQ2K8CBs0FjxoRMXXhTdzG0xcbBmb39TZvnLQpqm6P3LOGxHE45OnIhEn+ GjciGSM+m/nB3eG+pA6eVL6v0P+p7vPETyHnh4WJKlLcR3Gb/+8zPvOG+IVM3MkeNmRO H3w+SVXYSjM+JM1x2TvVo5Bb/v+CDEp7YnYjJGPmihdg2KLbM+MI3n5O8A/cX8vl9Ijq 3G8g== X-Gm-Message-State: AC+VfDyEc6wTAApL6mHjxkksa0gFU4m4M5eOgDCIGv1mKIE4LcfVgGJg 6fvrPPFvLcqBZURSgjAPlEhVEETZRFU= X-Google-Smtp-Source: ACHHUZ7E8f6CwatxLsugqTHSL0M8oAVZzcsTpUdiGWvSK/6sTRZaKJAlYpsf6EIB4UmFcplwx2r89Q== X-Received: by 2002:a17:903:32ce:b0:1a6:3d8e:face with SMTP id i14-20020a17090332ce00b001a63d8efacemr3906178plr.0.1682637238095; Thu, 27 Apr 2023 16:13:58 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.13.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:13:56 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 3/9] share/bap: Fix not removing timeout on bap_free Date: Thu, 27 Apr 2023 16:13:46 -0700 Message-Id: <20230427231352.576337-3-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Thu Apr 27 23:13: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: 13225838 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 A0073C77B73 for ; Thu, 27 Apr 2023 23:14:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344400AbjD0XOD (ORCPT ); Thu, 27 Apr 2023 19:14:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344395AbjD0XOC (ORCPT ); Thu, 27 Apr 2023 19:14:02 -0400 Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 568B330E9 for ; Thu, 27 Apr 2023 16:14:01 -0700 (PDT) Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1a92369761cso70991685ad.3 for ; Thu, 27 Apr 2023 16:14:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637240; x=1685229240; 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=UI07YG/w2BfIJkd6eJlMxN5aBk3a2WmyZwY5ridfdZkw/4id0rJYWO+q9HiGAUnHtv svmbinNxguCc9qYKRBUnHzIa0tvf2wayuqghsnDYUeNzSlw00FThpE21wXEEdTjuMEs2 4fyX4WNI8srPpVqUeYkwnPiGsl7ybKY7b0imR6IspaEbNHsh8iMentvGCnvX+E1J2LQ6 TnC+q/Tqc//f3kbDFSPvB+/rZqwGtRMSITs8y0KxdSNiCc8O43NHO2ghsJBWgf4ffJb5 Imb4RS/eCP2VjrLg2KX+bc0j0D8Bu8OwvFECmSLQ8xQ75SEPiev3mfOoBaC0bV4ped7I vq7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637240; x=1685229240; 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=WrkcsOddUVLPmx0tdnDMb9+yOYN9jfw38YgLbtcJ8QQaiTyZ6hKUYF/6hrY9IZp7TM UA5ia/5jP/R3JZQi2VqQDAhloQj3D2ZnZRSOCyWlJJMPtHrFbDney+yaqnN4D/reBg/s Q9tt02zs9fflAdoOYKwPEgwG+DHjSqjYtr1TXcYyaaAyi0TsmQwkPjK1IW6Z2vsnAjjK sGPbek2H9jdh47gJri6FP1sMOSiXA9IukCgO7Wa8MOY+dEehye1BPaqeqf+3CvlrLOyf D8L1b9XnAETNmvv2VO5x9BHHxcb1mMyqvzgu0wQLQ181ZEtME75RzTe01QXaYCQfjkqf fpmw== X-Gm-Message-State: AC+VfDwg14aUiBICI+/8yAd1SjbbAsvrhQDfsllRiJ6zzEgAWohw/Tt3 2gzx/oy/KyJKR8lqJHk13C4GYdR3110= X-Google-Smtp-Source: ACHHUZ6tftQCK0hCO6BKNbvKxgN8yK+8TS1aYShD+N9ufEjzA2jlkREpyz7JoAxPZWsHHBUeFdF1iA== X-Received: by 2002:a17:903:22c8:b0:1a6:9ec2:a48f with SMTP id y8-20020a17090322c800b001a69ec2a48fmr3659933plg.34.1682637239991; Thu, 27 Apr 2023 16:13:59 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.13.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:13:58 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 4/9] shared/tester: Add support for NULL PDUs Date: Thu, 27 Apr 2023 16:13:47 -0700 Message-Id: <20230427231352.576337-4-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Thu Apr 27 23:13: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: 13225839 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 1260FC77B61 for ; Thu, 27 Apr 2023 23:14:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344395AbjD0XOF (ORCPT ); Thu, 27 Apr 2023 19:14:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33218 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344402AbjD0XOE (ORCPT ); Thu, 27 Apr 2023 19:14:04 -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 6B4CF2D65 for ; Thu, 27 Apr 2023 16:14:03 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1a920d484bdso71213675ad.1 for ; Thu, 27 Apr 2023 16:14:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637242; x=1685229242; 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=UYihX9RyEjy0a2X9L632qPfzhAXmqMj3aQUUQpNHEqRal5X20Y1MibQn7od/Re/CoW f/sxB+cJbiwuZx+iiwWu8xFkWX3IeUO+N7QtxtehoAVZYQ41dVeOpNHoY18SVIKON2jp GDhPmi1txNcLNTB53NMEwR06a5fLaLxQBw7DUhqSnyPx5ysZF5Vw328iQr1oIVqCeq0M dPEQfssmT7ZhXK4T7TmioTilyfGMBMA/XCd6xYv6uiZ6R6EXxVc1UxFjiOnTIoKkBdHW MlG/n2g+WvFfr8WnLnKGN29z9rGOe+3yFpmdWTbZ1mOvGltCAk5vf3WJ73oRjr89OdWs lfdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637242; x=1685229242; 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=EvgPBQ0u3qAmbtuQaVIUOSGJGRt/ltZ8uZ+UBkFrdWgo+36Ae6dpaFEkLqNye/KF1R Qy99/Mgdk0YQp+5F5yZZrnoLLgane/rX9EidGiPxmG2SE5Z1nKz5C/56Z8ok4rOjmhDS X20wbk/JWIuvkMAPFUmQFEPAZkPQj0xoxWpOrWzGj+xUNqiizH6fz/TTgg2oQRB88EGd vDEF8bDJ5Njj7IyuwgzOfrClky59NHnyb2Fw+X63Lw5xHfJXa8+7f/iz9YuCtQO8bXuA 72I4OSf8XpzTUJBkji/uKA0CjTVEwrA3sEcVPyzQ0xTGoqi+41oDv+tXjAxAT/SS7QBw HW6w== X-Gm-Message-State: AC+VfDyNjvRxdqSwnskBIvTqGQIfyesIWCnGnXqml8ko2vwhZ8q0SonH wUSiZlpB9KPFl2wfPfAeINSJmuqOj6E= X-Google-Smtp-Source: ACHHUZ7vMzoGUpNdO+MV6ccX2mX/usJJ1XWfEn7ta1d9He0B6QLkoM46iBJrSAQEqx7+FtKBp2o6zw== X-Received: by 2002:a17:902:c40e:b0:1a9:7e24:eb23 with SMTP id k14-20020a170902c40e00b001a97e24eb23mr4183632plk.52.1682637241843; Thu, 27 Apr 2023 16:14:01 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.14.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:14:00 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 5/9] shared/bap: Fix typo Date: Thu, 27 Apr 2023 16:13:48 -0700 Message-Id: <20230427231352.576337-5-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Thu Apr 27 23:13: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: 13225840 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 AEFC8C77B73 for ; Thu, 27 Apr 2023 23:14:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344402AbjD0XOJ (ORCPT ); Thu, 27 Apr 2023 19:14:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344325AbjD0XOI (ORCPT ); Thu, 27 Apr 2023 19:14:08 -0400 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 48FE4272E for ; Thu, 27 Apr 2023 16:14:05 -0700 (PDT) Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-63b7096e2e4so7545170b3a.2 for ; Thu, 27 Apr 2023 16:14:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637244; x=1685229244; 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=h9A6PKxIWocRFW9Z9McsKB1Uoq+EN2gdoys77TpuWL5JIzSs6+tbwYPOJ+DPpgXfGC lM7yNcYStjYGBfs4rZnSviwU/QT4Do9lu2thujAHlfnFr7T4mOXQ/qi9pgn9TQkJFqmC Zdp2VR0rpMFsKIjyMN+fJKAoIh+9bg7jYQBds1CEbAf8Krlb1ZfOOXg13WT0SPNbvx9c eITf06WGxf8yswKJj5dDHwRjnIe2S/ywSOScGWBkMjV8usQWzx1c3rvN9bpzT9xyTZj2 kSyCYsgLxzyzj45GDGjg4ld/N0ynO20Lt2uhIpD8172ml9h+NnwI5JvDrk1WZ1oZpd/U VvBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637244; x=1685229244; 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=XeNAxDLjHbwHWOIS/IQZOlHT4tL4Uoqe5wEnjB/60daqPSC/M8qXJYtzCRNhjRrecF 14vyO3PfyfYVQ0CdB1vmsX4KHoxn1H4/i2V/JlXY/WfR6Sln4DOM/y0qfksD+1la3uto NWQzXV/0775IRkC+/s2JOWL+Us/3N0Qp/XbQClhAngx2ERA2czmDGsb7/Gjqp6ubICz3 zxLxnOtOnWatUVBvMPuKc7HJpymM10UvIt1NsIpRuqhUK944lP9XnOL2hcN0PW9yqUfB +5erQYYcO+44hoCfRq5LCkqZGInwR3wx1zYpuNOU3KeTfMCcFf6u5Ff+JPfEb74zj5XJ CrAQ== X-Gm-Message-State: AC+VfDwK8nCj5IUZIlEokbU/0WflAtz10YuJw+tdWPRyRZHJX9zMfyFq Lm0UQfQYzXtZ86vskGn5iBrJ4LYiA6A= X-Google-Smtp-Source: ACHHUZ7itMpNLtKLG0xG4rpimFPJO8wtNvGbtaDbUQKBNalrLz2JeefTrx5jG7ZQvK/zVuGrj54CYw== X-Received: by 2002:a17:902:e884:b0:1a1:f0cb:1055 with SMTP id w4-20020a170902e88400b001a1f0cb1055mr3995429plg.28.1682637243814; Thu, 27 Apr 2023 16:14:03 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.14.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:14:02 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 6/9] shared/lc3: Update configuration to use iovec Date: Thu, 27 Apr 2023 16:13:49 -0700 Message-Id: <20230427231352.576337-6-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Thu Apr 27 23:13:50 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: 13225841 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 7729AC77B73 for ; Thu, 27 Apr 2023 23:14:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344406AbjD0XON (ORCPT ); Thu, 27 Apr 2023 19:14:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344407AbjD0XOM (ORCPT ); Thu, 27 Apr 2023 19:14:12 -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 89A314203 for ; Thu, 27 Apr 2023 16:14:07 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1a682eee3baso67828705ad.0 for ; Thu, 27 Apr 2023 16:14:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637246; x=1685229246; 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=lq3LJobPFKKVVkTrjg4cHqsfC7i4QUvIuJQ6ilErgnM=; b=ro9F6eiH65ijMePnOpBOW4jg+l3MsyERaovNA8BVK6SYrmfM6X7rP82WVXX8/i3UXH y2uDTiUWObZ92uP1kdSg/u441xAqBFdMyENpKgYj/BYDy5bcq9iBZHAXXV/U0f+2wN7f M8yVbbTR8prRhD/l6bhRPYsCvvevbardYFw/3oXm1KkiEKjKKi+uBcBGnSCTjjmGG6sK f7IPDkaFlCHkKliFTYLC6Lws95e2k20U+0+cElRvQ2IgxBehFSisYDVzHnTXM9DYkmXs TeaaTpkYrMgTt9+grFIj95oUivEYZ4q8p/2nkiT2LphUptz82fufBDUpBOIFI3cO5bI5 59vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637246; x=1685229246; 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=lq3LJobPFKKVVkTrjg4cHqsfC7i4QUvIuJQ6ilErgnM=; b=XPQY6o2mJuWT79hQDrMWHzFgw1pf0LBkorzfGD1fKH1HghiO0ys+/BHf5tQXmKe4cN QQQkUfw8T5JbgY2gQ5uvF5ERK0PAqLd+gLo1ISGYktWQDTq8ElenbpxG3JohkL75DPs0 D6h0l7kGFUQ5pDoDhhFOoJypgym14R0+40IKYHQspZtJsi7WynkiUhF/BFMMQkliMnqD IptkosraMlE7QATEIk+813XLHbCMa1iJXai6nPeojZ5EJ5azVQmkQ/A/xRtKJg2fXa96 U3IBlCYR/xjdaC8E4MknNvQ4TkkEuCoHVsO9LlcmgHj/Takr8GHXWK1rco4AikYAwJk4 aV1Q== X-Gm-Message-State: AC+VfDzSGj8PS4y5m+udsr+s8bg9w6WmGvlqMiKFaRtWuBtmmsaoYUKb NP7PnztUgKfqyPEb1WtpD6XXSNeZfR4= X-Google-Smtp-Source: ACHHUZ7axLfVJ5o1TmWypn5TGGIC0LBwLWwlxg3jUegpqtpvszqwyWiyOvl6n3FjuPpjF0chROHI2g== X-Received: by 2002:a17:902:da88:b0:1a6:81b5:9137 with SMTP id j8-20020a170902da8800b001a681b59137mr3327720plx.68.1682637245810; Thu, 27 Apr 2023 16:14:05 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.14.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:14:04 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 7/9] test-bap: Introduce SCC tests for LC3 Date: Thu, 27 Apr 2023 16:13:50 -0700 Message-Id: <20230427231352.576337-7-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Passed BAP/UCL/SCC/BV-002-C Passed BAP/UCL/SCC/BV-003-C Passed BAP/UCL/SCC/BV-004-C Passed BAP/UCL/SCC/BV-005-C Passed BAP/UCL/SCC/BV-006-C Passed BAP/UCL/SCC/BV-007-C Passed BAP/UCL/SCC/BV-008-C Passed BAP/UCL/SCC/BV-009-C Passed BAP/UCL/SCC/BV-010-C Passed BAP/UCL/SCC/BV-011-C Passed BAP/UCL/SCC/BV-012-C Passed BAP/UCL/SCC/BV-013-C Passed BAP/UCL/SCC/BV-014-C Passed BAP/UCL/SCC/BV-015-C Passed BAP/UCL/SCC/BV-016-C Passed BAP/UCL/SCC/BV-017-C Passed BAP/UCL/SCC/BV-018-C Passed BAP/UCL/SCC/BV-019-C Passed BAP/UCL/SCC/BV-020-C Passed BAP/UCL/SCC/BV-021-C Passed BAP/UCL/SCC/BV-022-C Passed BAP/UCL/SCC/BV-023-C Passed BAP/UCL/SCC/BV-024-C Passed BAP/UCL/SCC/BV-025-C Passed BAP/UCL/SCC/BV-026-C Passed BAP/UCL/SCC/BV-027-C Passed BAP/UCL/SCC/BV-028-C Passed BAP/UCL/SCC/BV-029-C Passed BAP/UCL/SCC/BV-030-C Passed BAP/UCL/SCC/BV-031-C Passed BAP/UCL/SCC/BV-032-C Passed Total: 32, Passed: 32 (100.0%), Failed: 0, Not Run: 0 Overall execution time: 0.373 seconds --- unit/test-bap.c | 538 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 531 insertions(+), 7 deletions(-) diff --git a/unit/test-bap.c b/unit/test-bap.c index afeefac84091..269dcf6520c0 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,456 @@ 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) + +static void test_scc(void) +{ + /* 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. + */ + define_test("BAP/UCL/SCC/BV-001-C", test_client, &cfg_snk_8_1, + SCC_SNK_8_1); + define_test("BAP/UCL/SCC/BV-002-C", test_client, &cfg_snk_8_2, + SCC_SNK_8_2); + define_test("BAP/UCL/SCC/BV-003-C", test_client, &cfg_snk_16_1, + SCC_SNK_16_1); + define_test("BAP/UCL/SCC/BV-004-C", test_client, &cfg_snk_16_2, + SCC_SNK_16_2); + define_test("BAP/UCL/SCC/BV-005-C", test_client, &cfg_snk_24_1, + SCC_SNK_24_1); + define_test("BAP/UCL/SCC/BV-006-C", test_client, &cfg_snk_24_2, + SCC_SNK_24_2); + define_test("BAP/UCL/SCC/BV-007-C", test_client, &cfg_snk_32_1, + SCC_SNK_32_1); + define_test("BAP/UCL/SCC/BV-008-C", test_client, &cfg_snk_32_2, + SCC_SNK_32_2); + define_test("BAP/UCL/SCC/BV-009-C", test_client, &cfg_snk_44_1, + SCC_SNK_44_1); + define_test("BAP/UCL/SCC/BV-010-C", test_client, &cfg_snk_44_2, + SCC_SNK_44_2); + define_test("BAP/UCL/SCC/BV-011-C", test_client, &cfg_snk_48_1, + SCC_SNK_48_1); + define_test("BAP/UCL/SCC/BV-012-C", test_client, &cfg_snk_48_2, + SCC_SNK_48_2); + define_test("BAP/UCL/SCC/BV-013-C", test_client, &cfg_snk_48_3, + SCC_SNK_48_3); + define_test("BAP/UCL/SCC/BV-014-C", test_client, &cfg_snk_48_4, + SCC_SNK_48_4); + define_test("BAP/UCL/SCC/BV-015-C", test_client, &cfg_snk_48_5, + SCC_SNK_48_5); + define_test("BAP/UCL/SCC/BV-016-C", test_client, &cfg_snk_48_6, + SCC_SNK_48_6); + define_test("BAP/UCL/SCC/BV-017-C", test_client, &cfg_src_8_1, + SCC_SRC_8_1); + define_test("BAP/UCL/SCC/BV-018-C", test_client, &cfg_src_8_2, + SCC_SRC_8_2); + define_test("BAP/UCL/SCC/BV-019-C", test_client, &cfg_src_16_1, + SCC_SRC_16_1); + define_test("BAP/UCL/SCC/BV-020-C", test_client, &cfg_src_16_2, + SCC_SRC_16_2); + define_test("BAP/UCL/SCC/BV-021-C", test_client, &cfg_src_24_1, + SCC_SRC_24_1); + define_test("BAP/UCL/SCC/BV-022-C", test_client, &cfg_src_24_2, + SCC_SRC_24_2); + define_test("BAP/UCL/SCC/BV-023-C", test_client, &cfg_src_32_1, + SCC_SRC_32_1); + define_test("BAP/UCL/SCC/BV-024-C", test_client, &cfg_src_32_2, + SCC_SRC_32_2); + define_test("BAP/UCL/SCC/BV-025-C", test_client, &cfg_src_44_1, + SCC_SRC_44_1); + define_test("BAP/UCL/SCC/BV-026-C", test_client, &cfg_src_44_2, + SCC_SRC_44_2); + define_test("BAP/UCL/SCC/BV-027-C", test_client, &cfg_src_48_1, + SCC_SRC_48_1); + define_test("BAP/UCL/SCC/BV-028-C", test_client, &cfg_src_48_2, + SCC_SRC_48_2); + define_test("BAP/UCL/SCC/BV-029-C", test_client, &cfg_src_48_3, + SCC_SRC_48_3); + define_test("BAP/UCL/SCC/BV-030-C", test_client, &cfg_src_48_4, + SCC_SRC_48_4); + define_test("BAP/UCL/SCC/BV-031-C", test_client, &cfg_src_48_5, + SCC_SRC_48_5); + define_test("BAP/UCL/SCC/BV-032-C", test_client, &cfg_src_48_6, + SCC_SRC_48_6); } int main(int argc, char *argv[]) @@ -563,6 +1086,7 @@ int main(int argc, char *argv[]) tester_init(&argc, &argv); test_disc(); + test_scc(); return tester_run(); } From patchwork Thu Apr 27 23:13:51 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: 13225842 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 00BD1C77B61 for ; Thu, 27 Apr 2023 23:14:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344408AbjD0XOQ (ORCPT ); Thu, 27 Apr 2023 19:14:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344407AbjD0XOP (ORCPT ); Thu, 27 Apr 2023 19:14:15 -0400 Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DF51644A0 for ; Thu, 27 Apr 2023 16:14:09 -0700 (PDT) Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-1a68f2345c5so71048335ad.2 for ; Thu, 27 Apr 2023 16:14:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637248; x=1685229248; 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=OnNo1Q6YWVxmFrmHu28/csR4ckusSUBOsDEQaptHZ9juM5tmM4z7m+sco6tvYD121W Oq2xQe+y9VsKcYlg6M2laEq/EBmjaklRegJdWOe5rd5GpH6etPLfbxUBOpxqggqUHSVS niGPwfYd7Z232ztFE960DWFEhJd6bWfE2joeXSvX2WXT2+pQkUiNhsHkR4SJF4ayq0zA DFM+6ejxA7+JCxUdn0ax7RcDK8mBuBDEqbfvFFxGwx73m65Bi9wid72DVngnf32Qop7u Y/yfaUvL2SaFwixhLs5BzN+F1D6ajPW4DPmrcUGYXVlLc/BsVAo+1+EfBITFEXTXSa69 LR1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637248; x=1685229248; 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=ACjoFemux/MWkZIDNfzP7XwPzShXI3vCmBuChIOJYJtWAzCPQQKdpDjJ5EKAUVAjMf AcJZMyvtzCxv4t3G6UhXVZwuN+PpQSN5c5dhoaoYkNr0oheLlFH8I1x8XpvnqzrhOiQw GL6GesVvsOgTv0tK0dgwDHpRZGTK6U/ptW4iKe8Wf2tRmOxYpdTAMfGzjihr0mcrZbgr WgJwcDPFaAQ81EH/mOvWMtp6vXzpWHwxdNnjlB7oGPckn4iTwtDakDWcdgOBQnqMXfi5 bW6MxpzGYNjbCwremzQdIA6/UGYVQ9xnseOMnj5v4Y9tHBXzRIWAsNm272TQB1HMt/CA zjOA== X-Gm-Message-State: AC+VfDzMHPOqtPoEwAKq038YdOHsI8IB3hUgmV4tTNolYjIkyN60rJNl yFL7Inl/PT7lAIptZN/nF1B5d/eI1zs= X-Google-Smtp-Source: ACHHUZ4RyrmEV6/tTOn/9w7q1tTb7S7Xu3hEyPhTBG4jdD43cczMHM7OA3MwsiropFBgpTrfxrLPng== X-Received: by 2002:a17:902:b10b:b0:1a6:983d:a1ec with SMTP id q11-20020a170902b10b00b001a6983da1ecmr2857099plr.26.1682637248370; Thu, 27 Apr 2023 16:14:08 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.14.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:14:06 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 8/9] shared/util: Fix runtime error Date: Thu, 27 Apr 2023 16:13:51 -0700 Message-Id: <20230427231352.576337-8-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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 Thu Apr 27 23:13:52 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: 13225843 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 3A7ADC77B73 for ; Thu, 27 Apr 2023 23:14:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344411AbjD0XOX (ORCPT ); Thu, 27 Apr 2023 19:14:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344283AbjD0XOV (ORCPT ); Thu, 27 Apr 2023 19:14:21 -0400 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 AF48744AE for ; Thu, 27 Apr 2023 16:14:12 -0700 (PDT) Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1a682eee3baso67829145ad.0 for ; Thu, 27 Apr 2023 16:14:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1682637251; x=1685229251; 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=W63wz9PM6AvCAMQzs8mg0htB9fJPZP4GWCCPe/Uebys=; b=EJhPMYUSxXAfWtFiViyLO+Hx2xJ3Q6xaOPggLkzZvJlGNyrdenZ0INhW/HGRFNQXf9 rNYAXrUF3vTRodjCk2RBzGQpelrTCmKwx07H/fnitgDbrUWB16z2RvWFCLLofQLbGj8R R8OEkhQ5kquUguo5mr5o2aIKV4tGTCei7iDuuVsZUYRYMJlfoOyPJY9Eb9n2i3Iyxf+p Hw+0C2Ss6x7xZEuCSnvj7NKGOD4Mg9PMb7zumI4pWsZJ4p2CEaUNCZwQQ1jF8TFfwH5a 43cY9BZawYOBgEaQo94Q5ax1HocW044vAORaQJD9217sbRH2fB146swp6TuDSCCCmtKt rLnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682637251; x=1685229251; 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=W63wz9PM6AvCAMQzs8mg0htB9fJPZP4GWCCPe/Uebys=; b=LSHrjjpyUOsmaUnFRGXUED6B246RPnYnnQ3kp8sYMT/9e1xLOSSKL+snrYYIqYLwaU Y5K6Gx5+6o3aZJ6CIxlWavlFtB0qoD2+Kr/2q49BXM1hn3JRPqziWjam77vbMJ9V+gFe MrqbXf2y+iSmGIc1Bib9nbiMamHbK+xgQAiJdHnKGJfo5T8FFe3uA1WYpZa5OL9WwVbb LbX28vvYh/svsynIDkqvmvWQS9T2EB2545X5oCW+3hq/Rsws/IEBwxflLwDccnKs6wKn ksn9bXtVxAGcalwvAKugxTbS4NV7+KrOZdzhXLz/kPygsGJOqwlvJcdBuJ/Rrz5bavIa P/9g== X-Gm-Message-State: AC+VfDxAhoLJi4seIRyB+3DIXV3fMgx8ZoymRsseo9mwJeazCWFcZw6P 6wwJ55q+JObC2BFEJZkNbS3KCnjPo6c= X-Google-Smtp-Source: ACHHUZ4C7oq+jlfHsSFlZpwb6LCbQ7OSVKgV35BbE5STEEKaRYW0DR6T9h3XkDqyO7DO/bG68cZ9QQ== X-Received: by 2002:a17:902:cf44:b0:1a1:b528:9bea with SMTP id e4-20020a170902cf4400b001a1b5289beamr2840512plg.50.1682637250823; Thu, 27 Apr 2023 16:14:10 -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 c5-20020a170902aa4500b001a24cded097sm12112369plr.236.2023.04.27.16.14.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Apr 2023 16:14:08 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [BlueZ PATCH v3 9/9] test-bap: Add SCC tests for Vendor-Specific codec Date: Thu, 27 Apr 2023 16:13:52 -0700 Message-Id: <20230427231352.576337-9-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230427231352.576337-1-luiz.dentz@gmail.com> References: <20230427231352.576337-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. BAP/UCL/SCC/BV-033-C Passed BAP/UCL/SCC/BV-034-C Passed --- unit/test-bap.c | 334 +++++++++++++++++++++++++++++++----------------- 1 file changed, 216 insertions(+), 118 deletions(-) diff --git a/unit/test-bap.c b/unit/test-bap.c index 269dcf6520c0..241dffbd1c09 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,8 +1054,33 @@ static struct test_config cfg_src_48_6 = { }; #define SCC_SRC_48_6 \ - SCC_SRC(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, 0x9b, \ - 0x00) + SCC_SRC_LC3(0x0a, 0x02, 0x01, 0x08, 0x02, 0x02, 0x01, 0x03, 0x04, \ + 0x9b, 0x00) + +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) static void test_scc(void) { @@ -1079,6 +1162,21 @@ static void test_scc(void) SCC_SRC_48_5); define_test("BAP/UCL/SCC/BV-032-C", test_client, &cfg_src_48_6, SCC_SRC_48_6); + /* 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. + */ + define_test("BAP/UCL/SCC/BV-033-C", test_client, &cfg_snk_vs, + SCC_SNK_VS); + define_test("BAP/UCL/SCC/BV-034-C", test_client, &cfg_src_vs, + SCC_SRC_VS); } int main(int argc, char *argv[])