[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-bluetooth
Subject: [PATCH BlueZ 4/5] monitor: Add support to decode le read ISO link quality
From: Ćukasz Rymanowski <lukasz.rymanowski () codecoup ! pl>
Date: 2023-07-29 0:45:51
Message-ID: 20230729004552.1422547-5-lukasz.rymanowski () codecoup ! pl
[Download RAW message or body]
btmon: Add parsing LE Read ISO link quality
> HCI Event: Command Complete (0x0e) plen 34 \
#14 24.982811 LE Read ISO link quality (0x08|0x0075) ncmd 1
Status: Success (0x00)
Handle: 98
TX unacked packets 0
TX flushed packets 257602
TX last subevent packets 0
TX retrnansmitted packets 0
TX crc error packets 2594
RX unreceived packets 0
Duplicated packets 0
---
monitor/bt.h | 18 ++++++++++++++++++
monitor/packet.c | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+)
diff --git a/monitor/bt.h b/monitor/bt.h
index 4482e6e2c..dca2dc8b8 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2914,6 +2914,24 @@ struct bt_hci_cmd_le_set_host_feature {
uint8_t bit_value;
} __attribute__ ((packed));
+#define BT_HCI_CMD_LE_READ_ISO_LINK_QUALITY 0x2075
+#define BT_HCI_BIT_LE_READ_ISO_LINK_QUALITY BT_HCI_CMD_BIT(45, 1)
+struct bt_hci_cmd_le_read_iso_link_quality {
+ uint16_t handle;
+} __attribute__ ((packed));
+
+struct bt_hci_rsp_le_read_iso_link_quality {
+ uint8_t status;
+ uint16_t handle;
+ uint32_t tx_unacked_packets;
+ uint32_t tx_flushed_packets;
+ uint32_t tx_last_subevent_packets;
+ uint32_t retransmitted_packets;
+ uint32_t crc_error_packets;
+ uint32_t rx_unreceived_packets;
+ uint32_t duplicated_packets;
+} __attribute__ ((packed));
+
#define BT_HCI_EVT_INQUIRY_COMPLETE 0x01
struct bt_hci_evt_inquiry_complete {
uint8_t status;
diff --git a/monitor/packet.c b/monitor/packet.c
index fd8df7a8b..3031b028f 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -8946,6 +8946,34 @@ static void le_set_host_feature_cmd(uint16_t index, const void \
*data, print_field("Bit Value: %u", cmd->bit_value);
}
+static void le_read_iso_link_quality_cmd(uint16_t index, const void *data, uint8_t \
size) +{
+ const struct bt_hci_cmd_le_read_iso_link_quality *cmd = data;
+
+ print_field("Handle: %d", le16_to_cpu(cmd->handle));
+}
+
+static void status_le_read_iso_link_quality_rsp(uint16_t index, const void *data, \
uint8_t size) +{
+ const struct bt_hci_rsp_le_read_iso_link_quality *rsp = data;
+
+ print_status(rsp->status);
+
+ if (size == 1)
+ return;
+
+ print_field("Handle: %d", le16_to_cpu(rsp->handle));
+ print_field("TX unacked packets %d", rsp->tx_unacked_packets);
+ print_field("TX flushed packets %d", rsp->tx_flushed_packets);
+ print_field("TX last subevent packets %d",
+ rsp->tx_last_subevent_packets);
+ print_field("TX retransmitted packets %d",
+ rsp->retransmitted_packets);
+ print_field("TX crc error packets %d", rsp->crc_error_packets);
+ print_field("RX unreceived packets %d", rsp->rx_unreceived_packets);
+ print_field("Duplicated packets %d", rsp->duplicated_packets);
+}
+
struct opcode_data {
uint16_t opcode;
int bit;
@@ -9895,6 +9923,16 @@ static const struct opcode_data opcode_table[] = {
"LE Set Host Feature", le_set_host_feature_cmd,
sizeof(struct bt_hci_cmd_le_set_host_feature),
true, status_rsp, 1, true },
+ { BT_HCI_CMD_LE_READ_ISO_LINK_QUALITY,
+ BT_HCI_BIT_LE_READ_ISO_LINK_QUALITY,
+ "LE Read ISO link quality",
+ le_read_iso_link_quality_cmd,
+ sizeof(
+ struct bt_hci_cmd_le_read_iso_link_quality),
+ true, status_le_read_iso_link_quality_rsp,
+ sizeof(
+ struct bt_hci_rsp_le_read_iso_link_quality),
+ true },
{ }
};
--
2.34.1
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic