* [PATCH BlueZ v1 1/2] monitor: Add features bits defined in 6.2
@ 2026-05-04 21:13 Luiz Augusto von Dentz
2026-05-04 21:13 ` [PATCH BlueZ v1 2/2] monitor: Add decoding for Short Connection Interval feature Luiz Augusto von Dentz
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Luiz Augusto von Dentz @ 2026-05-04 21:13 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds features bits defined as per core spec 6.2:
https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-62/out/en/low-energy-controller/link-layer-specification.html#UUID-56ada5ed-4ae3-acee-198f-27ead57d86f1
---
monitor/packet.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/monitor/packet.c b/monitor/packet.c
index 177ec80a8975..4697eea099a9 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -2894,6 +2894,13 @@ static const struct bitfield_data features_le_0[] = {
static const struct bitfield_data features_le_1[] = {
{ 0, "Monitoring Advertisers" },
{ 1, "Frame Space Update" },
+ { 2, "UTP OTA Mode" },
+ { 3, "UTP HCI Pairing" },
+ { 4, "LL_OTA_UTP_IND maximum length" },
+ { 5, "LL_OTA_UTP_IND maximum length" },
+ { 8, "Shorter Connection Intervals" },
+ { 9, "Shorter Connection Intervals (Host Support)" },
+ { 10, "LE Flushable ACL Data" },
};
static const struct bitfield_data features_msft[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH BlueZ v1 2/2] monitor: Add decoding for Short Connection Interval feature
2026-05-04 21:13 [PATCH BlueZ v1 1/2] monitor: Add features bits defined in 6.2 Luiz Augusto von Dentz
@ 2026-05-04 21:13 ` Luiz Augusto von Dentz
2026-05-04 22:42 ` [BlueZ,v1,1/2] monitor: Add features bits defined in 6.2 bluez.test.bot
2026-05-06 13:30 ` [PATCH BlueZ v1 1/2] " patchwork-bot+bluetooth
2 siblings, 0 replies; 4+ messages in thread
From: Luiz Augusto von Dentz @ 2026-05-04 21:13 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This adds deconding support for SCI related commands, command bits, event
event mask bit and feature bits:
Events:
HCI_LE_Connection_Rate_Change(0x37)
Commands:
HCI_LE_Connection_Rate_Request(0x20a1)
HCI_LE_Set_Default_Rate_Parameters(0x20a2)
HCI_LE_Read_Minimum_Supported_Connection_Interval(0x20a3)
---
monitor/bt.h | 54 ++++++++++++++++++++
monitor/packet.c | 130 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 184 insertions(+)
diff --git a/monitor/bt.h b/monitor/bt.h
index 147b76537e97..60fe2efbf143 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -3196,6 +3196,49 @@ struct bt_hci_cmd_le_fsu {
uint8_t types;
} __attribute__ ((packed));
+#define BT_HCI_CMD_LE_CONN_RATE 0x20a1
+#define BT_HCI_BIT_LE_CONN_RATE BT_HCI_CMD_BIT(48, 5)
+struct bt_hci_cmd_le_conn_rate {
+ uint16_t handle;
+ uint16_t interval_min;
+ uint16_t interval_max;
+ uint16_t subrate_min;
+ uint16_t subrate_max;
+ uint16_t max_latency;
+ uint16_t cont_num;
+ uint16_t supv_timeout;
+ uint16_t min_ce_len;
+ uint16_t max_ce_len;
+} __attribute__ ((packed));
+
+#define BT_HCI_CMD_LE_SET_DEF_RATE 0x20a2
+#define BT_HCI_BIT_LE_SET_DEF_RATE BT_HCI_CMD_BIT(48, 6)
+struct bt_hci_cmd_le_set_def_rate {
+ uint16_t interval_min;
+ uint16_t interval_max;
+ uint16_t subrate_min;
+ uint16_t subrate_max;
+ uint16_t max_latency;
+ uint16_t cont_num;
+ uint16_t supv_timeout;
+ uint16_t min_ce_len;
+ uint16_t max_ce_len;
+} __attribute__ ((packed));
+
+#define BT_HCI_CMD_LE_READ_CONN_INTERVAL 0x20a3
+#define BT_HCI_BIT_LE_READ_CONN_INTERVAL BT_HCI_CMD_BIT(48, 7)
+struct bt_hci_le_conn_interval_group {
+ uint16_t min;
+ uint16_t max;
+ uint16_t stride;
+} __attribute__ ((packed));
+
+struct bt_hci_rsp_le_read_conn_interval {
+ uint8_t status;
+ uint8_t num_grps;
+ struct bt_hci_le_conn_interval_group grps[0];
+} __attribute__ ((packed));
+
#define BT_HCI_EVT_INQUIRY_COMPLETE 0x01
struct bt_hci_evt_inquiry_complete {
uint8_t status;
@@ -4154,6 +4197,17 @@ struct bt_hci_evt_le_fsu_complete {
uint8_t types;
} __attribute__ ((packed));
+#define BT_HCI_EVT_LE_CONN_RATE_CHANGE 0x37
+struct bt_hci_evt_le_conn_rate_change {
+ uint8_t status;
+ uint16_t handle;
+ uint16_t interval;
+ uint16_t subrate;
+ uint16_t latency;
+ uint16_t cont_number;
+ uint16_t supv_timeout;
+} __attribute__ ((packed));
+
#define BT_HCI_ERR_SUCCESS 0x00
#define BT_HCI_ERR_UNKNOWN_COMMAND 0x01
#define BT_HCI_ERR_UNKNOWN_CONN_ID 0x02
diff --git a/monitor/packet.c b/monitor/packet.c
index 4697eea099a9..a0bf7a70987e 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -2415,6 +2415,12 @@ static void print_rssi(int8_t rssi)
packet_print_rssi("RSSI", rssi);
}
+static void print_slot_125u(const char *label, uint16_t value)
+{
+ print_field("%s: %.3f msec (0x%4.4x)", label,
+ le16_to_cpu(value) * 0.125, le16_to_cpu(value));
+}
+
static void print_slot_625(const char *label, uint16_t value)
{
print_field("%s: %.3f msec (0x%4.4x)", label,
@@ -3341,6 +3347,8 @@ static const struct bitfield_data events_le_table[] = {
{ 50, "LE CS Test End Complete" },
{ 51, "LE Monitored Advertisers Report" },
{ 52, "LE Frame Space Update Complete" },
+ { 53, "LE UTP Received" },
+ { 54, "LE Connection Rate Change" },
{ }
};
@@ -9836,6 +9844,89 @@ static void le_fsu_cmd(uint16_t index, const void *data, uint8_t size)
print_fsu_types(cmd->types);
}
+static void le_conn_rate_cmd(uint16_t index, const void *data, uint8_t size)
+{
+ const struct bt_hci_cmd_le_conn_rate *cmd = data;
+
+ print_handle(cmd->handle);
+ print_slot_125u("Connection Interval Min", cmd->interval_min);
+ print_slot_125u("Connection Interval Max", cmd->interval_max);
+ print_field("Subrate Min: %u (0x%4.4x)",
+ le16_to_cpu(cmd->subrate_min),
+ le16_to_cpu(cmd->subrate_min));
+ print_field("Subrate Max: %u (0x%4.4x)",
+ le16_to_cpu(cmd->subrate_max),
+ le16_to_cpu(cmd->subrate_max));
+ print_field("Max Latency: %u (0x%4.4x)",
+ le16_to_cpu(cmd->max_latency),
+ le16_to_cpu(cmd->max_latency));
+ print_field("Continuation Number: %u (0x%4.4x)",
+ le16_to_cpu(cmd->cont_num),
+ le16_to_cpu(cmd->cont_num));
+ print_field("Supervision Timeout: %d ms (0x%4.4x)",
+ le16_to_cpu(cmd->supv_timeout) * 10,
+ le16_to_cpu(cmd->supv_timeout));
+ print_slot_125u("Minimum CE Length", cmd->min_ce_len);
+ print_slot_125u("Maximum CE Length", cmd->max_ce_len);
+}
+
+static void le_set_def_rate_cmd(uint16_t index, const void *data, uint8_t size)
+{
+ const struct bt_hci_cmd_le_set_def_rate *cmd = data;
+
+ print_slot_125u("Connection Interval Min", cmd->interval_min);
+ print_slot_125u("Connection Interval Max", cmd->interval_max);
+ print_field("Subrate Min: %u (0x%4.4x)",
+ le16_to_cpu(cmd->subrate_min),
+ le16_to_cpu(cmd->subrate_min));
+ print_field("Subrate Max: %u (0x%4.4x)",
+ le16_to_cpu(cmd->subrate_max),
+ le16_to_cpu(cmd->subrate_max));
+ print_field("Max Latency: %u (0x%4.4x)",
+ le16_to_cpu(cmd->max_latency),
+ le16_to_cpu(cmd->max_latency));
+ print_field("Continuation Number: %u (0x%4.4x)",
+ le16_to_cpu(cmd->cont_num),
+ le16_to_cpu(cmd->cont_num));
+ print_field("Supervision Timeout: %d ms (0x%4.4x)",
+ le16_to_cpu(cmd->supv_timeout) * 10,
+ le16_to_cpu(cmd->supv_timeout));
+ print_slot_125u("Minimum CE Length", cmd->min_ce_len);
+ print_slot_125u("Maximum CE Length", cmd->max_ce_len);
+}
+
+static void le_read_conn_interval_rsp(uint16_t index, const void *data,
+ uint8_t size)
+{
+ const struct bt_hci_rsp_le_read_conn_interval *rsp = data;
+ struct iovec iov;
+ uint8_t i;
+
+ print_status(rsp->status);
+ print_field("Number of Groups: %u", rsp->num_grps);
+
+ if (!rsp->num_grps)
+ return;
+
+ iov.iov_base = (void *)rsp->grps;
+ iov.iov_len = size - sizeof(*rsp);
+
+ for (i = 0; i < rsp->num_grps; i++) {
+ const struct bt_hci_le_conn_interval_group *grp;
+
+ grp = util_iov_pull(&iov, sizeof(*grp));
+ if (!grp) {
+ print_text(COLOR_ERROR, " invalid group");
+ break;
+ }
+
+ print_field("Group %u:", i);
+ print_slot_125u(" Interval Min", grp->min);
+ print_slot_125u(" Interval Max", grp->max);
+ print_slot_125u(" Interval Stride", grp->stride);
+ }
+}
+
struct opcode_data {
uint16_t opcode;
int bit;
@@ -10907,6 +10998,21 @@ static const struct opcode_data opcode_table[] = {
"LE Frame Space Update", le_fsu_cmd,
sizeof(struct bt_hci_cmd_le_fsu),
true, status_rsp, 1, true },
+ { BT_HCI_CMD_LE_CONN_RATE, BT_HCI_BIT_LE_CONN_RATE,
+ "LE Connection Rate Request", le_conn_rate_cmd,
+ sizeof(struct bt_hci_cmd_le_conn_rate),
+ true, status_rsp, 1, true },
+ { BT_HCI_CMD_LE_SET_DEF_RATE, BT_HCI_BIT_LE_SET_DEF_RATE,
+ "LE Set Default Rate Parameteres",
+ le_set_def_rate_cmd,
+ sizeof(struct bt_hci_cmd_le_set_def_rate),
+ true, status_rsp, 1, true },
+ { BT_HCI_CMD_LE_READ_CONN_INTERVAL,
+ BT_HCI_BIT_LE_READ_CONN_INTERVAL,
+ "LE Read Minimum Supported Connection Interval",
+ null_cmd, 0, true, le_read_conn_interval_rsp,
+ sizeof(struct bt_hci_rsp_le_read_conn_interval),
+ true },
{ }
};
@@ -13400,6 +13506,26 @@ static void le_fsu_evt(struct timeval *tv, uint16_t index,
print_fsu_types(evt->types);
}
+static void le_conn_rate_change_evt(struct timeval *tv, uint16_t index,
+ const void *data, uint8_t size)
+{
+ const struct bt_hci_evt_le_conn_rate_change *evt = data;
+
+ print_handle(evt->handle);
+ print_slot_125u("Connection Interval", le16_to_cpu(evt->interval));
+ print_field("Subrate Factor: %u (0x%4.4x)", le16_to_cpu(evt->subrate),
+ le16_to_cpu(evt->subrate));
+ print_field("Peripheral Latency: %u (0x%4.4x)",
+ le16_to_cpu(evt->latency),
+ le16_to_cpu(evt->latency));
+ print_field("Continuation Number: %u (0x%4.4x)",
+ le16_to_cpu(evt->cont_number),
+ le16_to_cpu(evt->cont_number));
+ print_field("Supervision Timeout: %u ms (0x%4.4X)",
+ le16_to_cpu(evt->supv_timeout),
+ le16_to_cpu(evt->supv_timeout));
+}
+
struct subevent_data {
uint8_t subevent;
const char *str;
@@ -13566,6 +13692,10 @@ static const struct subevent_data le_meta_event_table[] = {
{ BT_HCI_EVT_LE_FSU_COMPLETE,
"LE Frame Space Update Complete",
le_fsu_evt, sizeof(struct bt_hci_evt_le_fsu_complete) },
+ { BT_HCI_EVT_LE_CONN_RATE_CHANGE,
+ "LE Connection Rate Change",
+ le_conn_rate_change_evt,
+ sizeof(struct bt_hci_evt_le_conn_rate_change) },
{ }
};
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* RE: [BlueZ,v1,1/2] monitor: Add features bits defined in 6.2
2026-05-04 21:13 [PATCH BlueZ v1 1/2] monitor: Add features bits defined in 6.2 Luiz Augusto von Dentz
2026-05-04 21:13 ` [PATCH BlueZ v1 2/2] monitor: Add decoding for Short Connection Interval feature Luiz Augusto von Dentz
@ 2026-05-04 22:42 ` bluez.test.bot
2026-05-06 13:30 ` [PATCH BlueZ v1 1/2] " patchwork-bot+bluetooth
2 siblings, 0 replies; 4+ messages in thread
From: bluez.test.bot @ 2026-05-04 22:42 UTC (permalink / raw)
To: linux-bluetooth, luiz.dentz
[-- Attachment #1: Type: text/plain, Size: 4726 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=1089499
---Test result---
Test Summary:
CheckPatch FAIL 1.13 seconds
GitLint FAIL 0.70 seconds
BuildEll PASS 20.49 seconds
BluezMake PASS 656.66 seconds
MakeCheck PASS 0.95 seconds
MakeDistcheck PASS 245.58 seconds
CheckValgrind PASS 221.87 seconds
CheckSmatch WARNING 349.65 seconds
bluezmakeextell PASS 182.14 seconds
IncrementalBuild PASS 700.74 seconds
ScanBuild PASS 1031.74 seconds
Details
##############################
Test: CheckPatch - FAIL
Desc: Run checkpatch.pl script
Output:
[BlueZ,v1,1/2] monitor: Add features bits defined in 6.2
WARNING:COMMIT_LOG_LONG_LINE: Possible unwrapped commit description (prefer a maximum 75 chars per line)
#98:
https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-62/out/en/low-energy-controller/link-layer-specification.html#UUID-56ada5ed-4ae3-acee-198f-27ead57d86f1
/github/workspace/src/patch/14553784.patch total: 0 errors, 1 warnings, 13 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/patch/14553784.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.
[BlueZ,v1,2/2] monitor: Add decoding for Short Connection Interval feature
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#140: FILE: monitor/bt.h:3212:
+} __attribute__ ((packed));
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#154: FILE: monitor/bt.h:3226:
+} __attribute__ ((packed));
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#162: FILE: monitor/bt.h:3234:
+} __attribute__ ((packed));
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#168: FILE: monitor/bt.h:3240:
+} __attribute__ ((packed));
WARNING:PREFER_DEFINED_ATTRIBUTE_MACRO: Prefer __packed over __attribute__((packed))
#186: FILE: monitor/bt.h:4209:
+} __attribute__ ((packed));
/github/workspace/src/patch/14553785.patch total: 0 errors, 5 warnings, 232 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/patch/14553785.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.
##############################
Test: GitLint - FAIL
Desc: Run gitlint
Output:
[BlueZ,v1,1/2] monitor: Add features bits defined in 6.2
WARNING: I3 - ignore-body-lines: gitlint will be switching from using Python regex 'match' (match beginning) to 'search' (match anywhere) semantics. Please review your ignore-body-lines.regex option accordingly. To remove this warning, set general.regex-style-search=True. More details: https://jorisroovers.github.io/gitlint/configuration/#regex-style-search
6: B1 Line exceeds max length (178>80): "https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-62/out/en/low-energy-controller/link-layer-specification.html#UUID-56ada5ed-4ae3-acee-198f-27ead57d86f1"
##############################
Test: CheckSmatch - WARNING
Desc: Run smatch tool with source
Output:
monitor/packet.c:2000:26: warning: Variable length array is used.monitor/packet.c: note: in included file:monitor/bt.h:3909:52: warning: array of flexible structuresmonitor/bt.h:3897:40: warning: array of flexible structuresmonitor/packet.c:2000:26: warning: Variable length array is used.monitor/packet.c: note: in included file:monitor/bt.h:3909:52: warning: array of flexible structuresmonitor/bt.h:3897:40: warning: array of flexible structures
https://github.com/bluez/bluez/pull/2095
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH BlueZ v1 1/2] monitor: Add features bits defined in 6.2
2026-05-04 21:13 [PATCH BlueZ v1 1/2] monitor: Add features bits defined in 6.2 Luiz Augusto von Dentz
2026-05-04 21:13 ` [PATCH BlueZ v1 2/2] monitor: Add decoding for Short Connection Interval feature Luiz Augusto von Dentz
2026-05-04 22:42 ` [BlueZ,v1,1/2] monitor: Add features bits defined in 6.2 bluez.test.bot
@ 2026-05-06 13:30 ` patchwork-bot+bluetooth
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+bluetooth @ 2026-05-06 13: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 Mon, 4 May 2026 17:13:01 -0400 you wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>
> This adds features bits defined as per core spec 6.2:
> https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-62/out/en/low-energy-controller/link-layer-specification.html#UUID-56ada5ed-4ae3-acee-198f-27ead57d86f1
> ---
> monitor/packet.c | 7 +++++++
> 1 file changed, 7 insertions(+)
Here is the summary with links:
- [BlueZ,v1,1/2] monitor: Add features bits defined in 6.2
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=fda84f7004fa
- [BlueZ,v1,2/2] monitor: Add decoding for Short Connection Interval feature
https://git.kernel.org/pub/scm/bluetooth/bluez.git/?id=79cfd07224ff
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] 4+ messages in thread
end of thread, other threads:[~2026-05-06 13:31 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-04 21:13 [PATCH BlueZ v1 1/2] monitor: Add features bits defined in 6.2 Luiz Augusto von Dentz
2026-05-04 21:13 ` [PATCH BlueZ v1 2/2] monitor: Add decoding for Short Connection Interval feature Luiz Augusto von Dentz
2026-05-04 22:42 ` [BlueZ,v1,1/2] monitor: Add features bits defined in 6.2 bluez.test.bot
2026-05-06 13:30 ` [PATCH BlueZ v1 1/2] " patchwork-bot+bluetooth
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox