Skip to contentSkip to conversation

Bluetooth: Enumerate local supported codec and cache details

PATCH Superseded Kiran K 4 participants 22 messages Jun 30, 2021 – Jul 27, 2021

Subsystems (2)

v10 of 15 Superseded Latest is v15 →

lore
Share & tools
lore

Kiran K

author
#0 lore raw

PATCH v10 1/10 Bluetooth: Enumerate local supported codec and cache details

Move reading of supported local codecs into a separate init function, query codecs capabilities and cache the data

---
* changes in v10:
- define Kconfig to control offload feature at build time
- fix review comments

* changes in v9:
- use shortname vnd instead of ven

* changes in v8:
- add comments
- split __u8 codec_id[5] into {__u8 id; __le16 cid, vid }
- address review comment related codec caps structure

* changes in v7:
- keep codec enumeration call in hci_init instead of having a separate function
- Remove unused bitmasks defined for LE transports

* changes in v6:
- fix compiler warning reported for ARCH=arc

* changes in v5:
- fix review comments
- move code used to read standard/vendor codecs caps into single function

* changes in v4:
- convert reading of codecs and codecs caps calls from async to sync

* changes in v3
move codec enumeration into a new init function

* changes in v2
add skb length check before accessing data

 include/net/bluetooth/hci.h      |  41 ++++++
 include/net/bluetooth/hci_core.h |  23 ++++
 net/bluetooth/Kconfig            |  11 ++
 net/bluetooth/hci_core.c         | 207 ++++++++++++++++++++++++++++++-
 4 files changed, 278 insertions(+), 4 deletions(-)
include/net/bluetooth/hci.h +41 -0
index b80415011dcd..f76849c8eafd 100644
@@ -1307,6 +1307,28 @@ struct hci_rp_read_data_block_size {
 } __packed;
 
 #define HCI_OP_READ_LOCAL_CODECS	0x100b
+struct hci_std_codecs {
+	__u8	num;
+	__u8	codec[];
+} __packed;
+
+struct hci_vnd_codec {
+	/* company id */
+	__le16	cid;
+	/* vendor codec id */
+	__le16	vid;
+} __packed;
+
+struct hci_vnd_codecs {
+	__u8	num;
+	struct hci_vnd_codec codec[];
+} __packed;
+
+struct hci_rp_read_local_supported_codecs {
+	__u8	status;
+	struct hci_std_codecs std_codecs;
+	struct hci_vnd_codecs vnd_codecs;
+} __packed;
 
 #define HCI_OP_READ_LOCAL_PAIRING_OPTS	0x100c
 struct hci_rp_read_local_pairing_opts {
@@ -1315,6 +1337,25 @@ struct hci_rp_read_local_pairing_opts {
 	__u8     max_key_size;
 } __packed;
 
+#define HCI_OP_READ_LOCAL_CODEC_CAPS	0x100e
+struct hci_op_read_local_codec_caps {
+	__u8	id;
+	__le16	cid;
+	__le16	vid;
+	__u8	transport;
+	__u8	direction;
+} __packed;
+
+struct hci_codec_caps {
+	__u8	len;
+	__u8	data[];
+} __packed;
+
+struct hci_rp_read_local_codec_caps {
+	__u8	status;
+	__u8	num_caps;
+} __packed;
+
 #define HCI_OP_READ_PAGE_SCAN_ACTIVITY	0x0c1b
 struct hci_rp_read_page_scan_activity {
 	__u8     status;
include/net/bluetooth/hci_core.h +23 -0
index a53e94459ecd..7b8d603358b9 100644
@@ -131,6 +131,19 @@ struct bdaddr_list {
 	u8 bdaddr_type;
 };
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+struct codec_list {
+	struct list_head list;
+	u8	id;
+	__le16	cid;
+	__le16	vid;
+	u8	transport;
+	u8	num_caps;
+	u32	len;
+	struct hci_codec_caps caps[];
+};
+#endif
+
 struct bdaddr_list_with_irk {
 	struct list_head list;
 	bdaddr_t bdaddr;
@@ -535,6 +548,9 @@ struct hci_dev {
 	struct list_head	pend_le_conns;
 	struct list_head	pend_le_reports;
 	struct list_head	blocked_keys;
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+	struct list_head	local_codecs;
+#endif
 
 	struct hci_dev_stats	stat;
 
@@ -1849,4 +1865,11 @@ void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
 #define SCO_AIRMODE_CVSD       0x0000
 #define SCO_AIRMODE_TRANSP     0x0003
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+#define LOCAL_CODEC_ACL_MASK	BIT(0)
+#define LOCAL_CODEC_SCO_MASK	BIT(1)
+
+#define TRANSPORT_TYPE_MAX	0x04
+#endif
+
 #endif /* __HCI_CORE_H */
net/bluetooth/Kconfig +11 -0
index e0ab4cd7afc3..1069623f36c4 100644
@@ -92,6 +92,17 @@ config BT_LEDS
 	  This option selects a few LED triggers for different
 	  Bluetooth events.
 
+config BT_OFFLOAD_CODECS
+	bool "Enable offload codecs"
+	depends on BT && BT_BREDR
+	default n
+	help
+	  This option enables offload codecs if controller supports.
+	  When this option is enabled, user space audio modules can
+	  query offload codecs and can set the codec to be used for
+	  specific use case.
+
+
 config BT_MSFTEXT
 	bool "Enable Microsoft extensions"
 	depends on BT
net/bluetooth/hci_core.c +203 -4

237 lines not on this page · raw message

Signature · 1 line
2.17.1
author
#1 lore raw

PATCH v10 2/10 Bluetooth: Add support for Read Local Supported Codecs V2

Use V2 version of read local supported command is controller supports

snoop:

Quoted 1 line

HCI Event: Command Complete (0x0e) plen 20

      Read Local Supported Codecs V2 (0x04|0x000d) ncmd 1
        Status: Success (0x00)
        Number of supported codecs: 7
          Codec: u-law log (0x00)
          Logical Transport Type: 0x02
            Codec supported over BR/EDR SCO and eSCO
          Codec: A-law log (0x01)
          Logical Transport Type: 0x02
            Codec supported over BR/EDR SCO and eSCO
          Codec: CVSD (0x02)
          Logical Transport Type: 0x02
            Codec supported over BR/EDR SCO and eSCO
          Codec: Transparent (0x03)
          Logical Transport Type: 0x02
            Codec supported over BR/EDR SCO and eSCO
          Codec: Linear PCM (0x04)
          Logical Transport Type: 0x02
            Codec supported over BR/EDR SCO and eSCO
          Codec: Reserved (0x08)
          Logical Transport Type: 0x03
            Codec supported over BR/EDR ACL
            Codec supported over BR/EDR SCO and eSCO
          Codec: mSBC (0x05)
          Logical Transport Type: 0x03
            Codec supported over BR/EDR ACL
            Codec supported over BR/EDR SCO and eSCO
        Number of vendor codecs: 0
......
< HCI Command: Read Local Suppor.. (0x04|0x000e) plen 7
        Codec: mSBC (0x05)
        Logical Transport Type: 0x00
        Direction: Input (Host to Controller) (0x00)
Quoted 1 line

HCI Event: Command Complete (0x0e) plen 12

      Read Local Supported Codec Capabilities (0x04|0x000e) ncmd 1
        Status: Success (0x00)
        Number of codec capabilities: 1
         Capabilities #0:
        00 00 11 15 02 33

---
* changes in v10:
no changes

* changes in v9:
use vnd as shortcut name for vendor instead of ven

* changes in v8:
no changes

* changes in v7:
call codec enumeration code in hci_init instead of having it in a separate function

* changes in v6
no changes

* changes in v5:
fix review comments

* changes in v4:
converts codec read capabilities calls from async to sync

* changes in v3:
No changes

* changes in v2:
add length check for event data before accessing

 include/net/bluetooth/hci.h | 29 ++++++++++++++
 net/bluetooth/hci_core.c    | 78 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 106 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +29 -0
index f76849c8eafd..b4e35cf5f4b1 100644
@@ -1337,6 +1337,35 @@ struct hci_rp_read_local_pairing_opts {
 	__u8     max_key_size;
 } __packed;
 
+#define HCI_OP_READ_LOCAL_CODECS_V2	0x100d
+struct hci_std_codec_v2 {
+	__u8	id;
+	__u8	transport;
+} __packed;
+
+struct hci_std_codecs_v2 {
+	__u8	num;
+	struct hci_std_codec_v2 codec[];
+} __packed;
+
+struct hci_vnd_codec_v2 {
+	__u8	id;
+	__le16	cid;
+	__le16	vid;
+	__u8	transport;
+} __packed;
+
+struct hci_vnd_codecs_v2 {
+	__u8	num;
+	struct hci_vnd_codec_v2 codec[];
+} __packed;
+
+struct hci_rp_read_local_supported_codecs_v2 {
+	__u8	status;
+	struct hci_std_codecs_v2 std_codecs;
+	struct hci_vnd_codecs_v2 vendor_codecs;
+} __packed;
+
 #define HCI_OP_READ_LOCAL_CODEC_CAPS	0x100e
 struct hci_op_read_local_codec_caps {
 	__u8	id;
net/bluetooth/hci_core.c +77 -1

96 lines not on this page · raw message

Signature · 1 line
2.17.1
author
#2 lore raw

PATCH v10 3/10 Bluetooth: btintel: Read supported offload usecases

In reply to Kiran K

Read offload usecases supported by controller.

---
* changes in v10:
- restructure patch to have definition and call of callaback in the same patch
* changes in v9:
- define a separate patch for core changes

 drivers/bluetooth/btintel.c | 32 ++++++++++++++++++++++++++++++++
 drivers/bluetooth/btintel.h | 16 ++++++++++++++++
 drivers/bluetooth/btusb.c   |  5 +++++
 3 files changed, 53 insertions(+)
drivers/bluetooth/btintel.c +32 -0
index e44b6993cf91..7f9b5f82d01f 100644
@@ -1272,6 +1272,38 @@ int btintel_set_debug_features(struct hci_dev *hdev,
 }
 EXPORT_SYMBOL_GPL(btintel_set_debug_features);
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+int btintel_configure_offload_usecases(struct hci_dev *hdev)
+{
+	struct sk_buff *skb;
+	int err = 0;
+	struct intel_offload_usecases *usecases;
+
+	skb = __hci_cmd_sync(hdev, 0xfc86, 0, NULL, HCI_INIT_TIMEOUT);
+	if (IS_ERR(skb)) {
+		bt_dev_err(hdev, "Reading offload usecases failed (%ld)",
+			   PTR_ERR(skb));
+		return PTR_ERR(skb);
+	}
+
+	if (skb->len < sizeof(*usecases)) {
+		err = -EIO;
+		goto error;
+	}
+
+	usecases = (void *)skb->data;
+
+	if (usecases->status) {
+		err = -bt_to_errno(skb->data[0]);
+		goto error;
+	}
+error:
+	kfree_skb(skb);
+	return err;
+}
+EXPORT_SYMBOL_GPL(btintel_configure_offload_usecases);
+#endif
+
 MODULE_AUTHOR("Marcel Holtmann <[email protected]>");
 MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION);
 MODULE_VERSION(VERSION);
drivers/bluetooth/btintel.h +16 -0
index d184064a5e7c..b667fc000c03 100644
@@ -132,6 +132,13 @@ struct intel_debug_features {
 	__u8    page1[16];
 } __packed;
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+struct intel_offload_usecases {
+	__u8	status;
+	__u8	preset[8];
+} __packed;
+#endif
+
 #define INTEL_HW_PLATFORM(cnvx_bt)	((u8)(((cnvx_bt) & 0x0000ff00) >> 8))
 #define INTEL_HW_VARIANT(cnvx_bt)	((u8)(((cnvx_bt) & 0x003f0000) >> 16))
 #define INTEL_CNVX_TOP_TYPE(cnvx_top)	((cnvx_top) & 0x00000fff)
@@ -175,6 +182,9 @@ int btintel_read_debug_features(struct hci_dev *hdev,
 				struct intel_debug_features *features);
 int btintel_set_debug_features(struct hci_dev *hdev,
 			       const struct intel_debug_features *features);
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+int btintel_configure_offload_usecases(struct hci_dev *hdev);
+#endif
 #else
 
 static inline int btintel_check_bdaddr(struct hci_dev *hdev)
@@ -307,4 +317,10 @@ static inline int btintel_set_debug_features(struct hci_dev *hdev,
 	return -EOPNOTSUPP;
 }
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+static int btintel_configure_offload_usecases(struct hci_dev *hdev)
+{
+	return -EOPNOTSUPP;
+}
+#endif
 #endif
drivers/bluetooth/btusb.c +5 -0
index a9855a2dd561..0184e8668a84 100644
@@ -3008,6 +3008,11 @@ static int btusb_setup_intel_newgen(struct hci_dev *hdev)
 	/* Set DDC mask for available debug features */
 	btintel_set_debug_features(hdev, &features);
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+	/* Read supported usecases and set callbacks to fetch datapath id */
+	btintel_configure_offload_usecases(hdev);
+#endif
+
 	/* Read the Intel version information after loading the FW  */
 	err = btintel_read_version_tlv(hdev, &version);
 	if (err)
Signature · 1 line
2.17.1
author
#3 lore raw

PATCH v10 4/10 Bluetooth: Allow querying of supported offload codecs over SCO socket

In reply to Kiran K

Add BT_CODEC option for getsockopt systemcall to get the details of offload codecs supported over SCO socket

---
* changes in v10:
- In getsockopt, prepare data in advance and call copy_to_user istead of calling put_user on each field of struct bt_codec

 include/net/bluetooth/bluetooth.h | 20 +++++++
 include/net/bluetooth/hci.h       |  6 ++
 include/net/bluetooth/hci_core.h  |  3 +
 net/bluetooth/sco.c               | 95 +++++++++++++++++++++++++++++++
 4 files changed, 124 insertions(+)
include/net/bluetooth/bluetooth.h +20 -0
index 9125effbf448..1840756958ce 100644
@@ -153,6 +153,26 @@ struct bt_voice {
 
 #define BT_SCM_PKT_STATUS	0x03
 
+#define BT_CODEC	19
+
+struct	bt_codec_caps {
+	__u8	len;
+	__u8	data[];
+} __packed;
+
+struct bt_codec {
+	__u8	id;
+	__le16	cid;
+	__le16	vid;
+	__u8	data_path;
+	__u8	num_caps;
+} __packed;
+
+struct bt_codecs {
+	__u8		num_codecs;
+	struct bt_codec	codecs[];
+} __packed;
+
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
 __printf(1, 2)
include/net/bluetooth/hci.h +6 -0
index b4e35cf5f4b1..5e4306a46324 100644
@@ -2621,6 +2621,12 @@ static inline struct hci_sco_hdr *hci_sco_hdr(const struct sk_buff *skb)
 #define hci_iso_data_len(h)		((h) & 0x3fff)
 #define hci_iso_data_flags(h)		((h) >> 14)
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+/* codec transport types */
+#define TRANSPORT_ACL		0x00
+#define TRANSPORT_SCO_ESCO	0x01
+#endif
+
 /* le24 support */
 static inline void hci_cpu_to_le24(__u32 val, __u8 dst[3])
 {
include/net/bluetooth/hci_core.h +3 -0
index 7b8d603358b9..00c97e2ce1fd 100644
@@ -621,6 +621,9 @@ struct hci_dev {
 	int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 	void (*cmd_timeout)(struct hci_dev *hdev);
 	bool (*prevent_wake)(struct hci_dev *hdev);
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+	int (*get_data_path_id)(struct hci_dev *hdev, __u8 *data_path);
+#endif
 };
 
 #define HCI_PHY_HANDLE(handle)	(handle & 0xff)
net/bluetooth/sco.c +95 -0

107 lines not on this page · raw message

Signature · 1 line
2.17.1
author
#4 lore raw

PATCH v10 5/10 Bluetooth: btintel: Define callback to fetch data_path_id

In reply to Kiran K

For Intel controllers supporting HFP offload usecase, define a callback function to fetch data_path_id

---
* changes on v10:
- new patch due to refactoring

 drivers/bluetooth/btintel.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
drivers/bluetooth/btintel.c +10 -0
index 7f9b5f82d01f..cdb098235e88 100644
@@ -1273,6 +1273,13 @@ int btintel_set_debug_features(struct hci_dev *hdev,
 EXPORT_SYMBOL_GPL(btintel_set_debug_features);
 
 #if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id)
+{
+	/* Intel uses 1 as data path id for all the usecases */
+	*data_path_id = 1;
+	return 0;
+}
+
 int btintel_configure_offload_usecases(struct hci_dev *hdev)
 {
 	struct sk_buff *skb;
@@ -1297,6 +1304,9 @@ int btintel_configure_offload_usecases(struct hci_dev *hdev)
 		err = -bt_to_errno(skb->data[0]);
 		goto error;
 	}
+
+	if (usecases->preset[0] & 0x03)
+		hdev->get_data_path_id = btintel_get_data_path_id;
 error:
 	kfree_skb(skb);
 	return err;
Signature · 1 line
2.17.1
author
#5 lore raw

PATCH v10 6/10 Bluetooth: Allow setting of codec for HFP offload usecase

In reply to Kiran K

For HFP offload usecase, controller needs to be configured with codec data and capabilities. This patch uses Bluetooth SIG defined command HCI_CONFIGURE_DATA_PATH to specify vendor specific data and allows userspace modules to set the codec via setsockopt systemcall.

---
* changes in v10:
- patch refactor - having callback definition and usage in the same patch

 include/net/bluetooth/bluetooth.h |   2 +
 include/net/bluetooth/hci.h       |   8 ++
 include/net/bluetooth/hci_core.h  |   3 +
 net/bluetooth/sco.c               | 123 ++++++++++++++++++++++++++++++
 4 files changed, 136 insertions(+)
include/net/bluetooth/bluetooth.h +2 -0
index 1840756958ce..0e8802d09068 100644
@@ -173,6 +173,8 @@ struct bt_codecs {
 	struct bt_codec	codecs[];
 } __packed;
 
+#define CODING_FORMAT_CVSD	0x02
+
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
 __printf(1, 2)
include/net/bluetooth/hci.h +8 -0
index 5e4306a46324..ae384b7bf000 100644
@@ -1250,6 +1250,14 @@ struct hci_rp_read_local_oob_ext_data {
 	__u8     rand256[16];
 } __packed;
 
+#define HCI_CONFIGURE_DATA_PATH	0x0c83
+struct hci_op_configure_data_path {
+	__u8	direction;
+	__u8	data_path_id;
+	__u8	vnd_len;
+	__u8	vnd_data[];
+} __packed;
+
 #define HCI_OP_READ_LOCAL_VERSION	0x1001
 struct hci_rp_read_local_version {
 	__u8     status;
include/net/bluetooth/hci_core.h +3 -0
index 00c97e2ce1fd..ebf42a3ac6cd 100644
@@ -623,6 +623,9 @@ struct hci_dev {
 	bool (*prevent_wake)(struct hci_dev *hdev);
 #if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
 	int (*get_data_path_id)(struct hci_dev *hdev, __u8 *data_path);
+	int (*get_codec_config_data)(struct hci_dev *hdev, __u8 type,
+				     struct bt_codec *codec, __u8 *vnd_len,
+				     __u8 **vnd_data);
 #endif
 };
 
net/bluetooth/sco.c +123 -0

159 lines not on this page · raw message

Signature · 1 line
2.17.1
author
#6 lore raw

PATCH v10 7/10 Bluetooth: btintel: Define a callback to fetch codec config data

In reply to Kiran K

Define callback function to get codec config data. In HFP offload usecase, controllers need to be set codec details before opening SCO. This callback function is used to fetch vendor specific codec config data.

---
* changes in v10:
- new patch due to refactoring

 drivers/bluetooth/btintel.c | 49 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)
drivers/bluetooth/btintel.c +48 -1
index cdb098235e88..df2e84860c91 100644
@@ -1273,6 +1273,51 @@ int btintel_set_debug_features(struct hci_dev *hdev,
 EXPORT_SYMBOL_GPL(btintel_set_debug_features);
 
 #if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+static int btintel_get_codec_config_data(struct hci_dev *hdev,
+					 __u8 link, struct bt_codec *codec,
+					 __u8 *ven_len, __u8 **ven_data)
+{
+	int err = 0;
+
+	if (!ven_data || !ven_len)
+		return -EINVAL;
+
+	*ven_len = 0;
+	*ven_data = NULL;
+
+	if (link != SCO_LINK && link != ESCO_LINK)
+		return -EINVAL;
+
+	*ven_data = kmalloc(sizeof(__u8), GFP_KERNEL);
+	if (!ven_data) {
+		err = -ENOMEM;
+		goto error;
+	}
+
+	/* supports only CVSD and mSBC offload codecs */
+	switch (codec->id) {
+	case 0x02:
+		**ven_data = 0x00;
+	break;
+	case 0x05:
+		**ven_data = 0x01;
+	break;
+	default:
+		err = -EINVAL;
+		goto error;
+	}
+	/* codec and its capabilities are pre-defined to ids
+	 * preset id = 0x00 represents CVSD codec with sampling rate 8K
+	 * preset id = 0x01 represents mSBC codec with sampling rate 16K
+	 */
+	*ven_len = sizeof(__u8);
+	return err;
+
+error:
+	kfree(*ven_data);
+	return err;
+}
+
 static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id)
 {
 	/* Intel uses 1 as data path id for all the usecases */
@@ -1305,8 +1350,10 @@ int btintel_configure_offload_usecases(struct hci_dev *hdev)
 		goto error;
 	}
 
-	if (usecases->preset[0] & 0x03)
+	if (usecases->preset[0] & 0x03) {
 		hdev->get_data_path_id = btintel_get_data_path_id;
+		hdev->get_codec_config_data = btintel_get_codec_config_data;
+	}
 error:
 	kfree_skb(skb);
 	return err;
Signature · 1 line
2.17.1
author
#7 lore raw

PATCH v10 8/10 Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command

In reply to Kiran K

< HCI Command: Enhanced Setup Synchronous Connection (0x01|0x003d) plen 59
Handle: 256
Transmit bandwidth: 8000
Receive bandwidth: 8000
Max latency: 13
Packet type: 0x0380
3-EV3 may not be used
2-EV5 may not be used
3-EV5 may not be used
Retransmission effort: Optimize for link quality (0x02)

Quoted 1 line

HCI Event: Command Status (0x0f) plen 4

      Enhanced Setup Synchronous Connection (0x01|0x003d) ncmd 1
        Status: Success (0x00)
Quoted 1 line

HCI Event: Synchronous Connect Complete (0x2c) plen 17

        Status: Success (0x00)
        Handle: 257
        Address: CC:98:8B:92:04:FD (SONY Visual Products Inc.)
        Link type: eSCO (0x02)
        Transmission interval: 0x0c
        Retransmission window: 0x06
        RX packet length: 60
        TX packet length: 60
        Air mode: Transparent (0x03)

---
* changes in v10:
- Fix typos and remove unwanted chunks
* changes in v9:
- Fix review comments, use bt_dev_dbg instead of BT_DBG

 include/net/bluetooth/bluetooth.h |   3 +-
 include/net/bluetooth/hci.h       |  34 ++++++++++
 include/net/bluetooth/hci_core.h  |   7 +-
 net/bluetooth/hci_conn.c          | 106 ++++++++++++++++++++++++++++--
 net/bluetooth/hci_event.c         |  48 +++++++++++++-
 net/bluetooth/sco.c               |  13 +++-
 6 files changed, 201 insertions(+), 10 deletions(-)
include/net/bluetooth/bluetooth.h +2 -1
index 0e8802d09068..af2809121571 100644
@@ -173,7 +173,8 @@ struct bt_codecs {
 	struct bt_codec	codecs[];
 } __packed;
 
-#define CODING_FORMAT_CVSD	0x02
+#define CODING_FORMAT_CVSD		0x02
+#define CODING_FORMAT_TRANSPARENT	0x03
 
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
include/net/bluetooth/hci.h +34 -0
index ae384b7bf000..e20318854900 100644
@@ -871,6 +871,40 @@ struct hci_cp_logical_link_cancel {
 	__u8     flow_spec_id;
 } __packed;
 
+#define HCI_OP_ENHANCED_SETUP_SYNC_CONN		0x043D
+struct hci_coding_format {
+	__u8	id;
+	__le16	cid;
+	__le16	vid;
+} __packed;
+
+struct hci_cp_enhanced_setup_sync_conn {
+	__le16   handle;
+	__le32   tx_bandwidth;
+	__le32   rx_bandwidth;
+	struct	 hci_coding_format tx_coding_format;
+	struct	 hci_coding_format rx_coding_format;
+	__le16	 tx_codec_frame_size;
+	__le16	 rx_codec_frame_size;
+	__le32	 in_bandwidth;
+	__le32	 out_bandwidth;
+	struct	 hci_coding_format in_coding_format;
+	struct	 hci_coding_format out_coding_format;
+	__le16   in_coded_data_size;
+	__le16	 out_coded_data_size;
+	__u8	 in_pcm_data_format;
+	__u8	 out_pcm_data_format;
+	__u8	 in_pcm_sample_payload_msb_pos;
+	__u8	 out_pcm_sample_payload_msb_pos;
+	__u8	 in_data_path;
+	__u8	 out_data_path;
+	__u8	 in_transport_unit_size;
+	__u8	 out_transport_unit_size;
+	__le16   max_latency;
+	__le16   pkt_type;
+	__u8     retrans_effort;
+} __packed;
+
 struct hci_rp_logical_link_cancel {
 	__u8     status;
 	__u8     phy_handle;
include/net/bluetooth/hci_core.h +6 -1
index ebf42a3ac6cd..80ed81fb1883 100644
@@ -719,6 +719,7 @@ struct hci_conn {
 	struct amp_mgr	*amp_mgr;
 
 	struct hci_conn	*link;
+	struct bt_codec codec;
 
 	void (*connect_cfm_cb)	(struct hci_conn *conn, u8 status);
 	void (*security_cfm_cb)	(struct hci_conn *conn, u8 status);
@@ -1101,6 +1102,7 @@ static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
 
 int hci_disconnect(struct hci_conn *conn, __u8 reason);
 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
+bool hci_enhanced_setup_sync(struct hci_conn *conn, __u16 handle);
 void hci_sco_setup(struct hci_conn *conn, __u8 status);
 
 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
@@ -1125,7 +1127,7 @@ struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
 				 u8 sec_level, u8 auth_type,
 				 enum conn_reasons conn_reason);
 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
-				 __u16 setting);
+				 __u16 setting, struct bt_codec *codec);
 int hci_conn_check_link_mode(struct hci_conn *conn);
 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
@@ -1446,6 +1448,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
 /* Use LL Privacy based address resolution if supported */
 #define use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
 
+/* Use enhanced synchronous connection if command is supported */
+#define use_enhanced_sco_conn(dev) ((dev)->commands[29] & 0x08)
+
 /* Use ext scanning if set ext scan param and ext scan enable is supported */
 #define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
 			   ((dev)->commands[37] & 0x40))
net/bluetooth/hci_conn.c +102 -4

131 lines not on this page · raw message

net/bluetooth/hci_event.c +46 -2

66 lines not on this page · raw message

net/bluetooth/sco.c +11 -2
index 4b6ee0b302d7..b44d56eb936a 100644
@@ -240,7 +240,7 @@ static int sco_connect(struct sock *sk)
 	}
 
 	hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
-			       sco_pi(sk)->setting);
+			       sco_pi(sk)->setting, &sco_pi(sk)->codec);
 	if (IS_ERR(hcon)) {
 		err = PTR_ERR(hcon);
 		goto done;
@@ -876,9 +876,9 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
 	u32 opt;
 #if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
 	struct bt_codecs *codecs;
-	struct hci_dev *hdev;
 	__u8 buffer[255];
 #endif
+	struct hci_dev *hdev;
 
 	BT_DBG("sk %p", sk);
 
@@ -926,6 +926,15 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
 		}
 
 		sco_pi(sk)->setting = voice.setting;
+		hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
+				     BDADDR_BREDR);
+		if (!hdev) {
+			err = -EBADFD;
+			break;
+		}
+		if (use_enhanced_sco_conn(hdev) &&
+		    voice.setting == BT_VOICE_TRANSPARENT)
+			sco_pi(sk)->codec.id = CODING_FORMAT_TRANSPARENT;
 		break;
 
 	case BT_PKT_STATUS:
Signature · 1 line
2.17.1
#8 lore raw

Re: [PATCH v10 08/10] Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command

Hi Kiran,

Quoted 243 lines · Kiran K

< HCI Command: Enhanced Setup Synchronous Connection (0x01|0x003d) plen 59
Handle: 256
Transmit bandwidth: 8000
Receive bandwidth: 8000
Max latency: 13
Packet type: 0x0380
3-EV3 may not be used
2-EV5 may not be used
3-EV5 may not be used
Retransmission effort: Optimize for link quality (0x02)

Quoted 1 line

HCI Event: Command Status (0x0f) plen 4

      Enhanced Setup Synchronous Connection (0x01|0x003d) ncmd 1
        Status: Success (0x00)
Quoted 1 line

HCI Event: Synchronous Connect Complete (0x2c) plen 17

        Status: Success (0x00)
        Handle: 257
        Address: CC:98:8B:92:04:FD (SONY Visual Products Inc.)
        Link type: eSCO (0x02)
        Transmission interval: 0x0c
        Retransmission window: 0x06
        RX packet length: 60
        TX packet length: 60
        Air mode: Transparent (0x03)

---
* changes in v10:
- Fix typos and remove unwanted chunks
* changes in v9:
- Fix review comments, use bt_dev_dbg instead of BT_DBG

 include/net/bluetooth/bluetooth.h |   3 +-
 include/net/bluetooth/hci.h       |  34 ++++++++++
 include/net/bluetooth/hci_core.h  |   7 +-
 net/bluetooth/hci_conn.c          | 106 ++++++++++++++++++++++++++++--
 net/bluetooth/hci_event.c         |  48 +++++++++++++-
 net/bluetooth/sco.c               |  13 +++-
 6 files changed, 201 insertions(+), 10 deletions(-)
include/net/bluetooth/bluetooth.h +2 -1
index 0e8802d09068..af2809121571 100644
@@ -173,7 +173,8 @@ struct bt_codecs {
        struct bt_codec codecs[];
 } __packed;
 
-#define CODING_FORMAT_CVSD     0x02
+#define CODING_FORMAT_CVSD             0x02
+#define CODING_FORMAT_TRANSPARENT      0x03
 
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
include/net/bluetooth/hci.h +34 -0
index ae384b7bf000..e20318854900 100644
@@ -871,6 +871,40 @@ struct hci_cp_logical_link_cancel {
        __u8     flow_spec_id;
 } __packed;
 
+#define HCI_OP_ENHANCED_SETUP_SYNC_CONN                0x043D
+struct hci_coding_format {
+       __u8    id;
+       __le16  cid;
+       __le16  vid;
+} __packed;
+
+struct hci_cp_enhanced_setup_sync_conn {
+       __le16   handle;
+       __le32   tx_bandwidth;
+       __le32   rx_bandwidth;
+       struct   hci_coding_format tx_coding_format;
+       struct   hci_coding_format rx_coding_format;
+       __le16   tx_codec_frame_size;
+       __le16   rx_codec_frame_size;
+       __le32   in_bandwidth;
+       __le32   out_bandwidth;
+       struct   hci_coding_format in_coding_format;
+       struct   hci_coding_format out_coding_format;
+       __le16   in_coded_data_size;
+       __le16   out_coded_data_size;
+       __u8     in_pcm_data_format;
+       __u8     out_pcm_data_format;
+       __u8     in_pcm_sample_payload_msb_pos;
+       __u8     out_pcm_sample_payload_msb_pos;
+       __u8     in_data_path;
+       __u8     out_data_path;
+       __u8     in_transport_unit_size;
+       __u8     out_transport_unit_size;
+       __le16   max_latency;
+       __le16   pkt_type;
+       __u8     retrans_effort;
+} __packed;
+
 struct hci_rp_logical_link_cancel {
        __u8     status;
        __u8     phy_handle;
include/net/bluetooth/hci_core.h +6 -1
index ebf42a3ac6cd..80ed81fb1883 100644
@@ -719,6 +719,7 @@ struct hci_conn {
        struct amp_mgr  *amp_mgr;
 
        struct hci_conn *link;
+       struct bt_codec codec;
 
        void (*connect_cfm_cb)  (struct hci_conn *conn, u8 status);
        void (*security_cfm_cb) (struct hci_conn *conn, u8 status);
@@ -1101,6 +1102,7 @@ static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
 
 int hci_disconnect(struct hci_conn *conn, __u8 reason);
 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
+bool hci_enhanced_setup_sync(struct hci_conn *conn, __u16 handle);
 void hci_sco_setup(struct hci_conn *conn, __u8 status);
 
 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
@@ -1125,7 +1127,7 @@ struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
                                 u8 sec_level, u8 auth_type,
                                 enum conn_reasons conn_reason);
 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
-                                __u16 setting);
+                                __u16 setting, struct bt_codec *codec);
 int hci_conn_check_link_mode(struct hci_conn *conn);
 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
@@ -1446,6 +1448,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
 /* Use LL Privacy based address resolution if supported */
 #define use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
 
+/* Use enhanced synchronous connection if command is supported */
+#define use_enhanced_sco_conn(dev) ((dev)->commands[29] & 0x08)
+
 /* Use ext scanning if set ext scan param and ext scan enable is supported */
 #define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
                           ((dev)->commands[37] & 0x40))
net/bluetooth/hci_conn.c +90 -0
index 2b5059a56cda..d4a08b344ad0 100644
@@ -307,6 +307,96 @@ static bool find_next_esco_param(struct hci_conn *conn,
        return conn->attempt <= size;
 }
 
+bool hci_enhanced_setup_sync(struct hci_conn *conn, __u16 handle)
+{
+       struct hci_dev *hdev = conn->hdev;
+       struct hci_cp_enhanced_setup_sync_conn cp;
+       const struct sco_param *param;
+
+       bt_dev_dbg(hdev, "hcon %p", conn);
+
+       conn->state = BT_CONNECT;
+       conn->out = true;
+
+       conn->attempt++;
+
+       memset(&cp, 0x00, sizeof(cp));
+
+       cp.handle   = cpu_to_le16(handle);
+
+       cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
+       cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
+
+       switch (conn->codec.id) {
+       case CODING_FORMAT_TRANSPARENT:
+               if (!find_next_esco_param(conn, esco_param_msbc,
+                                         ARRAY_SIZE(esco_param_msbc)))
+                       return false;
+               param = &esco_param_msbc[conn->attempt - 1];
+               cp.tx_coding_format.id = 0x03;
+               cp.rx_coding_format.id = 0x03;
+               cp.tx_codec_frame_size = __cpu_to_le16(60);
+               cp.rx_codec_frame_size = __cpu_to_le16(60);
+               cp.in_bandwidth = __cpu_to_le32(0x1f40);
+               cp.out_bandwidth = __cpu_to_le32(0x1f40);
+               cp.in_coding_format.id = 0x03;
+               cp.out_coding_format.id = 0x03;
+               cp.in_coded_data_size = __cpu_to_le16(16);
+               cp.out_coded_data_size = __cpu_to_le16(16);
+               cp.in_pcm_data_format = 2;
+               cp.out_pcm_data_format = 2;
+               cp.in_pcm_sample_payload_msb_pos = 0;
+               cp.out_pcm_sample_payload_msb_pos = 0;
+               cp.in_data_path = conn->codec.data_path;
+               cp.out_data_path = conn->codec.data_path;
+               cp.in_transport_unit_size = 1;
+               cp.out_transport_unit_size = 1;
+               break;
+
+       case CODING_FORMAT_CVSD:
+               if (lmp_esco_capable(conn->link)) {
+                       if (!find_next_esco_param(conn, esco_param_cvsd,
+                                                 ARRAY_SIZE(esco_param_cvsd)))
+                               return false;
+                       param = &esco_param_cvsd[conn->attempt - 1];
+               } else {
+                       if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
+                               return false;
+                       param = &sco_param_cvsd[conn->attempt - 1];
+               }
+               cp.tx_coding_format.id = 2;
+               cp.rx_coding_format.id = 2;
+               cp.tx_codec_frame_size = __cpu_to_le16(60);
+               cp.rx_codec_frame_size = __cpu_to_le16(60);
+               cp.in_bandwidth = __cpu_to_le32(16000);
+               cp.out_bandwidth = __cpu_to_le32(16000);
+               cp.in_coding_format.id = 4;
+               cp.out_coding_format.id = 4;
+               cp.in_coded_data_size = __cpu_to_le16(16);
+               cp.out_coded_data_size = __cpu_to_le16(16);
+               cp.in_pcm_data_format = 2;
+               cp.out_pcm_data_format = 2;
+               cp.in_pcm_sample_payload_msb_pos = 0;
+               cp.out_pcm_sample_payload_msb_pos = 0;
+               cp.in_data_path = conn->codec.data_path;
+               cp.out_data_path = conn->codec.data_path;
+               cp.in_transport_unit_size = 16;
+               cp.out_transport_unit_size = 16;
+               break;
+       default:
+               return false;
+       }
+
+       cp.retrans_effort = param->retrans_effort;
+       cp.pkt_type = __cpu_to_le16(param->pkt_type);
+       cp.max_latency = __cpu_to_le16(param->max_latency);
+
+       if (hci_send_cmd(hdev, HCI_OP_ENHANCED_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
+               return false;
+
+       return true;
+}
+
 bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
 {
        struct hci_dev *hdev = conn->hdev;
@@ -424,10 +514,14 @@ void hci_sco_setup(struct hci_conn *conn, __u8 status)
        BT_DBG("hcon %p", conn);

net/bluetooth/hci_conn.c void hci_sco_setup(struct hci_conn *conn, __u8 status) · line 521

Quoted 10 lines
net/bluetooth/hci_conn.c +5 -3
 
        if (!status) {
-               if (lmp_esco_capable(conn->hdev))
-                       hci_setup_sync(sco, conn->handle);
-               else
+               if (lmp_esco_capable(conn->hdev)) {
+                       if (use_enhanced_sco_conn(conn->hdev))
+                               hci_enhanced_setup_sync(sco, conn->handle);
+                       else
+                               hci_setup_sync(sco, conn->handle);

Make the check for use_enhanced_sco_conn inside hci_setup_sync and then call it internally there so we don't have to check it in multiple places (afaik we normally use _capable for this sort of macros). Btw since the use of enhanced version won't be conditional to the new Kconfig you must enable it in the emulator so it can be exercised by the CI, also Id just send this one separately alongside the changes to enable it on the emulator.

Quoted 142 lines
net/bluetooth/hci_conn.c +7 -1
+               } else {
                        hci_add_sco(sco, conn->handle);
+               }
        } else {
                hci_connect_cfm(sco, status);
                hci_conn_del(sco);
@@ -1319,7 +1413,7 @@ struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
 }
 
 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
-                                __u16 setting)
+                                __u16 setting, struct bt_codec *codec)
 {
        struct hci_conn *acl;
        struct hci_conn *sco;
@@ -1344,6 +1438,10 @@ struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
        hci_conn_hold(sco);
 
        sco->setting = setting;
+       sco->codec.id = codec->id;
+       sco->codec.cid = codec->cid;
+       sco->codec.vid = codec->vid;
+       sco->codec.data_path = codec->data_path;
 
        if (acl->state == BT_CONNECTED &&
            (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
net/bluetooth/hci_event.c +46 -2
index 1c3018202564..a021f29f12ad 100644
@@ -2236,6 +2236,41 @@ static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
        hci_dev_unlock(hdev);
 }
 
+static void hci_cs_enhanced_setup_sync_conn(struct hci_dev *hdev, __u8 status)
+{
+       struct hci_cp_enhanced_setup_sync_conn *cp;
+       struct hci_conn *acl, *sco;
+       __u16 handle;
+
+       bt_dev_dbg(hdev, "status 0x%2.2x", status);
+
+       if (!status)
+               return;
+
+       cp = hci_sent_cmd_data(hdev, HCI_OP_ENHANCED_SETUP_SYNC_CONN);
+       if (!cp)
+               return;
+
+       handle = __le16_to_cpu(cp->handle);
+
+       bt_dev_dbg(hdev, "handle 0x%4.4x", handle);
+
+       hci_dev_lock(hdev);
+
+       acl = hci_conn_hash_lookup_handle(hdev, handle);
+       if (acl) {
+               sco = acl->link;
+               if (sco) {
+                       sco->state = BT_CLOSED;
+
+                       hci_connect_cfm(sco, status);
+                       hci_conn_del(sco);
+               }
+       }
+
+       hci_dev_unlock(hdev);
+}
+
 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
 {
        struct hci_cp_sniff_mode *cp;
@@ -3715,6 +3750,10 @@ static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb,
                hci_cs_setup_sync_conn(hdev, ev->status);
                break;
 
+       case HCI_OP_ENHANCED_SETUP_SYNC_CONN:
+               hci_cs_enhanced_setup_sync_conn(hdev, ev->status);
+               break;
+
        case HCI_OP_SNIFF_MODE:
                hci_cs_sniff_mode(hdev, ev->status);
                break;
@@ -4401,8 +4440,13 @@ static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
                if (conn->out) {
                        conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
                                        (hdev->esco_type & EDR_ESCO_MASK);
-                       if (hci_setup_sync(conn, conn->link->handle))
-                               goto unlock;
+                       if (use_enhanced_sco_conn(hdev)) {
+                               if (hci_enhanced_setup_sync(conn, conn->link->handle))
+                                       goto unlock;
+                       } else {
+                               if (hci_setup_sync(conn, conn->link->handle))
+                                       goto unlock;
+                       }
                }
                fallthrough;
 
net/bluetooth/sco.c +11 -3
index 4b6ee0b302d7..b44d56eb936a 100644
@@ -240,7 +240,7 @@ static int sco_connect(struct sock *sk)
        }
 
        hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
-                              sco_pi(sk)->setting);
+                              sco_pi(sk)->setting, &sco_pi(sk)->codec);
        if (IS_ERR(hcon)) {
                err = PTR_ERR(hcon);
                goto done;
@@ -876,9 +876,9 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
        u32 opt;
 #if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
        struct bt_codecs *codecs;
-       struct hci_dev *hdev;
        __u8 buffer[255];
 #endif
+       struct hci_dev *hdev;
 
        BT_DBG("sk %p", sk);
 
@@ -926,6 +926,15 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
                }
 
                sco_pi(sk)->setting = voice.setting;
+               hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
+                                    BDADDR_BREDR);
+               if (!hdev) {
+                       err = -EBADFD;
+                       break;
+               }
+               if (use_enhanced_sco_conn(hdev) &&
+                   voice.setting == BT_VOICE_TRANSPARENT)
+                       sco_pi(sk)->codec.id = CODING_FORMAT_TRANSPARENT;
                break;
 
        case BT_PKT_STATUS:
--

2.17.1

Signature · 1 line
Luiz Augusto von Dentz
author
#9 lore raw

RE: [PATCH v10 08/10] Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command

Hi Luiz,

Quoted 264 lines

-----Original Message-----
From: Luiz Augusto von Dentz <[email protected]>
Sent: Thursday, July 1, 2021 2:09 AM
To: K, Kiran <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH v10 08/10] Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command

Hi Kiran,

Quoted 2 lines · Kiran K

< HCI Command: Enhanced Setup Synchronous Connection (0x01|0x003d)

plen 59

Quoted 116 lines

Handle: 256
Transmit bandwidth: 8000
Receive bandwidth: 8000
Max latency: 13
Packet type: 0x0380
3-EV3 may not be used
2-EV5 may not be used
3-EV5 may not be used
Retransmission effort: Optimize for link quality (0x02)

Quoted 1 line

HCI Event: Command Status (0x0f) plen 4

      Enhanced Setup Synchronous Connection (0x01|0x003d) ncmd 1
        Status: Success (0x00)
Quoted 1 line

HCI Event: Synchronous Connect Complete (0x2c) plen 17

        Status: Success (0x00)
        Handle: 257
        Address: CC:98:8B:92:04:FD (SONY Visual Products Inc.)
        Link type: eSCO (0x02)
        Transmission interval: 0x0c
        Retransmission window: 0x06
        RX packet length: 60
        TX packet length: 60
        Air mode: Transparent (0x03)

---
* changes in v10:
- Fix typos and remove unwanted chunks
* changes in v9:
- Fix review comments, use bt_dev_dbg instead of BT_DBG

 include/net/bluetooth/bluetooth.h |   3 +-
 include/net/bluetooth/hci.h       |  34 ++++++++++
 include/net/bluetooth/hci_core.h  |   7 +-
 net/bluetooth/hci_conn.c          | 106 ++++++++++++++++++++++++++++--
 net/bluetooth/hci_event.c         |  48 +++++++++++++-
 net/bluetooth/sco.c               |  13 +++-
 6 files changed, 201 insertions(+), 10 deletions(-)
include/net/bluetooth/bluetooth.h +2 -1
index 0e8802d09068..af2809121571 100644
@@ -173,7 +173,8 @@ struct bt_codecs {
        struct bt_codec codecs[];
 } __packed;
 
-#define CODING_FORMAT_CVSD     0x02
+#define CODING_FORMAT_CVSD             0x02
+#define CODING_FORMAT_TRANSPARENT      0x03
 
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
include/net/bluetooth/hci.h +34 -0
index ae384b7bf000..e20318854900 100644
@@ -871,6 +871,40 @@ struct hci_cp_logical_link_cancel {
        __u8     flow_spec_id;
 } __packed;
 
+#define HCI_OP_ENHANCED_SETUP_SYNC_CONN                0x043D
+struct hci_coding_format {
+       __u8    id;
+       __le16  cid;
+       __le16  vid;
+} __packed;
+
+struct hci_cp_enhanced_setup_sync_conn {
+       __le16   handle;
+       __le32   tx_bandwidth;
+       __le32   rx_bandwidth;
+       struct   hci_coding_format tx_coding_format;
+       struct   hci_coding_format rx_coding_format;
+       __le16   tx_codec_frame_size;
+       __le16   rx_codec_frame_size;
+       __le32   in_bandwidth;
+       __le32   out_bandwidth;
+       struct   hci_coding_format in_coding_format;
+       struct   hci_coding_format out_coding_format;
+       __le16   in_coded_data_size;
+       __le16   out_coded_data_size;
+       __u8     in_pcm_data_format;
+       __u8     out_pcm_data_format;
+       __u8     in_pcm_sample_payload_msb_pos;
+       __u8     out_pcm_sample_payload_msb_pos;
+       __u8     in_data_path;
+       __u8     out_data_path;
+       __u8     in_transport_unit_size;
+       __u8     out_transport_unit_size;
+       __le16   max_latency;
+       __le16   pkt_type;
+       __u8     retrans_effort;
+} __packed;
+
 struct hci_rp_logical_link_cancel {
        __u8     status;
        __u8     phy_handle;
include/net/bluetooth/hci_core.h +1 -1
index ebf42a3ac6cd..80ed81fb1883 100644
@@ -719,6 +719,7 @@ struct hci_conn {
        struct amp_mgr  *amp_mgr;
 
        struct hci_conn *link;
+       struct bt_codec codec;
 
        void (*connect_cfm_cb)  (struct hci_conn *conn, u8 status);
        void (*security_cfm_cb) (struct hci_conn *conn, u8 status); @@
-1101,6 +1102,7 @@ static inline struct hci_conn

*hci_lookup_le_connect(struct hci_dev *hdev)

Quoted 7 lines

int hci_disconnect(struct hci_conn *conn, __u8 reason); bool
hci_setup_sync(struct hci_conn *conn, __u16 handle); +bool hci_enhanced_setup_sync(struct hci_conn *conn, __u16 handle);
void hci_sco_setup(struct hci_conn *conn, __u8 status);

struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type,
bdaddr_t *dst, @@ -1125,7 +1127,7 @@ struct hci_conn

*hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,

Quoted 3 lines

u8 sec_level, u8 auth_type, enum conn_reasons conn_reason);
struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t

*dst,

Quoted 15 lines
include/net/bluetooth/hci_core.h +2 -1
-                                __u16 setting);
+                                __u16 setting, struct bt_codec
+ *codec);
 int hci_conn_check_link_mode(struct hci_conn *conn);  int

hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level); int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type, @@ -1446,6 +1448,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
/* Use LL Privacy based address resolution if supported */ #define
use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)

include/net/bluetooth/hci_core.h +3 -0
+/* Use enhanced synchronous connection if command is supported */
+#define use_enhanced_sco_conn(dev) ((dev)->commands[29] & 0x08)
+
 /* Use ext scanning if set ext scan param and ext scan enable is
Quoted 1 line

supported */ #define use_ext_scan(dev) (((dev)->commands[37] & 0x20)

&& \

net/bluetooth/hci_conn.c static bool find_next_esco_param(struct hci_conn

Quoted 6 lines
                           ((dev)->commands[37] & 0x40)) diff --git

a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 2b5059a56cda..d4a08b344ad0 100644

net/bluetooth/hci_conn.c +0 -0
@@ -307,6 +307,96 @@ static bool find_next_esco_param(struct hci_conn

*conn,

Quoted 77 lines
net/bluetooth/hci_conn.c +74 -0
        return conn->attempt <= size;
 }
 
+bool hci_enhanced_setup_sync(struct hci_conn *conn, __u16 handle) {
+       struct hci_dev *hdev = conn->hdev;
+       struct hci_cp_enhanced_setup_sync_conn cp;
+       const struct sco_param *param;
+
+       bt_dev_dbg(hdev, "hcon %p", conn);
+
+       conn->state = BT_CONNECT;
+       conn->out = true;
+
+       conn->attempt++;
+
+       memset(&cp, 0x00, sizeof(cp));
+
+       cp.handle   = cpu_to_le16(handle);
+
+       cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
+       cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
+
+       switch (conn->codec.id) {
+       case CODING_FORMAT_TRANSPARENT:
+               if (!find_next_esco_param(conn, esco_param_msbc,
+                                         ARRAY_SIZE(esco_param_msbc)))
+                       return false;
+               param = &esco_param_msbc[conn->attempt - 1];
+               cp.tx_coding_format.id = 0x03;
+               cp.rx_coding_format.id = 0x03;
+               cp.tx_codec_frame_size = __cpu_to_le16(60);
+               cp.rx_codec_frame_size = __cpu_to_le16(60);
+               cp.in_bandwidth = __cpu_to_le32(0x1f40);
+               cp.out_bandwidth = __cpu_to_le32(0x1f40);
+               cp.in_coding_format.id = 0x03;
+               cp.out_coding_format.id = 0x03;
+               cp.in_coded_data_size = __cpu_to_le16(16);
+               cp.out_coded_data_size = __cpu_to_le16(16);
+               cp.in_pcm_data_format = 2;
+               cp.out_pcm_data_format = 2;
+               cp.in_pcm_sample_payload_msb_pos = 0;
+               cp.out_pcm_sample_payload_msb_pos = 0;
+               cp.in_data_path = conn->codec.data_path;
+               cp.out_data_path = conn->codec.data_path;
+               cp.in_transport_unit_size = 1;
+               cp.out_transport_unit_size = 1;
+               break;
+
+       case CODING_FORMAT_CVSD:
+               if (lmp_esco_capable(conn->link)) {
+                       if (!find_next_esco_param(conn, esco_param_cvsd,
+                                                 ARRAY_SIZE(esco_param_cvsd)))
+                               return false;
+                       param = &esco_param_cvsd[conn->attempt - 1];
+               } else {
+                       if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
+                               return false;
+                       param = &sco_param_cvsd[conn->attempt - 1];
+               }
+               cp.tx_coding_format.id = 2;
+               cp.rx_coding_format.id = 2;
+               cp.tx_codec_frame_size = __cpu_to_le16(60);
+               cp.rx_codec_frame_size = __cpu_to_le16(60);
+               cp.in_bandwidth = __cpu_to_le32(16000);
+               cp.out_bandwidth = __cpu_to_le32(16000);
+               cp.in_coding_format.id = 4;
+               cp.out_coding_format.id = 4;
+               cp.in_coded_data_size = __cpu_to_le16(16);
+               cp.out_coded_data_size = __cpu_to_le16(16);
+               cp.in_pcm_data_format = 2;
+               cp.out_pcm_data_format = 2;
+               cp.in_pcm_sample_payload_msb_pos = 0;
+               cp.out_pcm_sample_payload_msb_pos = 0;
+               cp.in_data_path = conn->codec.data_path;
+               cp.out_data_path = conn->codec.data_path;
+               cp.in_transport_unit_size = 16;
+               cp.out_transport_unit_size = 16;

net/bluetooth/hci_conn.c static bool find_next_esco_param(struct hci_conn *conn,

Quoted 10 lines
net/bluetooth/hci_conn.c +10 -0
+               break;
+       default:
+               return false;
+       }
+
+       cp.retrans_effort = param->retrans_effort;
+       cp.pkt_type = __cpu_to_le16(param->pkt_type);
+       cp.max_latency = __cpu_to_le16(param->max_latency);
+
+       if (hci_send_cmd(hdev, HCI_OP_ENHANCED_SETUP_SYNC_CONN,

sizeof(cp), &cp) < 0)

Quoted 10 lines
net/bluetooth/hci_conn.c +5 -0
+               return false;
+
+       return true;
+}
+
 bool hci_setup_sync(struct hci_conn *conn, __u16 handle)  {
        struct hci_dev *hdev = conn->hdev; @@ -424,10 +514,14 @@ void
 hci_sco_setup(struct hci_conn *conn, __u8 status)
        BT_DBG("hcon %p", conn);
Quoted 16 lines

net/bluetooth/hci_conn.c void hci_sco_setup(struct hci_conn *conn, __u8 status) · line 521

Quoted 9 lines
        if (!status) {
net/bluetooth/hci_conn.c +5 -3
-               if (lmp_esco_capable(conn->hdev))
-                       hci_setup_sync(sco, conn->handle);
-               else
+               if (lmp_esco_capable(conn->hdev)) {
+                       if (use_enhanced_sco_conn(conn->hdev))
+                               hci_enhanced_setup_sync(sco, conn->handle);
+                       else
+                               hci_setup_sync(sco, conn->handle);

Make the check for use_enhanced_sco_conn inside hci_setup_sync and then call it internally there so we don't have to check it in multiple places (afaik we normally use _capable for this sort of macros). Btw since the use of enhanced version won't be conditional to the new Kconfig you must enable it in the emulator so it can be exercised by the CI, also Id just send this one separately alongside the changes to enable it on the emulator.

Ack.

Quoted 149 lines

net/bluetooth/hci_conn.c struct hci_conn *hci_connect_acl(struct hci_dev · line 1415

Quoted 11 lines
net/bluetooth/hci_conn.c +2 -0
+               } else {
                        hci_add_sco(sco, conn->handle);
+               }
        } else {
                hci_connect_cfm(sco, status);
                hci_conn_del(sco);
@@ -1319,7 +1413,7 @@ struct hci_conn *hci_connect_acl(struct hci_dev
 *hdev, bdaddr_t *dst,  }
 
 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t

*dst,

net/bluetooth/hci_conn.c struct hci_conn *hci_connect_sco(struct

Quoted 7 lines
net/bluetooth/hci_conn.c +2 -1
-                                __u16 setting)
+                                __u16 setting, struct bt_codec
+ *codec)
 {
        struct hci_conn *acl;
        struct hci_conn *sco;
@@ -1344,6 +1438,10 @@ struct hci_conn *hci_connect_sco(struct

hci_dev *hdev, int type, bdaddr_t *dst,

net/bluetooth/hci_event.c static void hci_cs_setup_sync_conn(struct

Quoted 15 lines
net/bluetooth/hci_conn.c +4 -1
        hci_conn_hold(sco);
 
        sco->setting = setting;
+       sco->codec.id = codec->id;
+       sco->codec.cid = codec->cid;
+       sco->codec.vid = codec->vid;
+       sco->codec.data_path = codec->data_path;
 
        if (acl->state == BT_CONNECTED &&
            (sco->state == BT_OPEN || sco->state == BT_CLOSED)) { diff
--git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index

1c3018202564..a021f29f12ad 100644

net/bluetooth/hci_event.c +0 -0
@@ -2236,6 +2236,41 @@ static void hci_cs_setup_sync_conn(struct

hci_dev *hdev, __u8 status)

Quoted 5 lines
net/bluetooth/hci_event.c +2 -0
        hci_dev_unlock(hdev);
 }
 
+static void hci_cs_enhanced_setup_sync_conn(struct hci_dev *hdev,
+__u8 status) {

net/bluetooth/hci_event.c static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)

Quoted 10 lines
net/bluetooth/hci_event.c +10 -0
+       struct hci_cp_enhanced_setup_sync_conn *cp;
+       struct hci_conn *acl, *sco;
+       __u16 handle;
+
+       bt_dev_dbg(hdev, "status 0x%2.2x", status);
+
+       if (!status)
+               return;
+
+       cp = hci_sent_cmd_data(hdev,

HCI_OP_ENHANCED_SETUP_SYNC_CONN);

net/bluetooth/hci_event.c static void hci_cmd_status_evt(struct hci_dev

Quoted 26 lines
net/bluetooth/hci_event.c +23 -0
+       if (!cp)
+               return;
+
+       handle = __le16_to_cpu(cp->handle);
+
+       bt_dev_dbg(hdev, "handle 0x%4.4x", handle);
+
+       hci_dev_lock(hdev);
+
+       acl = hci_conn_hash_lookup_handle(hdev, handle);
+       if (acl) {
+               sco = acl->link;
+               if (sco) {
+                       sco->state = BT_CLOSED;
+
+                       hci_connect_cfm(sco, status);
+                       hci_conn_del(sco);
+               }
+       }
+
+       hci_dev_unlock(hdev);
+}
+
 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)  {
        struct hci_cp_sniff_mode *cp;
@@ -3715,6 +3750,10 @@ static void hci_cmd_status_evt(struct hci_dev

*hdev, struct sk_buff *skb,

net/bluetooth/hci_event.c static void hci_sync_conn_complete_evt(struct

Quoted 11 lines
net/bluetooth/hci_event.c +4 -0
                hci_cs_setup_sync_conn(hdev, ev->status);
                break;
 
+       case HCI_OP_ENHANCED_SETUP_SYNC_CONN:
+               hci_cs_enhanced_setup_sync_conn(hdev, ev->status);
+               break;
+
        case HCI_OP_SNIFF_MODE:
                hci_cs_sniff_mode(hdev, ev->status);
                break;
@@ -4401,8 +4440,13 @@ static void hci_sync_conn_complete_evt(struct

hci_dev *hdev,

net/bluetooth/sco.c static int sco_sock_setsockopt(struct socket *sock,

Quoted 30 lines
net/bluetooth/hci_event.c +7 -2
                if (conn->out) {
                        conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
                                        (hdev->esco_type & EDR_ESCO_MASK);
-                       if (hci_setup_sync(conn, conn->link->handle))
-                               goto unlock;
+                       if (use_enhanced_sco_conn(hdev)) {
+                               if (hci_enhanced_setup_sync(conn, conn->link->handle))
+                                       goto unlock;
+                       } else {
+                               if (hci_setup_sync(conn, conn->link->handle))
+                                       goto unlock;
+                       }
                }
                fallthrough;
 
net/bluetooth/sco.c index renamed from net/bluetooth/sco.c +0 -0

4b6ee0b302d7..b44d56eb936a 100644

net/bluetooth/sco.c +2 -1
@@ -240,7 +240,7 @@ static int sco_connect(struct sock *sk)
        }
 
        hcon = hci_connect_sco(hdev, type, &sco_pi(sk)->dst,
-                              sco_pi(sk)->setting);
+                              sco_pi(sk)->setting,
+ &sco_pi(sk)->codec);
        if (IS_ERR(hcon)) {
                err = PTR_ERR(hcon);
                goto done;
@@ -876,9 +876,9 @@ static int sco_sock_setsockopt(struct socket *sock,

int level, int optname,

net/bluetooth/sco.c static int sco_sock_setsockopt(struct socket *sock,

Quoted 11 lines
net/bluetooth/sco.c +1 -1
        u32 opt;
 #if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
        struct bt_codecs *codecs;
-       struct hci_dev *hdev;
        __u8 buffer[255];
 #endif
+       struct hci_dev *hdev;
 
        BT_DBG("sk %p", sk);
 
@@ -926,6 +926,15 @@ static int sco_sock_setsockopt(struct socket *sock,

int level, int optname,

Quoted 15 lines
net/bluetooth/sco.c +10 -0
                }
 
                sco_pi(sk)->setting = voice.setting;
+               hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src,
+                                    BDADDR_BREDR);
+               if (!hdev) {
+                       err = -EBADFD;
+                       break;
+               }
+               if (use_enhanced_sco_conn(hdev) &&
+                   voice.setting == BT_VOICE_TRANSPARENT)
+                       sco_pi(sk)->codec.id =
+ CODING_FORMAT_TRANSPARENT;
                break;
 
Quoted 8 lines
Quoted 4 lines

case BT_PKT_STATUS:
--
2.17.1

--
Luiz Augusto von Dentz

Thanks,
Kiran

author
#10 lore raw

PATCH v10 9/10 Bluetooth: Add support for msbc coding format

In reply to Kiran K

In Enhanced_Setup_Synchronous_Command, add support for msbc coding format

---
* changes on v10:
- Fix typos and unwanted chunks

 include/net/bluetooth/bluetooth.h |  1 +
 net/bluetooth/hci_conn.c          | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
include/net/bluetooth/bluetooth.h +1 -0
index af2809121571..056699224da7 100644
@@ -175,6 +175,7 @@ struct bt_codecs {
 
 #define CODING_FORMAT_CVSD		0x02
 #define CODING_FORMAT_TRANSPARENT	0x03
+#define CODING_FORMAT_MSBC		0x05
 
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
net/bluetooth/hci_conn.c +27 -0
index d4a08b344ad0..ba7ae59d155b 100644
@@ -328,6 +328,33 @@ bool hci_enhanced_setup_sync(struct hci_conn *conn, __u16 handle)
 	cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
 
 	switch (conn->codec.id) {
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+	case CODING_FORMAT_MSBC:
+		if (!find_next_esco_param(conn, esco_param_msbc,
+					  ARRAY_SIZE(esco_param_msbc)))
+			return false;
+
+		param = &esco_param_msbc[conn->attempt - 1];
+		cp.tx_coding_format.id = 0x05;
+		cp.rx_coding_format.id = 0x05;
+		cp.tx_codec_frame_size = __cpu_to_le16(60);
+		cp.rx_codec_frame_size = __cpu_to_le16(60);
+		cp.in_bandwidth = __cpu_to_le32(32000);
+		cp.out_bandwidth = __cpu_to_le32(32000);
+		cp.in_coding_format.id = 0x04;
+		cp.out_coding_format.id = 0x04;
+		cp.in_coded_data_size = __cpu_to_le16(16);
+		cp.out_coded_data_size = __cpu_to_le16(16);
+		cp.in_pcm_data_format = 2;
+		cp.out_pcm_data_format = 2;
+		cp.in_pcm_sample_payload_msb_pos = 0;
+		cp.out_pcm_sample_payload_msb_pos = 0;
+		cp.in_data_path = conn->codec.data_path;
+		cp.out_data_path = conn->codec.data_path;
+		cp.in_transport_unit_size = 1;
+		cp.out_transport_unit_size = 1;
+		break;
+#endif
 	case CODING_FORMAT_TRANSPARENT:
 		if (!find_next_esco_param(conn, esco_param_msbc,
 					  ARRAY_SIZE(esco_param_msbc)))
Signature · 1 line
2.17.1
author
#11 lore raw

PATCH v10 10/10 Bluetooth: Add offload feature under experimental flag

In reply to Kiran K

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

 include/net/bluetooth/hci.h |   4 ++
 net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
 net/bluetooth/sco.c         |  10 ++++
 3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +4 -0
index e20318854900..5ca98d9f64dd 100644
@@ -331,6 +331,10 @@ enum {
 	HCI_CMD_PENDING,
 	HCI_FORCE_NO_MITM,
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+	HCI_OFFLOAD_CODECS_ENABLED,
+#endif
+
 	__HCI_NUM_FLAGS,
 };
 
net/bluetooth/mgmt.c +105 -1

136 lines not on this page · raw message

net/bluetooth/sco.c +10 -0
index b44d56eb936a..bc033464af43 100644
@@ -964,6 +964,11 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
 			break;
 		}
 
+		if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
+			err = -EOPNOTSUPP;
+			break;
+		}
+
 		if (!hdev->get_codec_config_data) {
 			err = -EOPNOTSUPP;
 			break;
@@ -1163,6 +1168,11 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
 			break;
 		}
 
+		if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
+			err = -EOPNOTSUPP;
+			break;
+		}
+
 		if (!hdev->get_data_path_id) {
 			err = -EOPNOTSUPP;
 			break;
Signature · 1 line
2.17.1
#12 lore raw

Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Kiran,

Quoted 22 lines · Kiran K

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

 include/net/bluetooth/hci.h |   4 ++
 net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
 net/bluetooth/sco.c         |  10 ++++
 3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +0 -0
index e20318854900..5ca98d9f64dd 100644

include/net/bluetooth/hci.h enum { · line 336

Quoted 6 lines
include/net/bluetooth/hci.h +3 -0
@@ -331,6 +331,10 @@ enum {
        HCI_CMD_PENDING,
        HCI_FORCE_NO_MITM,
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED,
+#endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

Quoted 33 lines
include/net/bluetooth/hci.h +1 -0
+
        __HCI_NUM_FLAGS,
 };
 
net/bluetooth/mgmt.c +9 -1
index 3663f880df11..d7be85eb52e7 100644
@@ -3791,6 +3791,14 @@ static const u8 debug_uuid[16] = {
 };
 #endif
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+/* a6695ace-ee7f-4fb9-881a-5fac66c629af */
+static const u8 offload_codecs_uuid[16] = {
+       0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, 0x1a, 0x88,
+       0xb9, 0x4f, 0x7f, 0xee, 0xce, 0x5a, 0x69, 0xa6,
+};
+#endif
+
 /* 671b10b5-42c0-4696-9227-eb28d1b049d6 */
 static const u8 simult_central_periph_uuid[16] = {
        0xd6, 0x49, 0xb0, 0xd1, 0x28, 0xeb, 0x27, 0x92,
@@ -3806,7 +3814,7 @@ static const u8 rpa_resolution_uuid[16] = {
 static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev,
                                  void *data, u16 data_len)
 {
-       char buf[62];   /* Enough space for 3 features */
+       char buf[82];   /* Enough space for 4 features: 2 + 20 * 4 */
        struct mgmt_rp_read_exp_features_info *rp = (void *)buf;
        u16 idx = 0;
        u32 flags;

net/bluetooth/mgmt.c static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev, · line 3862

Quoted 5 lines
net/bluetooth/mgmt.c +2 -0
@@ -3850,6 +3858,28 @@ static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev,
                idx++;
        }
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       if (hdev) {

If we have HCI_OFFLOAD_CODECS_ENABLED defined you can just use IS_ENABLED within the if statement below.

Quoted 48 lines
net/bluetooth/mgmt.c +37 -0
+               if (hdev->get_data_path_id) {
+                       /* BIT(0): indicating if offload codecs are
+                        * supported by controller.
+                        */
+                       flags = BIT(0);
+
+                       /* BIT(1): indicating if codec offload feature
+                        * is enabled.
+                        */
+                       if (hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED))
+                               flags |= BIT(1);
+               } else {
+                       flags = 0;
+               }
+               memcpy(rp->features[idx].uuid, offload_codecs_uuid, 16);
+               rp->features[idx].flags = cpu_to_le32(flags);
+               idx++;
+       }
+#endif
+
        rp->feature_count = cpu_to_le16(idx);
 
        /* After reading the experimental features information, enable
@@ -3892,6 +3922,23 @@ static int exp_debug_feature_changed(bool enabled, struct sock *skip)
 }
 #endif
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+static int exp_offload_codec_feature_changed(bool enabled, struct sock *skip)
+{
+       struct mgmt_ev_exp_feature_changed ev;
+
+       BT_INFO("enabled %d", enabled);
+
+       memset(&ev, 0, sizeof(ev));
+       memcpy(ev.uuid, offload_codecs_uuid, 16);
+       ev.flags = cpu_to_le32(enabled ? BIT(0) : 0);
+
+       return mgmt_limited_event(MGMT_EV_EXP_FEATURE_CHANGED, NULL,
+                                 &ev, sizeof(ev),
+                                 HCI_MGMT_EXP_FEATURE_EVENTS, skip);
+}
+#endif
+
 static int set_exp_feature(struct sock *sk, struct hci_dev *hdev,
                           void *data, u16 data_len)
 {

net/bluetooth/mgmt.c static int set_exp_feature(struct sock *sk, struct hci_dev *hdev, · line 4088

Quoted 4 lines
net/bluetooth/mgmt.c +1 -0
@@ -4038,6 +4085,63 @@ static int set_exp_feature(struct sock *sk, struct hci_dev *hdev,
                return err;
        }
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)

Ditto.

Quoted 90 lines
net/bluetooth/mgmt.c +56 -0
+       if (!memcmp(cp->uuid, offload_codecs_uuid, 16)) {
+               bool val, changed;
+               int err;
+
+               /* Command requires to use a valid controller index */
+               if (!hdev)
+                       return mgmt_cmd_status(sk, MGMT_INDEX_NONE,
+                                              MGMT_OP_SET_EXP_FEATURE,
+                                              MGMT_STATUS_INVALID_INDEX);
+
+               /* Parameters are limited to a single octet */
+               if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1)
+                       return mgmt_cmd_status(sk, hdev->id,
+                                              MGMT_OP_SET_EXP_FEATURE,
+                                              MGMT_STATUS_INVALID_PARAMS);
+
+               /* Only boolean on/off is supported */
+               if (cp->param[0] != 0x00 && cp->param[0] != 0x01)
+                       return mgmt_cmd_status(sk, hdev->id,
+                                              MGMT_OP_SET_EXP_FEATURE,
+                                              MGMT_STATUS_INVALID_PARAMS);
+
+               val = !!cp->param[0];
+               changed = (val != hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED));
+
+               if (!hdev->get_data_path_id) {
+                       bt_dev_info(hdev, "offload codecs not supported");
+                       return mgmt_cmd_status(sk, hdev->id,
+                                              MGMT_OP_SET_EXP_FEATURE,
+                                              MGMT_STATUS_NOT_SUPPORTED);
+               }
+
+               if (changed) {
+                       if (val)
+                               hci_dev_set_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED);
+                       else
+                               hci_dev_clear_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED);
+               }
+
+               bt_dev_info(hdev, "offload codecs enable %d changed %d",
+                           val, changed);
+
+               memcpy(rp.uuid, offload_codecs_uuid, 16);
+               rp.flags = cpu_to_le32(val ? BIT(0) : 0);
+               hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS);
+               err = mgmt_cmd_complete(sk, hdev->id,
+                                       MGMT_OP_SET_EXP_FEATURE, 0,
+                                       &rp, sizeof(rp));
+
+               if (changed)
+                       exp_offload_codec_feature_changed(val, sk);
+
+               return err;
+       }
+#endif
+
        return mgmt_cmd_status(sk, hdev ? hdev->id : MGMT_INDEX_NONE,
                               MGMT_OP_SET_EXP_FEATURE,
                               MGMT_STATUS_NOT_SUPPORTED);
net/bluetooth/sco.c +10 -1
index b44d56eb936a..bc033464af43 100644
@@ -964,6 +964,11 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname,
                        break;
                }
 
+               if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
+                       err = -EOPNOTSUPP;
+                       break;
+               }
+
                if (!hdev->get_codec_config_data) {
                        err = -EOPNOTSUPP;
                        break;
@@ -1163,6 +1168,11 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
                        break;
                }
 
+               if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) {
+                       err = -EOPNOTSUPP;
+                       break;
+               }
+
                if (!hdev->get_data_path_id) {
                        err = -EOPNOTSUPP;
                        break;
--

2.17.1

Signature · 1 line
Luiz Augusto von Dentz
maintainer
#13 lore raw

Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Luiz,

Quoted 24 lines
Quoted 24 lines

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

include/net/bluetooth/hci.h |   4 ++
net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
net/bluetooth/sco.c         |  10 ++++
3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +0 -0
index e20318854900..5ca98d9f64dd 100644
@@ -331,6 +331,10 @@ enum {
       HCI_CMD_PENDING,
       HCI_FORCE_NO_MITM,
 
Quoted 7 lines

include/net/bluetooth/hci.h enum { · line 336

Quoted 3 lines
include/net/bluetooth/hci.h +3 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED,
+#endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

While this would work with dev_flags which are internal and not API, I still don’t like it.

There is really no benefit to make this a compile time option. And as far as I remember I never said this needs to be compile time. Actually I rather have this as an experimental setting so that it can be switched on at runtime. Nobody is going to recompile their kernels to test codec offload.

Regards

Marcel

#14 lore raw

Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Marcel,

Quoted 35 lines · Marcel Holtmann

Hi Luiz,

Quoted 24 lines
Quoted 24 lines

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

include/net/bluetooth/hci.h |   4 ++
net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
net/bluetooth/sco.c         |  10 ++++
3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +0 -0
index e20318854900..5ca98d9f64dd 100644
@@ -331,6 +331,10 @@ enum {
       HCI_CMD_PENDING,
       HCI_FORCE_NO_MITM,
 
Quoted 7 lines

include/net/bluetooth/hci.h enum { · line 336

Quoted 3 lines
include/net/bluetooth/hci.h +3 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED,
+#endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

Quoted 3 lines

While this would work with dev_flags which are internal and not API, I still don’t like it.

There is really no benefit to make this a compile time option. And as far as I remember I never said this needs to be compile time. Actually I rather have this as an experimental setting so that it can be switched on at runtime. Nobody is going to recompile their kernels to test codec offload.

Initially I was with the same opinion, but the problem is the codecs are read at init sequence and the experimental flags are set at a later stage thus why I suggested a KConfig option until the feature is more mature and we can remove the option altogether.

Quoted 4 lines

Regards

Marcel

Signature · 1 line
Luiz Augusto von Dentz
maintainer
#15 lore raw

Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Luiz,

Quoted 32 lines
Quoted 32 lines
Quoted 31 lines
Quoted 21 lines

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

include/net/bluetooth/hci.h |   4 ++
net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
net/bluetooth/sco.c         |  10 ++++
3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +0 -0
index e20318854900..5ca98d9f64dd 100644

include/net/bluetooth/hci.h enum { · line 336

Quoted 6 lines
include/net/bluetooth/hci.h +3 -0
@@ -331,6 +331,10 @@ enum {
      HCI_CMD_PENDING,
      HCI_FORCE_NO_MITM,
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED,
+#endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

Quoted 8 lines
Quoted 3 lines

While this would work with dev_flags which are internal and not API, I still don’t like it.

There is really no benefit to make this a compile time option. And as far as I remember I never said this needs to be compile time. Actually I rather have this as an experimental setting so that it can be switched on at runtime. Nobody is going to recompile their kernels to test codec offload.

Initially I was with the same opinion, but the problem is the codecs are read at init sequence and the experimental flags are set at a later stage thus why I suggested a KConfig option until the feature is more mature and we can remove the option altogether.

I am fine with the codec options being read all the time. I mean having an experimental option to control the use of offload.

Regards

Marcel

#16 lore raw

Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Marcel,

Quoted 37 lines · Marcel Holtmann

Hi Luiz,

Quoted 34 lines
Quoted 34 lines
Quoted 24 lines
Quoted 24 lines

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

include/net/bluetooth/hci.h |   4 ++
net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
net/bluetooth/sco.c         |  10 ++++
3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +0 -0
index e20318854900..5ca98d9f64dd 100644
@@ -331,6 +331,10 @@ enum {
      HCI_CMD_PENDING,
      HCI_FORCE_NO_MITM,
 
Quoted 7 lines

include/net/bluetooth/hci.h enum { · line 336

Quoted 3 lines
include/net/bluetooth/hci.h +3 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED,
+#endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

While this would work with dev_flags which are internal and not API, I still don’t like it.

Quoted 8 lines
Quoted 6 lines
Quoted 1 line

There is really no benefit to make this a compile time option. And as far as I remember I never said this needs to be compile time. Actually I rather have this as an experimental setting so that it can be switched on at runtime. Nobody is going to recompile their kernels to test codec offload.

Initially I was with the same opinion, but the problem is the codecs are read at init sequence and the experimental flags are set at a later stage thus why I suggested a KConfig option until the feature is more mature and we can remove the option altogether.

I am fine with the codec options being read all the time. I mean having an experimental option to control the use of offload.

Alright, then we don't need the Kconfig after all, the experimental flag will only control the use of the codecs e.g. socketopts would not work if the flag is not enabled I assume?

Quoted 4 lines

Regards

Marcel

Signature · 1 line
Luiz Augusto von Dentz
maintainer
#17 lore raw

Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Luiz,

Quoted 41 lines
Quoted 41 lines
Quoted 40 lines
Quoted 32 lines
Quoted 24 lines
Quoted 24 lines

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

include/net/bluetooth/hci.h |   4 ++
net/bluetooth/mgmt.c        | 106 +++++++++++++++++++++++++++++++++++-
net/bluetooth/sco.c         |  10 ++++
3 files changed, 119 insertions(+), 1 deletion(-)
include/net/bluetooth/hci.h +0 -0
index e20318854900..5ca98d9f64dd 100644
@@ -331,6 +331,10 @@ enum {
     HCI_CMD_PENDING,
     HCI_FORCE_NO_MITM,
 
Quoted 7 lines

include/net/bluetooth/hci.h enum { · line 336

Quoted 3 lines
include/net/bluetooth/hci.h +3 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED,
+#endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

Quoted 3 lines

While this would work with dev_flags which are internal and not API, I still don’t like it.

There is really no benefit to make this a compile time option. And as far as I remember I never said this needs to be compile time. Actually I rather have this as an experimental setting so that it can be switched on at runtime. Nobody is going to recompile their kernels to test codec offload.

Initially I was with the same opinion, but the problem is the codecs are read at init sequence and the experimental flags are set at a later stage thus why I suggested a KConfig option until the feature is more mature and we can remove the option altogether.

Quoted 5 lines
Quoted 1 line

I am fine with the codec options being read all the time. I mean having an experimental option to control the use of offload.

Alright, then we don't need the Kconfig after all, the experimental flag will only control the use of the codecs e.g. socketopts would not work if the flag is not enabled I assume?

exactly. It would then return EOPNOTSUPP error. It would be similar to an old kernel where this socket option is not available either.

Regards

Marcel

author
#18 lore raw

RE: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Luiz, Marcel,

Quoted 59 lines

-----Original Message-----
From: Marcel Holtmann <[email protected]>
Sent: Friday, July 23, 2021 12:21 AM
To: Luiz Augusto von Dentz <[email protected]>
Cc: K, Kiran <[email protected]>; [email protected]
Subject: Re: [PATCH v10 10/10] Bluetooth: Add offload feature under experimental flag

Hi Luiz,

Quoted 13 lines
Quoted 13 lines
Quoted 13 lines
Quoted 13 lines
Quoted 13 lines
Quoted 13 lines

Allow user level process to enable / disable codec offload feature through mgmt interface. By default offload codec feature is disabled.

Reviewed-by Srivatsa Ravishankar

<[email protected]>
---
* changes in v10:
- new patch added to place offload codec feature under experimental flag

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

include/net/bluetooth/hci.h | 4 ++
net/bluetooth/mgmt.c | 106

+++++++++++++++++++++++++++++++++++-

Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines

net/bluetooth/sco.c | 10 ++++

3 files changed, 119 insertions(+), 1 deletion(-)
(quoted diff) +0 -0

b/include/net/bluetooth/hci.h index e20318854900..5ca98d9f64dd 100644

include/net/bluetooth/hci.h +0 -0
@@ -331,6 +331,10 @@ enum {
     HCI_CMD_PENDING,
     HCI_FORCE_NO_MITM,
 
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 6 lines

include/net/bluetooth/hci.h enum { · line 335

Quoted 2 lines
include/net/bluetooth/hci.h +2 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       HCI_OFFLOAD_CODECS_ENABLED, #endif

That is probably a bad idea as it could lead the enum to assume different values based on what is enabled, besides we don't gain anything by not having the symbol defined all the time.

While this would work with dev_flags which are internal and not API, I

still don’t like it.

Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines

There is really no benefit to make this a compile time option. And as far

as I remember I never said this needs to be compile time. Actually I rather have this as an experimental setting so that it can be switched on at runtime. Nobody is going to recompile their kernels to test codec offload.

Quoted 7 lines
Quoted 7 lines
Quoted 5 lines

Initially I was with the same opinion, but the problem is the codecs are read at init sequence and the experimental flags are set at a later stage thus why I suggested a KConfig option until the feature is more mature and we can remove the option altogether.

I am fine with the codec options being read all the time. I mean having an

Quoted 8 lines

experimental option to control the use of offload.

Quoted 4 lines

Alright, then we don't need the Kconfig after all, the experimental flag will only control the use of the codecs e.g. socketopts would not work if the flag is not enabled I assume?

exactly. It would then return EOPNOTSUPP error. It would be similar to an old kernel where this socket option is not available either.

Ack. I will send the changes in the next patchset.

Quoted 4 lines

Regards

Marcel

Regards,
Kiran

#19 lore raw
In reply to Kiran K

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=508993

---Test result---

Test Summary:

CheckPatch                    PASS      8.78 seconds
GitLint                       FAIL      1.01 seconds
BuildKernel                   PASS      671.94 seconds
TestRunner: Setup             PASS      447.72 seconds
TestRunner: l2cap-tester      PASS      3.26 seconds
TestRunner: bnep-tester       PASS      2.17 seconds
TestRunner: mgmt-tester       FAIL      34.15 seconds
TestRunner: rfcomm-tester     PASS      2.47 seconds
TestRunner: sco-tester        PASS      2.34 seconds
TestRunner: smp-tester        PASS      2.51 seconds
TestRunner: userchan-tester   PASS      2.26 seconds

Details
##############################
Test: CheckPatch - PASS - 8.78 seconds
Run checkpatch.pl script with rule in .checkpatch.conf

##############################
Test: GitLint - FAIL - 1.01 seconds
Run gitlint with rule in .gitlint
Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command
1: T1 Title exceeds max length (76>72): "Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command"

##############################
Test: BuildKernel - PASS - 671.94 seconds
Build Kernel with minimal configuration supports Bluetooth

##############################
Test: TestRunner: Setup - PASS - 447.72 seconds
Setup environment for running Test Runner

##############################
Test: TestRunner: l2cap-tester - PASS - 3.26 seconds Run test-runner with l2cap-tester
Total: 40, Passed: 40 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: bnep-tester - PASS - 2.17 seconds Run test-runner with bnep-tester
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: mgmt-tester - FAIL - 34.15 seconds Run test-runner with mgmt-tester
Total: 446, Passed: 436 (97.8%), Failed: 5, Not Run: 5

Failed Test Cases

Read Ext Controller Info 1                           Failed       0.028 seconds
Read Ext Controller Info 2                           Failed       0.032 seconds
Read Ext Controller Info 3                           Failed       0.028 seconds
Read Ext Controller Info 4                           Failed       0.020 seconds
Read Ext Controller Info 5                           Failed       0.028 seconds

##############################
Test: TestRunner: rfcomm-tester - PASS - 2.47 seconds Run test-runner with rfcomm-tester
Total: 9, Passed: 9 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: sco-tester - PASS - 2.34 seconds Run test-runner with sco-tester
Total: 8, Passed: 8 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: smp-tester - PASS - 2.51 seconds Run test-runner with smp-tester
Total: 8, Passed: 8 (100.0%), Failed: 0, Not Run: 0

##############################
Test: TestRunner: userchan-tester - PASS - 2.26 seconds Run test-runner with userchan-tester
Total: 3, Passed: 3 (100.0%), Failed: 0, Not Run: 0

---
Regards,
Linux Bluetooth

c[?7lSeaBIOS (version 1.13.0-1ubuntu1.1) Booting from ROM..c[?7learly console in extract_kernel
input_data: 0x0000000001e762e0
input_len: 0x00000000003639a7
output: 0x0000000001000000
output_len: 0x00000000011a7178
kernel_total_size: 0x0000000001030000
needed_size: 0x0000000001200000
trampoline_32bit: 0x000000000009d000
Physical KASLR using RDTSC...
Virtual KASLR using RDTSC...

Decompressing Linux... Parsing ELF... Performing relocations... done.
Booting the kernel.
Linux version 5.13.0-rc6-ga9f90acbf6b4 (root@3db5798ffea7) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #2 Wed Jun 30 09:10:59 UTC 2021
Command line: console=ttyS0,115200n8 earlyprintk=serial rootfstype=9p rootflags=trans=virtio,version=9p2000.L acpi=off pci=noacpi noapic quiet ro init=/github/workspace/bluez/tools/test-runner bluetooth.enable_ecred=1TESTHOME=/github/workspace TESTDBUS=0 TESTMONITOR=0 TESTDEVS=0 TESTAUTO=0 TESTARGS='/github/workspace/bluez/tools/l2cap-tester' x86/fpu: x87 FPU will use FXSAVE
BIOS-provided physical RAM map:
BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
BIOS-e820: [mem 0x0000000000100000-0x000000000bffdfff] usable
BIOS-e820: [mem 0x000000000bffe000-0x000000000bffffff] reserved
BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
printk: bootconsole [earlyser0] enabled
Memory KASLR using RDTSC...
Poking KASLR using RDTSC...
Mounting sysfs to /sys
Mounting proc to /proc
Mounting devtmpfs to /dev
Creating /dev/pts
Mounting devpts to /dev/pts
Creating /dev/shm
Mounting tmpfs to /dev/shm
Mounting tmpfs to /run
Mounting tmpfs to /tmp
Mounting debugfs to /sys/kernel/debug
Linking /dev/fd to /proc/self/fd
Linking /dev/stdin to /proc/self/fd/0
Linking /dev/stdout to /proc/self/fd/1
Linking /dev/stderr to /proc/self/fd/2
Creating new session group leader
Setting controlling terminal
Creating /var/lib/bluetooth
Failed to create filesystem: No such file or directory
Creating /etc/bluetooth
Failed to create filesystem: No such file or directory
Creating /etc/dbus-1
Failed to create filesystem: No such file or directory
Creating /usr/share/dbus-1
Running command /github/workspace/bluez/tools/l2cap-tester
New process 41 created
Changing into directory /github/workspace

Basic L2CAP Socket - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Basic L2CAP Socket - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
Basic L2CAP Socket - Success - setup complete
Basic L2CAP Socket - Success - run
Basic L2CAP Socket - Success - test passed
Basic L2CAP Socket - Success - teardown
Index Removed callback

    Index: 0x0000

Basic L2CAP Socket - Success - teardown complete
Basic L2CAP Socket - Success - done

Non-connected getpeername - Failure - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Non-connected getpeername - Failure - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
Non-connected getpeername - Failure - setup complete Non-connected getpeername - Failure - run Non-connected getpeername - Failure - test passed Non-connected getpeername - Failure - teardown
Index Removed callback

    Index: 0x0000

Non-connected getpeername - Failure - teardown complete Non-connected getpeername - Failure - done

L2CAP BR/EDR Client - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client - Success - setup complete
L2CAP BR/EDR Client - Success - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client - Success - test passed
L2CAP BR/EDR Client - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Success - teardown complete
L2CAP BR/EDR Client - Success - done

L2CAP BR/EDR Client SSP - Success 1 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client SSP - Success 1 - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
Client enable SSP status 0x00
L2CAP BR/EDR Client SSP - Success 1 - setup complete L2CAP BR/EDR Client SSP - Success 1 - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client SSP - Success 1 - test passed L2CAP BR/EDR Client SSP - Success 1 - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client SSP - Success 1 - teardown complete L2CAP BR/EDR Client SSP - Success 1 - done

L2CAP BR/EDR Client SSP - Success 2 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client SSP - Success 2 - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
Client enable SSP status 0x00
L2CAP BR/EDR Client SSP - Success 2 - setup complete L2CAP BR/EDR Client SSP - Success 2 - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client SSP - Success 2 - test passed L2CAP BR/EDR Client SSP - Success 2 - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client SSP - Success 2 - teardown complete L2CAP BR/EDR Client SSP - Success 2 - done

L2CAP BR/EDR Client PIN Code - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client PIN Code - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client PIN Code - Success - setup complete L2CAP BR/EDR Client PIN Code - Success - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client PIN Code - Success - test passed L2CAP BR/EDR Client PIN Code - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client PIN Code - Success - teardown complete L2CAP BR/EDR Client PIN Code - Success - done

L2CAP BR/EDR Client - Read Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Read Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client - Read Success - setup complete L2CAP BR/EDR Client - Read Success - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client - Read Success - test passed L2CAP BR/EDR Client - Read Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Read Success - teardown complete L2CAP BR/EDR Client - Read Success - done

L2CAP BR/EDR Client - Write Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Write Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client - Write Success - setup complete L2CAP BR/EDR Client - Write Success - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client - Write Success - test passed L2CAP BR/EDR Client - Write Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Write Success - teardown complete L2CAP BR/EDR Client - Write Success - done

L2CAP BR/EDR Client - Invalid PSM 1 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Invalid PSM 1 - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client - Invalid PSM 1 - setup complete L2CAP BR/EDR Client - Invalid PSM 1 - run
Connect in progress
Connect failed: Connection refused (111)
L2CAP BR/EDR Client - Invalid PSM 1 - test passed L2CAP BR/EDR Client - Invalid PSM 1 - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Invalid PSM 1 - teardown complete L2CAP BR/EDR Client - Invalid PSM 1 - done

L2CAP BR/EDR Client - Invalid PSM 2 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Invalid PSM 2 - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client - Invalid PSM 2 - setup complete L2CAP BR/EDR Client - Invalid PSM 2 - run
Connect in progress
Connect failed: Connection refused (111)
L2CAP BR/EDR Client - Invalid PSM 2 - test passed L2CAP BR/EDR Client - Invalid PSM 2 - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Invalid PSM 2 - teardown complete L2CAP BR/EDR Client - Invalid PSM 2 - done

L2CAP BR/EDR Client - Invalid PSM 3 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Invalid PSM 3 - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
Client enable SSP status 0x00
L2CAP BR/EDR Client - Invalid PSM 3 - setup complete L2CAP BR/EDR Client - Invalid PSM 3 - run
Connect in progress
Connect failed: Connection refused (111)
L2CAP BR/EDR Client - Invalid PSM 3 - test passed L2CAP BR/EDR Client - Invalid PSM 3 - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Invalid PSM 3 - teardown complete L2CAP BR/EDR Client - Invalid PSM 3 - done

L2CAP BR/EDR Client - Socket Shut WR Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Client - Socket Shut WR Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP BR/EDR Client - Socket Shut WR Success - setup complete L2CAP BR/EDR Client - Socket Shut WR Success - run
Connect in progress
Successfully connected
L2CAP BR/EDR Client - Socket Shut WR Success - test passed L2CAP BR/EDR Client - Socket Shut WR Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Client - Socket Shut WR Success - teardown complete L2CAP BR/EDR Client - Socket Shut WR Success - done

L2CAP BR/EDR Server - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Success - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Success - setup complete
L2CAP BR/EDR Server - Success - run
Listening for connections
New client connection with handle 0x002a
Sending L2CAP Request from client
Client received response code 0x03
L2CAP BR/EDR Server - Success - test passed
Successfully connected
L2CAP BR/EDR Server - Success - test passed
L2CAP BR/EDR Server - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Success - teardown complete
L2CAP BR/EDR Server - Success - done

L2CAP BR/EDR Server - Read Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Read Success - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Read Success - setup complete L2CAP BR/EDR Server - Read Success - run
Listening for connections
New client connection with handle 0x002a Sending L2CAP Request from client
Client received response code 0x03
L2CAP BR/EDR Server - Read Success - test passed L2CAP BR/EDR Server - Read Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Read Success - teardown complete L2CAP BR/EDR Server - Read Success - done

L2CAP BR/EDR Server - Write Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Write Success - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Write Success - setup complete L2CAP BR/EDR Server - Write Success - run
Listening for connections
New client connection with handle 0x002a Sending L2CAP Request from client
Client received response code 0x03
L2CAP BR/EDR Server - Write Success - test passed L2CAP BR/EDR Server - Write Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Write Success - teardown complete L2CAP BR/EDR Server - Write Success - done

L2CAP BR/EDR Server - Security Block - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Security Block - setup
Powering on controller
Controller powered on
Server enable SSP status 0x00
L2CAP BR/EDR Server - Security Block - setup complete L2CAP BR/EDR Server - Security Block - run
Listening for connections
New client connection with handle 0x002a Sending L2CAP Request from client
Client received response code 0x03
L2CAP BR/EDR Server - Security Block - test passed L2CAP BR/EDR Server - Security Block - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Security Block - teardown complete L2CAP BR/EDR Server - Security Block - done

L2CAP BR/EDR Server - Invalid PSM - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Invalid PSM - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Invalid PSM - setup complete L2CAP BR/EDR Server - Invalid PSM - run
New client connection with handle 0x002a Sending L2CAP Request from client
Client received response code 0x03
L2CAP BR/EDR Server - Invalid PSM - test passed L2CAP BR/EDR Server - Invalid PSM - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Invalid PSM - teardown complete L2CAP BR/EDR Server - Invalid PSM - done

L2CAP BR/EDR Server - Invalid PDU - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Invalid PDU - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Invalid PDU - setup complete L2CAP BR/EDR Server - Invalid PDU - run
New client connection with handle 0x002a Sending L2CAP Request from client
Bluetooth: Wrong link type (-71)
Client received response code 0x01
L2CAP BR/EDR Server - Invalid PDU - test passed L2CAP BR/EDR Server - Invalid PDU - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Invalid PDU - teardown complete L2CAP BR/EDR Server - Invalid PDU - done

L2CAP BR/EDR Server - Invalid Disconnect CID - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Invalid Disconnect CID - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Invalid Disconnect CID - setup complete L2CAP BR/EDR Server - Invalid Disconnect CID - run
New client connection with handle 0x002a
Sending L2CAP Request from client
Client received response code 0x01
L2CAP BR/EDR Server - Invalid Disconnect CID - test passed L2CAP BR/EDR Server - Invalid Disconnect CID - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Invalid Disconnect CID - teardown complete L2CAP BR/EDR Server - Invalid Disconnect CID - done

L2CAP BR/EDR Server - Invalid Config CID - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP BR/EDR Server - Invalid Config CID - setup
Powering on controller
Controller powered on
L2CAP BR/EDR Server - Invalid Config CID - setup complete L2CAP BR/EDR Server - Invalid Config CID - run
New client connection with handle 0x002a Sending L2CAP Request from client
Client received response code 0x01
L2CAP BR/EDR Server - Invalid Config CID - test passed L2CAP BR/EDR Server - Invalid Config CID - teardown
Index Removed callback

    Index: 0x0000

L2CAP BR/EDR Server - Invalid Config CID - teardown complete L2CAP BR/EDR Server - Invalid Config CID - done

L2CAP LE Client - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client - Success - setup complete
L2CAP LE Client - Success - run
Connect in progress
Successfully connected
L2CAP LE Client - Success - test passed
L2CAP LE Client - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Success - teardown complete
L2CAP LE Client - Success - done

L2CAP LE Client, Direct Advertising - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client, Direct Advertising - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client, Direct Advertising - Success - setup complete L2CAP LE Client, Direct Advertising - Success - run
Connect in progress
Received advertising parameters HCI command
L2CAP LE Client, Direct Advertising - Success - test passed L2CAP LE Client, Direct Advertising - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client, Direct Advertising - Success - teardown complete L2CAP LE Client, Direct Advertising - Success - done

L2CAP LE Client SMP - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client SMP - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client SMP - Success - setup complete
L2CAP LE Client SMP - Success - run
Connect in progress
Successfully connected
L2CAP LE Client SMP - Success - test passed
Bluetooth: hci0: link tx timeout
L2CAP LE Client SMP - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client SMP - Success - teardown complete
L2CAP LE Client SMP - Success - done

L2CAP LE Client - Command Reject - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Command Reject - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client - Command Reject - setup complete
L2CAP LE Client - Command Reject - run
Connect in progress
New connection with handle 0x002a
Connect failed: Connection refused (111)
L2CAP LE Client - Command Reject - test passed
L2CAP LE Client - Command Reject - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Command Reject - teardown complete L2CAP LE Client - Command Reject - done

L2CAP LE Client - Connection Reject - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Connection Reject - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client - Connection Reject - setup complete L2CAP LE Client - Connection Reject - run
Can't connect socket: No route to host (113)
L2CAP LE Client - Connection Reject - test passed L2CAP LE Client - Connection Reject - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Connection Reject - teardown complete L2CAP LE Client - Connection Reject - done

L2CAP LE Client - Close socket 1 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Close socket 1 - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client - Close socket 1 - setup complete
L2CAP LE Client - Close socket 1 - run
Connect in progress, sk = 13
Will close socket during scan phase...
Checking whether scan was properly stopped...
L2CAP LE Client - Close socket 1 - test passed
L2CAP LE Client - Close socket 1 - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Close socket 1 - teardown complete L2CAP LE Client - Close socket 1 - done

L2CAP LE Client - Close socket 2 - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Close socket 2 - setup
Powering on controller
Controller powered on
L2CAP LE Client - Close socket 2 - setup complete
L2CAP LE Client - Close socket 2 - run
Connect in progress, sk = 13
Client set connectable status 0x00
Client set connectable status 0x00
L2CAP LE Client - Close socket 2 - test passed
L2CAP LE Client - Close socket 2 - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Close socket 2 - teardown complete L2CAP LE Client - Close socket 2 - done

L2CAP LE Client - Open two sockets - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Open two sockets - setup
Powering on controller
Controller powered on
L2CAP LE Client - Open two sockets - setup complete L2CAP LE Client - Open two sockets - run
Connect in progress, sk = 13
HCI Command 0x2011 length 7
HCI Command 0x200b length 7
HCI Command 0x200c length 2
Connect in progress, sk = 14
HCI Command 0x200c length 2
Client set connectable status 0x00
HCI Command 0x200d length 25
HCI Command 0x2016 length 2
Successfully connected
Successfully connected
L2CAP LE Client - Open two sockets - test passed

(l2cap-tester:41): GLib-WARNING **: 09:11:08.244: Invalid file descriptor. L2CAP LE Client - Open two sockets - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Open two sockets - teardown complete L2CAP LE Client - Open two sockets - done

L2CAP LE Client - Open two sockets close one - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Open two sockets close one - setup
Powering on controller
Controller powered on
L2CAP LE Client - Open two sockets close one - setup complete L2CAP LE Client - Open two sockets close one - run
Connect in progress, sk = 13
HCI Command 0x2011 length 7
HCI Command 0x200b length 7
HCI Command 0x200c length 2
Connect in progress, sk = 14
Closing first socket! 13
HCI Command 0x200c length 2
Client set connectable status 0x00
HCI Command 0x200d length 25
HCI Command 0x2016 length 2
Successfully connected
L2CAP LE Client - Open two sockets close one - test passed

(l2cap-tester:41): GLib-WARNING **: 09:11:08.288: Invalid file descriptor. L2CAP LE Client - Open two sockets close one - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Open two sockets close one - teardown complete L2CAP LE Client - Open two sockets close one - done

L2CAP LE Client - Invalid PSM - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Client - Invalid PSM - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE Client - Invalid PSM - setup complete
L2CAP LE Client - Invalid PSM - run
Connect in progress
Connect failed: Connection refused (111)
L2CAP LE Client - Invalid PSM - test passed
L2CAP LE Client - Invalid PSM - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Client - Invalid PSM - teardown complete
L2CAP LE Client - Invalid PSM - done

L2CAP LE Server - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Server - Success - setup
Powering on controller
Controller powered on
L2CAP LE Server - Success - setup complete
L2CAP LE Server - Success - run
Listening for connections
New client connection with handle 0x002a
Sending L2CAP Request from client
Successfully connected
L2CAP LE Server - Success - test passed
Client received response code 0x15
L2CAP LE Server - Success - test passed
L2CAP LE Server - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Server - Success - teardown complete
L2CAP LE Server - Success - done

L2CAP LE Server - Nval SCID - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE Server - Nval SCID - setup
Powering on controller
Controller powered on
L2CAP LE Server - Nval SCID - setup complete
L2CAP LE Server - Nval SCID - run
Listening for connections
New client connection with handle 0x002a
Sending L2CAP Request from client
Client received response code 0x15
L2CAP LE Server - Nval SCID - test passed
L2CAP LE Server - Nval SCID - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE Server - Nval SCID - teardown complete
L2CAP LE Server - Nval SCID - done

L2CAP Ext-Flowctl Client - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP Ext-Flowctl Client - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP Ext-Flowctl Client - Success - setup complete L2CAP Ext-Flowctl Client - Success - run
Connect in progress
Successfully connected
L2CAP Ext-Flowctl Client - Success - test passed L2CAP Ext-Flowctl Client - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP Ext-Flowctl Client - Success - teardown complete L2CAP Ext-Flowctl Client - Success - done

L2CAP Ext-Flowctl Client, Direct Advertising - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP Ext-Flowctl Client, Direct Advertising - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP Ext-Flowctl Client, Direct Advertising - Success - setup complete L2CAP Ext-Flowctl Client, Direct Advertising - Success - run
Connect in progress
Received advertising parameters HCI command
L2CAP Ext-Flowctl Client, Direct Advertising - Success - test passed L2CAP Ext-Flowctl Client, Direct Advertising - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP Ext-Flowctl Client, Direct Advertising - Success - teardown complete L2CAP Ext-Flowctl Client, Direct Advertising - Success - done

L2CAP Ext-Flowctl Client SMP - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP Ext-Flowctl Client SMP - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP Ext-Flowctl Client SMP - Success - setup complete L2CAP Ext-Flowctl Client SMP - Success - run
Connect in progress
Successfully connected
L2CAP Ext-Flowctl Client SMP - Success - test passed
Bluetooth: hci0: link tx timeout
L2CAP Ext-Flowctl Client SMP - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP Ext-Flowctl Client SMP - Success - teardown complete L2CAP Ext-Flowctl Client SMP - Success - done

L2CAP Ext-Flowctl Client - Command Reject - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP Ext-Flowctl Client - Command Reject - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP Ext-Flowctl Client - Command Reject - setup complete L2CAP Ext-Flowctl Client - Command Reject - run
Connect in progress
New connection with handle 0x002a
Connect failed: Connection refused (111)
L2CAP Ext-Flowctl Client - Command Reject - test passed L2CAP Ext-Flowctl Client - Command Reject - teardown
Index Removed callback

    Index: 0x0000

L2CAP Ext-Flowctl Client - Command Reject - teardown complete L2CAP Ext-Flowctl Client - Command Reject - done

L2CAP Ext-Flowctl Client - Open two sockets - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP Ext-Flowctl Client - Open two sockets - setup
Powering on controller
Controller powered on
L2CAP Ext-Flowctl Client - Open two sockets - setup complete L2CAP Ext-Flowctl Client - Open two sockets - run
Connect in progress, sk = 13 (deferred)
HCI Command 0x2011 length 7
HCI Command 0x200b length 7
HCI Command 0x200c length 2
Connect in progress, sk = 14
HCI Command 0x200c length 2
Client set connectable status 0x00
HCI Command 0x200d length 25
HCI Command 0x2016 length 2
Successfully connected
Successfully connected
Bluetooth: hci0: link tx timeout
L2CAP Ext-Flowctl Client - Open two sockets - test passed

(l2cap-tester:41): GLib-WARNING **: 09:11:08.492: Invalid file descriptor. L2CAP Ext-Flowctl Client - Open two sockets - teardown
Index Removed callback

    Index: 0x0000

L2CAP Ext-Flowctl Client - Open two sockets - teardown complete L2CAP Ext-Flowctl Client - Open two sockets - done

L2CAP Ext-Flowctl Client - Open two sockets close one - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP Ext-Flowctl Client - Open two sockets close one - setup
Powering on controller
Controller powered on
L2CAP Ext-Flowctl Client - Open two sockets close one - setup complete L2CAP Ext-Flowctl Client - Open two sockets close one - run
Connect in progress, sk = 13 (deferred)
HCI Command 0x2011 length 7
HCI Command 0x200b length 7
HCI Command 0x200c length 2
Connect in progress, sk = 14
Closing first socket! 13
HCI Command 0x200c length 2
Client set connectable status 0x00
HCI Command 0x200d length 25
HCI Command 0x2016 length 2
Successfully connected
L2CAP Ext-Flowctl Client - Open two sockets close one - test passed

(l2cap-tester:41): GLib-WARNING **: 09:11:08.524: Invalid file descriptor. L2CAP Ext-Flowctl Client - Open two sockets close one - teardown
Index Removed callback

    Index: 0x0000

L2CAP Ext-Flowctl Client - Open two sockets close one - teardown complete L2CAP Ext-Flowctl Client - Open two sockets close one - done

L2CAP LE ATT Client - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE ATT Client - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
L2CAP LE ATT Client - Success - setup complete
L2CAP LE ATT Client - Success - run
Connect in progress
Successfully connected
L2CAP LE ATT Client - Success - test passed
L2CAP LE ATT Client - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE ATT Client - Success - teardown complete
L2CAP LE ATT Client - Success - done

L2CAP LE ATT Server - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

L2CAP LE ATT Server - Success - setup
Powering on controller
Controller powered on
L2CAP LE ATT Server - Success - setup complete
L2CAP LE ATT Server - Success - run
Listening for connections
New client connection with handle 0x002a
Successfully connected
L2CAP LE ATT Server - Success - test passed
L2CAP LE ATT Server - Success - teardown
Index Removed callback

    Index: 0x0000

L2CAP LE ATT Server - Success - teardown complete
L2CAP LE ATT Server - Success - done

Test Summary
------------

Basic L2CAP Socket - Success                         Passed       0.072 seconds
Non-connected getpeername - Failure                  Passed       0.020 seconds
L2CAP BR/EDR Client - Success                        Passed       0.036 seconds
L2CAP BR/EDR Client SSP - Success 1                  Passed       0.024 seconds
L2CAP BR/EDR Client SSP - Success 2                  Passed       0.028 seconds
L2CAP BR/EDR Client PIN Code - Success               Passed       0.020 seconds
L2CAP BR/EDR Client - Read Success                   Passed       0.020 seconds
L2CAP BR/EDR Client - Write Success                  Passed       0.028 seconds
L2CAP BR/EDR Client - Invalid PSM 1                  Passed       0.020 seconds
L2CAP BR/EDR Client - Invalid PSM 2                  Passed       0.020 seconds
L2CAP BR/EDR Client - Invalid PSM 3                  Passed       0.020 seconds
L2CAP BR/EDR Client - Socket Shut WR Success         Passed       0.024 seconds
L2CAP BR/EDR Server - Success                        Passed       0.028 seconds
L2CAP BR/EDR Server - Read Success                   Passed       0.024 seconds
L2CAP BR/EDR Server - Write Success                  Passed       0.024 seconds
L2CAP BR/EDR Server - Security Block                 Passed       0.020 seconds
L2CAP BR/EDR Server - Invalid PSM                    Passed       0.020 seconds
L2CAP BR/EDR Server - Invalid PDU                    Passed       0.024 seconds
L2CAP BR/EDR Server - Invalid Disconnect CID         Passed       0.020 seconds
L2CAP BR/EDR Server - Invalid Config CID             Passed       0.020 seconds
L2CAP LE Client - Success                            Passed       0.036 seconds
L2CAP LE Client, Direct Advertising - Success        Passed       0.020 seconds
L2CAP LE Client SMP - Success                        Passed       0.032 seconds
L2CAP LE Client - Command Reject                     Passed       0.020 seconds
L2CAP LE Client - Connection Reject                  Passed       0.020 seconds
L2CAP LE Client - Close socket 1                     Passed       0.020 seconds
L2CAP LE Client - Close socket 2                     Passed       0.024 seconds
L2CAP LE Client - Open two sockets                   Passed       0.064 seconds
L2CAP LE Client - Open two sockets close one         Passed       0.032 seconds
L2CAP LE Client - Invalid PSM                        Passed       0.024 seconds
L2CAP LE Server - Success                            Passed       0.024 seconds
L2CAP LE Server - Nval SCID                          Passed       0.028 seconds
L2CAP Ext-Flowctl Client - Success                   Passed       0.024 seconds
L2CAP Ext-Flowctl Client, Direct Advertising - Success Passed       0.020 seconds
L2CAP Ext-Flowctl Client SMP - Success               Passed       0.024 seconds
L2CAP Ext-Flowctl Client - Command Reject            Passed       0.020 seconds
L2CAP Ext-Flowctl Client - Open two sockets          Passed       0.032 seconds
L2CAP Ext-Flowctl Client - Open two sockets close one Passed       0.036 seconds
L2CAP LE ATT Client - Success                        Passed       0.024 seconds
L2CAP LE ATT Server - Success                        Passed       0.024 seconds

Total: 40, Passed: 40 (100.0%), Failed: 0, Not Run: 0 Overall execution time: 1.11 seconds
Process 41 exited with status 0
reboot: Restarting system

c[?7lSeaBIOS (version 1.13.0-1ubuntu1.1) Booting from ROM..c[?7learly console in extract_kernel
input_data: 0x0000000001e762e0
input_len: 0x00000000003639a7
output: 0x0000000001000000
output_len: 0x00000000011a7178
kernel_total_size: 0x0000000001030000
needed_size: 0x0000000001200000
trampoline_32bit: 0x000000000009d000
Physical KASLR using RDTSC...
Virtual KASLR using RDTSC...

Decompressing Linux... Parsing ELF... Performing relocations... done.
Booting the kernel.
Linux version 5.13.0-rc6-ga9f90acbf6b4 (root@3db5798ffea7) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #2 Wed Jun 30 09:10:59 UTC 2021
Command line: console=ttyS0,115200n8 earlyprintk=serial rootfstype=9p rootflags=trans=virtio,version=9p2000.L acpi=off pci=noacpi noapic quiet ro init=/github/workspace/bluez/tools/test-runner bluetooth.enable_ecred=1TESTHOME=/github/workspace TESTDBUS=0 TESTMONITOR=0 TESTDEVS=0 TESTAUTO=0 TESTARGS='/github/workspace/bluez/tools/bnep-tester' x86/fpu: x87 FPU will use FXSAVE
BIOS-provided physical RAM map:
BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
BIOS-e820: [mem 0x0000000000100000-0x000000000bffdfff] usable
BIOS-e820: [mem 0x000000000bffe000-0x000000000bffffff] reserved
BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
printk: bootconsole [earlyser0] enabled
Memory KASLR using RDTSC...
Poking KASLR using RDTSC...
Mounting sysfs to /sys
Mounting proc to /proc
Mounting devtmpfs to /dev
Creating /dev/pts
Mounting devpts to /dev/pts
Creating /dev/shm
Mounting tmpfs to /dev/shm
Mounting tmpfs to /run
Mounting tmpfs to /tmp
Mounting debugfs to /sys/kernel/debug
Linking /dev/fd to /proc/self/fd
Linking /dev/stdin to /proc/self/fd/0
Linking /dev/stdout to /proc/self/fd/1
Linking /dev/stderr to /proc/self/fd/2
Creating new session group leader
Setting controlling terminal
Creating /var/lib/bluetooth
Failed to create filesystem: No such file or directory
Creating /etc/bluetooth
Failed to create filesystem: No such file or directory
Creating /etc/dbus-1
Failed to create filesystem: No such file or directory
Creating /usr/share/dbus-1
Running command /github/workspace/bluez/tools/bnep-tester
New process 41 created
Changing into directory /github/workspace

Basic BNEP Socket - Success - init
Read Index List callback

    Status: 0x00
  New hciemu instance created
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: 0x00
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Basic BNEP Socket - Success - setup
Powering on controller
Controller powered on
Client set connectable status 0x00
Basic BNEP Socket - Success - setup complete
Basic BNEP Socket - Success - run
Basic BNEP Socket - Success - test passed
Basic BNEP Socket - Success - teardown
Index Removed callback

    Index: 0x0000

Basic BNEP Socket - Success - teardown complete
Basic BNEP Socket - Success - done

Test Summary
------------
Basic BNEP Socket - Success Passed 0.062 seconds
Total: 1, Passed: 1 (100.0%), Failed: 0, Not Run: 0 Overall execution time: 0.0703 seconds Process 41 exited with status 0
reboot: Restarting system

c[?7lSeaBIOS (version 1.13.0-1ubuntu1.1) Booting from ROM..c[?7learly console in extract_kernel
input_data: 0x0000000001e762e0
input_len: 0x00000000003639a7
output: 0x0000000001000000
output_len: 0x00000000011a7178
kernel_total_size: 0x0000000001030000
needed_size: 0x0000000001200000
trampoline_32bit: 0x000000000009d000
Physical KASLR using RDTSC...
Virtual KASLR using RDTSC...

Decompressing Linux... Parsing ELF... Performing relocations... done.
Booting the kernel.
Linux version 5.13.0-rc6-ga9f90acbf6b4 (root@3db5798ffea7) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #2 Wed Jun 30 09:10:59 UTC 2021
Command line: console=ttyS0,115200n8 earlyprintk=serial rootfstype=9p rootflags=trans=virtio,version=9p2000.L acpi=off pci=noacpi noapic quiet ro init=/github/workspace/bluez/tools/test-runner bluetooth.enable_ecred=1TESTHOME=/github/workspace TESTDBUS=0 TESTMONITOR=0 TESTDEVS=0 TESTAUTO=0 TESTARGS='/github/workspace/bluez/tools/mgmt-tester' x86/fpu: x87 FPU will use FXSAVE
BIOS-provided physical RAM map:
BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
BIOS-e820: [mem 0x0000000000100000-0x000000000bffdfff] usable
BIOS-e820: [mem 0x000000000bffe000-0x000000000bffffff] reserved
BIOS-e820: [mem 0x00000000b0000000-0x00000000bfffffff] reserved
BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
printk: bootconsole [earlyser0] enabled
Memory KASLR using RDTSC...
Poking KASLR using RDTSC...
Mounting sysfs to /sys
Mounting proc to /proc
Mounting devtmpfs to /dev
Creating /dev/pts
Mounting devpts to /dev/pts
Creating /dev/shm
Mounting tmpfs to /dev/shm
Mounting tmpfs to /run
Mounting tmpfs to /tmp
Mounting debugfs to /sys/kernel/debug
Linking /dev/fd to /proc/self/fd
Linking /dev/stdin to /proc/self/fd/0
Linking /dev/stdout to /proc/self/fd/1
Linking /dev/stderr to /proc/self/fd/2
Creating new session group leader
Setting controlling terminal
Creating /var/lib/bluetooth
Failed to create filesystem: No such file or directory
Creating /etc/bluetooth
Failed to create filesystem: No such file or directory
Creating /etc/dbus-1
Failed to create filesystem: No such file or directory
Creating /usr/share/dbus-1
Running command /github/workspace/bluez/tools/mgmt-tester
New process 41 created
Changing into directory /github/workspace

Controller setup - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Controller setup - setup
Controller setup - setup complete
Controller setup - run
Controller setup - test passed
Controller setup - teardown
Index Removed callback

    Index: 0x0000

Controller setup - teardown complete
Controller setup - done

Controller setup (BR/EDR-only) - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Controller setup (BR/EDR-only) - setup
Controller setup (BR/EDR-only) - setup complete
Controller setup (BR/EDR-only) - run
Controller setup (BR/EDR-only) - test passed
Controller setup (BR/EDR-only) - teardown
Index Removed callback

    Index: 0x0000

Controller setup (BR/EDR-only) - teardown complete Controller setup (BR/EDR-only) - done

Controller setup (LE) - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Controller setup (LE) - setup
Controller setup (LE) - setup complete
Controller setup (LE) - run
Controller setup (LE) - test passed
Controller setup (LE) - teardown
Index Removed callback

    Index: 0x0000

Controller setup (LE) - teardown complete
Controller setup (LE) - done

Invalid command - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Invalid command - setup
Invalid command - setup complete
Invalid command - run
Sending <unknown opcode> (0xffff)
Test condition added, total 1
<unknown opcode> (0xffff): Unknown Command (0x01) Test condition complete, 0 left
Invalid command - test passed
Invalid command - teardown
Index Removed callback

    Index: 0x0000

Invalid command - teardown complete
Invalid command - done

Read version - Success - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read version - Success - setup
Read version - Success - setup complete
Read version - Success - run
Sending Read Version (0x0001)
Test condition added, total 1
Read Version (0x0001): Success (0x00)
Test condition complete, 0 left
Read version - Success - test passed
Read version - Success - teardown
Index Removed callback

    Index: 0x0000

Read version - Success - teardown complete
Read version - Success - done

Read version - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read version - Invalid parameters - setup Read version - Invalid parameters - setup complete Read version - Invalid parameters - run
Sending Read Version (0x0001)
Test condition added, total 1
Read Version (0x0001): Invalid Parameters (0x0d) Test condition complete, 0 left
Read version - Invalid parameters - test passed Read version - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read version - Invalid parameters - teardown complete Read version - Invalid parameters - done

Read version - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read version - Invalid index - setup
Read version - Invalid index - setup complete
Read version - Invalid index - run
Sending Read Version (0x0001)
Test condition added, total 1
Read Version (0x0001): Invalid Index (0x11)
Test condition complete, 0 left
Read version - Invalid index - test passed
Read version - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read version - Invalid index - teardown complete
Read version - Invalid index - done

Read commands - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read commands - Invalid parameters - setup Read commands - Invalid parameters - setup complete Read commands - Invalid parameters - run
Sending Read Commands (0x0002)
Test condition added, total 1
Read Commands (0x0002): Invalid Parameters (0x0d) Test condition complete, 0 left
Read commands - Invalid parameters - test passed Read commands - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read commands - Invalid parameters - teardown complete Read commands - Invalid parameters - done

Read commands - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read commands - Invalid index - setup
Read commands - Invalid index - setup complete
Read commands - Invalid index - run
Sending Read Commands (0x0002)
Test condition added, total 1
Read Commands (0x0002): Invalid Index (0x11)
Test condition complete, 0 left
Read commands - Invalid index - test passed
Read commands - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read commands - Invalid index - teardown complete
Read commands - Invalid index - done

Read index list - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read index list - Invalid parameters - setup Read index list - Invalid parameters - setup complete Read index list - Invalid parameters - run
Sending Read Index List (0x0003)
Test condition added, total 1
Read Index List (0x0003): Invalid Parameters (0x0d) Test condition complete, 0 left
Read index list - Invalid parameters - test passed Read index list - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read index list - Invalid parameters - teardown complete Read index list - Invalid parameters - done

Read index list - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read index list - Invalid index - setup
Read index list - Invalid index - setup complete
Read index list - Invalid index - run
Sending Read Index List (0x0003)
Test condition added, total 1
Read Index List (0x0003): Invalid Index (0x11)
Test condition complete, 0 left
Read index list - Invalid index - test passed
Read index list - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read index list - Invalid index - teardown complete Read index list - Invalid index - done

Read info - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read info - Invalid parameters - setup
Read info - Invalid parameters - setup complete Read info - Invalid parameters - run
Sending Read Controller Info (0x0004)
Test condition added, total 1
Read Controller Info (0x0004): Invalid Parameters (0x0d) Test condition complete, 0 left
Read info - Invalid parameters - test passed
Read info - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read info - Invalid parameters - teardown complete Read info - Invalid parameters - done

Read info - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read info - Invalid index - setup
Read info - Invalid index - setup complete Read info - Invalid index - run
Sending Read Controller Info (0x0004)
Test condition added, total 1
Read Controller Info (0x0004): Invalid Index (0x11) Test condition complete, 0 left
Read info - Invalid index - test passed
Read info - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read info - Invalid index - teardown complete
Read info - Invalid index - done

Read unconfigured index list - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read unconfigured index list - Invalid parameters - setup Read unconfigured index list - Invalid parameters - setup complete Read unconfigured index list - Invalid parameters - run
Sending Read Unconfigured Index List (0x0036)
Test condition added, total 1
Read Unconfigured Index List (0x0036): Invalid Parameters (0x0d) Test condition complete, 0 left
Read unconfigured index list - Invalid parameters - test passed Read unconfigured index list - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read unconfigured index list - Invalid parameters - teardown complete Read unconfigured index list - Invalid parameters - done

Read unconfigured index list - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read unconfigured index list - Invalid index - setup Read unconfigured index list - Invalid index - setup complete Read unconfigured index list - Invalid index - run
Sending Read Unconfigured Index List (0x0036) Test condition added, total 1
Read Unconfigured Index List (0x0036): Invalid Index (0x11) Test condition complete, 0 left
Read unconfigured index list - Invalid index - test passed Read unconfigured index list - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read unconfigured index list - Invalid index - teardown complete Read unconfigured index list - Invalid index - done

Read configuration info - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read configuration info - Invalid parameters - setup
Read configuration info - Invalid parameters - setup complete
Read configuration info - Invalid parameters - run
Sending Read Controller Configuration Information (0x0037)
Test condition added, total 1
Read Controller Configuration Information (0x0037): Invalid Parameters (0x0d) Test condition complete, 0 left
Read configuration info - Invalid parameters - test passed
Read configuration info - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read configuration info - Invalid parameters - teardown complete Read configuration info - Invalid parameters - done

Read configuration info - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read configuration info - Invalid index - setup
Read configuration info - Invalid index - setup complete
Read configuration info - Invalid index - run
Sending Read Controller Configuration Information (0x0037) Test condition added, total 1
Read Controller Configuration Information (0x0037): Invalid Index (0x11) Test condition complete, 0 left
Read configuration info - Invalid index - test passed
Read configuration info - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read configuration info - Invalid index - teardown complete Read configuration info - Invalid index - done

Read extended index list - Invalid parameters - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read extended index list - Invalid parameters - setup
Read extended index list - Invalid parameters - setup complete Read extended index list - Invalid parameters - run
Sending Read Extended Controller Index List (0x003c)
Test condition added, total 1
Read Extended Controller Index List (0x003c): Invalid Parameters (0x0d) Test condition complete, 0 left
Read extended index list - Invalid parameters - test passed Read extended index list - Invalid parameters - teardown
Index Removed callback

    Index: 0x0000

Read extended index list - Invalid parameters - teardown complete Read extended index list - Invalid parameters - done

Read extended index list - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Read extended index list - Invalid index - setup
Read extended index list - Invalid index - setup complete Read extended index list - Invalid index - run
Sending Read Extended Controller Index List (0x003c) Test condition added, total 1
Read Extended Controller Index List (0x003c): Invalid Index (0x11) Test condition complete, 0 left
Read extended index list - Invalid index - test passed Read extended index list - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Read extended index list - Invalid index - teardown complete Read extended index list - Invalid index - done

Set powered on - Success - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered on - Success - setup
Set powered on - Success - setup complete
Set powered on - Success - run
Registering new settings notification
Test condition added, total 1
Sending Set Powered (0x0005)
Test condition added, total 2
Set Powered (0x0005): Success (0x00)
Test condition complete, 1 left
New settings 0x00000081 received
Unregistering new settings notification
Test condition complete, 0 left
Set powered on - Success - test passed
Set powered on - Success - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set powered on - Success - teardown complete
Set powered on - Success - done

Set powered on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered on - Invalid parameters 1 - setup Set powered on - Invalid parameters 1 - setup complete Set powered on - Invalid parameters 1 - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Parameters (0x0d) Test condition complete, 0 left
Set powered on - Invalid parameters 1 - test passed Set powered on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set powered on - Invalid parameters 1 - teardown complete Set powered on - Invalid parameters 1 - done

Set powered on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered on - Invalid parameters 2 - setup Set powered on - Invalid parameters 2 - setup complete Set powered on - Invalid parameters 2 - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Parameters (0x0d) Test condition complete, 0 left
Set powered on - Invalid parameters 2 - test passed Set powered on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set powered on - Invalid parameters 2 - teardown complete Set powered on - Invalid parameters 2 - done

Set powered on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered on - Invalid parameters 3 - setup Set powered on - Invalid parameters 3 - setup complete Set powered on - Invalid parameters 3 - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Parameters (0x0d) Test condition complete, 0 left
Set powered on - Invalid parameters 3 - test passed Set powered on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set powered on - Invalid parameters 3 - teardown complete Set powered on - Invalid parameters 3 - done

Set powered on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered on - Invalid index - setup
Set powered on - Invalid index - setup complete
Set powered on - Invalid index - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Index (0x11)
Test condition complete, 0 left
Set powered on - Invalid index - test passed
Set powered on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set powered on - Invalid index - teardown complete Set powered on - Invalid index - done

Set powered on - Privacy and Advertising - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set powered on - Privacy and Advertising - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set powered on - Privacy and Advertising - setup complete Set powered on - Privacy and Advertising - run
Sending Set Advertising (0x0029)
Test condition added, total 1
Set Advertising (0x0029): Success (0x00)
Test condition complete, 0 left
Set powered on - Privacy and Advertising - test passed Set powered on - Privacy and Advertising - teardown
Index Removed callback

    Index: 0x0000

Set powered on - Privacy and Advertising - teardown complete Set powered on - Privacy and Advertising - done

Set powered off - Success - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered off - Success - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set powered off - Success - setup complete
Set powered off - Success - run
Registering new settings notification
Test condition added, total 1
Sending Set Powered (0x0005)
Test condition added, total 2
Set Powered (0x0005): Success (0x00)
Test condition complete, 1 left
New settings 0x00000080 received
Unregistering new settings notification
Test condition complete, 0 left
Set powered off - Success - test passed
Set powered off - Success - teardown
Index Removed callback

    Index: 0x0000

Set powered off - Success - teardown complete
Set powered off - Success - done

Set powered off - Class of Device - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered off - Class of Device - setup
Setting device class and powering on Controller powered on
Test setup condition added, total 1 Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set powered off - Class of Device - setup complete Set powered off - Class of Device - run
Registering new settings notification Test condition added, total 1 Registering Class of Device Changed notification Test condition added, total 2
Sending Set Powered (0x0005)
Test condition added, total 3
Set Powered (0x0005): Success (0x00) Test condition complete, 2 left
New Class of Device Changed event received Test condition complete, 1 left
New settings 0x00000080 received Unregistering new settings notification Test condition complete, 0 left
Set powered off - Class of Device - test passed Set powered off - Class of Device - teardown
Index Removed callback

    Index: 0x0000

Set powered off - Class of Device - teardown complete Set powered off - Class of Device - done

Set powered off - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered off - Invalid parameters 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set powered off - Invalid parameters 1 - setup complete Set powered off - Invalid parameters 1 - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Parameters (0x0d) Test condition complete, 0 left
Set powered off - Invalid parameters 1 - test passed Set powered off - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set powered off - Invalid parameters 1 - teardown complete Set powered off - Invalid parameters 1 - done

Set powered off - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered off - Invalid parameters 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set powered off - Invalid parameters 2 - setup complete Set powered off - Invalid parameters 2 - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Parameters (0x0d) Test condition complete, 0 left
Set powered off - Invalid parameters 2 - test passed Set powered off - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set powered off - Invalid parameters 2 - teardown complete Set powered off - Invalid parameters 2 - done

Set powered off - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set powered off - Invalid parameters 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set powered off - Invalid parameters 3 - setup complete Set powered off - Invalid parameters 3 - run
Sending Set Powered (0x0005)
Test condition added, total 1
Set Powered (0x0005): Invalid Parameters (0x0d) Test condition complete, 0 left
Set powered off - Invalid parameters 3 - test passed Set powered off - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set powered off - Invalid parameters 3 - teardown complete Set powered off - Invalid parameters 3 - done

Set connectable on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on - Success 1 - setup
Set connectable on - Success 1 - setup complete
Set connectable on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
Set Connectable (0x0007): Success (0x00)
Test condition complete, 1 left
New settings 0x00000082 received
Unregistering new settings notification
Test condition complete, 0 left
Set connectable on - Success 1 - test passed
Set connectable on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set connectable on - Success 1 - teardown complete Set connectable on - Success 1 - done

Set connectable on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable on - Success 2 - setup complete
Set connectable on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x0c1a length 1
Test condition complete, 2 left
Set Connectable (0x0007): Success (0x00)
Test condition complete, 1 left
New settings 0x00000083 received
Unregistering new settings notification
Test condition complete, 0 left
Set connectable on - Success 2 - test passed
Set connectable on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable on - Success 2 - teardown complete Set connectable on - Success 2 - done

Set connectable on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on - Invalid parameters 1 - setup Set connectable on - Invalid parameters 1 - setup complete Set connectable on - Invalid parameters 1 - run
Sending Set Connectable (0x0007)
Test condition added, total 1
Set Connectable (0x0007): Invalid Parameters (0x0d) Test condition complete, 0 left
Set connectable on - Invalid parameters 1 - test passed Set connectable on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set connectable on - Invalid parameters 1 - teardown complete Set connectable on - Invalid parameters 1 - done

Set connectable on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on - Invalid parameters 2 - setup Set connectable on - Invalid parameters 2 - setup complete Set connectable on - Invalid parameters 2 - run
Sending Set Connectable (0x0007)
Test condition added, total 1
Set Connectable (0x0007): Invalid Parameters (0x0d) Test condition complete, 0 left
Set connectable on - Invalid parameters 2 - test passed Set connectable on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set connectable on - Invalid parameters 2 - teardown complete Set connectable on - Invalid parameters 2 - done

Set connectable on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on - Invalid parameters 3 - setup Set connectable on - Invalid parameters 3 - setup complete Set connectable on - Invalid parameters 3 - run
Sending Set Connectable (0x0007)
Test condition added, total 1
Set Connectable (0x0007): Invalid Parameters (0x0d) Test condition complete, 0 left
Set connectable on - Invalid parameters 3 - test passed Set connectable on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set connectable on - Invalid parameters 3 - teardown complete Set connectable on - Invalid parameters 3 - done

Set connectable on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on - Invalid index - setup Set connectable on - Invalid index - setup complete Set connectable on - Invalid index - run
Sending Set Connectable (0x0007)
Test condition added, total 1
Set Connectable (0x0007): Invalid Index (0x11) Test condition complete, 0 left
Set connectable on - Invalid index - test passed Set connectable on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set connectable on - Invalid index - teardown complete Set connectable on - Invalid index - done

Set connectable on (LE) - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on (LE) - Success 1 - setup Set connectable on (LE) - Success 1 - setup complete Set connectable on (LE) - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000202 received Unregistering new settings notification Test condition complete, 0 left
Set connectable on (LE) - Success 1 - test passed Set connectable on (LE) - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set connectable on (LE) - Success 1 - teardown complete Set connectable on (LE) - Success 1 - done

Set connectable on (LE) - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on (LE) - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set connectable on (LE) - Success 2 - setup complete Set connectable on (LE) - Success 2 - run
Registering new settings notification
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000203 received Unregistering new settings notification Test condition complete, 0 left
Set connectable on (LE) - Success 2 - test passed Set connectable on (LE) - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable on (LE) - Success 2 - teardown complete Set connectable on (LE) - Success 2 - done

Set connectable on (LE) - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable on (LE) - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set connectable on (LE) - Success 3 - setup complete Set connectable on (LE) - Success 3 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x200a length 1
HCI Command 0x2006 length 15
Test condition complete, 2 left
HCI Command 0x200a length 1
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000603 received Unregistering new settings notification Test condition complete, 0 left
Set connectable on (LE) - Success 3 - test passed Set connectable on (LE) - Success 3 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable on (LE) - Success 3 - teardown complete Set connectable on (LE) - Success 3 - done

Set connectable off - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off - Success 1 - setup complete
Set connectable off - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
Set Connectable (0x0007): Success (0x00)
Test condition complete, 1 left
New settings 0x00000080 received
Unregistering new settings notification
Test condition complete, 0 left
Set connectable off - Success 1 - test passed
Set connectable off - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set connectable off - Success 1 - teardown complete Set connectable off - Success 1 - done

Set connectable off - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off - Success 2 - setup complete
Set connectable off - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x0c1a length 1
Test condition complete, 2 left
Set Connectable (0x0007): Success (0x00)
Test condition complete, 1 left
New settings 0x00000081 received
Unregistering new settings notification
Test condition complete, 0 left
Set connectable off - Success 2 - test passed
Set connectable off - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable off - Success 2 - teardown complete Set connectable off - Success 2 - done

Set connectable off - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off - Success 3 - setup complete
Set connectable off - Success 3 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x0c1a length 1
Test condition complete, 2 left
Set Connectable (0x0007): Success (0x00)
Test condition complete, 1 left
New settings 0x00000081 received
Unregistering new settings notification
Test condition complete, 0 left
Set connectable off - Success 3 - test passed
Set connectable off - Success 3 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable off - Success 3 - teardown complete Set connectable off - Success 3 - done

Set connectable off - Success 4 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off - Success 4 - setup
Initial settings completed
Powering on controller (with added device)
Controller powered on
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off - Success 4 - setup complete
Set connectable off - Success 4 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x0c1a length 1
Test condition complete, 2 left
Set Connectable (0x0007): Success (0x00)
Test condition complete, 1 left
New settings 0x00000081 received
Unregistering new settings notification
Test condition complete, 0 left
Set connectable off - Success 4 - test passed
Set connectable off - Success 4 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable off - Success 4 - teardown complete Set connectable off - Success 4 - done

Set connectable off (LE) - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off (LE) - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off (LE) - Success 1 - setup complete Set connectable off (LE) - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Connectable (0x0007)
Test condition added, total 2
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000200 received Unregistering new settings notification Test condition complete, 0 left
Set connectable off (LE) - Success 1 - test passed Set connectable off (LE) - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set connectable off (LE) - Success 1 - teardown complete Set connectable off (LE) - Success 1 - done

Set connectable off (LE) - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off (LE) - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off (LE) - Success 2 - setup complete Set connectable off (LE) - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x200a length 1
HCI Command 0x2005 length 6
HCI Command 0x2006 length 15
Test condition complete, 2 left
HCI Command 0x200a length 1
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000601 received Unregistering new settings notification Test condition complete, 0 left
Set connectable off (LE) - Success 2 - test passed Set connectable off (LE) - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable off (LE) - Success 2 - teardown complete Set connectable off (LE) - Success 2 - done

Set connectable off (LE) - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off (LE) - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off (LE) - Success 3 - setup complete Set connectable off (LE) - Success 3 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x2008 length 32
HCI Command 0x200a length 1
HCI Command 0x2005 length 6
HCI Command 0x2006 length 15
Test condition complete, 2 left
HCI Command 0x200a length 1
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000601 received Unregistering new settings notification Test condition complete, 0 left
Set connectable off (LE) - Success 3 - test passed Set connectable off (LE) - Success 3 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable off (LE) - Success 3 - teardown complete Set connectable off (LE) - Success 3 - done

Set connectable off (LE) - Success 4 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set connectable off (LE) - Success 4 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set connectable off (LE) - Success 4 - setup complete Set connectable off (LE) - Success 4 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Connectable (0x0007)
Test condition added, total 3
HCI Command 0x2008 length 32
HCI Command 0x200a length 1
HCI Command 0x2005 length 6
HCI Command 0x2006 length 15
Test condition complete, 2 left
HCI Command 0x200a length 1
Set Connectable (0x0007): Success (0x00) Test condition complete, 1 left
New settings 0x00000601 received Unregistering new settings notification Test condition complete, 0 left
Set connectable off (LE) - Success 4 - test passed Set connectable off (LE) - Success 4 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set connectable off (LE) - Success 4 - teardown complete Set connectable off (LE) - Success 4 - done

Set fast connectable on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set fast connectable on - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set fast connectable on - Success 1 - setup complete Set fast connectable on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Fast Connectable (0x0008)
Test condition added, total 2
Set Fast Connectable (0x0008): Success (0x00) Test condition complete, 1 left
New settings 0x00000087 received Unregistering new settings notification Test condition complete, 0 left
Set fast connectable on - Success 1 - test passed Set fast connectable on - Success 1 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set fast connectable on - Success 1 - teardown complete Set fast connectable on - Success 1 - done

Set fast connectable on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set fast connectable on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set fast connectable on - Success 2 - setup complete Set fast connectable on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Sending Set Fast Connectable (0x0008)
Test condition added, total 2
Set Fast Connectable (0x0008): Success (0x00) Test condition complete, 1 left
New settings 0x00000085 received Unregistering new settings notification Test condition complete, 0 left
Set fast connectable on - Success 2 - test passed Set fast connectable on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set fast connectable on - Success 2 - teardown complete Set fast connectable on - Success 2 - done

Set fast connectable on - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set fast connectable on - Success 3 - setup Set fast connectable on - Success 3 - setup complete Set fast connectable on - Success 3 - run
Registering new settings notification
Test condition added, total 1
Sending Set Fast Connectable (0x0008)
Test condition added, total 2
Set Fast Connectable (0x0008): Success (0x00) Test condition complete, 1 left
New settings 0x00000084 received Unregistering new settings notification Test condition complete, 0 left
Set fast connectable on - Success 3 - test passed Set fast connectable on - Success 3 - teardown
Index Removed callback

    Index: 0x0000

Set fast connectable on - Success 3 - teardown complete Set fast connectable on - Success 3 - done

Set fast connectable on - Invalid Params 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set fast connectable on - Invalid Params 1 - setup Set fast connectable on - Invalid Params 1 - setup complete Set fast connectable on - Invalid Params 1 - run
Sending Set Fast Connectable (0x0008)
Test condition added, total 1
Set Fast Connectable (0x0008): Invalid Parameters (0x0d) Test condition complete, 0 left
Set fast connectable on - Invalid Params 1 - test passed Set fast connectable on - Invalid Params 1 - teardown
Index Removed callback

    Index: 0x0000

Set fast connectable on - Invalid Params 1 - teardown complete Set fast connectable on - Invalid Params 1 - done

Set fast connectable on - Not Supported 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set fast connectable on - Not Supported 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set fast connectable on - Not Supported 1 - setup complete Set fast connectable on - Not Supported 1 - run
Sending Set Fast Connectable (0x0008)
Test condition added, total 1
Set Fast Connectable (0x0008): Not Supported (0x0c) Test condition complete, 0 left
Set fast connectable on - Not Supported 1 - test passed Set fast connectable on - Not Supported 1 - teardown
Index Removed callback

    Index: 0x0000

Set fast connectable on - Not Supported 1 - teardown complete Set fast connectable on - Not Supported 1 - done

Set bondable on - Success - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set bondable on - Success - setup
Set bondable on - Success - setup complete
Set bondable on - Success - run
Registering new settings notification
Test condition added, total 1
Sending Set Bondable (0x0009)
Test condition added, total 2
Set Bondable (0x0009): Success (0x00)
Test condition complete, 1 left
New settings 0x00000090 received
Unregistering new settings notification
Test condition complete, 0 left
Set bondable on - Success - test passed
Set bondable on - Success - teardown
Index Removed callback

    Index: 0x0000

Set bondable on - Success - teardown complete
Set bondable on - Success - done

Set bondable on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set bondable on - Invalid parameters 1 - setup Set bondable on - Invalid parameters 1 - setup complete Set bondable on - Invalid parameters 1 - run
Sending Set Bondable (0x0009)
Test condition added, total 1
Set Bondable (0x0009): Invalid Parameters (0x0d) Test condition complete, 0 left
Set bondable on - Invalid parameters 1 - test passed Set bondable on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set bondable on - Invalid parameters 1 - teardown complete Set bondable on - Invalid parameters 1 - done

Set bondable on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set bondable on - Invalid parameters 2 - setup Set bondable on - Invalid parameters 2 - setup complete Set bondable on - Invalid parameters 2 - run
Sending Set Bondable (0x0009)
Test condition added, total 1
Set Bondable (0x0009): Invalid Parameters (0x0d) Test condition complete, 0 left
Set bondable on - Invalid parameters 2 - test passed Set bondable on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set bondable on - Invalid parameters 2 - teardown complete Set bondable on - Invalid parameters 2 - done

Set bondable on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set bondable on - Invalid parameters 3 - setup Set bondable on - Invalid parameters 3 - setup complete Set bondable on - Invalid parameters 3 - run
Sending Set Bondable (0x0009)
Test condition added, total 1
Set Bondable (0x0009): Invalid Parameters (0x0d) Test condition complete, 0 left
Set bondable on - Invalid parameters 3 - test passed Set bondable on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set bondable on - Invalid parameters 3 - teardown complete Set bondable on - Invalid parameters 3 - done

Set bondable on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set bondable on - Invalid index - setup
Set bondable on - Invalid index - setup complete
Set bondable on - Invalid index - run
Sending Set Bondable (0x0009)
Test condition added, total 1
Set Bondable (0x0009): Invalid Index (0x11)
Test condition complete, 0 left
Set bondable on - Invalid index - test passed
Set bondable on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set bondable on - Invalid index - teardown complete Set bondable on - Invalid index - done

Set discoverable on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Invalid parameters 1 - setup Set discoverable on - Invalid parameters 1 - setup complete Set discoverable on - Invalid parameters 1 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Invalid Parameters (0x0d) Test condition complete, 0 left
Set discoverable on - Invalid parameters 1 - test passed Set discoverable on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Invalid parameters 1 - teardown complete Set discoverable on - Invalid parameters 1 - done

Set discoverable on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Invalid parameters 2 - setup Set discoverable on - Invalid parameters 2 - setup complete Set discoverable on - Invalid parameters 2 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Invalid Parameters (0x0d) Test condition complete, 0 left
Set discoverable on - Invalid parameters 2 - test passed Set discoverable on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Invalid parameters 2 - teardown complete Set discoverable on - Invalid parameters 2 - done

Set discoverable on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Invalid parameters 3 - setup Set discoverable on - Invalid parameters 3 - setup complete Set discoverable on - Invalid parameters 3 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Invalid Parameters (0x0d) Test condition complete, 0 left
Set discoverable on - Invalid parameters 3 - test passed Set discoverable on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Invalid parameters 3 - teardown complete Set discoverable on - Invalid parameters 3 - done

Set discoverable on - Invalid parameters 4 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Invalid parameters 4 - setup Set discoverable on - Invalid parameters 4 - setup complete Set discoverable on - Invalid parameters 4 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Invalid Parameters (0x0d) Test condition complete, 0 left
Set discoverable on - Invalid parameters 4 - test passed Set discoverable on - Invalid parameters 4 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Invalid parameters 4 - teardown complete Set discoverable on - Invalid parameters 4 - done

Set discoverable on - Not powered 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Not powered 1 - setup Set discoverable on - Not powered 1 - setup complete Set discoverable on - Not powered 1 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Not Powered (0x0f) Test condition complete, 0 left
Set discoverable on - Not powered 1 - test passed Set discoverable on - Not powered 1 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Not powered 1 - teardown complete Set discoverable on - Not powered 1 - done

Set discoverable on - Not powered 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Not powered 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set discoverable on - Not powered 2 - setup complete Set discoverable on - Not powered 2 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Not Powered (0x0f) Test condition complete, 0 left
Set discoverable on - Not powered 2 - test passed Set discoverable on - Not powered 2 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Not powered 2 - teardown complete Set discoverable on - Not powered 2 - done

Set discoverable on - Rejected 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Rejected 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable on - Rejected 1 - setup complete
Set discoverable on - Rejected 1 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Rejected (0x0b)
Test condition complete, 0 left
Set discoverable on - Rejected 1 - test passed
Set discoverable on - Rejected 1 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Rejected 1 - teardown complete Set discoverable on - Rejected 1 - done

Set discoverable on - Rejected 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Rejected 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable on - Rejected 2 - setup complete
Set discoverable on - Rejected 2 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Rejected (0x0b)
Test condition complete, 0 left
Set discoverable on - Rejected 2 - test passed
Set discoverable on - Rejected 2 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Rejected 2 - teardown complete Set discoverable on - Rejected 2 - done

Set discoverable on - Rejected 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Rejected 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable on - Rejected 3 - setup complete
Set discoverable on - Rejected 3 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Rejected (0x0b)
Test condition complete, 0 left
Set discoverable on - Rejected 3 - test passed
Set discoverable on - Rejected 3 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Rejected 3 - teardown complete Set discoverable on - Rejected 3 - done

Set discoverable on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable on - Success 1 - setup complete
Set discoverable on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
Set Discoverable (0x0006): Success (0x00)
Test condition complete, 1 left
New settings 0x0000008a received
Unregistering new settings notification
Test condition complete, 0 left
Set discoverable on - Success 1 - test passed
Set discoverable on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on - Success 1 - teardown complete Set discoverable on - Success 1 - done

Set discoverable on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable on - Success 2 - setup complete
Set discoverable on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Discoverable (0x0006)
Test condition added, total 3
HCI Command 0x0c3a length 4
HCI Command 0x0c1a length 1
Test condition complete, 2 left
Set Discoverable (0x0006): Success (0x00)
Test condition complete, 1 left
New settings 0x0000008b received
Unregistering new settings notification
Test condition complete, 0 left
Set discoverable on - Success 2 - test passed
Set discoverable on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set discoverable on - Success 2 - teardown complete Set discoverable on - Success 2 - done

Set discoverable on (LE) - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable on (LE) - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable on (LE) - Success 1 - setup complete Set discoverable on (LE) - Success 1 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
HCI Command 0x2008 length 32
Test condition complete, 1 left
Set Discoverable (0x0006): Success (0x00) Test condition complete, 0 left
Set discoverable on (LE) - Success 1 - test passed Set discoverable on (LE) - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable on (LE) - Success 1 - teardown complete Set discoverable on (LE) - Success 1 - done

Set discoverable off - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable off - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable off - Success 1 - setup complete
Set discoverable off - Success 1 - run
Sending Set Discoverable (0x0006)
Test condition added, total 1
Set Discoverable (0x0006): Success (0x00)
Test condition complete, 0 left
Set discoverable off - Success 1 - test passed
Set discoverable off - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable off - Success 1 - teardown complete Set discoverable off - Success 1 - done

Set discoverable off - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set discoverable off - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set discoverable off - Success 2 - setup complete
Set discoverable off - Success 2 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
HCI Command 0x0c1a length 1
Test condition complete, 1 left
Set Discoverable (0x0006): Success (0x00)
Test condition complete, 0 left
Set discoverable off - Success 2 - test passed
Set discoverable off - Success 2 - teardown
Index Removed callback

    Index: 0x0000

Set discoverable off - Success 2 - teardown complete Set discoverable off - Success 2 - done

Set limited discoverable on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set limited discoverable on - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set limited discoverable on - Success 1 - setup complete Set limited discoverable on - Success 1 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
HCI Command 0x0c3a length 4
HCI Command 0x0c1a length 1
Test condition complete, 1 left
HCI Command 0x0c24 length 3
Set Discoverable (0x0006): Success (0x00) Test condition complete, 0 left
Set limited discoverable on - Success 1 - test passed Set limited discoverable on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set limited discoverable on - Success 1 - teardown complete Set limited discoverable on - Success 1 - done

Set limited discoverable on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set limited discoverable on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set limited discoverable on - Success 2 - setup complete Set limited discoverable on - Success 2 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
HCI Command 0x0c3a length 4
Test condition complete, 1 left
HCI Command 0x0c1a length 1
HCI Command 0x0c24 length 3
Set Discoverable (0x0006): Success (0x00) Test condition complete, 0 left
Set limited discoverable on - Success 2 - test passed Set limited discoverable on - Success 2 - teardown
Index Removed callback

    Index: 0x0000

Set limited discoverable on - Success 2 - teardown complete Set limited discoverable on - Success 2 - done

Set limited discoverable on - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set limited discoverable on - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set limited discoverable on - Success 3 - setup complete Set limited discoverable on - Success 3 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
HCI Command 0x0c3a length 4
HCI Command 0x0c1a length 1
HCI Command 0x0c24 length 3
Test condition complete, 1 left
Set Discoverable (0x0006): Success (0x00) Test condition complete, 0 left
Set limited discoverable on - Success 3 - test passed Set limited discoverable on - Success 3 - teardown
Index Removed callback

    Index: 0x0000

Set limited discoverable on - Success 3 - teardown complete Set limited discoverable on - Success 3 - done

Set limited discoverable on (LE) - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001be1b
    Current settings: 0x00000200
    Class: 0x000000
    Name: 
    Short name: 

Set limited discoverable on (LE) - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set limited discoverable on (LE) - Success 1 - setup complete Set limited discoverable on (LE) - Success 1 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Discoverable (0x0006)
Test condition added, total 2
HCI Command 0x2008 length 32
Test condition complete, 1 left
Set Discoverable (0x0006): Success (0x00)
Test condition complete, 0 left
Set limited discoverable on (LE) - Success 1 - test passed Set limited discoverable on (LE) - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set limited discoverable on (LE) - Success 1 - teardown complete Set limited discoverable on (LE) - Success 1 - done

Set link security on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Success 1 - setup
Set link security on - Success 1 - setup complete
Set link security on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Link Security (0x000a)
Test condition added, total 2
Set Link Security (0x000a): Success (0x00)
Test condition complete, 1 left
New settings 0x000000a0 received
Unregistering new settings notification
Test condition complete, 0 left
Set link security on - Success 1 - test passed
Set link security on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set link security on - Success 1 - teardown complete Set link security on - Success 1 - done

Set link security on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set link security on - Success 2 - setup complete
Set link security on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Link Security (0x000a)
Test condition added, total 3
HCI Command 0x0c20 length 1
Test condition complete, 2 left
Set Link Security (0x000a): Success (0x00)
Test condition complete, 1 left
New settings 0x000000a1 received
Unregistering new settings notification
Test condition complete, 0 left
Set link security on - Success 2 - test passed
Set link security on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set link security on - Success 2 - teardown complete Set link security on - Success 2 - done

Set link security on - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set link security on - Success 3 - setup complete
Set link security on - Success 3 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Powered (0x0005)
Test condition added, total 3
HCI Command 0x0c20 length 1
Test condition complete, 2 left
HCI Command 0x0c13 length 248
Set Powered (0x0005): Success (0x00)
Test condition complete, 1 left
New settings 0x000000a1 received
Unregistering new settings notification
Test condition complete, 0 left
Set link security on - Success 3 - test passed
Set link security on - Success 3 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set link security on - Success 3 - teardown complete Set link security on - Success 3 - done

Set link security on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Invalid parameters 1 - setup Set link security on - Invalid parameters 1 - setup complete Set link security on - Invalid parameters 1 - run
Sending Set Link Security (0x000a)
Test condition added, total 1
Set Link Security (0x000a): Invalid Parameters (0x0d) Test condition complete, 0 left
Set link security on - Invalid parameters 1 - test passed Set link security on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set link security on - Invalid parameters 1 - teardown complete Set link security on - Invalid parameters 1 - done

Set link security on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Invalid parameters 2 - setup Set link security on - Invalid parameters 2 - setup complete Set link security on - Invalid parameters 2 - run
Sending Set Link Security (0x000a)
Test condition added, total 1
Set Link Security (0x000a): Invalid Parameters (0x0d) Test condition complete, 0 left
Set link security on - Invalid parameters 2 - test passed Set link security on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set link security on - Invalid parameters 2 - teardown complete Set link security on - Invalid parameters 2 - done

Set link security on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Invalid parameters 3 - setup Set link security on - Invalid parameters 3 - setup complete Set link security on - Invalid parameters 3 - run
Sending Set Link Security (0x000a)
Test condition added, total 1
Set Link Security (0x000a): Invalid Parameters (0x0d) Test condition complete, 0 left
Set link security on - Invalid parameters 3 - test passed Set link security on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set link security on - Invalid parameters 3 - teardown complete Set link security on - Invalid parameters 3 - done

Set link security on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security on - Invalid index - setup Set link security on - Invalid index - setup complete Set link security on - Invalid index - run
Sending Set Link Security (0x000a)
Test condition added, total 1
Set Link Security (0x000a): Invalid Index (0x11) Test condition complete, 0 left
Set link security on - Invalid index - test passed Set link security on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set link security on - Invalid index - teardown complete Set link security on - Invalid index - done

Set link security off - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security off - Success 1 - setup
Initial settings completed
Test setup condition added, total 1 Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set link security off - Success 1 - setup complete Set link security off - Success 1 - run
Registering new settings notification Test condition added, total 1
Sending Set Link Security (0x000a)
Test condition added, total 2
Set Link Security (0x000a): Success (0x00) Test condition complete, 1 left
New settings 0x00000080 received Unregistering new settings notification Test condition complete, 0 left
Set link security off - Success 1 - test passed Set link security off - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set link security off - Success 1 - teardown complete Set link security off - Success 1 - done

Set link security off - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set link security off - Success 2 - setup
Initial settings completed
Test setup condition added, total 1 Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set link security off - Success 2 - setup complete Set link security off - Success 2 - run
Registering new settings notification Test condition added, total 1 Registering HCI command callback
Test condition added, total 2
Sending Set Link Security (0x000a)
Test condition added, total 3
HCI Command 0x0c20 length 1
Test condition complete, 2 left
Set Link Security (0x000a): Success (0x00) Test condition complete, 1 left
New settings 0x00000081 received Unregistering new settings notification Test condition complete, 0 left
Set link security off - Success 2 - test passed Set link security off - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set link security off - Success 2 - teardown complete Set link security off - Success 2 - done

Set SSP on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Success 1 - setup
Set SSP on - Success 1 - setup complete
Set SSP on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Secure Simple Pairing (0x000b) Test condition added, total 2
Set Secure Simple Pairing (0x000b): Success (0x00) Test condition complete, 1 left
New settings 0x000000c0 received Unregistering new settings notification Test condition complete, 0 left
Set SSP on - Success 1 - test passed
Set SSP on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set SSP on - Success 1 - teardown complete
Set SSP on - Success 1 - done

Set SSP on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00) Test setup condition complete, 0 left
Set SSP on - Success 2 - setup complete
Set SSP on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Secure Simple Pairing (0x000b) Test condition added, total 3
HCI Command 0x0c56 length 1
Test condition complete, 2 left
Set Secure Simple Pairing (0x000b): Success (0x00) Test condition complete, 1 left
New settings 0x000000c1 received Unregistering new settings notification Test condition complete, 0 left
Set SSP on - Success 2 - test passed
HCI Command 0x0c52 length 241
Set SSP on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set SSP on - Success 2 - teardown complete
Set SSP on - Success 2 - done

Set SSP on - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set SSP on - Success 3 - setup complete
Set SSP on - Success 3 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Powered (0x0005)
Test condition added, total 3
HCI Command 0x0c56 length 1
Test condition complete, 2 left
HCI Command 0x0c13 length 248
HCI Command 0x0c52 length 241
Set Powered (0x0005): Success (0x00)
Test condition complete, 1 left
New settings 0x000000c1 received
Unregistering new settings notification
Test condition complete, 0 left
Set SSP on - Success 3 - test passed
Set SSP on - Success 3 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set SSP on - Success 3 - teardown complete
Set SSP on - Success 3 - done

Set SSP on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Invalid parameters 1 - setup
Set SSP on - Invalid parameters 1 - setup complete Set SSP on - Invalid parameters 1 - run
Sending Set Secure Simple Pairing (0x000b)
Test condition added, total 1
Set Secure Simple Pairing (0x000b): Invalid Parameters (0x0d) Test condition complete, 0 left
Set SSP on - Invalid parameters 1 - test passed
Set SSP on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set SSP on - Invalid parameters 1 - teardown complete Set SSP on - Invalid parameters 1 - done

Set SSP on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Invalid parameters 2 - setup
Set SSP on - Invalid parameters 2 - setup complete Set SSP on - Invalid parameters 2 - run
Sending Set Secure Simple Pairing (0x000b)
Test condition added, total 1
Set Secure Simple Pairing (0x000b): Invalid Parameters (0x0d) Test condition complete, 0 left
Set SSP on - Invalid parameters 2 - test passed
Set SSP on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set SSP on - Invalid parameters 2 - teardown complete Set SSP on - Invalid parameters 2 - done

Set SSP on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Invalid parameters 3 - setup
Set SSP on - Invalid parameters 3 - setup complete Set SSP on - Invalid parameters 3 - run
Sending Set Secure Simple Pairing (0x000b)
Test condition added, total 1
Set Secure Simple Pairing (0x000b): Invalid Parameters (0x0d) Test condition complete, 0 left
Set SSP on - Invalid parameters 3 - test passed
Set SSP on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set SSP on - Invalid parameters 3 - teardown complete Set SSP on - Invalid parameters 3 - done

Set SSP on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set SSP on - Invalid index - setup
Set SSP on - Invalid index - setup complete
Set SSP on - Invalid index - run
Sending Set Secure Simple Pairing (0x000b)
Test condition added, total 1
Set Secure Simple Pairing (0x000b): Invalid Index (0x11) Test condition complete, 0 left
Set SSP on - Invalid index - test passed
Set SSP on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set SSP on - Invalid index - teardown complete
Set SSP on - Invalid index - done

Set Secure Connections on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Success 1 - setup complete Set Secure Connections on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Secure Connections (0x002d) Test condition added, total 2
Set Secure Connections (0x002d): Success (0x00) Test condition complete, 1 left
New settings 0x000008c0 received Unregistering new settings notification Test condition complete, 0 left
Set Secure Connections on - Success 1 - test passed Set Secure Connections on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Success 1 - teardown complete Set Secure Connections on - Success 1 - done

Set Secure Connections on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Success 2 - setup complete Set Secure Connections on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Secure Connections (0x002d) Test condition added, total 3
HCI Command 0x0c7a length 1
Test condition complete, 2 left
Set Secure Connections (0x002d): Success (0x00) Test condition complete, 1 left
New settings 0x000008c1 received Unregistering new settings notification Test condition complete, 0 left
Set Secure Connections on - Success 2 - test passed Set Secure Connections on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Success 2 - teardown complete Set Secure Connections on - Success 2 - done

Set Secure Connections on - Invalid params 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Invalid params 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Invalid params 1 - setup complete Set Secure Connections on - Invalid params 1 - run
Sending Set Secure Connections (0x002d)
Test condition added, total 1
Set Secure Connections (0x002d): Invalid Parameters (0x0d) Test condition complete, 0 left
Set Secure Connections on - Invalid params 1 - test passed Set Secure Connections on - Invalid params 1 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Invalid params 1 - teardown complete Set Secure Connections on - Invalid params 1 - done

Set Secure Connections on - Invalid params 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Invalid params 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Invalid params 2 - setup complete Set Secure Connections on - Invalid params 2 - run
Sending Set Secure Connections (0x002d)
Test condition added, total 1
Set Secure Connections (0x002d): Invalid Parameters (0x0d) Test condition complete, 0 left
Set Secure Connections on - Invalid params 2 - test passed Set Secure Connections on - Invalid params 2 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Invalid params 2 - teardown complete Set Secure Connections on - Invalid params 2 - done

Set Secure Connections on - Invalid params 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Invalid params 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Invalid params 3 - setup complete Set Secure Connections on - Invalid params 3 - run
Sending Set Secure Connections (0x002d)
Test condition added, total 1
Set Secure Connections (0x002d): Invalid Parameters (0x0d) Test condition complete, 0 left
Set Secure Connections on - Invalid params 3 - test passed Set Secure Connections on - Invalid params 3 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Invalid params 3 - teardown complete Set Secure Connections on - Invalid params 3 - done

Set Secure Connections on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Invalid index - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Invalid index - setup complete Set Secure Connections on - Invalid index - run
Sending Set Secure Connections (0x002d)
Test condition added, total 1
Set Secure Connections (0x002d): Invalid Index (0x11) Test condition complete, 0 left
Set Secure Connections on - Invalid index - test passed Set Secure Connections on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Invalid index - teardown complete Set Secure Connections on - Invalid index - done

Set Secure Connections on - Not supported 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Not supported 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Not supported 1 - setup complete Set Secure Connections on - Not supported 1 - run
Sending Set Secure Connections (0x002d)
Test condition added, total 1
Set Secure Connections (0x002d): Not Supported (0x0c) Test condition complete, 0 left
Set Secure Connections on - Not supported 1 - test passed Set Secure Connections on - Not supported 1 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Not supported 1 - teardown complete Set Secure Connections on - Not supported 1 - done

Set Secure Connections on - Not supported 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x05
    Manufacturer: 0x003f
    Supported settings: 0x000110ff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections on - Not supported 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections on - Not supported 2 - setup complete Set Secure Connections on - Not supported 2 - run
Sending Set Secure Connections (0x002d)
Test condition added, total 1
Set Secure Connections (0x002d): Not Supported (0x0c) Test condition complete, 0 left
Set Secure Connections on - Not supported 2 - test passed Set Secure Connections on - Not supported 2 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections on - Not supported 2 - teardown complete Set Secure Connections on - Not supported 2 - done

Set Secure Connections Only on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections Only on - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections Only on - Success 1 - setup complete Set Secure Connections Only on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Secure Connections (0x002d)
Test condition added, total 2
Set Secure Connections (0x002d): Success (0x00) Test condition complete, 1 left
New settings 0x000008c0 received
Unregistering new settings notification
Test condition complete, 0 left
Set Secure Connections Only on - Success 1 - test passed Set Secure Connections Only on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set Secure Connections Only on - Success 1 - teardown complete Set Secure Connections Only on - Success 1 - done

Set Secure Connections Only on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Secure Connections Only on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Secure Connections Only on - Success 2 - setup complete Set Secure Connections Only on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Secure Connections (0x002d)
Test condition added, total 3
HCI Command 0x0c7a length 1
Test condition complete, 2 left
Set Secure Connections (0x002d): Success (0x00) Test condition complete, 1 left
New settings 0x000008c1 received
Unregistering new settings notification
Test condition complete, 0 left
Set Secure Connections Only on - Success 2 - test passed Set Secure Connections Only on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set Secure Connections Only on - Success 2 - teardown complete Set Secure Connections Only on - Success 2 - done

Set High Speed on - Success - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Expected bit 8 not supported
Expected supported settings: 0x0001beff != 0x0001bfff
Set High Speed on - Success - pre setup failed
Index Removed callback

    Index: 0x0000

Set High Speed on - Success - done

Set High Speed on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Expected bit 8 not supported
Expected supported settings: 0x0001beff != 0x0001bfff
Set High Speed on - Invalid parameters 1 - pre setup failed
Index Removed callback

    Index: 0x0000

Set High Speed on - Invalid parameters 1 - done

Set High Speed on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Expected bit 8 not supported
Expected supported settings: 0x0001beff != 0x0001bfff
Set High Speed on - Invalid parameters 2 - pre setup failed
Index Removed callback

    Index: 0x0000

Set High Speed on - Invalid parameters 2 - done

Set High Speed on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Expected bit 8 not supported
Expected supported settings: 0x0001beff != 0x0001bfff
Set High Speed on - Invalid parameters 3 - pre setup failed
Index Removed callback

    Index: 0x0000

Set High Speed on - Invalid parameters 3 - done

Set High Speed on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Expected bit 8 not supported
Expected supported settings: 0x0001beff != 0x0001bfff
Set High Speed on - Invalid index - pre setup failed
Index Removed callback

    Index: 0x0000

Set High Speed on - Invalid index - done

Set Low Energy on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Success 1 - setup
Set Low Energy on - Success 1 - setup complete
Set Low Energy on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Low Energy (0x000d)
Test condition added, total 2
Set Low Energy (0x000d): Success (0x00)
Test condition complete, 1 left
New settings 0x00000280 received
Unregistering new settings notification
Test condition complete, 0 left
Set Low Energy on - Success 1 - test passed
Set Low Energy on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set Low Energy on - Success 1 - teardown complete
Set Low Energy on - Success 1 - done

Set Low Energy on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Low Energy on - Success 2 - setup complete
Set Low Energy on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Low Energy (0x000d)
Test condition added, total 3
HCI Command 0x0c6d length 2
Test condition complete, 2 left
Set Low Energy (0x000d): Success (0x00)
Test condition complete, 1 left
New settings 0x00000281 received
Unregistering new settings notification
Test condition complete, 0 left
Set Low Energy on - Success 2 - test passed
HCI Command 0x2008 length 32
Set Low Energy on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set Low Energy on - Success 2 - teardown complete
Set Low Energy on - Success 2 - done

Set Low Energy on - Success 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Success 3 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Low Energy on - Success 3 - setup complete
Set Low Energy on - Success 3 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Powered (0x0005)
Test condition added, total 3
HCI Command 0x0c6d length 2
Test condition complete, 2 left
HCI Command 0x2008 length 32
HCI Command 0x0c13 length 248
Set Powered (0x0005): Success (0x00)
Test condition complete, 1 left
New settings 0x00000281 received
Unregistering new settings notification
Test condition complete, 0 left
Set Low Energy on - Success 3 - test passed
Set Low Energy on - Success 3 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set Low Energy on - Success 3 - teardown complete
Set Low Energy on - Success 3 - done

Set Low Energy on - Invalid parameters 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Invalid parameters 1 - setup Set Low Energy on - Invalid parameters 1 - setup complete Set Low Energy on - Invalid parameters 1 - run
Sending Set Low Energy (0x000d)
Test condition added, total 1
Set Low Energy (0x000d): Invalid Parameters (0x0d) Test condition complete, 0 left
Set Low Energy on - Invalid parameters 1 - test passed Set Low Energy on - Invalid parameters 1 - teardown
Index Removed callback

    Index: 0x0000

Set Low Energy on - Invalid parameters 1 - teardown complete Set Low Energy on - Invalid parameters 1 - done

Set Low Energy on - Invalid parameters 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Invalid parameters 2 - setup Set Low Energy on - Invalid parameters 2 - setup complete Set Low Energy on - Invalid parameters 2 - run
Sending Set Low Energy (0x000d)
Test condition added, total 1
Set Low Energy (0x000d): Invalid Parameters (0x0d) Test condition complete, 0 left
Set Low Energy on - Invalid parameters 2 - test passed Set Low Energy on - Invalid parameters 2 - teardown
Index Removed callback

    Index: 0x0000

Set Low Energy on - Invalid parameters 2 - teardown complete Set Low Energy on - Invalid parameters 2 - done

Set Low Energy on - Invalid parameters 3 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Invalid parameters 3 - setup Set Low Energy on - Invalid parameters 3 - setup complete Set Low Energy on - Invalid parameters 3 - run
Sending Set Low Energy (0x000d)
Test condition added, total 1
Set Low Energy (0x000d): Invalid Parameters (0x0d) Test condition complete, 0 left
Set Low Energy on - Invalid parameters 3 - test passed Set Low Energy on - Invalid parameters 3 - teardown
Index Removed callback

    Index: 0x0000

Set Low Energy on - Invalid parameters 3 - teardown complete Set Low Energy on - Invalid parameters 3 - done

Set Low Energy on - Invalid index - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Low Energy on - Invalid index - setup Set Low Energy on - Invalid index - setup complete Set Low Energy on - Invalid index - run
Sending Set Low Energy (0x000d)
Test condition added, total 1
Set Low Energy (0x000d): Invalid Index (0x11) Test condition complete, 0 left
Set Low Energy on - Invalid index - test passed Set Low Energy on - Invalid index - teardown
Index Removed callback

    Index: 0x0000

Set Low Energy on - Invalid index - teardown complete Set Low Energy on - Invalid index - done

Set Advertising on - Success 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Advertising on - Success 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Advertising on - Success 1 - setup complete
Set Advertising on - Success 1 - run
Registering new settings notification
Test condition added, total 1
Sending Set Advertising (0x0029)
Test condition added, total 2
Set Advertising (0x0029): Success (0x00)
Test condition complete, 1 left
New settings 0x00000680 received
Unregistering new settings notification
Test condition complete, 0 left
Set Advertising on - Success 1 - test passed
Set Advertising on - Success 1 - teardown
Index Removed callback

    Index: 0x0000

Set Advertising on - Success 1 - teardown complete Set Advertising on - Success 1 - done

Set Advertising on - Success 2 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Advertising on - Success 2 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Advertising on - Success 2 - setup complete
Set Advertising on - Success 2 - run
Registering new settings notification
Test condition added, total 1
Registering HCI command callback
Test condition added, total 2
Sending Set Advertising (0x0029)
Test condition added, total 3
HCI Command 0x2005 length 6
HCI Command 0x2006 length 15
HCI Command 0x200a length 1
Test condition complete, 2 left
Set Advertising (0x0029): Success (0x00)
Test condition complete, 1 left
New settings 0x00000681 received
Unregistering new settings notification
Test condition complete, 0 left
Set Advertising on - Success 2 - test passed
Set Advertising on - Success 2 - teardown
New settings event received
Index Removed callback

    Index: 0x0000

Set Advertising on - Success 2 - teardown complete Set Advertising on - Success 2 - done

Set Advertising on - Rejected 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Advertising on - Rejected 1 - setup
Initial settings completed
Test setup condition added, total 1
Client set connectable: Success (0x00)
Test setup condition complete, 0 left
Set Advertising on - Rejected 1 - setup complete
Set Advertising on - Rejected 1 - run
Sending Set Advertising (0x0029)
Test condition added, total 1
Set Advertising (0x0029): Rejected (0x0b)
Test condition complete, 0 left
Set Advertising on - Rejected 1 - test passed
Set Advertising on - Rejected 1 - teardown
Index Removed callback

    Index: 0x0000

Set Advertising on - Rejected 1 - teardown complete Set Advertising on - Rejected 1 - done

Set Advertising on - Appearance 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

Set Advertising on - Appearance 1 - setup
Initial settings completed
Setup sending Set Appearance (0x0043) Test setup condition added, total 1
Test setup condition complete, 0 left
Set Advertising on - Appearance 1 - setup complete Set Advertising on - Appearance 1 - run
Registering HCI command callback
Test condition added, total 1
Sending Set Advertising (0x0029)
Test condition added, total 2
HCI Command 0x2009 length 32
Test condition complete, 1 left
HCI Command 0x2005 length 6
HCI Command 0x2006 length 15
HCI Command 0x200a length 1
Set Advertising (0x0029): Success (0x00) Test condition complete, 0 left
Set Advertising on - Appearance 1 - test passed Set Advertising on - Appearance 1 - teardown
Index Removed callback

    Index: 0x0000

Set Advertising on - Appearance 1 - teardown complete Set Advertising on - Appearance 1 - done

Set Advertising on - Local name 1 - init
Read Version callback

    Status: Success (0x00)
    Version 1.21
  Read Commands callback
    Status: Success (0x00)
  Read Index List callback
    Status: Success (0x00)
  Index Added callback
    Index: 0x0000
  Read Info callback
    Status: Success (0x00)
    Address: 00:AA:01:00:00:00
    Version: 0x09
    Manufacturer: 0x003f
    Supported settings: 0x0001beff
    Current settings: 0x00000080
    Class: 0x000000
    Name: 
    Short name: 

15,090 lines not shown · raw message

Part of this message is not shown here. View the raw message.

#20 lore raw
In reply to Kiran K

Hi Kiran,

Quoted 111 lines · Kiran K

Move reading of supported local codecs into a separate init function, query codecs capabilities and cache the data

---
* changes in v10:
- define Kconfig to control offload feature at build time
- fix review comments

* changes in v9:
- use shortname vnd instead of ven

* changes in v8:
- add comments
- split __u8 codec_id[5] into {__u8 id; __le16 cid, vid }
- address review comment related codec caps structure

* changes in v7:
- keep codec enumeration call in hci_init instead of having a separate function
- Remove unused bitmasks defined for LE transports

* changes in v6:
- fix compiler warning reported for ARCH=arc

* changes in v5:
- fix review comments
- move code used to read standard/vendor codecs caps into single function

* changes in v4:
- convert reading of codecs and codecs caps calls from async to sync

* changes in v3
move codec enumeration into a new init function

* changes in v2
add skb length check before accessing data

 include/net/bluetooth/hci.h      |  41 ++++++
 include/net/bluetooth/hci_core.h |  23 ++++
 net/bluetooth/Kconfig            |  11 ++
 net/bluetooth/hci_core.c         | 207 ++++++++++++++++++++++++++++++-
 4 files changed, 278 insertions(+), 4 deletions(-)
include/net/bluetooth/hci.h +41 -0
index b80415011dcd..f76849c8eafd 100644
@@ -1307,6 +1307,28 @@ struct hci_rp_read_data_block_size {
 } __packed;
 
 #define HCI_OP_READ_LOCAL_CODECS       0x100b
+struct hci_std_codecs {
+       __u8    num;
+       __u8    codec[];
+} __packed;
+
+struct hci_vnd_codec {
+       /* company id */
+       __le16  cid;
+       /* vendor codec id */
+       __le16  vid;
+} __packed;
+
+struct hci_vnd_codecs {
+       __u8    num;
+       struct hci_vnd_codec codec[];
+} __packed;
+
+struct hci_rp_read_local_supported_codecs {
+       __u8    status;
+       struct hci_std_codecs std_codecs;
+       struct hci_vnd_codecs vnd_codecs;
+} __packed;
 
 #define HCI_OP_READ_LOCAL_PAIRING_OPTS 0x100c
 struct hci_rp_read_local_pairing_opts {
@@ -1315,6 +1337,25 @@ struct hci_rp_read_local_pairing_opts {
        __u8     max_key_size;
 } __packed;
 
+#define HCI_OP_READ_LOCAL_CODEC_CAPS   0x100e
+struct hci_op_read_local_codec_caps {
+       __u8    id;
+       __le16  cid;
+       __le16  vid;
+       __u8    transport;
+       __u8    direction;
+} __packed;
+
+struct hci_codec_caps {
+       __u8    len;
+       __u8    data[];
+} __packed;
+
+struct hci_rp_read_local_codec_caps {
+       __u8    status;
+       __u8    num_caps;
+} __packed;
+
 #define HCI_OP_READ_PAGE_SCAN_ACTIVITY 0x0c1b
 struct hci_rp_read_page_scan_activity {
        __u8     status;
include/net/bluetooth/hci_core.h +0 -0
index a53e94459ecd..7b8d603358b9 100644

include/net/bluetooth/hci_core.h struct bdaddr_list { · line 139

Quoted 9 lines
include/net/bluetooth/hci_core.h +6 -0
@@ -131,6 +131,19 @@ struct bdaddr_list {
        u8 bdaddr_type;
 };
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+struct codec_list {
+       struct list_head list;
+       u8      id;
+       __le16  cid;
+       __le16  vid;

I wonder why you are not storing these fields in host byte order? Looks odd since everything else is using host order.

Quoted 11 lines
include/net/bluetooth/hci_core.h +7 -0
+       u8      transport;
+       u8      num_caps;
+       u32     len;
+       struct hci_codec_caps caps[];
+};
+#endif
+
 struct bdaddr_list_with_irk {
        struct list_head list;
        bdaddr_t bdaddr;

include/net/bluetooth/hci_core.h struct hci_dev { · line 553

Quoted 6 lines
include/net/bluetooth/hci_core.h +3 -0
@@ -535,6 +548,9 @@ struct hci_dev {
        struct list_head        pend_le_conns;
        struct list_head        pend_le_reports;
        struct list_head        blocked_keys;
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       struct list_head        local_codecs;
+#endif

I wonder if this is preferable over just leaving the local_codecs empty as we would probably just save a couple of bytes here but when using preprocessor #if that means we can no longer use IS_ENABLED directly inside the C statements.

include/net/bluetooth/hci_core.h void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr, · line 1872

Quoted 12 lines
include/net/bluetooth/hci_core.h +5 -0
        struct hci_dev_stats    stat;
 
@@ -1849,4 +1865,11 @@ void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
 #define SCO_AIRMODE_CVSD       0x0000
 #define SCO_AIRMODE_TRANSP     0x0003
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+#define LOCAL_CODEC_ACL_MASK   BIT(0)
+#define LOCAL_CODEC_SCO_MASK   BIT(1)
+
+#define TRANSPORT_TYPE_MAX     0x04

Ditto, Id just have these defines all the time.

Quoted 10 lines
include/net/bluetooth/hci_core.h +2 -0
+#endif
+
 #endif /* __HCI_CORE_H */
net/bluetooth/Kconfig +0 -0
index e0ab4cd7afc3..1069623f36c4 100644
@@ -92,6 +92,17 @@ config BT_LEDS
          This option selects a few LED triggers for different
          Bluetooth events.

net/bluetooth/Kconfig config BT_LEDS · line 103

Quoted 10 lines
net/bluetooth/Kconfig +9 -0
 
+config BT_OFFLOAD_CODECS
+       bool "Enable offload codecs"
+       depends on BT && BT_BREDR
+       default n
+       help
+         This option enables offload codecs if controller supports.
+         When this option is enabled, user space audio modules can
+         query offload codecs and can set the codec to be used for
+         specific use case.

I would have named this BT_HCI_CODECS.

Quoted 203 lines
net/bluetooth/Kconfig +1 -0
+
 config BT_MSFTEXT
        bool "Enable Microsoft extensions"
        depends on BT
net/bluetooth/hci_core.c +180 -4
index 2560ed2f144d..2657d84e8240 100644
@@ -838,10 +838,6 @@ static int hci_init4_req(struct hci_request *req, unsigned long opt)
        if (hdev->commands[22] & 0x04)
                hci_set_event_mask_page_2(req);
 
-       /* Read local codec list if the HCI command is supported */
-       if (hdev->commands[29] & 0x20)
-               hci_req_add(req, HCI_OP_READ_LOCAL_CODECS, 0, NULL);
-
        /* Read local pairing options if the HCI command is supported */
        if (hdev->commands[41] & 0x08)
                hci_req_add(req, HCI_OP_READ_LOCAL_PAIRING_OPTS, 0, NULL);
@@ -907,6 +903,197 @@ static int hci_init4_req(struct hci_request *req, unsigned long opt)
        return 0;
 }
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+static int hci_codec_list_add(struct list_head *list,
+                             struct hci_op_read_local_codec_caps *sent,
+                             struct hci_rp_read_local_codec_caps *rp,
+                             void *caps,
+                             __u32 len)
+{
+       struct codec_list *entry;
+
+       entry = kzalloc(sizeof(*entry) + len, GFP_KERNEL);
+       if (!entry)
+               return -ENOMEM;
+
+       entry->id = sent->id;
+       if (sent->id == 0xFF) {
+               entry->cid = __le16_to_cpu(sent->cid);
+               entry->vid = __le16_to_cpu(sent->vid);
+       }
+       entry->transport = sent->transport;
+       entry->len = len;
+       entry->num_caps = rp->num_caps;
+       if (rp->num_caps)
+               memcpy(entry->caps, caps, len);
+       list_add(&entry->list, list);
+
+       return 0;
+}
+
+static void hci_codec_list_clear(struct list_head *codec_list)
+{
+       struct codec_list *c, *n;
+
+       list_for_each_entry_safe(c, n, codec_list, list) {
+               list_del(&c->list);
+               kfree(c);
+       }
+}
+
+static void hci_read_codec_capabilities(struct hci_dev *hdev, void *codec_id,
+                                       __u8 transport, bool is_vnd_codec)
+{
+       struct hci_op_read_local_codec_caps cmd;
+       __u8 i;
+
+       memset(&cmd, 0, sizeof(cmd));
+
+       if (is_vnd_codec) {
+               struct hci_vnd_codec *vnd_codec;
+
+               vnd_codec = codec_id;
+               cmd.id = 0xFF;
+               cmd.cid = vnd_codec->cid;
+               cmd.vid = vnd_codec->vid;
+       } else {
+               cmd.id = *(__u8 *)codec_id;
+       }
+
+       cmd.direction = 0x00;
+
+       for (i = 0; i < TRANSPORT_TYPE_MAX; i++) {
+               if (transport & BIT(i)) {
+                       struct hci_rp_read_local_codec_caps *rp;
+                       struct hci_codec_caps *caps;
+                       struct sk_buff *skb;
+                       __u8 j;
+                       __u32 len;
+
+                       cmd.transport = i;
+                       skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_CODEC_CAPS,
+                                            sizeof(cmd), &cmd,
+                                            HCI_CMD_TIMEOUT);
+                       if (IS_ERR(skb)) {
+                               bt_dev_err(hdev, "Failed to read codec capabilities (%ld)",
+                                          PTR_ERR(skb));
+                               continue;
+                       }
+
+                       if (skb->len < sizeof(*rp))
+                               goto error;
+
+                       rp = (void *)skb->data;
+
+                       if (rp->status)
+                               goto error;
+
+                       if (!rp->num_caps) {
+                               len = 0;
+                               /* this codec doesn't have capabilities */
+                               goto skip_caps_parse;
+                       }
+
+                       skb_pull(skb, sizeof(*rp));
+
+                       for (j = 0, len = 0; j < rp->num_caps; j++) {
+                               caps = (void *)skb->data;
+                               if (skb->len < sizeof(*caps))
+                                       goto error;
+                               if (skb->len < caps->len)
+                                       goto error;
+                               len += sizeof(caps->len) + caps->len;
+                               skb_pull(skb,  sizeof(caps->len) + caps->len);
+                       }
+
+skip_caps_parse:
+                       hci_dev_lock(hdev);
+                       hci_codec_list_add(&hdev->local_codecs, &cmd, rp,
+                                          (__u8 *)rp + sizeof(*rp), len);
+                       hci_dev_unlock(hdev);
+error:
+                       kfree_skb(skb);
+               }
+       }
+}
+
+static void hci_codec_list_parse(struct hci_dev *hdev, __u8 num_codecs,
+                                void *codec_list, bool is_vnd_codec)
+{
+       __u8 i;
+
+       for (i = 0; i < num_codecs; i++) {
+               if (!is_vnd_codec) {
+                       struct hci_std_codecs *codecs = codec_list;
+
+                       hci_read_codec_capabilities(hdev, &codecs->codec[i],
+                                                   LOCAL_CODEC_ACL_MASK,
+                                                   is_vnd_codec);
+               } else {
+                       struct hci_vnd_codecs *codecs = codec_list;
+
+                       hci_read_codec_capabilities(hdev, &codecs->codec[i],
+                                                   LOCAL_CODEC_ACL_MASK,
+                                                   is_vnd_codec);
+               }
+       }
+}
+
+static void hci_read_supported_codecs(struct hci_dev *hdev)
+{
+       struct sk_buff *skb;
+       struct hci_rp_read_local_supported_codecs *rp;
+       struct hci_std_codecs *std_codecs;
+       struct hci_vnd_codecs *vnd_codecs;
+
+       skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_CODECS, 0, NULL,
+                            HCI_CMD_TIMEOUT);
+
+       if (IS_ERR(skb)) {
+               bt_dev_err(hdev, "Failed to read local supported codecs (%ld)",
+                          PTR_ERR(skb));
+               return;
+       }
+
+       if (skb->len < sizeof(*rp))
+               goto error;
+
+       rp = (void *)skb->data;
+
+       if (rp->status)
+               goto error;
+
+       skb_pull(skb, sizeof(rp->status));
+
+       std_codecs = (void *)skb->data;
+
+       /* validate codecs length before accessing */
+       if (skb->len < flex_array_size(std_codecs, codec, std_codecs->num)
+           + sizeof(std_codecs->num))
+               goto error;
+
+       /* enumerate codec capabilities of standard codecs */
+       hci_codec_list_parse(hdev, std_codecs->num, std_codecs, false);
+
+       skb_pull(skb, flex_array_size(std_codecs, codec, std_codecs->num)
+                + sizeof(std_codecs->num));
+
+       vnd_codecs = (void *)skb->data;
+
+       /* validate vendor codecs length before accessing */
+       if (skb->len <
+           flex_array_size(vnd_codecs, codec, vnd_codecs->num)

net/bluetooth/hci_core.c static int hci_init4_req(struct hci_request *req, unsigned long opt) · line 1095

Quoted 10 lines
net/bluetooth/hci_core.c +10 -0
+           + sizeof(vnd_codecs->num))
+               goto error;
+
+       /* enumerate vendor codec capabilities */
+       hci_codec_list_parse(hdev, vnd_codecs->num, vnd_codecs, true);
+
+error:
+       kfree_skb(skb);
+}
+#endif

We might as well move these to hci_codec.c so we just enable/disable via Makefile, hci_core.c is getting a little too convoluted handling so many things.

Quoted 39 lines
net/bluetooth/hci_core.c +12 -1
 static int __hci_init(struct hci_dev *hdev)
 {
        int err;
@@ -937,6 +1124,12 @@ static int __hci_init(struct hci_dev *hdev)
        if (err < 0)
                return err;
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       /* Read local codec list if the HCI command is supported */
+       if (hdev->commands[29] & 0x20)
+               hci_read_supported_codecs(hdev);
+#endif
+
        /* This function is only called when the controller is actually in
         * configured state. When the controller is marked as unconfigured,
         * this initialization procedure is not run.
@@ -1841,6 +2034,9 @@ int hci_dev_do_close(struct hci_dev *hdev)
        memset(hdev->eir, 0, sizeof(hdev->eir));
        memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
        bacpy(&hdev->random_addr, BDADDR_ANY);
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       hci_codec_list_clear(&hdev->local_codecs);
+#endif
 
        hci_req_sync_unlock(hdev);
 
@@ -3843,6 +4039,9 @@ struct hci_dev *hci_alloc_dev(void)
        INIT_LIST_HEAD(&hdev->adv_instances);
        INIT_LIST_HEAD(&hdev->blocked_keys);
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       INIT_LIST_HEAD(&hdev->local_codecs);
+#endif
        INIT_WORK(&hdev->rx_work, hci_rx_work);
        INIT_WORK(&hdev->cmd_work, hci_cmd_work);
        INIT_WORK(&hdev->tx_work, hci_tx_work);
--

2.17.1

Signature · 1 line
Luiz Augusto von Dentz
author
#21 lore raw

Hi Luiz,

Quoted 12 lines
Quoted 12 lines

#define HCI_OP_READ_PAGE_SCAN_ACTIVITY 0x0c1b struct

hci_rp_read_page_scan_activity {
        __u8     status;
include/net/bluetooth/hci_core.h +0 -0
index a53e94459ecd..7b8d603358b9 100644
@@ -131,6 +131,19 @@ struct bdaddr_list {
        u8 bdaddr_type;
 };
 
Quoted 9 lines

include/net/bluetooth/hci_core.h struct bdaddr_list { · line 139

Quoted 6 lines
include/net/bluetooth/hci_core.h +6 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+struct codec_list {
+       struct list_head list;
+       u8      id;
+       __le16  cid;
+       __le16  vid;

I wonder why you are not storing these fields in host byte order? Looks odd since everything else is using host order.

Ack. I will change this to host order.

Quoted 15 lines
Quoted 15 lines
include/net/bluetooth/hci_core.h +7 -0
+       u8      transport;
+       u8      num_caps;
+       u32     len;
+       struct hci_codec_caps caps[];
+};
+#endif
+
 struct bdaddr_list_with_irk {
        struct list_head list;
        bdaddr_t bdaddr;
@@ -535,6 +548,9 @@ struct hci_dev {
        struct list_head        pend_le_conns;
        struct list_head        pend_le_reports;
        struct list_head        blocked_keys;
Quoted 8 lines

include/net/bluetooth/hci_core.h struct hci_dev { · line 553

Quoted 3 lines
include/net/bluetooth/hci_core.h +3 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       struct list_head        local_codecs;
+#endif

I wonder if this is preferable over just leaving the local_codecs empty as we would probably just save a couple of bytes here but when using preprocessor #if that means we can no longer use IS_ENABLED directly inside the C statements.

Ack.

Quoted 9 lines

include/net/bluetooth/hci_core.h void hci_copy_identity_address(struct hci_dev

Quoted 5 lines
include/net/bluetooth/hci_core.h +0 -0
        struct hci_dev_stats    stat;
 
@@ -1849,4 +1865,11 @@ void hci_copy_identity_address(struct hci_dev

*hdev, bdaddr_t *bdaddr,

Quoted 3 lines
include/net/bluetooth/hci_core.h +0 -0
 #define SCO_AIRMODE_CVSD       0x0000
 #define SCO_AIRMODE_TRANSP     0x0003
 
Quoted 7 lines

include/net/bluetooth/hci_core.h void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr, · line 1872

Quoted 5 lines
include/net/bluetooth/hci_core.h +5 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+#define LOCAL_CODEC_ACL_MASK   BIT(0)
+#define LOCAL_CODEC_SCO_MASK   BIT(1)
+
+#define TRANSPORT_TYPE_MAX     0x04

Ditto, Id just have these defines all the time.

Ack

Quoted 12 lines
Quoted 12 lines
include/net/bluetooth/hci_core.h +2 -0
+#endif
+
 #endif /* __HCI_CORE_H */
net/bluetooth/Kconfig index renamed from net/bluetooth/Kconfig +0 -0

e0ab4cd7afc3..1069623f36c4 100644

net/bluetooth/Kconfig +0 -0
@@ -92,6 +92,17 @@ config BT_LEDS
          This option selects a few LED triggers for different
          Bluetooth events.
 
Quoted 11 lines

net/bluetooth/Kconfig config BT_LEDS · line 103

Quoted 9 lines
net/bluetooth/Kconfig +9 -0
+config BT_OFFLOAD_CODECS
+       bool "Enable offload codecs"
+       depends on BT && BT_BREDR
+       default n
+       help
+         This option enables offload codecs if controller supports.
+         When this option is enabled, user space audio modules can
+         query offload codecs and can set the codec to be used for
+         specific use case.

I would have named this BT_HCI_CODECS.

I believe in 10/10 patch, Marcel and you agreed to not to have Kconfig altogether.

Quoted 249 lines

net/bluetooth/hci_core.c static int hci_init4_req(struct hci_request *req,

Quoted 10 lines
net/bluetooth/Kconfig +1 -0
+
 config BT_MSFTEXT
        bool "Enable Microsoft extensions"
        depends on BT
net/bluetooth/hci_core.c index renamed from net/bluetooth/hci_core.c +0 -0

2560ed2f144d..2657d84e8240 100644

net/bluetooth/hci_core.c +0 -0
@@ -838,10 +838,6 @@ static int hci_init4_req(struct hci_request *req,

unsigned long opt)

Quoted 11 lines
net/bluetooth/hci_core.c +0 -4
        if (hdev->commands[22] & 0x04)
                hci_set_event_mask_page_2(req);
 
-       /* Read local codec list if the HCI command is supported */
-       if (hdev->commands[29] & 0x20)
-               hci_req_add(req, HCI_OP_READ_LOCAL_CODECS, 0, NULL);
-
        /* Read local pairing options if the HCI command is supported */
        if (hdev->commands[41] & 0x08)
                hci_req_add(req, HCI_OP_READ_LOCAL_PAIRING_OPTS, 0,

NULL); @@ -907,6 +903,197 @@ static int hci_init4_req(struct hci_request

*req, unsigned long opt)

Quoted 30 lines
        return 0;

}

net/bluetooth/hci_core.c +27 -0
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+static int hci_codec_list_add(struct list_head *list,
+                             struct hci_op_read_local_codec_caps *sent,
+                             struct hci_rp_read_local_codec_caps *rp,
+                             void *caps,
+                             __u32 len) {
+       struct codec_list *entry;
+
+       entry = kzalloc(sizeof(*entry) + len, GFP_KERNEL);
+       if (!entry)
+               return -ENOMEM;
+
+       entry->id = sent->id;
+       if (sent->id == 0xFF) {
+               entry->cid = __le16_to_cpu(sent->cid);
+               entry->vid = __le16_to_cpu(sent->vid);
+       }
+       entry->transport = sent->transport;
+       entry->len = len;
+       entry->num_caps = rp->num_caps;
+       if (rp->num_caps)
+               memcpy(entry->caps, caps, len);
+       list_add(&entry->list, list);
+
+       return 0;
+}
+

net/bluetooth/hci_core.c static int hci_init4_req(struct hci_request *req, unsigned long opt)

Quoted 10 lines
net/bluetooth/hci_core.c +10 -0
+static void hci_codec_list_clear(struct list_head *codec_list) {
+       struct codec_list *c, *n;
+
+       list_for_each_entry_safe(c, n, codec_list, list) {
+               list_del(&c->list);
+               kfree(c);
+       }
+}
+
+static void hci_read_codec_capabilities(struct hci_dev *hdev, void

*codec_id,

Quoted 20 lines
net/bluetooth/hci_core.c +20 -0
+                                       __u8 transport, bool
+is_vnd_codec) {
+       struct hci_op_read_local_codec_caps cmd;
+       __u8 i;
+
+       memset(&cmd, 0, sizeof(cmd));
+
+       if (is_vnd_codec) {
+               struct hci_vnd_codec *vnd_codec;
+
+               vnd_codec = codec_id;
+               cmd.id = 0xFF;
+               cmd.cid = vnd_codec->cid;
+               cmd.vid = vnd_codec->vid;
+       } else {
+               cmd.id = *(__u8 *)codec_id;
+       }
+
+       cmd.direction = 0x00;
+

net/bluetooth/hci_core.c static int hci_init4_req(struct hci_request *req, unsigned long opt)

Quoted 10 lines
net/bluetooth/hci_core.c +10 -0
+       for (i = 0; i < TRANSPORT_TYPE_MAX; i++) {
+               if (transport & BIT(i)) {
+                       struct hci_rp_read_local_codec_caps *rp;
+                       struct hci_codec_caps *caps;
+                       struct sk_buff *skb;
+                       __u8 j;
+                       __u32 len;
+
+                       cmd.transport = i;
+                       skb = __hci_cmd_sync(hdev,

HCI_OP_READ_LOCAL_CODEC_CAPS,

net/bluetooth/hci_core.c static int hci_init4_req(struct hci_request *req, unsigned long opt)

Quoted 4 lines
net/bluetooth/hci_core.c +4 -0
+                                            sizeof(cmd), &cmd,
+                                            HCI_CMD_TIMEOUT);
+                       if (IS_ERR(skb)) {
+                               bt_dev_err(hdev, "Failed to read codec capabilities

(%ld)",

Quoted 107 lines
net/bluetooth/hci_core.c +107 -0
+                                          PTR_ERR(skb));
+                               continue;
+                       }
+
+                       if (skb->len < sizeof(*rp))
+                               goto error;
+
+                       rp = (void *)skb->data;
+
+                       if (rp->status)
+                               goto error;
+
+                       if (!rp->num_caps) {
+                               len = 0;
+                               /* this codec doesn't have capabilities */
+                               goto skip_caps_parse;
+                       }
+
+                       skb_pull(skb, sizeof(*rp));
+
+                       for (j = 0, len = 0; j < rp->num_caps; j++) {
+                               caps = (void *)skb->data;
+                               if (skb->len < sizeof(*caps))
+                                       goto error;
+                               if (skb->len < caps->len)
+                                       goto error;
+                               len += sizeof(caps->len) + caps->len;
+                               skb_pull(skb,  sizeof(caps->len) + caps->len);
+                       }
+
+skip_caps_parse:
+                       hci_dev_lock(hdev);
+                       hci_codec_list_add(&hdev->local_codecs, &cmd, rp,
+                                          (__u8 *)rp + sizeof(*rp), len);
+                       hci_dev_unlock(hdev);
+error:
+                       kfree_skb(skb);
+               }
+       }
+}
+
+static void hci_codec_list_parse(struct hci_dev *hdev, __u8 num_codecs,
+                                void *codec_list, bool is_vnd_codec)
+{
+       __u8 i;
+
+       for (i = 0; i < num_codecs; i++) {
+               if (!is_vnd_codec) {
+                       struct hci_std_codecs *codecs = codec_list;
+
+                       hci_read_codec_capabilities(hdev, &codecs->codec[i],
+                                                   LOCAL_CODEC_ACL_MASK,
+                                                   is_vnd_codec);
+               } else {
+                       struct hci_vnd_codecs *codecs = codec_list;
+
+                       hci_read_codec_capabilities(hdev, &codecs->codec[i],
+                                                   LOCAL_CODEC_ACL_MASK,
+                                                   is_vnd_codec);
+               }
+       }
+}
+
+static void hci_read_supported_codecs(struct hci_dev *hdev) {
+       struct sk_buff *skb;
+       struct hci_rp_read_local_supported_codecs *rp;
+       struct hci_std_codecs *std_codecs;
+       struct hci_vnd_codecs *vnd_codecs;
+
+       skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_CODECS, 0, NULL,
+                            HCI_CMD_TIMEOUT);
+
+       if (IS_ERR(skb)) {
+               bt_dev_err(hdev, "Failed to read local supported codecs (%ld)",
+                          PTR_ERR(skb));
+               return;
+       }
+
+       if (skb->len < sizeof(*rp))
+               goto error;
+
+       rp = (void *)skb->data;
+
+       if (rp->status)
+               goto error;
+
+       skb_pull(skb, sizeof(rp->status));
+
+       std_codecs = (void *)skb->data;
+
+       /* validate codecs length before accessing */
+       if (skb->len < flex_array_size(std_codecs, codec, std_codecs->num)
+           + sizeof(std_codecs->num))
+               goto error;
+
+       /* enumerate codec capabilities of standard codecs */
+       hci_codec_list_parse(hdev, std_codecs->num, std_codecs,
+ false);
+
+       skb_pull(skb, flex_array_size(std_codecs, codec, std_codecs->num)
+                + sizeof(std_codecs->num));
+
+       vnd_codecs = (void *)skb->data;
+
+       /* validate vendor codecs length before accessing */
+       if (skb->len <
+           flex_array_size(vnd_codecs, codec, vnd_codecs->num)

net/bluetooth/hci_core.c static int hci_init4_req(struct hci_request *req, unsigned long opt) · line 1095

Quoted 10 lines
net/bluetooth/hci_core.c +10 -0
+           + sizeof(vnd_codecs->num))
+               goto error;
+
+       /* enumerate vendor codec capabilities */
+       hci_codec_list_parse(hdev, vnd_codecs->num, vnd_codecs, true);
+
+error:
+       kfree_skb(skb);
+}
+#endif

We might as well move these to hci_codec.c so we just enable/disable via Makefile, hci_core.c is getting a little too convoluted handling so many things.

Quoted 28 lines
 static int __hci_init(struct hci_dev *hdev)  {
        int err;
net/bluetooth/hci_core.c +8 -0
@@ -937,6 +1124,12 @@ static int __hci_init(struct hci_dev *hdev)
        if (err < 0)
                return err;
 
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       /* Read local codec list if the HCI command is supported */
+       if (hdev->commands[29] & 0x20)
+               hci_read_supported_codecs(hdev); #endif
+
        /* This function is only called when the controller is actually in
         * configured state. When the controller is marked as unconfigured,
         * this initialization procedure is not run.
@@ -1841,6 +2034,9 @@ int hci_dev_do_close(struct hci_dev *hdev)
        memset(hdev->eir, 0, sizeof(hdev->eir));
        memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
        bacpy(&hdev->random_addr, BDADDR_ANY);
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       hci_codec_list_clear(&hdev->local_codecs);
+#endif
 
        hci_req_sync_unlock(hdev);
 
@@ -3843,6 +4039,9 @@ struct hci_dev *hci_alloc_dev(void)
        INIT_LIST_HEAD(&hdev->adv_instances);
        INIT_LIST_HEAD(&hdev->blocked_keys);
 
Quoted 13 lines
Quoted 9 lines
net/bluetooth/hci_core.c +3 -1
+#if IS_ENABLED(CONFIG_BT_OFFLOAD_CODECS)
+       INIT_LIST_HEAD(&hdev->local_codecs);
+#endif
        INIT_WORK(&hdev->rx_work, hci_rx_work);
        INIT_WORK(&hdev->cmd_work, hci_cmd_work);
        INIT_WORK(&hdev->tx_work, hci_tx_work);
--

2.17.1

--
Luiz Augusto von Dentz

Thanks,
Kiran