@@ -335,7 +335,7 @@ static void test_complete_cb(const void *user_data)
tester_test_passed();
}
-static void bap_enable(struct bt_bap_stream *stream,
+static void bap_disable(struct bt_bap_stream *stream,
uint8_t code, uint8_t reason,
void *user_data)
{
@@ -343,6 +343,50 @@ static void bap_enable(struct bt_bap_stream *stream,
tester_test_failed();
}
+static void bap_start(struct bt_bap_stream *stream,
+ uint8_t code, uint8_t reason,
+ void *user_data)
+{
+ struct test_data *data = user_data;
+ unsigned int id;
+
+ if (code) {
+ tester_test_failed();
+ return;
+ }
+
+ id = bt_bap_stream_disable(data->stream, true, bap_disable, data);
+
+ g_assert(id);
+}
+
+static void bap_enable(struct bt_bap_stream *stream,
+ uint8_t code, uint8_t reason,
+ void *user_data)
+{
+ struct test_data *data = user_data;
+ unsigned int id = 0;
+
+ if (code) {
+ tester_test_failed();
+ return;
+ }
+
+ switch (data->cfg->state) {
+ case BT_BAP_STREAM_STATE_ENABLING:
+ return;
+ case BT_BAP_STREAM_STATE_DISABLING:
+ id = bt_bap_stream_disable(data->stream, true, bap_disable,
+ data);
+ break;
+ case BT_BAP_STREAM_STATE_STREAMING:
+ id = bt_bap_stream_start(data->stream, bap_start, data);
+ break;
+ }
+
+ g_assert(id);
+}
+
static void bap_qos(struct bt_bap_stream *stream,
uint8_t code, uint8_t reason,
void *user_data)
@@ -2277,6 +2321,112 @@ static void test_scc_enable(void)
test_client, &cfg_src_enable, SCC_SRC_ENABLE);
}
+static struct test_config cfg_snk_disable = {
+ .cc = LC3_CONFIG_16_2,
+ .qos = LC3_QOS_16_2_1,
+ .snk = true,
+ .state = BT_BAP_STREAM_STATE_DISABLING
+};
+
+/* ATT: Write Command (0x52) len 23
+ * Handle: 0x0022
+ * Data: 050101
+ * ATT: Handle Value Notification (0x1b) len 7
+ * Handle: 0x0022
+ * Data: 0501010000
+ * ATT: Handle Value Notification (0x1b) len 37
+ * Handle: 0x0016
+ * Data: 01010102010a00204e00409c00204e00409c00_qos
+ */
+#define ASE_SNK_DISABLE \
+ IOV_DATA(0x52, 0x22, 0x00, 0x05, 0x01, 0x01), \
+ IOV_DATA(0x1b, 0x22, 0x00, 0x05, 0x01, 0x01, 0x00, 0x00), \
+ IOV_NULL, \
+ IOV_DATA(0x1b, 0x16, 0x00, 0x01, 0x02, 0x00, 0x00, 0x4c, 0x1d, 0x00, \
+ 0x00, 0x02, 0x1a, 0x00, 0x02, 0x08, 0x00, 0x40, 0x9c, \
+ 0x00)
+
+#define SCC_SNK_DISABLE \
+ SCC_SNK_ENABLE, \
+ ASE_SNK_DISABLE
+
+static struct test_config cfg_src_disable = {
+ .cc = LC3_CONFIG_16_2,
+ .qos = LC3_QOS_16_2_1,
+ .src = true,
+ .state = BT_BAP_STREAM_STATE_DISABLING
+};
+
+/* ATT: Write Command (0x52) len 23
+ * Handle: 0x0022
+ * Data: 050103
+ * ATT: Handle Value Notification (0x1b) len 7
+ * Handle: 0x0022
+ * Data: 0301030000
+ * ATT: Handle Value Notification (0x1b) len 37
+ * Handle: 0x001c
+ * Data: 030300000403020100
+ */
+#define ASE_SRC_DISABLE \
+ IOV_DATA(0x52, 0x22, 0x00, 0x05, 0x01, 0x03), \
+ IOV_DATA(0x1b, 0x22, 0x00, 0x05, 0x01, 0x03, 0x00, 0x00), \
+ IOV_NULL, \
+ IOV_DATA(0x1b, 0x1c, 0x00, 0x03, 0x02, 0x00, 0x00, 0x4c, 0x1d, 0x00, \
+ 0x00, 0x02, 0x1a, 0x00, 0x02, 0x08, 0x00, 0x40, 0x9c, \
+ 0x00)
+#define SCC_SRC_DISABLE \
+ SCC_SRC_ENABLE, \
+ ASE_SRC_DISABLE
+
+static struct test_config cfg_src_disable_streaming = {
+ .cc = LC3_CONFIG_16_2,
+ .qos = LC3_QOS_16_2_1,
+ .src = true,
+ .state = BT_BAP_STREAM_STATE_STREAMING
+};
+
+/* ATT: Write Command (0x52) len 23
+ * Handle: 0x0022
+ * Data: 040101
+ * ATT: Handle Value Notification (0x1b) len 7
+ * Handle: 0x0022
+ * Data: 0401010000
+ * ATT: Handle Value Notification (0x1b) len 37
+ * Handle: 0x0016
+ * Data: 0101010400403020100
+ */
+#define ASE_SRC_START \
+ IOV_DATA(0x52, 0x22, 0x00, 0x04, 0x01, 0x03), \
+ IOV_DATA(0x1b, 0x22, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00), \
+ IOV_NULL, \
+ IOV_DATA(0x1b, 0x1c, 0x00, 0x03, 0x04, 0x00, 0x00, 0x04, 0x03, 0x02, \
+ 0x01, 0x00)
+
+#define SCC_SRC_DISABLE_STREAMING \
+ SCC_SRC_ENABLE, \
+ ASE_SRC_START, \
+ ASE_SRC_DISABLE
+
+/* Test Purpose:
+ * Verify that a Unicast Client IUT can initiate a Disable operation for an ASE
+ * in the Enabling or Streaming state.
+ *
+ * Pass verdict:
+ * The IUT successfully writes to the ASE Control Point characteristic with the
+ * opcode set to 0x05 (Disable) and the specified parameters.
+ */
+static void test_scc_disable(void)
+{
+ define_test("BAP/UCL/SCC/BV-103-C [UCL SNK Disable in Enabling State]",
+ test_client, &cfg_src_disable, SCC_SRC_DISABLE);
+ define_test("BAP/UCL/SCC/BV-104-C [UCL SRC Disable in Enabling or "
+ "Streaming state]",
+ test_client, &cfg_snk_disable, SCC_SNK_DISABLE);
+ define_test("BAP/UCL/SCC/BV-105-C [UCL SNK Disable in Streaming State]",
+ test_client, &cfg_src_disable_streaming,
+ SCC_SRC_DISABLE_STREAMING);
+}
+
static void test_scc(void)
{
test_scc_cc_lc3();
@@ -2284,6 +2434,7 @@ static void test_scc(void)
test_scc_qos_lc3();
test_scc_qos_vs();
test_scc_enable();
+ test_scc_disable();
}
int main(int argc, char *argv[])
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> 4.8.6 Unicast Client Initiates Disable Operation (Page 50): Test Purpose: Verify that a Unicast Client IUT can initiate a Disable operation for an ASE in the Enabling or Streaming state. Pass verdict: The IUT successfully writes to the ASE Control Point characteristic with the opcode set to 0x05 (Disable) and the specified parameters. Test Summary ------------ BAP/UCL/SCC/BV-103-C [UCL SNK Disable in Enabling State] Passed BAP/UCL/SCC/BV-104-C [UCL SRC Disable in Enabling or Streaming state] Passed BAP/UCL/SCC/BV-105-C [UCL SNK Disable in Streaming State] Passed Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0 --- unit/test-bap.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 1 deletion(-)