All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 1/3] tools/sco-tester: add test cases to get offload codecs
@ 2021-09-07 10:15 Kiran K
  2021-09-07 10:15 ` [PATCH v1 2/3] tools/sco-tester: Add a test case for setting offload codec Kiran K
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Kiran K @ 2021-09-07 10:15 UTC (permalink / raw)
  To: linux-bluetooth
  Cc: ravishankar.srivatsa, chethan.tumkur.narayan, luiz.von.dentz,
	michaelfsun, Kiran K

Add a test case to query offload codecs supported over sco
---
 lib/bluetooth.h    | 18 +++++++++++
 tools/sco-tester.c | 79 ++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 94 insertions(+), 3 deletions(-)

diff --git a/lib/bluetooth.h b/lib/bluetooth.h
index 9ab033ec41a4..0fcf412c6c6b 100644
--- a/lib/bluetooth.h
+++ b/lib/bluetooth.h
@@ -140,6 +140,24 @@ struct bt_voice {
 
 #define BT_SCM_PKT_STATUS	0x03
 
+#define BT_CODEC 19
+struct bt_codec {
+	uint8_t id;
+	uint16_t cid;
+	uint16_t vid;
+	uint8_t data_path_id;
+	uint8_t num_caps;
+	struct codec_caps {
+		uint8_t len;
+		uint8_t data[];
+	} caps[];
+} __attribute__((packed));
+
+struct bt_codecs {
+	uint8_t num_codecs;
+	struct bt_codec codecs[];
+} __attribute__((packed));
+
 /* Connection and socket states */
 enum {
 	BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */
diff --git a/tools/sco-tester.c b/tools/sco-tester.c
index 2b8dc0d4a8f8..bcef4ef8f76d 100644
--- a/tools/sco-tester.c
+++ b/tools/sco-tester.c
@@ -38,6 +38,7 @@ struct test_data {
 	enum hciemu_type hciemu_type;
 	unsigned int io_id;
 	bool disable_esco;
+	bool enable_codecs;
 };
 
 struct sco_client_data {
@@ -124,6 +125,20 @@ static void index_removed_callback(uint16_t index, uint16_t length,
 	tester_post_teardown_complete();
 }
 
+static void enable_codec_callback(uint8_t status, uint16_t length,
+					const void *param, void *user_data)
+{
+	struct test_data *data = tester_get_data();
+
+	if (status != MGMT_STATUS_SUCCESS) {
+		tester_warn("Failed to enable codecs");
+		tester_setup_failed();
+		return;
+	}
+
+	tester_print("Enabled codecs");
+}
+
 static void read_index_list_callback(uint8_t status, uint16_t length,
 					const void *param, void *user_data)
 {
@@ -202,7 +217,7 @@ static void test_data_free(void *test_data)
 	free(data);
 }
 
-#define test_sco_full(name, data, setup, func, _disable_esco) \
+#define test_sco_full(name, data, setup, func, _disable_esco, _enable_codecs) \
 	do { \
 		struct test_data *user; \
 		user = malloc(sizeof(struct test_data)); \
@@ -212,16 +227,20 @@ static void test_data_free(void *test_data)
 		user->io_id = 0; \
 		user->test_data = data; \
 		user->disable_esco = _disable_esco; \
+		user->enable_codecs = _enable_codecs; \
 		tester_add_full(name, data, \
 				test_pre_setup, setup, func, NULL, \
 				test_post_teardown, 2, user, test_data_free); \
 	} while (0)
 
 #define test_sco(name, data, setup, func) \
-	test_sco_full(name, data, setup, func, false)
+	test_sco_full(name, data, setup, func, false, false)
 
 #define test_sco_11(name, data, setup, func) \
-	test_sco_full(name, data, setup, func, true)
+	test_sco_full(name, data, setup, func, true, false)
+
+#define test_offload_sco(name, data, setup, func) \
+	test_sco_full(name, data, setup, func, false, true)
 
 static const struct sco_client_data connect_success = {
 	.expect_err = 0
@@ -281,6 +300,25 @@ static void setup_powered(const void *test_data)
 	mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
 				sizeof(param), param, NULL, NULL, NULL);
 
+	if (data->enable_codecs) {
+		/* a6695ace-ee7f-4fb9-881a-5fac66c629af */
+		static const uint8_t uuid[16] = {
+				0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, 0x1a, 0x88,
+				0xb9, 0x4f, 0x7f, 0xee, 0xce, 0x5a, 0x69, 0xa6,
+		};
+
+		struct mgmt_cp_set_exp_feature cp;
+
+		memset(&cp, 0, sizeof(cp));
+		memcpy(cp.uuid, uuid, 16);
+		cp.action = 1;
+
+		tester_print("Enabling codecs");
+
+		mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, data->mgmt_index,
+			  sizeof(cp), &cp, enable_codec_callback, NULL, NULL);
+	}
+
 	mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
 					sizeof(param), param,
 					setup_powered_callback, NULL, NULL);
@@ -308,6 +346,38 @@ static void test_socket(const void *test_data)
 	tester_test_passed();
 }
 
+static void test_codecs_getsockopt(const void *test_data)
+{
+	int sk, err;
+	socklen_t len;
+	char buffer[255];
+	struct bt_codecs *codecs;
+
+	sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO);
+	if (sk < 0) {
+		tester_warn("Can't create socket: %s (%d)", strerror(errno),
+									errno);
+		tester_test_failed();
+		return;
+	}
+
+	len = sizeof(buffer);
+	memset(buffer, 0, len);
+
+	err = getsockopt(sk, SOL_BLUETOOTH, BT_CODEC, buffer, &len);
+	if (err < 0) {
+		tester_warn("Can't get socket option : %s (%d)",
+			    strerror(errno), errno);
+		tester_test_failed();
+		goto end;
+	}
+
+	tester_test_passed();
+
+end:
+	close(sk);
+}
+
 static void test_getsockopt(const void *test_data)
 {
 	int sk, err;
@@ -599,5 +669,8 @@ int main(int argc, char *argv[])
 	test_sco_11("SCO mSBC 1.1 - Failure", &connect_failure, setup_powered,
 							test_connect_transp);
 
+	test_offload_sco("Basic SCO Get Socket Option - Offload - Success",
+				NULL, setup_powered, test_codecs_getsockopt);
+
 	return tester_run();
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v1 2/3] tools/sco-tester: Add a test case for setting offload codec
  2021-09-07 10:15 [PATCH v1 1/3] tools/sco-tester: add test cases to get offload codecs Kiran K
@ 2021-09-07 10:15 ` Kiran K
  2021-09-07 10:15 ` [PATCH v1 3/3] tools/sco-tester: add a test case for offload SCO connect Kiran K
  2021-09-07 10:36 ` [v1,1/3] tools/sco-tester: add test cases to get offload codecs bluez.test.bot
  2 siblings, 0 replies; 4+ messages in thread
From: Kiran K @ 2021-09-07 10:15 UTC (permalink / raw)
  To: linux-bluetooth
  Cc: ravishankar.srivatsa, chethan.tumkur.narayan, luiz.von.dentz,
	michaelfsun, Kiran K

Add a test case to set codec for HFP offload use case
---
 tools/sco-tester.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/tools/sco-tester.c b/tools/sco-tester.c
index bcef4ef8f76d..e412111ffd42 100644
--- a/tools/sco-tester.c
+++ b/tools/sco-tester.c
@@ -378,6 +378,43 @@ end:
 	close(sk);
 }
 
+static void test_codecs_setsockopt(const void *test_data)
+{
+	int sk, err;
+	char buffer[255];
+	struct bt_codecs *codecs;
+
+	sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO);
+	if (sk < 0) {
+		tester_warn("Can't create socket: %s (%d)", strerror(errno),
+									errno);
+		tester_test_failed();
+		return;
+	}
+
+	memset(buffer, 0, sizeof(buffer));
+
+	codecs = (void *)buffer;
+
+	codecs->codecs[0].id = 0x05;
+	codecs->num_codecs = 1;
+	codecs->codecs[0].data_path_id = 1;
+	codecs->codecs[0].num_caps = 0x00;
+
+	err = setsockopt(sk, SOL_BLUETOOTH, BT_CODEC, codecs, sizeof(buffer));
+	if (err < 0) {
+		tester_warn("Can't set socket option : %s (%d)",
+			    strerror(errno), errno);
+		tester_test_failed();
+		goto end;
+	}
+
+	tester_test_passed();
+
+end:
+	close(sk);
+}
+
 static void test_getsockopt(const void *test_data)
 {
 	int sk, err;
@@ -672,5 +709,8 @@ int main(int argc, char *argv[])
 	test_offload_sco("Basic SCO Get Socket Option - Offload - Success",
 				NULL, setup_powered, test_codecs_getsockopt);
 
+	test_offload_sco("Basic SCO Set Socket Option - Offload - Success",
+				NULL, setup_powered, test_codecs_setsockopt);
+
 	return tester_run();
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v1 3/3] tools/sco-tester: add a test case for offload SCO connect
  2021-09-07 10:15 [PATCH v1 1/3] tools/sco-tester: add test cases to get offload codecs Kiran K
  2021-09-07 10:15 ` [PATCH v1 2/3] tools/sco-tester: Add a test case for setting offload codec Kiran K
@ 2021-09-07 10:15 ` Kiran K
  2021-09-07 10:36 ` [v1,1/3] tools/sco-tester: add test cases to get offload codecs bluez.test.bot
  2 siblings, 0 replies; 4+ messages in thread
From: Kiran K @ 2021-09-07 10:15 UTC (permalink / raw)
  To: linux-bluetooth
  Cc: ravishankar.srivatsa, chethan.tumkur.narayan, luiz.von.dentz,
	michaelfsun, Kiran K

Add a test case for offload SCO connect with codec type set to mSBC
---
 tools/sco-tester.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/tools/sco-tester.c b/tools/sco-tester.c
index e412111ffd42..06d3700f009c 100644
--- a/tools/sco-tester.c
+++ b/tools/sco-tester.c
@@ -678,6 +678,52 @@ end:
 	close(sk);
 }
 
+static void test_connect_offload_msbc(const void *test_data)
+{
+	struct test_data *data = tester_get_data();
+	const struct sco_client_data *scodata = data->test_data;
+	int sk, err;
+	int len;
+	char buffer[255];
+	struct bt_codecs *codecs;
+
+	sk = create_sco_sock(data);
+	if (sk < 0) {
+		tester_test_failed();
+		return;
+	}
+
+	len = sizeof(buffer);
+	memset(buffer, 0, len);
+
+	codecs = (void *)buffer;
+
+	codecs->codecs[0].id = 0x05;
+	codecs->num_codecs = 1;
+	codecs->codecs[0].data_path_id = 1;
+	codecs->codecs[0].num_caps = 0x00;
+
+	err = setsockopt(sk, SOL_BLUETOOTH, BT_CODEC, codecs, sizeof(buffer));
+	if (err < 0) {
+		tester_warn("Can't set socket option : %s (%d)",
+			    strerror(errno), errno);
+		tester_test_failed();
+		goto end;
+	}
+	err = connect_sco_sock(data, sk);
+
+	tester_warn("Connect returned %s (%d), expected %s (%d)",
+			strerror(-err), -err,
+			strerror(scodata->expect_err), scodata->expect_err);
+
+	if (-err != scodata->expect_err)
+		tester_test_failed();
+	else
+		tester_test_passed();
+
+end:
+	close(sk);
+}
 int main(int argc, char *argv[])
 {
 	tester_init(&argc, &argv);
@@ -712,5 +758,8 @@ int main(int argc, char *argv[])
 	test_offload_sco("Basic SCO Set Socket Option - Offload - Success",
 				NULL, setup_powered, test_codecs_setsockopt);
 
+	test_offload_sco("eSCO mSBC - Offload - Success",
+		&connect_success, setup_powered, test_connect_offload_msbc);
+
 	return tester_run();
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* RE: [v1,1/3] tools/sco-tester: add test cases to get offload codecs
  2021-09-07 10:15 [PATCH v1 1/3] tools/sco-tester: add test cases to get offload codecs Kiran K
  2021-09-07 10:15 ` [PATCH v1 2/3] tools/sco-tester: Add a test case for setting offload codec Kiran K
  2021-09-07 10:15 ` [PATCH v1 3/3] tools/sco-tester: add a test case for offload SCO connect Kiran K
@ 2021-09-07 10:36 ` bluez.test.bot
  2 siblings, 0 replies; 4+ messages in thread
From: bluez.test.bot @ 2021-09-07 10:36 UTC (permalink / raw)
  To: linux-bluetooth, kiran.k

[-- Attachment #1: Type: text/plain, Size: 4697 bytes --]

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

Dear submitter,

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

---Test result---

Test Summary:
CheckPatch                    FAIL      0.97 seconds
GitLint                       PASS      0.43 seconds
Prep - Setup ELL              PASS      53.31 seconds
Build - Prep                  PASS      0.16 seconds
Build - Configure             PASS      9.31 seconds
Build - Make                  FAIL      91.77 seconds
Make Check                    FAIL      0.54 seconds
Make Distcheck                PASS      280.86 seconds
Build w/ext ELL - Configure   PASS      9.66 seconds
Build w/ext ELL - Make        FAIL      78.42 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
tools/sco-tester: add test cases to get offload codecs
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#27: FILE: lib/bluetooth.h:154:
+} __attribute__((packed));

WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#32: FILE: lib/bluetooth.h:159:
+} __attribute__((packed));

- total: 0 errors, 2 warnings, 152 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
      mechanically convert to the typical style using --fix or --fix-inplace.

"[PATCH] tools/sco-tester: add test cases to get offload codecs" has style problems, please review.

NOTE: Ignored message types: COMMIT_MESSAGE COMPLEX_MACRO CONST_STRUCT FILE_PATH_CHANGES MISSING_SIGN_OFF PREFER_PACKED SPDX_LICENSE_TAG SPLIT_STRING SSCANF_TO_KSTRTO

