aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2015-06-08 19:38:48 +0200
committerMichal Labedzki <michal.labedzki@tieto.com>2015-07-17 13:54:43 +0000
commit3faec795e9c5b5f153f66960c11673c2f53e4243 (patch)
tree4df5f704a41290a0a0694c3896a8a7e6521001ac /epan
parent6514dece0c755854081a0a0ccb525e6bc9dbbaff (diff)
Qt/Bluetooth: Add HCI Summary dialogue
HCI Summary dialogue collect HCI Opcodes, HCI Events, Hardware Errors, Statuses and Reasons. Also show occurrence of them. The top level item is group of items (by OGF or types), the second level item is in real command, event, hardware error, status or reason. The third level items are direct link to packet that contains second level item type. Change-Id: I6b6bd02533c4605a2dd2c1f5dfee46f72a0f3fdc Reviewed-on: https://code.wireshark.org/review/9676 Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Petri-Dish: Michal Labedzki <michal.labedzki@tieto.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-bluetooth.c2
-rw-r--r--epan/dissectors/packet-bluetooth.h29
-rw-r--r--epan/dissectors/packet-bthci_cmd.c33
-rw-r--r--epan/dissectors/packet-bthci_evt.c414
-rw-r--r--epan/dissectors/packet-bthci_vendor.c69
5 files changed, 488 insertions, 59 deletions
diff --git a/epan/dissectors/packet-bluetooth.c b/epan/dissectors/packet-bluetooth.c
index 12bfec2008..43152d4680 100644
--- a/epan/dissectors/packet-bluetooth.c
+++ b/epan/dissectors/packet-bluetooth.c
@@ -61,6 +61,7 @@ static wmem_tree_t *hci_vendors = NULL;
static int bluetooth_tap = -1;
int bluetooth_device_tap = -1;
+int bluetooth_hci_summary_tap = -1;
const value_string bluetooth_uuid_vals[] = {
/* Protocol Identifiers - https://www.bluetooth.org/en-us/specification/assigned-numbers/service-discovery */
@@ -1554,6 +1555,7 @@ proto_register_bluetooth(void)
bluetooth_tap = register_tap("bluetooth");
bluetooth_device_tap = register_tap("bluetooth.device");
+ bluetooth_hci_summary_tap = register_tap("bluetooth.hci_summary");
bluetooth_uuid_table = register_dissector_table("bluetooth.uuid", "BT Service UUID", FT_STRING, BASE_NONE);
diff --git a/epan/dissectors/packet-bluetooth.h b/epan/dissectors/packet-bluetooth.h
index 923eb1df69..a4a55cd1f7 100644
--- a/epan/dissectors/packet-bluetooth.h
+++ b/epan/dissectors/packet-bluetooth.h
@@ -229,7 +229,36 @@ typedef struct _bluetooth_device_tap_t {
} data;
} bluetooth_device_tap_t;
+enum bluetooth_hci_summary_type {
+ BLUETOOTH_HCI_SUMMARY_OPCODE,
+ BLUETOOTH_HCI_SUMMARY_EVENT_OPCODE,
+ BLUETOOTH_HCI_SUMMARY_EVENT,
+ BLUETOOTH_HCI_SUMMARY_VENDOR_OPCODE,
+ BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT_OPCODE,
+ BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT,
+ BLUETOOTH_HCI_SUMMARY_STATUS,
+ BLUETOOTH_HCI_SUMMARY_STATUS_PENDING,
+ BLUETOOTH_HCI_SUMMARY_REASON,
+ BLUETOOTH_HCI_SUMMARY_HARDWARE_ERROR
+};
+
+typedef struct _bluetooth_hci_summary_tap_t {
+ guint32 interface_id;
+ guint32 adapter_id;
+
+ guint8 ogf;
+ guint8 ocf;
+ guint8 event;
+ guint8 status;
+ guint8 reason;
+ guint8 hardware_error;
+
+ const gchar *name;
+ enum bluetooth_hci_summary_type type;
+} bluetooth_hci_summary_tap_t;
+
extern int bluetooth_device_tap;
+extern int bluetooth_hci_summary_tap;
WS_DLL_PUBLIC const value_string bluetooth_uuid_vals[];
WS_DLL_PUBLIC const bluetooth_uuid_custom_t bluetooth_uuid_custom[];
diff --git a/epan/dissectors/packet-bthci_cmd.c b/epan/dissectors/packet-bthci_cmd.c
index 8546a57ef8..70c655c25b 100644
--- a/epan/dissectors/packet-bthci_cmd.c
+++ b/epan/dissectors/packet-bthci_cmd.c
@@ -3122,6 +3122,33 @@ dissect_bthci_cmd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
ocf = opcode & 0x03ff;
ogf = (guint8) (opcode >> 10);
+ if (ogf == HCI_OGF_VENDOR_SPECIFIC)
+ proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Vendor Command 0x%04x"));
+ else
+ proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x"));
+
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_OPCODE;
+ tap_hci_summary->ogf = ogf;
+ tap_hci_summary->ocf = ocf;
+ if (try_val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext))
+ tap_hci_summary->name = val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x");
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
if (!pinfo->fd->flags.visited) {
bthci_cmd_data = (bthci_cmd_data_t *) wmem_new(wmem_file_scope(), bthci_cmd_data_t);
bthci_cmd_data->opcode = opcode;
@@ -3133,12 +3160,6 @@ dissect_bthci_cmd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
bthci_cmd_data->response_abs_ts = pinfo->fd->abs_ts;
}
- if (ogf == HCI_OGF_VENDOR_SPECIFIC)
- proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Vendor Command 0x%04x"));
- else
- proto_item_append_text(ti_cmd," - %s", val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x"));
-
-
col_set_str(pinfo->cinfo, COL_PROTOCOL, "HCI_CMD");
ti_opcode = proto_tree_add_item(bthci_cmd_tree, hf_bthci_cmd_opcode, tvb, offset, 2, ENC_LITTLE_ENDIAN);
diff --git a/epan/dissectors/packet-bthci_evt.c b/epan/dissectors/packet-bthci_evt.c
index ee41d4293d..9e9466652f 100644
--- a/epan/dissectors/packet-bthci_evt.c
+++ b/epan/dissectors/packet-bthci_evt.c
@@ -810,10 +810,81 @@ save_remote_device_name(tvbuff_t *tvb, gint offset, packet_info *pinfo,
}
}
+static void send_hci_summary_status_tap(guint8 status, packet_info *pinfo, bluetooth_data_t *bluetooth_data)
+{
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_STATUS;
+ tap_hci_summary->status = status;
+ if (try_val_to_str_ext(status, &bthci_cmd_status_vals_ext))
+ tap_hci_summary->name = val_to_str_ext(status, &bthci_cmd_status_vals_ext, "Unknown 0x%02x");
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+}
+
+static void send_hci_summary_pending_tap(packet_info *pinfo, bluetooth_data_t *bluetooth_data)
+{
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_STATUS_PENDING;
+ tap_hci_summary->status = 0;
+ tap_hci_summary->name = "Pending";
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+}
+
+static void send_hci_summary_reason_tap(guint8 reason, packet_info *pinfo, bluetooth_data_t *bluetooth_data)
+{
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_REASON;
+ tap_hci_summary->reason = reason;
+ if (try_val_to_str_ext(reason, &bthci_cmd_status_vals_ext))
+ tap_hci_summary->name = val_to_str_ext(reason, &bthci_cmd_status_vals_ext, "Unknown 0x%02x");
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+}
+
static int
-dissect_bthci_evt_inquire_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_inquire_complete(tvbuff_t *tvb, int offset, packet_info *pinfo,
+ proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
return offset;
@@ -906,7 +977,7 @@ dissect_bthci_evt_connect_request(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
static int
-dissect_bthci_evt_disconnect_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
+dissect_bthci_evt_disconnect_complete(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
guint32 connection_handle;
@@ -914,6 +985,7 @@ dissect_bthci_evt_disconnect_complete(tvbuff_t *tvb, int offset, packet_info *pi
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -921,6 +993,7 @@ dissect_bthci_evt_disconnect_complete(tvbuff_t *tvb, int offset, packet_info *pi
offset += 2;
proto_tree_add_item(tree, hf_bthci_evt_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_reason_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
if (!pinfo->fd->flags.visited && status == STATUS_SUCCESS) {
@@ -952,9 +1025,11 @@ dissect_bthci_evt_disconnect_complete(tvbuff_t *tvb, int offset, packet_info *pi
}
static int
-dissect_bthci_evt_auth_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_auth_complete(tvbuff_t *tvb, int offset, packet_info *pinfo,
+ proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1128,9 +1203,11 @@ dissect_bthci_evt_return_link_keys(tvbuff_t *tvb, int offset, packet_info *pinfo
}
static int
-dissect_bthci_evt_read_remote_support_features_complete(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+dissect_bthci_evt_read_remote_support_features_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1148,6 +1225,7 @@ dissect_bthci_evt_remote_name_req_complete(tvbuff_t *tvb, int offset,
guint8 bd_addr[6];
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
offset = dissect_bd_addr(hf_bthci_evt_bd_addr, pinfo, tree, tvb, offset, FALSE, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
@@ -1211,9 +1289,11 @@ dissect_bthci_evt_remote_name_req_complete(tvbuff_t *tvb, int offset,
}
static int
-dissect_bthci_evt_read_remote_version_information_complete(tvbuff_t *tvb, int offset, packet_info *pinfo, bluetooth_data_t *bluetooth_data, proto_tree *tree)
+dissect_bthci_evt_read_remote_version_information_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, bluetooth_data_t *bluetooth_data, proto_tree *tree)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1322,6 +1402,7 @@ dissect_bthci_evt_mode_change(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1378,6 +1459,7 @@ dissect_bthci_evt_role_change(tvbuff_t *tvb, int offset, packet_info *pinfo,
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
offset = dissect_bd_addr(hf_bthci_evt_bd_addr, pinfo, tree, tvb, offset, FALSE, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
@@ -1430,11 +1512,30 @@ dissect_bthci_evt_role_change(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
static int
-dissect_bthci_evt_hardware_error(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_hardware_error(tvbuff_t *tvb, int offset, packet_info *pinfo,
+ proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_hardware_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_HARDWARE_ERROR;
+ tap_hci_summary->hardware_error = tvb_get_guint8(tvb, offset - 1);
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
return offset;
}
@@ -1462,12 +1563,14 @@ dissect_bthci_evt_data_buffer_overflow(tvbuff_t *tvb, int offset, packet_info *p
}
static int
-dissect_bthci_evt_read_clock_offset_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_read_clock_offset_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_item *handle_item;
gint16 clk;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1503,13 +1606,15 @@ dissect_bthci_evt_qos_violation(tvbuff_t *tvb, int offset, packet_info *pinfo _U
}
static int
-dissect_bthci_evt_conn_packet_type_changed(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_conn_packet_type_changed(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
guint16 packet_types;
proto_tree *handle_tree;
proto_item *ti_ptype_subtree;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1589,9 +1694,11 @@ dissect_bthci_evt_command_status(tvbuff_t *tvb, int offset, packet_info *pinfo,
if (status_code != 0) {
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
}
else {
proto_tree_add_item(tree, hf_bthci_evt_status_pending, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_pending_tap(pinfo, bluetooth_data);
}
offset += 1;
@@ -1601,6 +1708,28 @@ dissect_bthci_evt_command_status(tvbuff_t *tvb, int offset, packet_info *pinfo,
opcode = tvb_get_letohs(tvb, offset);
ogf = opcode >> 10;
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_EVENT_OPCODE;
+ tap_hci_summary->ogf = ogf;
+ tap_hci_summary->ocf = opcode & 0x03ff;
+ if (try_val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext))
+ tap_hci_summary->name = val_to_str_ext(opcode, &bthci_cmd_opcode_vals_ext, "Unknown 0x%04x");
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
if (status_code != 0)
add_opcode(opcode_list, opcode, COMMAND_STATUS_RESULT);
else
@@ -1777,6 +1906,7 @@ static int
dissect_bthci_evt_simple_pairing_complete(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
offset = dissect_bd_addr(hf_bthci_evt_bd_addr, pinfo, tree, tvb, offset, FALSE, bluetooth_data->interface_id, bluetooth_data->adapter_id, NULL);
@@ -1836,6 +1966,7 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
case 0x01: /* LE Connection Complete */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1937,7 +2068,9 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
break;
case 0x03: /* LE Connection Update Complete */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
item = proto_tree_add_item(tree, hf_bthci_evt_le_con_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -1954,7 +2087,9 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
break;
case 0x04: /* LE Read Remote Used Features Complete */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
proto_tree_add_item(tree, hf_bthci_evt_le_feature_00, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -1984,10 +2119,13 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
static int
-dissect_bthci_evt_physical_link_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_physical_link_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
return offset;
@@ -2002,15 +2140,20 @@ dissect_bthci_evt_channel_select_physical_link_recovery(tvbuff_t *tvb, int offse
}
static int
-dissect_bthci_evt_disconnect_physical_link_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_disconnect_physical_link_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_reason_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
return offset;
}
@@ -2025,10 +2168,13 @@ dissect_bthci_evt_physical_link_loss_early_warning(tvbuff_t *tvb, int offset, pa
}
static int
-dissect_bthci_evt_logical_link_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_logical_link_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2039,22 +2185,31 @@ dissect_bthci_evt_logical_link_complete(tvbuff_t *tvb, int offset, packet_info *
}
static int
-dissect_bthci_evt_disconnect_logical_link_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_disconnect_logical_link_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_logical_link_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
+
proto_tree_add_item(tree, hf_bthci_evt_reason, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_reason_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
return offset;
}
static int
-dissect_bthci_evt_flow_spec_modify_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_flow_spec_modify_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
return offset;
@@ -2084,10 +2239,13 @@ dissect_bthci_evt_number_of_completed_data_blocks(tvbuff_t *tvb, int offset, pac
}
static int
-dissect_bthci_evt_amp_start_stop_test(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_amp_start_stop_test(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_test_scenario, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
return offset;
@@ -2114,10 +2272,13 @@ dissect_bthci_evt_amp_receiver_test(tvbuff_t *tvb, int offset, packet_info *pinf
}
static int
-dissect_bthci_evt_short_range_mode_change_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_short_range_mode_change_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_short_range_mode_state, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2126,10 +2287,13 @@ dissect_bthci_evt_short_range_mode_change_complete(tvbuff_t *tvb, int offset, pa
}
static int
-dissect_bthci_evt_amp_status_change(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_amp_status_change(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_amp_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
return offset;
@@ -2293,6 +2457,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x201d: /* LE Receiver Test */
case 0x201e: /* LE Transmitter Test */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
break;
@@ -2317,6 +2482,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0433: /* Remote OOB Data Request Negative Reply */
case 0x0c60: /* Send Keypress Notification */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
offset = dissect_bd_addr(hf_bthci_evt_bd_addr, pinfo, tree, tvb, offset, local_addr, bluetooth_data->interface_id, bluetooth_data->adapter_id, bd_addr);
@@ -2374,6 +2540,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x201a: /* LE Long Term Key Request Reply */
case 0x201b: /* LE Long Term Key Request Neg Reply */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2383,8 +2550,19 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
/* This is a list of Commands that all return status and timeout */
case 0x0c15: /* Read Connection Accept Timeout */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
+ offset += 1;
+
+ timeout = tvb_get_letohs(tvb, offset);
+ item = proto_tree_add_item(tree, hf_bthci_evt_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
+ proto_item_append_text(item, " slots (%g msec)", timeout*0.625);
+ offset += 2;
+
+ break;
case 0x0c17: /* Read Page Timeout */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
timeout = tvb_get_letohs(tvb, offset);
@@ -2398,6 +2576,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c27: /* Read Automatic Flush Timeout */
case 0x0c36: /* Read Link Supervision Timeout */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2414,6 +2593,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c1b: /* Read Page Scan Activity */
case 0x0c1d: /* Read Inquiry Scan Activity */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_interval, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2426,6 +2606,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0420: /* Read LMP Handle */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2440,6 +2621,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x043b: /* Logical Link Cancel */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2451,6 +2633,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
break;
case 0x0809: /* Role Discovery */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2463,6 +2646,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x080c: /* Read Link Policy Settings */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2478,6 +2662,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x080e: /* Read Default Link Policy Settings */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_link_policy_setting_switch, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2490,6 +2675,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c09: /* Read PIN Type */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_pin_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2499,6 +2685,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c0d: /* Read Stored Link Key */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_max_num_keys, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2511,6 +2698,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c11: /* Write Stored Link Key */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_num_keys_written, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2520,6 +2708,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c12: /* Delete Stored Link Key */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_num_keys_deleted, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2530,6 +2719,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c14: /* Read Local Name */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_device_name, tvb, offset, 248, ENC_UTF_8|ENC_NA);
@@ -2579,6 +2769,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c19: /* Read Scan Enable */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_scan_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2588,6 +2780,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c1f: /* Read Authentication Enable */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_authentication_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2597,6 +2791,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c21: /* Read Encryption Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_encryption_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2606,6 +2802,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c23: /* Read Class of Device */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
call_dissector(btcommon_cod_handle, tvb_new_subset_length(tvb, offset, 3), pinfo, tree);
@@ -2615,6 +2813,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c25: /* Read Voice Setting */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_input_unused, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2629,6 +2829,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c29: /* Read Num Broadcast Retransmissions */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_num_broadcast_retransm, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2638,6 +2839,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c2b: /* Read Hold Mode Activity */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_hold_mode_act_page, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2649,6 +2851,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c2d: /* Read Transmit Power Level */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -2661,6 +2864,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c2e: /* Read SCO Flow Control Enable */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_sco_flow_cont_enable, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2671,6 +2875,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c38: /* Read Number of Supported IAC */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_num_supp_iac, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2680,6 +2885,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c39: /* Read Current IAC LAP */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
num8 = tvb_get_guint8(tvb, offset);
@@ -2694,6 +2900,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c3b: /* Read Page Scan Period Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_page_scan_period_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2703,6 +2910,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c3d: /* Read Page Scan Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_page_scan_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2713,13 +2921,17 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c42: /* Read Inquiry Scan Type */
case 0x0c46: /* Read Page Scan Type */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_scan_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
break;
case 0x0c44: /* Read Inquiry Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_inq_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -2727,6 +2939,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c48: /* Read AFH Channel Assessment Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_afh_ch_assessment_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -2734,6 +2947,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c51: /* Read Extended Inquiry Response */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_fec_required, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2746,6 +2960,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c55: /* Read Simple Pairing Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_simple_pairing_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2754,7 +2970,9 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c57: /* Read Local OOB Data */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_hash_c, tvb, offset, 16, ENC_NA);
offset += 16;
proto_tree_add_item(tree, hf_bthci_evt_randomizer_r, tvb, offset, 16, ENC_NA);
@@ -2763,7 +2981,9 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c58: /* Read Inquiry Response Tx Power Level */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_power_level_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
break;
@@ -2771,6 +2991,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c5a: /* Read Default Erroneous Data Reporting */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_err_data_reporting, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2780,6 +3001,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c61: /* Read Logical Link Accept Timeout */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
item = proto_tree_add_item(tree, hf_bthci_evt_timeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
@@ -2788,6 +3010,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c64: /* Read Location Data */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_location_domain_aware, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -2801,6 +3024,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c66: /* Read Flow Control Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_flow_control_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -2808,6 +3032,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c68: /* Read Enhanced Tx Power Level */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -2821,6 +3046,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c69: /* Read Best Effort Timeout */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_flush_to_us, tvb, offset, 4, ENC_LITTLE_ENDIAN);
offset += 4;
@@ -2828,6 +3054,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x0c6c: /* Read LE Host Supported */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_le_supported_host, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -2842,6 +3070,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_bthci_evt_hci_version, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -2947,7 +3176,9 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
break;
case 0x1002: /* Read Local Supported Commands */
- proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_NA);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_local_supported_cmds, tvb, offset, 64, ENC_NA);
@@ -2956,7 +3187,9 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
break;
case 0x1003: /* Read Local Supported Features */
- proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_NA);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
offset = dissect_bthci_evt_lmp_features(tvb, offset, pinfo, tree, 0);
@@ -2967,7 +3200,9 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
{
guint8 page_number;
- proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_NA);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
page_number = tvb_get_guint8(tvb, offset);
@@ -2984,6 +3219,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1005: /* Read Buffer Size */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_host_data_packet_length_acl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3001,7 +3238,9 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
break;
case 0x100a: /* Read Data Block Size */
- proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_NA);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_max_acl_data_packet_length, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -3009,10 +3248,12 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
offset += 2;
proto_tree_add_item(tree, hf_bthci_evt_total_num_data_blocks, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
+
break;
case 0x1007: /* Read Country Code */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_country_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
@@ -3022,6 +3263,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1401: /* Read Failed Contact Counter */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3034,6 +3276,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1403: /* Get Link Quality */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3046,6 +3289,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1405: /* Read RSSI */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3058,6 +3302,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1406: /* Read AFH Channel Map */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3073,6 +3318,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1407: /* Read Clock */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3089,6 +3335,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1408: /* Read Encryption Key Size */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -3098,7 +3345,10 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1409: /* Read Local AMP Info */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
+
proto_tree_add_item(tree, hf_bthci_evt_amp_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_total_bandwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
@@ -3123,6 +3373,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x140a: /* Read Local AMP Assoc */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -3134,6 +3385,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x140b: /* Write Remote AMP Assoc */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_physical_link_handle, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -3141,6 +3393,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x1801: /* Read Loopback Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_loopback_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -3148,6 +3402,8 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x2002: /* LE Read Buffer Size */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
item = proto_tree_add_item(tree, hf_bthci_evt_le_acl_data_pkt_len, tvb, offset, 2, ENC_LITTLE_ENDIAN);
if ( (tvb_get_letohs(tvb, offset) == 0) && (tvb_get_guint8(tvb, offset+2) == 0) )
@@ -3159,6 +3415,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x2003: /* LE Read Local Supported Features */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
if (tree) {
@@ -3175,6 +3432,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x2007: /* LE Read Advertising Channel Tx Power */
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_transmit_power_level, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -3184,6 +3442,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x200f: /* LE Read White List Size */
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_white_list_size, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -3196,6 +3455,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
proto_item *sub_item;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -3211,6 +3471,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x2017: /* LE Encrypt */
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_encrypted_data, tvb, offset, 16, ENC_NA);
offset += 16;
@@ -3220,6 +3481,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x2018: /* LE Rand */
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_random_number, tvb, offset, 8, ENC_NA);
offset += 8;
@@ -3232,6 +3494,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
proto_item *ti_le_states_subtree;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
ti_le_states = proto_tree_add_item(tree, hf_bthci_evt_le_states, tvb, offset, 8, ENC_NA);
@@ -3276,6 +3539,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
case 0x201f: /* LE Test End */
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_le_num_packets, tvb, offset, 2, ENC_LITTLE_ENDIAN);
offset += 2;
@@ -3295,9 +3559,11 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset,
}
static int
-dissect_bthci_evt_qos_setup_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_qos_setup_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3318,6 +3584,7 @@ dissect_bthci_evt_qos_setup_complete(tvbuff_t *tvb, int offset, packet_info *pin
proto_tree_add_item(tree, hf_bthci_evt_latency, tvb, offset, 4, ENC_LITTLE_ENDIAN);
offset += 4;
+
proto_tree_add_item(tree, hf_bthci_evt_delay_variation, tvb, offset, 4, ENC_LITTLE_ENDIAN);
offset += 4;
@@ -3325,9 +3592,11 @@ dissect_bthci_evt_qos_setup_complete(tvbuff_t *tvb, int offset, packet_info *pin
}
static int
-dissect_bthci_evt_change_conn_link_key_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_change_conn_link_key_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3337,9 +3606,11 @@ dissect_bthci_evt_change_conn_link_key_complete(tvbuff_t *tvb, int offset, packe
}
static int
-dissect_bthci_evt_master_link_key_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_master_link_key_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3352,9 +3623,11 @@ dissect_bthci_evt_master_link_key_complete(tvbuff_t *tvb, int offset, packet_inf
}
static int
-dissect_bthci_evt_encryption_change(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_encryption_change(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3367,11 +3640,13 @@ dissect_bthci_evt_encryption_change(tvbuff_t *tvb, int offset, packet_info *pinf
}
static int
-dissect_bthci_evt_read_remote_ext_features_complete(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
+dissect_bthci_evt_read_remote_ext_features_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
guint8 page_number;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3405,6 +3680,7 @@ dissect_bthci_evt_sync_connection_complete(tvbuff_t *tvb, int offset,
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
status = tvb_get_guint8(tvb, offset);
+ send_hci_summary_status_tap(status, pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3495,11 +3771,13 @@ dissect_bthci_evt_sync_connection_complete(tvbuff_t *tvb, int offset,
}
static int
-dissect_bthci_evt_sync_connection_changed(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_sync_connection_changed(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_item *item;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3523,11 +3801,13 @@ dissect_bthci_evt_sync_connection_changed(tvbuff_t *tvb, int offset, packet_info
}
static int
-dissect_bthci_evt_sniff_subrating(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_sniff_subrating(tvbuff_t *tvb, int offset, packet_info *pinfo,
+ proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_item *item;
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3553,9 +3833,11 @@ dissect_bthci_evt_sniff_subrating(tvbuff_t *tvb, int offset, packet_info *pinfo
}
static int
-dissect_bthci_evt_flow_specification_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_flow_specification_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3595,9 +3877,11 @@ dissect_bthci_evt_enhanced_flush_complete(tvbuff_t *tvb, int offset, packet_info
}
static int
-dissect_bthci_evt_encryption_key_refresh_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+dissect_bthci_evt_encryption_key_refresh_complete(tvbuff_t *tvb, int offset,
+ packet_info *pinfo, proto_tree *tree, bluetooth_data_t *bluetooth_data)
{
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ send_hci_summary_status_tap(tvb_get_guint8(tvb, offset), pinfo, bluetooth_data);
offset += 1;
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, ENC_LITTLE_ENDIAN);
@@ -3715,6 +3999,27 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
proto_item_append_text(bthci_evt_tree, " - %s", val_to_str_ext_const(evt_code, &bthci_evt_evt_code_vals_ext, "Unknown 0x%08x"));
offset += 1;
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_EVENT;
+ tap_hci_summary->event = evt_code;
+ if (try_val_to_str_ext(evt_code, &bthci_evt_evt_code_vals_ext))
+ tap_hci_summary->name = val_to_str_ext(evt_code, &bthci_evt_evt_code_vals_ext, "Unknown 0x%04x");
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
param_length = tvb_get_guint8(tvb, offset);
proto_tree_add_item(bthci_evt_tree, hf_bthci_evt_param_length, tvb, offset, 1, ENC_LITTLE_ENDIAN);
offset += 1;
@@ -3727,7 +4032,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
if (param_length > 0) {
switch(evt_code) {
case 0x01: /* Inquiry Complete */
- offset = dissect_bthci_evt_inquire_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_inquire_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x0401, COMMAND_STATUS_NORMAL); /* Inquiry */
add_opcode(opcode_list, 0x0403, COMMAND_STATUS_NORMAL); /* Periodic Inquiry Mode */
break;
@@ -3754,7 +4059,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x06: /* Authentication Complete */
- offset = dissect_bthci_evt_auth_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_auth_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x0411, COMMAND_STATUS_NORMAL); /* Authentication Requested */
break;
@@ -3764,21 +4069,21 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x08: /* Encryption Change */
- offset = dissect_bthci_evt_encryption_change(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_encryption_change(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x0413, COMMAND_STATUS_NORMAL); /* Encryption Requested */
add_opcode(opcode_list, 0x2019, COMMAND_STATUS_NORMAL); /* LE Start Encryption */
break;
case 0x09: /* Change Connection Link Key Complete */
- offset = dissect_bthci_evt_change_conn_link_key_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_change_conn_link_key_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x0a: /* Master Link Key Complete */
- offset = dissect_bthci_evt_master_link_key_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_master_link_key_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x0b: /* Read Remote Support Features Complete */
- offset = dissect_bthci_evt_read_remote_support_features_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_read_remote_support_features_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x41B, COMMAND_STATUS_NORMAL); /* Read Remote Supported Features */
break;
@@ -3788,7 +4093,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x0d: /* QoS Setup Complete */
- offset = dissect_bthci_evt_qos_setup_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_qos_setup_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x0e: /* Command Complete */
@@ -3801,7 +4106,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x10: /* Hardware Error */
- offset = dissect_bthci_evt_hardware_error(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_hardware_error(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x11: /* Flush Occurred */
@@ -3852,11 +4157,11 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x1c: /* Read Clock Offset Complete */
- offset = dissect_bthci_evt_read_clock_offset_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_read_clock_offset_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x1d: /* Connection Packet Type Changed */
- offset = dissect_bthci_evt_conn_packet_type_changed(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_conn_packet_type_changed(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x040F, COMMAND_STATUS_NORMAL); /* Change Connection Packet Type */
break;
@@ -3873,7 +4178,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x21: /* Flow Specification Complete */
- offset = dissect_bthci_evt_flow_specification_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_flow_specification_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x22: /* Inquiry Result with RSSI */
@@ -3881,7 +4186,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x23: /* Read Remote Extended Features Complete */
- offset = dissect_bthci_evt_read_remote_ext_features_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_read_remote_ext_features_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x41C, COMMAND_STATUS_NORMAL); /* Read Remote Supported Features */
break;
@@ -3894,12 +4199,12 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x2d: /* Synchronous Connection Changed */
- offset = dissect_bthci_evt_sync_connection_changed(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_sync_connection_changed(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x043D, COMMAND_STATUS_NORMAL); /* Enhanced Setup Synchronous Connection */
break;
case 0x2e: /* Sniff Subrating */
- offset = dissect_bthci_evt_sniff_subrating(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_sniff_subrating(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x2f: /* Extended Inquiry Result */
@@ -3913,7 +4218,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x30: /* Encryption Key Refresh Complete */
- offset = dissect_bthci_evt_encryption_key_refresh_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_encryption_key_refresh_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
add_opcode(opcode_list, 0x2019, COMMAND_STATUS_NORMAL); /* LE Start Encryption */
break;
@@ -3966,7 +4271,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x40: /* Physical Link Complete */
- offset = dissect_bthci_evt_physical_link_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_physical_link_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x41: /* Channel Selected */
@@ -3975,7 +4280,7 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x42: /* Disconnect Physical Link Complete */
- offset = dissect_bthci_evt_disconnect_physical_link_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_disconnect_physical_link_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x43: /* Physical Link Loss Early Warning */
@@ -3983,15 +4288,15 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x45: /* Logical Link Complete */
- offset = dissect_bthci_evt_logical_link_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_logical_link_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x46: /* Disconnect Logical Link Complete */
- offset = dissect_bthci_evt_disconnect_logical_link_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_disconnect_logical_link_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x47: /* Flow Spec Modify Complete */
- offset = dissect_bthci_evt_flow_spec_modify_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_flow_spec_modify_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x48: /* Number Of Completed Data Blocks */
@@ -3999,8 +4304,13 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x49: /* AMP Start Test */
+ offset = dissect_bthci_evt_amp_start_stop_test(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
+ add_opcode(opcode_list, 0x1809, COMMAND_STATUS_NORMAL); /* AMP Test */
+ break;
+
case 0x4a: /* AMP Test End */
- offset = dissect_bthci_evt_amp_start_stop_test(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_amp_start_stop_test(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
+ add_opcode(opcode_list, 0x1808, COMMAND_STATUS_NORMAL); /* AMP Test End */
break;
case 0x4b: /* AMP Receiver Test */
@@ -4008,11 +4318,11 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat
break;
case 0x4c: /* Short Range Mode Change Complete */
- offset = dissect_bthci_evt_short_range_mode_change_complete(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_short_range_mode_change_complete(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x4d: /* AMP Status Change */
- offset = dissect_bthci_evt_amp_status_change(tvb, offset, pinfo, bthci_evt_tree);
+ offset = dissect_bthci_evt_amp_status_change(tvb, offset, pinfo, bthci_evt_tree, bluetooth_data);
break;
case 0x4e: /* Triggered Clock Capture */
diff --git a/epan/dissectors/packet-bthci_vendor.c b/epan/dissectors/packet-bthci_vendor.c
index 62872ac275..813ee013ab 100644
--- a/epan/dissectors/packet-bthci_vendor.c
+++ b/epan/dissectors/packet-bthci_vendor.c
@@ -26,6 +26,7 @@
#include <epan/packet.h>
#include <epan/expert.h>
+#include <epan/tap.h>
#include "packet-bluetooth.h"
#include "packet-bthci_cmd.h"
@@ -404,6 +405,28 @@ dissect_bthci_vendor_broadcom(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
else
col_append_fstr(pinfo->cinfo, COL_INFO, "Unknown Command 0x%04X (opcode 0x%04X)", ocf, opcode);
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_VENDOR_OPCODE;
+ tap_hci_summary->ogf = opcode >> 10;
+ tap_hci_summary->ocf = ocf;
+ if (try_val_to_str(ocf, opcode_ocf_vals))
+ tap_hci_summary->name = description;
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
proto_tree_add_item(main_tree, hf_parameter_length, tvb, offset, 1, ENC_NA);
length = tvb_get_guint8(tvb, offset);
offset += 1;
@@ -757,10 +780,32 @@ dissect_bthci_vendor_broadcom(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
col_add_fstr(pinfo->cinfo, COL_INFO, "Rcvd Broadcom ");
event_code = tvb_get_guint8(tvb, offset);
- col_append_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(event_code, &bthci_evt_evt_code_vals_ext, "Unknown 0x%08x"));
+ description = val_to_str_ext_const(event_code, &bthci_evt_evt_code_vals_ext, "Unknown 0x%08x");
+ col_append_str(pinfo->cinfo, COL_INFO, description);
proto_tree_add_item(main_tree, hf_event_code, tvb, offset, 1, ENC_NA);
offset += 1;
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT;
+ tap_hci_summary->event = event_code;
+ if (try_val_to_str_ext(event_code, &bthci_evt_evt_code_vals_ext))
+ tap_hci_summary->name = description;
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
proto_tree_add_item(main_tree, hf_parameter_length, tvb, offset, 1, ENC_NA);
length = tvb_get_guint8(tvb, offset);
offset += 1;
@@ -785,6 +830,28 @@ dissect_bthci_vendor_broadcom(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
else
col_append_fstr(pinfo->cinfo, COL_INFO, " (Unknown Command 0x%04X [opcode 0x%04X])", ocf, opcode);
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+ if (bluetooth_data) {
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+ } else {
+ tap_hci_summary->interface_id = HCI_INTERFACE_DEFAULT;
+ tap_hci_summary->adapter_id = HCI_ADAPTER_DEFAULT;
+ }
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT_OPCODE;
+ tap_hci_summary->ogf = opcode >> 10;
+ tap_hci_summary->ocf = ocf;
+ if (try_val_to_str(ocf, opcode_ocf_vals))
+ tap_hci_summary->name = description;
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
proto_tree_add_item(main_tree, hf_status, tvb, offset, 1, ENC_NA);
status = tvb_get_guint8(tvb, offset);
offset += 1;