All of lore.kernel.org
 help / color / mirror / Atom feed
* [BlueZ PATCH 1/3] monitor: Decode ADV Monitor read feature command
@ 2020-10-29 10:09 Howard Chung
  2020-10-29 10:09 ` [BlueZ PATCH 2/3] monitor: Decode Add ADV monitor command Howard Chung
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Howard Chung @ 2020-10-29 10:09 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: alainm, luiz.dentz, mcchou, mmandlik, Howard Chung

Add support for Read Advertisement Monitor Features mgmt operation.

@ MGMT Command: Read Advertisement Monitor Features (0x0051) plen 0
@ MGMT Event: Command Complete (0x0001) plen 20
      Read Advertisement Monitor Features (0x0051) plen 17
        Status: Success (0x00)
        Supported Features: 0x00000000
        Enabled Features: 0x00000000
        Max number of handles: 32
        Max number of patterns: 16
        Number of handles: 2
          Handle: 1
          Handle: 3

Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
---

 monitor/packet.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/monitor/packet.c b/monitor/packet.c
index d83552f74f5b..2516cf970f9f 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -88,6 +88,7 @@
 #define COLOR_UNKNOWN_ADV_FLAG		COLOR_WHITE_BG
 #define COLOR_UNKNOWN_PHY		COLOR_WHITE_BG
 #define COLOR_UNKNOWN_ADDED_DEVICE_FLAG	COLOR_WHITE_BG
+#define COLOR_UNKNOWN_ADVMON_FEATURES	COLOR_WHITE_BG
 
 #define COLOR_PHY_PACKET		COLOR_BLUE
 
@@ -13151,6 +13152,50 @@ static void mgmt_set_device_flags_rsp(const void *data, uint16_t size)
 	mgmt_print_address(data, type);
 }
 
+static const struct bitfield_data mgmt_adv_monitor_features_table[] = {
+	{ 1, "OR Patterns"	},
+	{ }
+};
+
+static void mgmt_print_adv_monitor_features(char *label, uint32_t flags)
+{
+	uint32_t mask;
+
+	print_field("%s: 0x%8.8x", label, flags);
+	mask = print_bitfield(2, flags, mgmt_adv_monitor_features_table);
+	if (mask)
+		print_text(COLOR_UNKNOWN_ADVMON_FEATURES,
+			   "  Unknown Flags (0x%8.8x)", mask);
+}
+
+static void mgmt_print_adv_monitor_handles(const void *data, uint8_t len)
+{
+	uint8_t idx = 0;
+
+	while (idx + 2 <= len) {
+		print_field("  Handle: %d", get_le16(data + idx));
+		idx += 2;
+	}
+}
+
+static void mgmt_read_adv_monitor_features_rsp(const void *data, uint16_t size)
+{
+	uint32_t supported_features = get_le32(data);
+	uint32_t enabled_features = get_le32(data + 4);
+	uint16_t max_num_handles = get_le16(data + 8);
+	uint8_t max_num_patterns = get_u8(data + 10);
+	uint16_t num_handles = get_le16(data + 11);
+
+	mgmt_print_adv_monitor_features("Supported Features",
+							supported_features);
+	mgmt_print_adv_monitor_features("Enabled Features",
+							enabled_features);
+	print_field("Max number of handles: %d", max_num_handles);
+	print_field("Max number of patterns: %d", max_num_patterns);
+	print_field("Number of handles: %d", num_handles);
+	mgmt_print_adv_monitor_handles(data + 13, size - 13);
+}
+
 struct mgmt_data {
 	uint16_t opcode;
 	const char *str;
@@ -13382,6 +13427,9 @@ static const struct mgmt_data mgmt_command_table[] = {
 	{ 0x0050, "Set Device Flags",
 				mgmt_set_device_flags_cmd, 11, true,
 				mgmt_set_device_flags_rsp, 7, true},
+	{ 0x0051, "Read Advertisement Monitor Features",
+				mgmt_null_cmd, 0, true,
+				mgmt_read_adv_monitor_features_rsp, 13, false},
 	{ }
 };
 
-- 
2.29.1.341.ge80a0c044ae-goog


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

end of thread, other threads:[~2020-10-29 17:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-29 10:09 [BlueZ PATCH 1/3] monitor: Decode ADV Monitor read feature command Howard Chung
2020-10-29 10:09 ` [BlueZ PATCH 2/3] monitor: Decode Add ADV monitor command Howard Chung
2020-10-29 10:09 ` [BlueZ PATCH 3/3] monitor: Decode Remove ADV Monitor Howard Chung
2020-10-29 10:38 ` [BlueZ,1/3] monitor: Decode ADV Monitor read feature command bluez.test.bot
2020-10-29 17:40   ` Luiz Augusto von Dentz

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.