NOTE: If any of the errors are false positives, please report
      them to the maintainer, see CHECKPATCH in MAINTAINERS.


##############################
Test: GitLint - PASS
Desc: Run gitlint with rule in .gitlint

##############################
Test: Prep - Setup ELL - PASS
Desc: Clone, build, and install ELL

##############################
Test: Build - Prep - PASS
Desc: Prepare environment for build

##############################
Test: Build - Configure - PASS
Desc: Configure the BlueZ source tree

##############################
Test: Build - Make - FAIL
Desc: Build the BlueZ source tree
Output:
tools/sco-tester.c: In function ‘enable_codec_callback’:
tools/sco-tester.c:131:20: error: unused variable ‘data’ [-Werror=unused-variable]
  131 |  struct test_data *data = tester_get_data();
      |                    ^~~~
tools/sco-tester.c: In function ‘test_codecs_getsockopt’:
tools/sco-tester.c:354:20: error: unused variable ‘codecs’ [-Werror=unused-variable]
  354 |  struct bt_codecs *codecs;
      |                    ^~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:6962: tools/sco-tester.o] Error 1
make: *** [Makefile:4151: all] Error 2


##############################
Test: Make Check - FAIL
Desc: Run 'make check'
Output:
tools/sco-tester.c: In function ‘enable_codec_callback’:
tools/sco-tester.c:131:20: error: unused variable ‘data’ [-Werror=unused-variable]
  131 |  struct test_data *data = tester_get_data();
      |                    ^~~~
tools/sco-tester.c: In function ‘test_codecs_getsockopt’:
tools/sco-tester.c:354:20: error: unused variable ‘codecs’ [-Werror=unused-variable]
  354 |  struct bt_codecs *codecs;
      |                    ^~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:6962: tools/sco-tester.o] Error 1
make: *** [Makefile:10443: check] Error 2


##############################
Test: Make Distcheck - PASS
Desc: Run distcheck to check the distribution

##############################
Test: Build w/ext ELL - Configure - PASS
Desc: Configure BlueZ source with '--enable-external-ell' configuration

##############################
Test: Build w/ext ELL - Make - FAIL
Desc: Build BlueZ source with '--enable-external-ell' configuration
Output:
tools/sco-tester.c: In function ‘enable_codec_callback’:
tools/sco-tester.c:131:20: error: unused variable ‘data’ [-Werror=unused-variable]
  131 |  struct test_data *data = tester_get_data();
      |                    ^~~~
tools/sco-tester.c: In function ‘test_codecs_getsockopt’:
tools/sco-tester.c:354:20: error: unused variable ‘codecs’ [-Werror=unused-variable]
  354 |  struct bt_codecs *codecs;
      |                    ^~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:6962: tools/sco-tester.o] Error 1
make: *** [Makefile:4151: all] Error 2




---
Regards,
Linux Bluetooth


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-09-07 10:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-07 10:15 [PATCH v1 1/3] tools/sco-tester: add test cases to get offload codecs Kiran K
2021-09-07 10:15 ` [PATCH v1 2/3] tools/sco-tester: Add a test case for setting offload codec Kiran K
2021-09-07 10:15 ` [PATCH v1 3/3] tools/sco-tester: add a test case for offload SCO connect Kiran K
2021-09-07 10:36 ` [v1,1/3] tools/sco-tester: add test cases to get offload codecs bluez.test.bot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.