[PATCH BlueZ v1 06/12] monitor: Add decoding for Load Connection Subrate, SCI setting and event
Luiz Augusto von Dentz <[email protected]> Fri, 24 Jul 2026 15:12:19 -0400
| Newsgroups | org.kernel.vger.linux-bluetooth |
|---|---|
| Message-ID | <[email protected]> |
From: Luiz Augusto von Dentz <[email protected]> Add decoding support for the new MGMT_OP_LOAD_CONN_SUBRATE (0x005C) command, the MGMT_EV_CONN_SUBRATE (0x0033) event and the Shorter Connection Interval setting bit (25) to btmon. --- monitor/packet.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/monitor/packet.c b/monitor/packet.c index 82afef6011d2..0d3b23cc3fb7 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -14941,6 +14941,7 @@ static const struct bitfield_data mgmt_settings_table[] = { { 22, "LL Privacy" }, { 23, "PAST Sender" }, { 24, "PAST Receiver" }, + { 25, "Shorter Connection Interval" }, {} }; @@ -15101,6 +15102,27 @@ static void mgmt_print_connection_parameter(const void *data) print_field("Supervision timeout: %u", supv_timeout); } +static void mgmt_print_connection_subrate(const void *data) +{ + uint8_t address_type = get_u8(data + 6); + uint16_t min_interval = get_le16(data + 7); + uint16_t max_interval = get_le16(data + 9); + uint16_t subrate_min = get_le16(data + 11); + uint16_t subrate_max = get_le16(data + 13); + uint16_t max_latency = get_le16(data + 15); + uint16_t cont_num = get_le16(data + 17); + uint16_t supv_timeout = get_le16(data + 19); + + mgmt_print_address(data, address_type); + print_field("Min connection interval: %u", min_interval); + print_field("Max connection interval: %u", max_interval); + print_field("Subrate min: %u", subrate_min); + print_field("Subrate max: %u", subrate_max); + print_field("Max latency: %u", max_latency); + print_field("Continuation number: %u", cont_num); + print_field("Supervision timeout: %u", supv_timeout); +} + static void mgmt_print_link_key(const void *data) { uint8_t address_type = get_u8(data + 6); @@ -16026,6 +16048,22 @@ static void mgmt_load_connection_parameters_cmd(const void *data, uint16_t size) mgmt_print_connection_parameter(data + 2 + (i * 15)); } +static void mgmt_load_conn_subrate_cmd(const void *data, uint16_t size) +{ + uint16_t num_parameters = get_le16(data); + int i; + + print_field("Parameters: %u", num_parameters); + + if (size - 2 != num_parameters * 21) { + packet_hexdump(data + 2, size - 2); + return; + } + + for (i = 0; i < num_parameters; i++) + mgmt_print_connection_subrate(data + 2 + (i * 21)); +} + static void mgmt_read_unconf_index_list_rsp(const void *data, uint16_t size) { uint16_t num_controllers = get_le16(data); @@ -17096,6 +17134,9 @@ static const struct mgmt_data mgmt_command_table[] = { { 0x005B, "Send HCI command and wait for event", mgmt_hci_cmd_sync_cmd, 6, false, mgmt_hci_cmd_sync_rsp, 0, false}, + { 0x005C, "Load Connection Subrate", + mgmt_load_conn_subrate_cmd, 2, false, + mgmt_null_rsp, 0, true }, { } }; @@ -17620,6 +17661,25 @@ static void mgmt_mesh_packet_cmplt_evt(const void *data, uint16_t size) print_field("Handle: %d", handle); } +static void mgmt_conn_subrate_evt(const void *data, uint16_t size) +{ + uint8_t address_type = get_u8(data + 6); + uint8_t status = get_u8(data + 7); + uint16_t interval = get_le16(data + 8); + uint16_t subrate = get_le16(data + 10); + uint16_t latency = get_le16(data + 12); + uint16_t cont_num = get_le16(data + 14); + uint16_t supv_timeout = get_le16(data + 16); + + mgmt_print_address(data, address_type); + mgmt_print_status(status); + print_field("Interval: %u", interval); + print_field("Subrate: %u", subrate); + print_field("Latency: %u", latency); + print_field("Continuation number: %u", cont_num); + print_field("Supervision timeout: %u", supv_timeout); +} + static const struct mgmt_data mgmt_event_table[] = { { 0x0001, "Command Complete", mgmt_command_complete_evt, 3, false }, @@ -17717,6 +17777,8 @@ static const struct mgmt_data mgmt_event_table[] = { mgmt_mesh_device_found_evt, 22, false }, { 0x0032, "Mesh Packet Complete", mgmt_mesh_packet_cmplt_evt, 1, true }, + { 0x0033, "Connection Subrate", + mgmt_conn_subrate_evt, 18, true }, { } }; -- 2.54.0