All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID
@ 2022-04-26 23:03 Luiz Augusto von Dentz
  2022-04-26 23:03 ` [PATCH BlueZ 2/4] btmon: Add support for decoding Broadcast Audio Annoucements Luiz Augusto von Dentz
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-04-26 23:03 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds proper decoding for Service Data UUID:

        Service Data: Apple, Inc. (0xfd6f)
          Data: e6b07e19815e902100b8b2f4a55255fd18f0c6be
---
 monitor/packet.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/monitor/packet.c b/monitor/packet.c
index 6ef2fba3b..471b0dd4d 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -3301,6 +3301,14 @@ static void print_uuid128_list(const char *label, const void *data,
 	}
 }
 
+static void print_service_data(const uint8_t *data, uint8_t data_len)
+{
+	uint16_t uuid = get_le16(&data[0]);
+
+	print_field("Service Data: %s (0x%4.4x)", bt_uuid16_to_str(uuid), uuid);
+	print_hex_field("  Data", &data[2], data_len - 2);
+}
+
 static const struct bitfield_data eir_flags_table[] = {
 	{ 0, "LE Limited Discoverable Mode"		},
 	{ 1, "LE General Discoverable Mode"		},
@@ -3703,9 +3711,7 @@ static void print_eir(const uint8_t *eir, uint8_t eir_len, bool le)
 		case BT_EIR_SERVICE_DATA:
 			if (data_len < 2)
 				break;
-			sprintf(label, "Service Data (UUID 0x%4.4x)",
-							get_le16(&data[0]));
-			print_hex_field(label, &data[2], data_len - 2);
+			print_service_data(data, data_len);
 			break;
 
 		case BT_EIR_RANDOM_ADDRESS:
-- 
2.35.1


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

* [PATCH BlueZ 2/4] btmon: Add support for decoding Broadcast Audio Annoucements
  2022-04-26 23:03 [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID Luiz Augusto von Dentz
@ 2022-04-26 23:03 ` Luiz Augusto von Dentz
  2022-04-26 23:03 ` [PATCH BlueZ 3/4] btmon: Add support for decoding Basic " Luiz Augusto von Dentz
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-04-26 23:03 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds support for decoding Broadcast Audio Announcements as shown
on:

Basic Audio Profile / Profile Specification
Page 34 of 146

Table 3.14: Broadcast Source AD format when transmitting Broadcast
Audio Announcements

< HCI Command: LE Set Extended Advertising Data (0x08|0x0037) plen 36
        Handle: 0x00
        Operation: Complete extended advertising data (0x03)
        Fragment preference: Minimize fragmentation (0x01)
        Data length: 0x20
        Service Data: Broadcast Audio Announcement (0x1852)
        Broadcast ID: 904177 (0x0dcbf1)
        Name (complete): Broadcast Audio Source
---
 monitor/packet.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/monitor/packet.c b/monitor/packet.c
index 471b0dd4d..b376d5a8b 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -3301,11 +3301,44 @@ static void print_uuid128_list(const char *label, const void *data,
 	}
 }
 
+static void print_broadcast_annoucement(const uint8_t *data, uint8_t data_len)
+{
+	uint32_t bid;
+
+	if (data_len < 3) {
+		print_hex_field("  Data", data, data_len);
+		return;
+	}
+
+	bid = get_le24(data);
+	print_field("Broadcast ID: %u (0x%06x)", bid, bid);
+}
+
+static const struct service_data_decoder {
+	uint16_t uuid;
+	void (*func)(const uint8_t *data, uint8_t data_len);
+} service_data_decoders[] = {
+	{ 0x1852, print_broadcast_annoucement }
+};
+
 static void print_service_data(const uint8_t *data, uint8_t data_len)
 {
 	uint16_t uuid = get_le16(&data[0]);
+	size_t i;
 
 	print_field("Service Data: %s (0x%4.4x)", bt_uuid16_to_str(uuid), uuid);
+
+	for (i = 0; i < ARRAY_SIZE(service_data_decoders); i++) {
+		const struct service_data_decoder *decoder;
+
+		decoder = &service_data_decoders[i];
+
+		if (decoder->uuid == uuid) {
+			decoder->func(&data[2], data_len - 2);
+			return;
+		}
+	}
+
 	print_hex_field("  Data", &data[2], data_len - 2);
 }
 
-- 
2.35.1


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

* [PATCH BlueZ 3/4] btmon: Add support for decoding Basic Audio Annoucements
  2022-04-26 23:03 [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID Luiz Augusto von Dentz
  2022-04-26 23:03 ` [PATCH BlueZ 2/4] btmon: Add support for decoding Broadcast Audio Annoucements Luiz Augusto von Dentz
@ 2022-04-26 23:03 ` Luiz Augusto von Dentz
  2022-04-26 23:03 ` [PATCH BlueZ 4/4] btmon: Fix not decoding LC3 id Luiz Augusto von Dentz
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-04-26 23:03 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds support for decoding Basic Audio Announcements as shown
on:

Basic Audio Profile / Profile Specification
Page 36 of 146

Table 3.15: Format of BASE used in Basic Audio Announcements

< HCI Command: LE Set Periodic Advertising Data (0x08|0x003f) plen 36
        Handle: 0
        Operation: Complete ext advertising data (0x03)
        Data length: 0x21
        Service Data: Basic Audio Announcement (0x1851)
          Presetation Delay: 40000
          Number of Subgroups: 1
            Subgroup #0:
            Number of BIS(s): 1
            Codec: Reserved (0x06)
            Codec Specific Configuration: 010101020403010000020428
            Metadata: 020202
              BIS #0:
              Index: 1
              Codec Specific Configuration:
---
 monitor/bt.h     |  28 +++++++++++++
 monitor/packet.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 134 insertions(+)

diff --git a/monitor/bt.h b/monitor/bt.h
index e9f72de36..644c97c98 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -3517,6 +3517,34 @@ struct bt_hci_evt_le_per_sync_established {
 	uint8_t  clock_accuracy;
 } __attribute__ ((packed));
 
+struct bt_hci_le_pa_base_codec {
+	uint8_t  id;
+	uint16_t cid;
+	uint16_t vid;
+} __attribute__ ((packed));
+
+struct bt_hci_lv_data {
+	uint8_t  len;
+	uint8_t  data[];
+} __attribute__ ((packed));
+
+struct bt_hci_le_pa_base_bis {
+	uint8_t  index;
+	struct bt_hci_lv_data codec_cfg[];
+} __attribute__ ((packed));
+
+struct bt_hci_le_pa_base_subgroup {
+	uint8_t  num_bis;
+	struct bt_hci_le_pa_base_codec codec;
+	uint8_t  data[];
+} __attribute__ ((packed));
+
+struct bt_hci_le_pa_base_data {
+	uint8_t  pd[3];
+	uint8_t  num_subgroups;
+	struct bt_hci_le_pa_base_subgroup subgroups[];
+} __attribute__ ((packed));
+
 #define BT_HCI_EVT_LE_PA_REPORT			0x0f
 struct bt_hci_le_pa_report {
 	uint16_t handle;
diff --git a/monitor/packet.c b/monitor/packet.c
index b376d5a8b..9d7677bb1 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -3301,6 +3301,111 @@ static void print_uuid128_list(const char *label, const void *data,
 	}
 }
 
+static void *iov_pull(struct iovec *iov, size_t len)
+{
+	void *data;
+
+	if (iov->iov_len < len)
+		return NULL;
+
+	data = iov->iov_base;
+	iov->iov_base += len;
+	iov->iov_len -= len;
+
+	return data;
+}
+
+static void print_base_annoucement(const uint8_t *data, uint8_t data_len)
+{
+	struct iovec iov;
+	struct bt_hci_le_pa_base_data *base_data;
+	uint8_t i;
+
+	iov.iov_base = (void *) data;
+	iov.iov_len = data_len;
+
+	base_data = iov_pull(&iov, sizeof(*base_data));
+	if (!base_data)
+		goto done;
+
+	/* Level 1 - BASE */
+	print_field("  Presetation Delay: %u", get_le24(base_data->pd));
+	print_field("  Number of Subgroups: %u", base_data->num_subgroups);
+
+	/* Level 2 - Subgroups*/
+	for (i = 0; i < base_data->num_subgroups; i++) {
+		struct bt_hci_le_pa_base_subgroup *subgroup;
+		struct bt_hci_lv_data *codec_cfg;
+		struct bt_hci_lv_data *metadata;
+		uint8_t j;
+
+		print_field("    Subgroup #%u:", i);
+
+		subgroup = iov_pull(&iov, sizeof(*subgroup));
+		if (!subgroup)
+			goto done;
+
+		print_field("    Number of BIS(s): %u", subgroup->num_bis);
+		print_codec_id("    Codec", subgroup->codec.id);
+
+		if (subgroup->codec.id == 0xff) {
+			uint16_t id;
+
+			id = le16_to_cpu(subgroup->codec.vid);
+			print_field("    Codec Company ID: %s (0x%04x)",
+						bt_compidtostr(id), id);
+			print_field("    Codec Vendor ID: 0x%04x",
+						subgroup->codec.vid);
+		}
+
+		codec_cfg = iov_pull(&iov, sizeof(*codec_cfg));
+		if (!codec_cfg)
+			goto done;
+
+		if (!iov_pull(&iov, codec_cfg->len))
+			goto done;
+
+		print_hex_field("    Codec Specific Configuration",
+					codec_cfg->data, codec_cfg->len);
+
+		metadata = iov_pull(&iov, sizeof(*metadata));
+		if (!metadata)
+			goto done;
+
+		if (!iov_pull(&iov, metadata->len))
+			goto done;
+
+		print_hex_field("    Metadata", metadata->data, metadata->len);
+
+		/* Level 3 - BIS(s)*/
+		for (j = 0; j < subgroup->num_bis; j++) {
+			struct bt_hci_le_pa_base_bis *bis;
+
+			print_field("      BIS #%u:", j);
+
+			bis = iov_pull(&iov, sizeof(*bis));
+			if (!bis)
+				goto done;
+
+			print_field("      Index: %u", bis->index);
+
+			codec_cfg = iov_pull(&iov, sizeof(*codec_cfg));
+			if (!codec_cfg)
+				goto done;
+
+			if (!iov_pull(&iov, codec_cfg->len))
+				goto done;
+
+			print_hex_field("      Codec Specific Configuration",
+					codec_cfg->data, codec_cfg->len);
+		}
+	}
+
+done:
+	if (iov.iov_len)
+		print_hex_field("  Data", iov.iov_base, iov.iov_len);
+}
+
 static void print_broadcast_annoucement(const uint8_t *data, uint8_t data_len)
 {
 	uint32_t bid;
@@ -3318,6 +3423,7 @@ static const struct service_data_decoder {
 	uint16_t uuid;
 	void (*func)(const uint8_t *data, uint8_t data_len);
 } service_data_decoders[] = {
+	{ 0x1851, print_base_annoucement },
 	{ 0x1852, print_broadcast_annoucement }
 };
 
-- 
2.35.1


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

* [PATCH BlueZ 4/4] btmon: Fix not decoding LC3 id
  2022-04-26 23:03 [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID Luiz Augusto von Dentz
  2022-04-26 23:03 ` [PATCH BlueZ 2/4] btmon: Add support for decoding Broadcast Audio Annoucements Luiz Augusto von Dentz
  2022-04-26 23:03 ` [PATCH BlueZ 3/4] btmon: Add support for decoding Basic " Luiz Augusto von Dentz
@ 2022-04-26 23:03 ` Luiz Augusto von Dentz
  2022-04-27  2:18 ` [BlueZ,1/4] btmon: Add proper decoding to Service Data UUID bluez.test.bot
  2022-04-28 22:30 ` [PATCH BlueZ 1/4] " patchwork-bot+bluetooth
  4 siblings, 0 replies; 6+ messages in thread
From: Luiz Augusto von Dentz @ 2022-04-26 23:03 UTC (permalink / raw)
  To: linux-bluetooth

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This enablind decoding LC3 codec id (0x06).
---
 monitor/packet.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/monitor/packet.c b/monitor/packet.c
index 9d7677bb1..d409e4e63 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -1337,6 +1337,9 @@ static void print_codec_id(const char *label, uint8_t codec)
 	case 0x05:
 		str = "mSBC";
 		break;
+	case 0x06:
+		str = "LC3";
+		break;
 	case 0xff:
 		str = "Vendor specific";
 		break;
-- 
2.35.1


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

* RE: [BlueZ,1/4] btmon: Add proper decoding to Service Data UUID
  2022-04-26 23:03 [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID Luiz Augusto von Dentz
                   ` (2 preceding siblings ...)
  2022-04-26 23:03 ` [PATCH BlueZ 4/4] btmon: Fix not decoding LC3 id Luiz Augusto von Dentz
@ 2022-04-27  2:18 ` bluez.test.bot
  2022-04-28 22:30 ` [PATCH BlueZ 1/4] " patchwork-bot+bluetooth
  4 siblings, 0 replies; 6+ messages in thread
From: bluez.test.bot @ 2022-04-27  2:18 UTC (permalink / raw)
  To: linux-bluetooth, luiz.dentz

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

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

Dear submitter,

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

---Test result---

Test Summary:
CheckPatch                    FAIL      6.08 seconds
GitLint                       PASS      4.09 seconds
Prep - Setup ELL              PASS      49.83 seconds
Build - Prep                  PASS      0.77 seconds
Build - Configure             PASS      10.00 seconds
Build - Make                  PASS      1440.82 seconds
Make Check                    PASS      12.56 seconds
Make Check w/Valgrind         PASS      517.26 seconds
Make Distcheck                PASS      269.46 seconds
Build w/ext ELL - Configure   PASS      10.86 seconds
Build w/ext ELL - Make        PASS      1541.46 seconds
Incremental Build with patchesPASS      6355.82 seconds

Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script with rule in .checkpatch.conf
Output:
[BlueZ,3/4] btmon: Add support for decoding Basic Audio Annoucements
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#123: FILE: monitor/bt.h:3524:
+} __attribute__ ((packed));

WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#128: FILE: monitor/bt.h:3529:
+} __attribute__ ((packed));

WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#133: FILE: monitor/bt.h:3534:
+} __attribute__ ((packed));

WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#139: FILE: monitor/bt.h:3540:
+} __attribute__ ((packed));

WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#145: FILE: monitor/bt.h:3546:
+} __attribute__ ((packed));

/github/workspace/src/12828051.patch total: 0 errors, 5 warnings, 152 lines checked

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

/github/workspace/src/12828051.patch has style problems, please review.

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

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




---
Regards,
Linux Bluetooth


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

* Re: [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID
  2022-04-26 23:03 [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID Luiz Augusto von Dentz
                   ` (3 preceding siblings ...)
  2022-04-27  2:18 ` [BlueZ,1/4] btmon: Add proper decoding to Service Data UUID bluez.test.bot
@ 2022-04-28 22:30 ` patchwork-bot+bluetooth
  4 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+bluetooth @ 2022-04-28 22:30 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: linux-bluetooth

Hello:

This series was applied to bluetooth/bluez.git (master)
by Luiz Augusto von Dentz <luiz.von.dentz@intel.com>:

On Tue, 26 Apr 2022 16:03:44 -0700 you wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> 
> This adds proper decoding for Service Data UUID:
> 
>         Service Data: Apple, Inc. (0xfd6f)
>           Data: e6b07e19815e902100b8b2f4a55255fd18f0c6be
> 
> [...]

Here is the summary with links:
  - [BlueZ,1/4] btmon: Add proper decoding to Service Data UUID
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=640d6b5c662d
  - [BlueZ,2/4] btmon: Add support for decoding Broadcast Audio Annoucements
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=6da642225f5a
  - [BlueZ,3/4] btmon: Add support for decoding Basic Audio Annoucements
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=80cd36cd2a0c
  - [BlueZ,4/4] btmon: Fix not decoding LC3 id
    https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=f65a9c9d21f6

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



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

end of thread, other threads:[~2022-04-28 22:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-26 23:03 [PATCH BlueZ 1/4] btmon: Add proper decoding to Service Data UUID Luiz Augusto von Dentz
2022-04-26 23:03 ` [PATCH BlueZ 2/4] btmon: Add support for decoding Broadcast Audio Annoucements Luiz Augusto von Dentz
2022-04-26 23:03 ` [PATCH BlueZ 3/4] btmon: Add support for decoding Basic " Luiz Augusto von Dentz
2022-04-26 23:03 ` [PATCH BlueZ 4/4] btmon: Fix not decoding LC3 id Luiz Augusto von Dentz
2022-04-27  2:18 ` [BlueZ,1/4] btmon: Add proper decoding to Service Data UUID bluez.test.bot
2022-04-28 22:30 ` [PATCH BlueZ 1/4] " patchwork-bot+bluetooth

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