aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-bthci_evt.c
diff options
context:
space:
mode:
authorJaap Keuter <jaap.keuter@xs4all.nl>2007-09-23 19:40:54 +0000
committerJaap Keuter <jaap.keuter@xs4all.nl>2007-09-23 19:40:54 +0000
commit0693598d86fc1dcac6c9575bd2472405913cc927 (patch)
tree59c2f6acbd548d4e0751cfa2d4ae01cd4cabf78b /epan/dissectors/packet-bthci_evt.c
parentb2d3e554db968a8de61eaecba1ca3da7d979ea37 (diff)
From Allan M. Madsen:
Wireshark is only supporting a very old and deprecated version of the Bluetooth specification (1.1). The Bluetooth SIG recently ratified version 2.1 of the Bluetooth specification and a lot of enhancements have been added to the specification. The HCI dissectors needs a major update to match these changes. svn path=/trunk/; revision=22924
Diffstat (limited to 'epan/dissectors/packet-bthci_evt.c')
-rw-r--r--epan/dissectors/packet-bthci_evt.c1594
1 files changed, 1471 insertions, 123 deletions
diff --git a/epan/dissectors/packet-bthci_evt.c b/epan/dissectors/packet-bthci_evt.c
index 47cafce84c..35ffc7cdeb 100644
--- a/epan/dissectors/packet-bthci_evt.c
+++ b/epan/dissectors/packet-bthci_evt.c
@@ -6,6 +6,8 @@
* Refactored for wireshark checkin
* Ronnie Sahlberg 2006
*
+ * Updated to HCI specification 2.1 + EDR
+ * Allan M. Madsen 2007
*
* $Id$
*
@@ -33,9 +35,12 @@
#endif
#include <glib.h>
+#include <string.h>
+
#include <epan/packet.h>
#include <etypes.h>
#include <packet-hci_h4.h>
+#include <addr_resolv.h>
static dissector_handle_t bthci_com_handle;
@@ -51,12 +56,13 @@ static int hf_bthci_evt_num_compl_packets = -1;
static int hf_bthci_evt_com_opcode = -1;
static int hf_bthci_evt_ret_params = -1;
static int hf_bthci_evt_status = -1;
+static int hf_bthci_evt_status_pending = -1;
static int hf_bthci_evt_ocf = -1;
static int hf_bthci_evt_ogf = -1;
static int hf_bthci_evt_bd_addr = -1;
+static int hf_bthci_evt_class_of_device = -1;
static int hf_bthci_evt_link_type = -1;
static int hf_bthci_evt_encryption_mode = -1;
-static int hf_bthci_evt_class_of_device = -1;
static int hf_bthci_evt_reason = -1;
static int hf_bthci_evt_remote_name = -1;
static int hf_bthci_evt_encryption_enable = -1;
@@ -81,10 +87,16 @@ static int hf_bthci_evt_link_key = -1;
static int hf_bthci_evt_key_type = -1;
static int hf_bthci_evt_max_slots = -1;
static int hf_bthci_evt_clock_offset = -1;
+static int hf_bthci_evt_link_type_2dh1 = -1;
+static int hf_bthci_evt_link_type_3dh1 = -1;
static int hf_bthci_evt_link_type_dm1 = -1;
static int hf_bthci_evt_link_type_dh1 = -1;
+static int hf_bthci_evt_link_type_2dh3 = -1;
+static int hf_bthci_evt_link_type_3dh3 = -1;
static int hf_bthci_evt_link_type_dm3 = -1;
static int hf_bthci_evt_link_type_dh3 = -1;
+static int hf_bthci_evt_link_type_2dh5 = -1;
+static int hf_bthci_evt_link_type_3dh5 = -1;
static int hf_bthci_evt_link_type_dm5 = -1;
static int hf_bthci_evt_link_type_dh5 = -1;
static int hf_bthci_evt_link_type_hv1 = -1;
@@ -114,6 +126,35 @@ static int hf_bthci_evt_lmp_feature_21 = -1;
static int hf_bthci_evt_lmp_feature_22 = -1;
static int hf_bthci_evt_lmp_feature_23 = -1;
static int hf_bthci_evt_lmp_feature_24 = -1;
+static int hf_bthci_evt_lmp_feature_27 = -1;
+static int hf_bthci_evt_lmp_feature_31 = -1;
+static int hf_bthci_evt_lmp_feature_32 = -1;
+static int hf_bthci_evt_lmp_feature_33 = -1;
+static int hf_bthci_evt_lmp_feature_34 = -1;
+static int hf_bthci_evt_lmp_feature_35 = -1;
+static int hf_bthci_evt_lmp_feature_36 = -1;
+static int hf_bthci_evt_lmp_feature_37 = -1;
+static int hf_bthci_evt_lmp_feature_40 = -1;
+static int hf_bthci_evt_lmp_feature_41 = -1;
+static int hf_bthci_evt_lmp_feature_43 = -1;
+static int hf_bthci_evt_lmp_feature_44 = -1;
+static int hf_bthci_evt_lmp_feature_47 = -1;
+static int hf_bthci_evt_lmp_feature_50 = -1;
+static int hf_bthci_evt_lmp_feature_51 = -1;
+static int hf_bthci_evt_lmp_feature_52 = -1;
+static int hf_bthci_evt_lmp_feature_53 = -1;
+static int hf_bthci_evt_lmp_feature_54 = -1;
+static int hf_bthci_evt_lmp_feature_55 = -1;
+static int hf_bthci_evt_lmp_feature_56 = -1;
+static int hf_bthci_evt_lmp_feature_57 = -1;
+static int hf_bthci_evt_lmp_feature_60 = -1;
+static int hf_bthci_evt_lmp_feature_63 = -1;
+static int hf_bthci_evt_lmp_feature_64 = -1;
+static int hf_bthci_evt_lmp_feature_65 = -1;
+static int hf_bthci_evt_lmp_feature_66 = -1;
+static int hf_bthci_evt_lmp_feature_70 = -1;
+static int hf_bthci_evt_lmp_feature_71 = -1;
+static int hf_bthci_evt_lmp_feature_77 = -1;
static int hf_bthci_evt_num_keys = -1;
static int hf_bthci_evt_num_keys_read = -1;
static int hf_bthci_evt_max_num_keys = -1;
@@ -125,7 +166,7 @@ static int hf_bthci_evt_link_policy_setting_hold = -1;
static int hf_bthci_evt_link_policy_setting_sniff = -1;
static int hf_bthci_evt_link_policy_setting_park = -1;
static int hf_bthci_evt_pin_type = -1;
-static int hf_bthci_evt_name = -1;
+static int hf_bthci_evt_device_name = -1;
static int hf_bthci_evt_timeout = -1;
static int hf_bthci_evt_scan_enable = -1;
static int hf_bthci_evt_authentication_enable = -1;
@@ -151,13 +192,58 @@ static int hf_bthci_evt_host_data_packet_length_acl = -1;
static int hf_bthci_evt_host_data_packet_length_sco = -1;
static int hf_bthci_evt_host_total_num_acl_data_packets = -1;
static int hf_bthci_evt_host_total_num_sco_data_packets = -1;
+static int hf_bthci_evt_page_number = -1;
+static int hf_bthci_evt_max_page_number = -1;
+static int hf_bthci_evt_local_supported_cmds = -1;
+static int hf_bthci_evt_fec_required = -1;
+static int hf_bthci_evt_err_data_reporting = -1;
+static int hf_bthci_evt_scan_type = -1;
+static int hf_bthci_evt_inq_mode = -1;
+static int hf_bthci_evt_power_level_type = -1;
+static int hf_bthci_evt_ext_lmp_features = -1;
+static int hf_bthci_evt_sync_link_type = -1;
+static int hf_bthci_evt_sync_tx_interval = -1;
+static int hf_bthci_evt_sync_rtx_window = -1;
+static int hf_bthci_evt_sync_rx_packet_length = -1;
+static int hf_bthci_evt_sync_tx_packet_length = -1;
+static int hf_bthci_evt_air_mode = -1;
+static int hf_bthci_evt_max_tx_latency = -1;
+static int hf_bthci_evt_max_rx_latency = -1;
+static int hf_bthci_evt_min_remote_timeout = -1;
+static int hf_bthci_evt_min_local_timeout = -1;
+static int hf_bthci_evt_link_supervision_timeout = -1;
+static int hf_bthci_evt_token_bucket_size = -1;
+static int hf_bthci_evt_flow_direction = -1;
+static int hf_bthci_evt_afh_ch_assessment_mode = -1;
+static int hf_bthci_evt_lmp_handle = -1;
+static int hf_bthci_evt_clock = -1;
+static int hf_bthci_evt_clock_accuracy = -1;
+static int hf_bthci_evt_afh_mode = -1;
+static int hf_bthci_evt_afh_channel_map = -1;
+static int hf_bthci_evt_simple_pairing_mode = -1;
+static int hf_bthci_evt_randomizer_r = -1;
+static int hf_bthci_evt_hash_c = -1;
+static int hf_bthci_evt_io_capability = -1;
+static int hf_bthci_evt_oob_data_present = -1;
+static int hf_bthci_evt_auth_requirements = -1;
+static int hf_bthci_evt_numeric_value = -1;
+static int hf_bthci_evt_passkey = -1;
+static int hf_bthci_evt_notification_type = -1;
+static int hf_bthci_evt_eir_data = -1;
+static int hf_bthci_evt_eir_struct_length = -1;
+static int hf_bthci_evt_eir_struct_type = -1;
+static int hf_bthci_evt_sc_uuid16 = -1;
+static int hf_bthci_evt_sc_uuid32 = -1;
+static int hf_bthci_evt_sc_uuid128 = -1;
+
/* Initialize the subtree pointers */
static gint ett_bthci_evt = -1;
static gint ett_opcode = -1;
static gint ett_lmp_subtree = -1;
static gint ett_ptype_subtree = -1;
-
+static gint ett_eir_subtree = -1;
+static gint ett_eir_struct_subtree = -1;
static const value_string evt_code_vals[] = {
{0x01, "Inquiry Complete"},
@@ -192,53 +278,33 @@ static const value_string evt_code_vals[] = {
{0x1e, "QoS Violation"},
{0x1f, "Page Scan Mode Change"},
{0x20, "Page Scan Repetition Mode Change"},
+ {0x21, "Flow Specification Complete"},
+ {0x22, "Inquiry Result With RSSI"},
+ {0x23, "Read Remote Extended Features Complete"},
+ {0x2c, "Synchronous Connection Complete"},
+ {0x2d, "Synchronous Connection Changed"},
+ {0x2e, "Sniff Subrate"},
+ {0x2f, "Extended Inquiry Result"},
+ {0x30, "Encryption Key Refresh Complete"},
+ {0x31, "IO Capability Request"},
+ {0x32, "IO Capability Response"},
+ {0x33, "User Confirmation Request"},
+ {0x34, "User Passkey Request"},
+ {0x35, "Remote OOB Data Request"},
+ {0x36, "Simple Pairing Complete"},
+ {0x38, "Link Supervision Timeout Changed"},
+ {0x39, "Enhanced Flush Complete"},
+ {0x3b, "User Passkey Notification"},
+ {0x3c, "Keypress Notification"},
+ {0x3d, "Remote Host Supported Features Notification"},
+ {0xfe, "Bluetooth Logo Testing"},
+ {0xff, "Vendor-Specific"},
{0, NULL}
};
-static const value_string evt_status_vals[] = {
- {0x00, "Command Succeeded"},
- {0x01, "Unknown HCI Command"},
- {0x02, "No Connection"},
- {0x03, "Hardware Failure"},
- {0x04, "Page Timeout"},
- {0x05, "Authentication Failure"},
- {0x06, "Key Missing"},
- {0x07, "Memory Full"},
- {0x08, "Connection Timeout"},
- {0x09, "Max Number Of Connections"},
- {0x0A, "Max Number Of SCO Connections To A Device"},
- {0x0B, "ACL connection already exists"},
- {0x0C, "Command Disallowed"},
- {0x0D, "Host Rejected due to limited resources"},
- {0x0E, "Host Rejected due to security reasons"},
- {0x0F, "Host Rejected due to remote device is only a personal device"},
- {0x10, "Host Timeout"},
- {0x11, "Unsupported Feature or Parameter Value"},
- {0x12, "Invalid HCI Command Parameters"},
- {0x13, "Other End Terminated Connection: User Ended Connection"},
- {0x14, "Other End Terminated Connection: Low Resources"},
- {0x15, "Other End Terminated Connection: About to Power Off"},
- {0x16, "Connection Terminated by Local Host"},
- {0x17, "Repeated Attempts"},
- {0x18, "Pairing Not Allowed"},
- {0x19, "Unknown LMP PDU"},
- {0x1A, "Unsupported Remote Feature"},
- {0x1B, "SCO Offset Rejected"},
- {0x1C, "SCO Interval Rejected"},
- {0x1D, "SCO Air Mode Rejected"},
- {0x1E, "Invalid LMP Parameters"},
- {0x1F, "Unspecified Error"},
- {0x20, "Unsupported LMP Parameter Value"},
- {0x21, "Role Change Not Allowed"},
- {0x22, "LMP Response Timeout"},
- {0x23, "LMP Error Transaction Collision"},
- {0x24, "LMP PDU Not Allowed"},
- {0x25, "Encryption Mode Not Acceptable"},
- {0x26, "Unit Key Used"},
- {0x27, "QoS is Not Supported"},
- {0x28, "Instant Passed"},
- {0x29, "Pairing with Unit Key Not Supported"},
- {0, NULL}
+static const value_string bthci_cmd_status_pending_vals[] = {
+ {0x00, "Pending"},
+ {0, NULL }
};
static const value_string evt_link_types[] = {
@@ -247,6 +313,12 @@ static const value_string evt_link_types[] = {
{0, NULL }
};
+static const value_string evt_sync_link_types[] = {
+ {0x00, "SCO connection"},
+ {0x02, "eSCO connection"},
+ {0, NULL }
+};
+
static const value_string evt_encryption_modes[] = {
{0x00, "Encryption Disabled"},
{0x01, "Encryption only for point-to-point packets"},
@@ -269,12 +341,18 @@ static const value_string evt_key_flag[] = {
static const value_string evt_lmp_vers_nr[] = {
{0x00, "Bluetooth LMP 1.0"},
{0x01, "Bluetooth LMP 1.1"},
+ {0x02, "Bluetooth LMP 1.2"},
+ {0x03, "Bluetooth LMP 2.0"},
+ {0x04, "Bluetooth LMP 2.1"},
{0, NULL }
};
static const value_string evt_hci_vers_nr[] = {
{0x00, "Bluetooth HCI Specification 1.0B"},
{0x01, "Bluetooth HCI Specification 1.1"},
+ {0x02, "Bluetooth HCI Specification 1.2"},
+ {0x03, "Bluetooth HCI Specification 2.0"},
+ {0x04, "Bluetooth HCI Specification 2.1"},
{0, NULL }
};
@@ -292,6 +370,68 @@ static const value_string evt_comp_id[] = {
{0x000a, "Cambridge Silicon Radio"},
{0x000b, "Silicon Wave"},
{0x000c, "Digianswer"},
+ {0x000d, "Texas Instruments Inc."},
+ {0x000e, "Parthus Technologies Inc."},
+ {0x000f, "Broadcom Corporation"},
+ {0x0010, "Mitel Semiconductor"},
+ {0x0011, "Widcomm, Inc."},
+ {0x0012, "Zeevo, Inc."},
+ {0x0013, "Atmel Corporation"},
+ {0x0014, "Mitsubishi Electric Corporation"},
+ {0x0015, "RTX Telecom A/S"},
+ {0x0016, "KC Technology Inc."},
+ {0x0017, "Newlogic"},
+ {0x0018, "Transilica, Inc."},
+ {0x0019, "Rohde & Schwarz GmbH & Co. KG"},
+ {0x001a, "TTPCom Limited"},
+ {0x001b, "Signia Technologies, Inc."},
+ {0x001c, "Conexant Systems Inc."},
+ {0x001d, "Qualcomm"},
+ {0x001e, "Inventel"},
+ {0x001f, "AVM Berlin"},
+ {0x0020, "BandSpeed, Inc."},
+ {0x0021, "Mansella Ltd"},
+ {0x0022, "NEC Corporation"},
+ {0x0023, "WavePlus Technology Co., Ltd"},
+ {0x0024, "Alcatel"},
+ {0x0025, "Philips Semiconductors"},
+ {0x0026, "C Technologies"},
+ {0x0027, "Open Interface"},
+ {0x0028, "RF Micro Devices"},
+ {0x0029, "Hitachi Ltd"},
+ {0x002a, "Symbol Technologies, Inc."},
+ {0x002b, "Tenovis"},
+ {0x002c, "Macronix International Co. Ltd."},
+ {0x002d, "GCT Semiconductor"},
+ {0x002e, "Norwood Systems"},
+ {0x002f, "MewTel Technology Inc."},
+ {0x0030, "ST Microelectronics"},
+ {0x0031, "Synopsys"},
+ {0x0032, "Red-M (Communications) Ltd"},
+ {0x0033, "Commil Ltd"},
+ {0x0034, "Computer Access Technology Corporation (CATC)"},
+ {0x0035, "Eclipse (HQ Espana) S.L."},
+ {0x0036, "Renesas Technology Corp."},
+ {0x0037, "Mobilian Corporation"},
+ {0x0038, "Terax"},
+ {0x0039, "Integrated System Solution Corp."},
+ {0x003a, "Matsushita Electric Industrial Co. Ltd."},
+ {0x003b, "Gennum Corporation"},
+ {0x003c, "Research In Motion"},
+ {0x003d, "IPextreme, Inc."},
+ {0x003e, "Systems and Chips, Inc"},
+ {0x003f, "Bluetooth SIG, Inc"},
+ {0x0040, "Seiko Epson Corporation"},
+ {0x0041, "Integrated Silicon Solution Taiwan, Inc."},
+ {0x0042, "CONWISE Technology Corporation Ltd"},
+ {0x0043, "PARROT SA"},
+ {0x0044, "Socket Communications"},
+ {0x0045, "Atheros Communications Inc."},
+ {0x0046, "MediaTek, Inc."},
+ {0x0047, "Bluegiga"},
+ {0x0048, "Marvell Technology Group Ltd."},
+ {0x0049, "3DSP Corporation"},
+ {0x004a, "Accel Semiconductor Ltd."},
{0xFFFF, "For use in internal and interoperability tests."},
{0, NULL }
};
@@ -327,6 +467,10 @@ static const value_string evt_key_types[] = {
{0x00, "Combination Key"},
{0x01, "Local Unit Key"},
{0x02, "Remote Unit Key"},
+ {0x03, "Debug Combination Key"},
+ {0x04, "Unauthenticated Combination Key"},
+ {0x05, "Authenticated Combination Key"},
+ {0x06, "Changed Combination Key"},
{0, NULL }
};
@@ -352,9 +496,28 @@ static const value_string evt_page_scan_period_modes[] = {
{0, NULL }
};
+static const value_string evt_scan_types[] = {
+ {0x00, "Standard Scan" },
+ {0x01, "Interlaced Scan" },
+ {0, NULL }
+};
+
+static const value_string evt_inq_modes[] = {
+ {0x00, "Standard Results" },
+ {0x01, "Results With RSSI" },
+ {0x02, "Results With RSSI or Extended Results" },
+ {0, NULL }
+};
+
+static const value_string evt_power_level_types[] = {
+ {0x00, "Read Current Transmission Power Level" },
+ {0x01, "Read Maximum Transmission Power Level" },
+ {0, NULL }
+};
+
static const value_string evt_boolean[] = {
- {0x0 , "false" },
- {0x1 , "true" },
+ {0x0 , "False" },
+ {0x1 , "True" },
{0, NULL }
};
@@ -417,6 +580,90 @@ static const value_string evt_country_code_values[] = {
{0, NULL }
};
+static const value_string evt_air_mode_values[] = {
+ {0x0, "\xb5-law" },
+ {0x1, "A-law" },
+ {0x2, "CVSD" },
+ {0x3, "Transparent" },
+ {0, NULL }
+};
+
+static const value_string evt_flow_direction_values[] = {
+ {0x0, "Outgoing Trafic" },
+ {0x1, "Incoming Trafic" },
+ {0, NULL }
+};
+
+static const value_string evt_notification_type_vals[] = {
+ {0x0, "Passkey Entry Started" },
+ {0x1, "Passkey Digit Entered" },
+ {0x2, "Passkey Digit Erased" },
+ {0x3, "Passkey Cleared" },
+ {0x4, "Passkey Entry Completed" },
+ {0, NULL }
+};
+
+static int
+dissect_bthci_evt_bd_addr(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ guint8 i, bd_addr[6];
+ proto_item *handle_item;
+
+ for(i=6; i; i--)
+ bd_addr[6-i] = tvb_get_guint8(tvb, offset+i-1);
+
+ handle_item = proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
+ proto_item_append_text(handle_item, "%02x%02x:%02x:%02x%02x%02x (%s)",
+ bd_addr[0], bd_addr[1], bd_addr[2], bd_addr[3], bd_addr[4], bd_addr[5],
+ get_ether_name(bd_addr));
+
+ offset+=6;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_cod(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ guint8 cod1, cod2;
+ proto_item *item;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_class_of_device, tvb, offset, 3, TRUE);
+
+ cod1 = tvb_get_guint8(tvb, offset+1);
+ cod2 = tvb_get_guint8(tvb, offset+2);
+
+ if( (cod2 != 0) || (cod1 & 0x20) )
+ {
+ char buf[128];
+
+ buf[0] = 0;
+
+ proto_item_append_text(item, " (%s - services:", val_to_str(cod1 & 0x1f, bthci_cmd_major_dev_class_vals, "???"));
+ if (cod2 & 0x80) strcat(buf, " Information,");
+ if (cod2 & 0x40) strcat(buf, " Telephony,");
+ if (cod2 & 0x20) strcat(buf, " Audio,");
+ if (cod2 & 0x10) strcat(buf, " Object transfer,");
+ if (cod2 & 0x08) strcat(buf, " Capturing,");
+ if (cod2 & 0x04) strcat(buf, " Rendering,");
+ if (cod2 & 0x02) strcat(buf, " Networking,");
+ if (cod2 & 0x01) strcat(buf, " Positioning,");
+ if (cod1 & 0x20) strcat(buf, " Limited discoverable mode,");
+
+ buf[strlen(buf)-1] = 0; /* skip last comma */
+
+ strcat(buf, ")");
+
+ proto_item_append_text(item, buf);
+ }
+ else
+ {
+ proto_item_append_text(item, " (%s - no major services)", val_to_str(cod1 & 0x1f, bthci_cmd_major_dev_class_vals, "???"));
+ }
+
+ return offset+3;
+}
+
static int
dissect_bthci_evt_inq_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
@@ -435,8 +682,7 @@ dissect_bthci_evt_conn_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
offset+=2;
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_link_type, tvb, offset, 1, TRUE);
offset++;
@@ -450,12 +696,10 @@ dissect_bthci_evt_conn_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U
static int
dissect_bthci_evt_conn_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
-
- proto_tree_add_item(tree, hf_bthci_evt_class_of_device, tvb, offset, 3, TRUE);
- offset+=3;
-
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ offset = dissect_bthci_evt_cod(tvb, offset, pinfo, tree);
+
proto_tree_add_item(tree, hf_bthci_evt_link_type, tvb, offset, 1, TRUE);
offset++;
@@ -492,6 +736,8 @@ dissect_bthci_evt_auth_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U
static int
dissect_bthci_evt_lmp_features(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
+ guint8 fc_lag;
+ proto_item *item;
proto_item *ti_lmp_features=NULL;
proto_item *ti_lmp_subtree=NULL;
@@ -524,10 +770,50 @@ dissect_bthci_evt_lmp_features(tvbuff_t *tvb, int offset, packet_info *pinfo _U_
proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_21, tvb, offset, 1, TRUE);
proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_22, tvb, offset, 1, TRUE);
proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_23, tvb, offset, 1, TRUE);
- proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_24, tvb, offset, 1, TRUE);
+ item = proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_24, tvb, offset, 1, TRUE);
+ fc_lag = (tvb_get_guint8(tvb, offset) & 0x70)>>4;
+ proto_item_append_text(item, " (%i bytes)", 256*fc_lag);
+
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_27, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_31, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_32, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_33, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_34, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_35, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_36, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_37, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_40, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_41, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_43, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_44, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_47, tvb, offset, 1, TRUE);
offset++;
- offset+=5;
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_50, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_51, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_52, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_53, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_54, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_55, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_56, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_57, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_60, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_63, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_64, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_65, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_66, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_70, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_71, tvb, offset, 1, TRUE);
+ proto_tree_add_item(ti_lmp_subtree,hf_bthci_evt_lmp_feature_77, tvb, offset, 1, TRUE);
+ offset++;
return offset;
}
@@ -535,8 +821,7 @@ dissect_bthci_evt_lmp_features(tvbuff_t *tvb, int offset, packet_info *pinfo _U_
static int
dissect_bthci_evt_pin_code_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
return offset;
}
@@ -544,8 +829,7 @@ dissect_bthci_evt_pin_code_request(tvbuff_t *tvb, int offset, packet_info *pinfo
static int
dissect_bthci_evt_link_key_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
return offset;
}
@@ -553,8 +837,7 @@ dissect_bthci_evt_link_key_request(tvbuff_t *tvb, int offset, packet_info *pinfo
static int
dissect_bthci_evt_link_key_notification(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_link_key, tvb, offset, 16, TRUE);
offset+=16;
@@ -575,8 +858,7 @@ dissect_bthci_evt_return_link_keys(tvbuff_t *tvb, int offset, packet_info *pinfo
offset++;
while(evt_num_keys--){
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_link_key, tvb, offset, 16, TRUE);
offset+=16;
@@ -606,8 +888,7 @@ dissect_bthci_evt_remote_name_req_complete(tvbuff_t *tvb, int offset, packet_inf
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_remote_name, tvb, offset, 248, FALSE);
offset+=248;
@@ -693,8 +974,7 @@ dissect_bthci_evt_role_change(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_role, tvb, offset, 1, TRUE);
offset++;
@@ -779,7 +1059,6 @@ static int
dissect_bthci_evt_conn_packet_type_changed(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
guint16 flags;
- int flag_DM1, flag_DM3, flag_DM5, flag_DH1, flag_DH3, flag_DH5, flag_HV1, flag_HV2, flag_HV3;
proto_tree *handle_tree=NULL;
proto_item *ti_ptype_subtree=NULL;
@@ -788,43 +1067,52 @@ dissect_bthci_evt_conn_packet_type_changed(tvbuff_t *tvb, int offset, packet_inf
flags=tvb_get_letohs(tvb, offset);
proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
- flag_DM1 = (flags & 0x0008) ? 1 : 0;
- flag_DH1 = (flags & 0x0010) ? 1 : 0;
- flag_DM3 = (flags & 0x0400) ? 1 : 0;
- flag_DH3 = (flags & 0x0800) ? 1 : 0;
- flag_DM5 = (flags & 0x4000) ? 1 : 0;
- flag_DH5 = (flags & 0x8000) ? 1 : 0;
- flag_HV1 = (flags & 0x0020) ? 1 : 0;
- flag_HV2 = (flags & 0x0040) ? 1 : 0;
- flag_HV3 = (flags & 0x0080) ? 1 : 0;
offset+=2;
handle_tree = proto_tree_add_text(tree, tvb, offset, 2, "Usable packet types: ");
ti_ptype_subtree = proto_item_add_subtree(handle_tree, ett_ptype_subtree);
- if (flag_DM1)
+ if (flags & 0x0008)
proto_item_append_text(handle_tree, "DM1 ");
- if (flag_DH1)
- proto_item_append_text(handle_tree, "DH3 ");
- if (flag_DM3)
+ if (flags & 0x0010)
+ proto_item_append_text(handle_tree, "DH1 ");
+ if (flags & 0x0400)
proto_item_append_text(handle_tree, "DM3 ");
- if (flag_DH3)
+ if (flags & 0x0800)
proto_item_append_text(handle_tree, "DH3 ");
- if (flag_DM5)
+ if (flags & 0x4000)
proto_item_append_text(handle_tree, "DM5 ");
- if (flag_DH5)
+ if (flags & 0x8000)
proto_item_append_text(handle_tree, "DH5 ");
- if (flag_HV1)
+ if (flags & 0x0020)
proto_item_append_text(handle_tree, "HV1 ");
- if (flag_HV2)
+ if (flags & 0x0040)
proto_item_append_text(handle_tree, "HV2 ");
- if (flag_HV3)
+ if (flags & 0x0080)
proto_item_append_text(handle_tree, "HV3 ");
-
+ if (flags & 0x0002)
+ proto_item_append_text(handle_tree, "2-DH1 ");
+ if (flags & 0x0004)
+ proto_item_append_text(handle_tree, "3-DH1 ");
+ if (flags & 0x0100)
+ proto_item_append_text(handle_tree, "2-DH3 ");
+ if (flags & 0x0200)
+ proto_item_append_text(handle_tree, "3-DH3 ");
+ if (flags & 0x1000)
+ proto_item_append_text(handle_tree, "2-DH5 ");
+ if (flags & 0x2000)
+ proto_item_append_text(handle_tree, "3-DH5 ");
+
+ proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_2dh1, tvb, offset, 2, TRUE);
+ proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_3dh1, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_dm1, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_dh1, tvb, offset, 2, TRUE);
+ proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_2dh3, tvb, offset, 2, TRUE);
+ proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_3dh3, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_dm3, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_dh3, tvb, offset, 2, TRUE);
+ proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_2dh5, tvb, offset, 2, TRUE);
+ proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_3dh5, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_dm5, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_dh5, tvb, offset, 2, TRUE);
proto_tree_add_item(ti_ptype_subtree, hf_bthci_evt_link_type_hv1, tvb, offset, 2, TRUE);
@@ -838,7 +1126,16 @@ dissect_bthci_evt_conn_packet_type_changed(tvbuff_t *tvb, int offset, packet_inf
static int
dissect_bthci_evt_command_status(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ guint8 status_code;
+
+ status_code = tvb_get_guint8(tvb, offset);
+
+ if( status_code != 0) {
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ }
+ else {
+ proto_tree_add_item(tree, hf_bthci_evt_status_pending, tvb, offset, 1, TRUE);
+ }
offset++;
proto_tree_add_item(tree, hf_bthci_evt_num_command_packets, tvb, offset, 1, TRUE);
@@ -853,8 +1150,7 @@ dissect_bthci_evt_command_status(tvbuff_t *tvb, int offset, packet_info *pinfo _
static int
dissect_bthci_evt_page_scan_mode_change(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_page_scan_mode, tvb, offset, 1, TRUE);
offset++;
@@ -865,8 +1161,7 @@ dissect_bthci_evt_page_scan_mode_change(tvbuff_t *tvb, int offset, packet_info *
static int
dissect_bthci_evt_page_scan_repetition_mode_change(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_page_scan_repetition_mode, tvb, offset, 1, TRUE);
offset++;
@@ -875,6 +1170,213 @@ dissect_bthci_evt_page_scan_repetition_mode_change(tvbuff_t *tvb, int offset, pa
}
static int
+dissect_bthci_evt_inq_result_with_rssi(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ guint8 num, evt_num_responses;
+
+ evt_num_responses = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_bthci_evt_num_responses, tvb, offset, 1, TRUE);
+ offset++;
+
+ for(num=0;num<evt_num_responses;num++){
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_page_scan_repetition_mode, tvb, offset, 1, TRUE);
+ offset++;
+
+ /* reserved byte */
+ offset++;
+
+ offset = dissect_bthci_evt_cod(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_clock_offset, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_rssi, tvb, offset, 1, TRUE);
+ offset++;
+
+ }
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_ext_inquiry_response(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ guint8 i, j, length, type;
+ proto_item *ti_eir=NULL;
+ proto_item *ti_eir_subtree=NULL;
+
+ if(tree){
+ ti_eir=proto_tree_add_text(tree, tvb, offset, 240, "Extended Inquiry Response Data");
+ ti_eir_subtree=proto_item_add_subtree(ti_eir, ett_eir_subtree);
+ }
+
+ i=0;
+ while(i<240){
+ length = tvb_get_guint8(tvb, offset+i);
+ if( length != 0 ){
+
+ proto_item *ti_eir_struct=NULL;
+ proto_tree *ti_eir_struct_subtree=NULL;
+
+ ti_eir_struct = proto_tree_add_text(ti_eir_subtree, tvb, offset+i, length+1, "%s", "");
+ ti_eir_struct_subtree = proto_item_add_subtree(ti_eir_struct, ett_eir_struct_subtree);
+
+ type = tvb_get_guint8(tvb, offset+i+1);
+
+ proto_item_append_text(ti_eir_struct,"%s", val_to_str(type, bthci_cmd_eir_data_type_vals, "Unknown"));
+
+ proto_tree_add_item(ti_eir_struct_subtree,hf_bthci_evt_eir_struct_length, tvb, offset+i, 1, TRUE);
+ proto_tree_add_item(ti_eir_struct_subtree,hf_bthci_evt_eir_struct_type, tvb, offset+i+1, 1, TRUE);
+
+ switch(type) {
+ case 0x02: /* 16-bit Service Class UUIDs, incomplete list */
+ case 0x03: /* 16-bit Service Class UUIDs, complete list */
+ j=0;
+ while(j<(length-1))
+ {
+ proto_tree_add_item(ti_eir_struct_subtree, hf_bthci_evt_sc_uuid16, tvb, offset+i+j+2, 2, TRUE);
+ j+=2;
+ }
+ break;
+ case 0x04: /* 32-bit Service Class UUIDs, incomplete list */
+ case 0x05: /* 32-bit Service Class UUIDs, complete list */
+ j=0;
+ while(j<(length-1))
+ {
+ proto_tree_add_item(ti_eir_struct_subtree, hf_bthci_evt_sc_uuid32, tvb, offset+i+j+2, 4, TRUE);
+ j+=4;
+ }
+ break;
+ case 0x06: /* 128-bit Service Class UUIDs, incomplete list */
+ case 0x07: /* 128-bit Service Class UUIDs, complete list */
+ j=0;
+ while(j<(length-1))
+ {
+ proto_tree_add_item(ti_eir_struct_subtree, hf_bthci_evt_sc_uuid128, tvb, offset+i+j+2, 16, TRUE);
+ j+=16;
+ }
+ break;
+ case 0x08: /* Device Name, shortened */
+ case 0x09: /* Device Name, full */
+ proto_tree_add_item(ti_eir_struct_subtree, hf_bthci_evt_device_name, tvb, offset+i+2, length-1, TRUE);
+ proto_item_append_text(ti_eir_struct,": %s", tvb_format_text(tvb,offset+i+2,length-1));
+ break;
+ case 0x0A: /* Tx Power Level */
+ proto_tree_add_item(ti_eir_struct_subtree, hf_bthci_evt_transmit_power_level, tvb, offset+i+2, 1, TRUE);
+
+ default:
+ proto_tree_add_item(ti_eir_struct_subtree, hf_bthci_evt_eir_data, tvb, offset+i+2, length-1, TRUE);
+ break;
+ }
+ i += length+1;
+ }
+ else {
+ break;
+ }
+ }
+
+ return offset+240;
+}
+
+static int
+dissect_bthci_evt_io_capability_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_io_capability_response(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_io_capability, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_oob_data_present, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_auth_requirements, tvb, offset, 1, TRUE);
+ offset++;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_user_confirmation_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_numeric_value, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_user_passkey_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_remote_oob_data_request(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_simple_pairing_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_user_passkey_notification(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_passkey, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_keypress_notification(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_notification_type, tvb, offset, 1, TRUE);
+ offset++;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_remote_host_sup_feat_notification(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_ext_lmp_features, tvb, offset, 8, TRUE);
+ offset+=8;
+
+ return offset;
+}
+
+static int
dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
proto_item *ti_opcode=NULL;
@@ -883,6 +1385,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
gint16 timeout;
guint8 num8, i;
guint16 com_opcode;
+ guint32 accuracy;
proto_tree_add_item(tree, hf_bthci_evt_num_command_packets, tvb, offset, 1, TRUE);
offset++;
@@ -900,6 +1403,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
case 0x0402: /* Inquiry Cancel */
case 0x0403: /* Periodic Inquiry Mode */
case 0x0404: /* Exit Periodic Enquiry Mode */
+ case 0x080f: /* Write Default Link Policy Settings */
case 0x0c01: /* Set Event Mask */
case 0x0c03: /* Reset */
case 0x0c05: /* Set Event Filter */
@@ -923,31 +1427,53 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
case 0x0c3a: /* Write Current IAC LAP */
case 0x0c3c: /* Write Page Scan Period Mode */
case 0x0c3e: /* Write Page Scan Mode */
+ case 0x0c3f: /* Set AFH Host Channel Classification */
+ case 0x0c43: /* Write Inquiry Scan Type */
+ case 0x0c45: /* Write Inquiry Mode */
+ case 0x0c47: /* Write Page Scan Type */
+ case 0x0c49: /* Write AFH Channel Assessment Mode */
+ case 0x0c52: /* Write Extended Inquiry Response */
+ case 0x0c53: /* Refresh Encryption Key */
+ case 0x0c56: /* Write Simple Pairing Mode */
+ case 0x0c59: /* Write Inquiry Tx Power Level */
+ case 0x0c5b: /* Write Default Erroneous Data Reporting */
+ case 0x0c60: /* Send Keypress Notification */
case 0x1802: /* Write Loopback Mode */
case 0x1803: /* Enable Device Under Test Mode */
+ case 0x1804: /* Write Simple Pairing Debug Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
break;
/* This is a list of Commands that all return status and BD_ADDR */
+ case 0x0408: /* Create Connection Cancel */
case 0x040b: /* Link Key Request Reply */
case 0x040c: /* Link Key Request Negative Reply */
case 0x040d: /* PIN Code Request Reply */
case 0x040e: /* PIN Code Request Negative Reply */
+ case 0x041a: /* Remote Name Request Cancel */
+ case 0x042b: /* IO Capability Response */
+ case 0x042c: /* User Confirmation Request Reply */
+ case 0x042d: /* User Confirmation Request Negative Reply */
+ case 0x042e: /* User Passkey Request Reply */
+ case 0x042f: /* User Passkey Request Negative Reply */
+ case 0x0430: /* Remote OOB Data Request Reply */
+ case 0x0433: /* Remote OOB Data Request Negative Reply */
case 0x1009: /* Read BD_ADDR */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
break;
/* This is a list of Commands that all return status and connection_handle */
case 0x080d: /* Write Link Policy Settings */
+ case 0x0811: /* Sniff Subrating */
case 0x0c08: /* Flush */
case 0x0c28: /* Write Automatic Flush Timeout */
case 0x0c37: /* Write Link Supervision Timeout */
+ case 0x0c5f: /* Enhanced Flush */
case 0x1402: /* Reset Failed Contact Counter */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1000,6 +1526,20 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
break;
+ case 0x0420: /* Read LMP Handle */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_lmp_handle, tvb, offset, 1, TRUE);
+ offset++;
+
+ /* 4 reserved bytes */
+ offset+=4;
+ break;
+
case 0x0809: /* Role Discovery */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1027,6 +1567,18 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
break;
+ case 0x080e: /* Read Default Link Policy Settings */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_link_policy_setting_switch, tvb, offset, 2, TRUE);
+ proto_tree_add_item(tree, hf_bthci_evt_link_policy_setting_hold , tvb, offset, 2, TRUE);
+ proto_tree_add_item(tree, hf_bthci_evt_link_policy_setting_sniff , tvb, offset, 2, TRUE);
+ proto_tree_add_item(tree, hf_bthci_evt_link_policy_setting_park , tvb, offset, 2, TRUE);
+ offset+=2;
+
+ break;
+
case 0x0c09: /* Read PIN Type */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1070,7 +1622,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
- proto_tree_add_item(tree, hf_bthci_evt_name, tvb, offset, 248, FALSE);
+ proto_tree_add_item(tree, hf_bthci_evt_device_name, tvb, offset, 248, FALSE);
offset+=248;
break;
@@ -1106,8 +1658,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
- proto_tree_add_item(tree, hf_bthci_evt_class_of_device, tvb, offset, 3, TRUE);
- offset+=3;
+ offset = dissect_bthci_evt_cod(tvb, offset, pinfo, tree);
break;
@@ -1179,6 +1730,7 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
num8 = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_bthci_evt_num_curr_iac, tvb, offset, 1, TRUE);
+ offset++;
for (i=0; i<num8; i++) {
proto_tree_add_item(tree, hf_bthci_evt_iac_lap, tvb, offset, 3, TRUE);
@@ -1204,6 +1756,72 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
break;
+ case 0x0c42: /* Read Inquiry Scan Type */
+ case 0x0c46: /* Read Page Scan Type */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+ proto_tree_add_item(tree, hf_bthci_evt_scan_type, tvb, offset, 1, TRUE);
+ offset++;
+ break;
+
+ case 0x0c44: /* Read Inquiry Mode */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+ proto_tree_add_item(tree, hf_bthci_evt_inq_mode, tvb, offset, 1, TRUE);
+ offset++;
+ break;
+
+ case 0x0c48: /* Read AFH Channel Assessment Mode */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+ proto_tree_add_item(tree, hf_bthci_evt_afh_ch_assessment_mode, tvb, offset, 1, TRUE);
+ offset++;
+ break;
+
+ case 0x0c51: /* Read Extended Inquiry Response */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_fec_required, tvb, offset, 1, TRUE);
+ offset++;
+
+ offset=dissect_bthci_evt_ext_inquiry_response(tvb, offset, pinfo, tree);
+ break;
+
+ case 0x0c55: /* Read Simple Pairing Mode */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_simple_pairing_mode, tvb, offset, 1, TRUE);
+ offset++;
+ break;
+
+ case 0x0c57: /* Read Local OOB Data */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+ proto_tree_add_item(tree, hf_bthci_evt_hash_c, tvb, offset, 2, TRUE);
+ offset+=2;
+ proto_tree_add_item(tree, hf_bthci_evt_randomizer_r, tvb, offset, 2, TRUE);
+ offset+=2;
+ break;
+
+ case 0x0c58: /* Read Inquiry Response Tx Power Level */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+ proto_tree_add_item(tree, hf_bthci_evt_power_level_type, tvb, offset, 1, TRUE);
+ offset++;
+ break;
+
+
+ case 0x0c5a: /* Read Default Erroneous Data Reporting */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_err_data_reporting, tvb, offset, 1, TRUE);
+ offset++;
+
+ break;
+
case 0x1001: /* Read Local Version Information */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1225,6 +1843,15 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
break;
+ case 0x1002: /* Read Local Supported Commands */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_local_supported_cmds, tvb, offset, 64, TRUE);
+ offset+=64;
+
+ break;
+
case 0x1003: /* Read Local Supported Features */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1233,6 +1860,31 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
break;
+ case 0x1004: /* Read Local Extended Features */
+ {
+ guint8 page_number;
+
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ page_number = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_bthci_evt_page_number, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_max_page_number, tvb, offset, 1, TRUE);
+ offset++;
+
+ if( page_number == 0 ){
+ offset=dissect_bthci_evt_lmp_features(tvb, offset, pinfo, tree);
+ }
+ else {
+ proto_tree_add_item(tree, hf_bthci_evt_ext_lmp_features, tvb, offset, 8, TRUE);
+ offset+=8;
+ }
+ }
+
+ break;
+
case 0x1005: /* Read Buffer Size */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1296,6 +1948,38 @@ dissect_bthci_evt_command_complete(tvbuff_t *tvb, int offset, packet_info *pinfo
break;
+ case 0x1406: /* Read AFH Channel Map */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_afh_mode, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_afh_channel_map, tvb, offset, 10, TRUE);
+ offset+=10;
+
+ break;
+
+ case 0x1407: /* Read Clock */
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_clock, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ accuracy = tvb_get_letohl(tvb, offset);
+ item = proto_tree_add_item(tree, hf_bthci_evt_clock_accuracy, tvb, offset, 2, TRUE);
+ proto_item_append_text(item, " %g msec", accuracy*0.3125);
+ offset+=2;
+
+ break;
+
case 0x1801: /* Read Loopback Mode */
proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
offset++;
@@ -1387,6 +2071,198 @@ 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 _U_, proto_tree *tree)
+{
+ guint8 page_number;
+
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ page_number = tvb_get_guint8(tvb, offset);
+ proto_tree_add_item(tree, hf_bthci_evt_page_number, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_max_page_number, tvb, offset, 1, TRUE);
+ offset++;
+
+ if( page_number == 0 ){
+ offset=dissect_bthci_evt_lmp_features(tvb, offset, pinfo, tree);
+ }
+ else {
+ proto_tree_add_item(tree, hf_bthci_evt_ext_lmp_features, tvb, offset, 8, TRUE);
+ offset+=8;
+ }
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_sync_connection_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_item *item;
+
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
+
+ proto_tree_add_item(tree, hf_bthci_evt_sync_link_type, tvb, offset, 1, TRUE);
+ offset++;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_sync_tx_interval, tvb, offset, 1, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_guint8(tvb, offset)*0.625);
+ offset++;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_sync_rtx_window, tvb, offset, 1, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_guint8(tvb, offset)*0.625);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_sync_rx_packet_length, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_sync_tx_packet_length, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_air_mode, tvb, offset, 1, TRUE);
+ offset++;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_sync_connection_changed(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_item *item;
+
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_sync_tx_interval, tvb, offset, 1, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_guint8(tvb, offset)*0.625);
+ offset++;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_sync_rtx_window, tvb, offset, 1, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_guint8(tvb, offset)*0.625);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_sync_rx_packet_length, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_sync_tx_packet_length, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_sniff_subrating(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_item *item;
+
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_max_tx_latency, tvb, offset, 2, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
+ offset+=2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_max_rx_latency, tvb, offset, 2, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
+ offset+=2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_min_remote_timeout, tvb, offset, 2, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
+ offset+=2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_min_local_timeout, tvb, offset, 2, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
+ offset+=2;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_flow_specification_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ proto_tree_add_item(tree, hf_bthci_evt_flags, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_flow_direction, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_service_type, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_token_rate, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ proto_tree_add_item(tree, hf_bthci_evt_token_bucket_size, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ proto_tree_add_item(tree, hf_bthci_evt_peak_bandwidth, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ proto_tree_add_item(tree, hf_bthci_evt_latency, tvb, offset, 4, TRUE);
+ offset+=4;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_enhanced_flush_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_encryption_key_refresh_complete(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_tree_add_item(tree, hf_bthci_evt_status, tvb, offset, 1, TRUE);
+ offset++;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ return offset;
+}
+
+static int
+dissect_bthci_evt_link_supervision_timeout_changed(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
+{
+ proto_item *item;
+
+ proto_tree_add_item(tree, hf_bthci_evt_connection_handle, tvb, offset, 2, TRUE);
+ offset+=2;
+
+ item = proto_tree_add_item(tree, hf_bthci_evt_link_supervision_timeout, tvb, offset, 2, TRUE);
+ proto_item_append_text(item, " slots (%g msec)", tvb_get_letohs(tvb, offset)*0.625);
+ offset+=2;
+
+ return offset;
+}
+
+static int
dissect_bthci_evt_inq_result(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree)
{
guint8 num, evt_num_responses;
@@ -1396,8 +2272,7 @@ dissect_bthci_evt_inq_result(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
offset++;
for(num=0;num<evt_num_responses;num++){
- proto_tree_add_item(tree, hf_bthci_evt_bd_addr, tvb, offset, 6, TRUE);
- offset+=6;
+ offset = dissect_bthci_evt_bd_addr(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_page_scan_repetition_mode, tvb, offset, 1, TRUE);
offset++;
@@ -1408,8 +2283,7 @@ dissect_bthci_evt_inq_result(tvbuff_t *tvb, int offset, packet_info *pinfo _U_,
proto_tree_add_item(tree, hf_bthci_evt_page_scan_mode, tvb, offset, 1, TRUE);
offset++;
- proto_tree_add_item(tree, hf_bthci_evt_class_of_device, tvb, offset, 3, TRUE);
- offset+=3;
+ offset = dissect_bthci_evt_cod(tvb, offset, pinfo, tree);
proto_tree_add_item(tree, hf_bthci_evt_clock_offset, tvb, offset, 2, TRUE);
offset+=2;
@@ -1578,10 +2452,87 @@ dissect_bthci_evt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset=dissect_bthci_evt_page_scan_mode_change(tvb, offset, pinfo, bthci_evt_tree);
break;
- case 0x20: /*Page Scan Repetition Mode Change */
+ case 0x20: /* Page Scan Repetition Mode Change */
offset=dissect_bthci_evt_page_scan_repetition_mode_change(tvb, offset, pinfo, bthci_evt_tree);
break;
+ case 0x21: /* Flow Specification Complete */
+ offset=dissect_bthci_evt_flow_specification_complete(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x22: /* Inquiry Result with RSSI */
+ offset=dissect_bthci_evt_inq_result_with_rssi(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x23: /* Read Remote Extended Features Complete */
+ offset=dissect_bthci_evt_read_remote_ext_features_complete(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x2c: /* Synchronous Connection Complete */
+ offset=dissect_bthci_evt_sync_connection_complete(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x2d: /* Synchronous Connection Changed */
+ offset=dissect_bthci_evt_sync_connection_changed(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x2e: /* Sniff Subrating */
+ offset=dissect_bthci_evt_sniff_subrating(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x2f: /* Extended Inquiry Result */
+ offset=dissect_bthci_evt_inq_result_with_rssi(tvb, offset, pinfo, bthci_evt_tree);
+ offset=dissect_bthci_evt_ext_inquiry_response(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x30: /* Encryption Key Refresh Complete */
+ offset=dissect_bthci_evt_encryption_key_refresh_complete(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x31: /* IO Capability Request */
+ offset=dissect_bthci_evt_io_capability_request(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x32: /* IO Capability Response */
+ offset=dissect_bthci_evt_io_capability_response(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x33: /* User Confirmation Request */
+ offset=dissect_bthci_evt_user_confirmation_request(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x34: /* User Passkey Request */
+ offset=dissect_bthci_evt_user_passkey_request(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x35: /* Remote OOB Data Request */
+ offset=dissect_bthci_evt_remote_oob_data_request(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x36: /* Simple Pairing Complete */
+ offset=dissect_bthci_evt_simple_pairing_complete(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x38: /* Link Supervision Timeout Changed */
+ offset=dissect_bthci_evt_link_supervision_timeout_changed(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x39: /* Enhanced Flush Complete */
+ offset=dissect_bthci_evt_enhanced_flush_complete(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x3b: /* Enhanced Flush Complete */
+ offset=dissect_bthci_evt_user_passkey_notification(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x3c: /* Enhanced Flush Complete */
+ offset=dissect_bthci_evt_keypress_notification(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
+ case 0x3d: /* Remote Host Supported Features Notification */
+ offset=dissect_bthci_evt_remote_host_sup_feat_notification(tvb, offset, pinfo, bthci_evt_tree);
+ break;
+
default:
proto_tree_add_item(bthci_evt_tree, hf_bthci_evt_params, tvb, 2, -1, TRUE);
break;
@@ -1662,14 +2613,24 @@ proto_register_bthci_evt(void)
},
{ &hf_bthci_evt_status,
{ "Status", "bthci_evt.status",
- FT_UINT8, BASE_HEX, VALS(evt_status_vals), 0x0,
+ FT_UINT8, BASE_HEX, VALS(bthci_cmd_status_vals), 0x0,
+ "Status", HFILL }
+ },
+ { &hf_bthci_evt_status_pending,
+ { "Status", "bthci_evt.status",
+ FT_UINT8, BASE_HEX, VALS(bthci_cmd_status_pending_vals), 0x0,
"Status", HFILL }
},
{ &hf_bthci_evt_bd_addr,
- { "BD_ADDR", "bthci_evt.bd_addr",
- FT_ETHER, BASE_HEX, NULL, 0x0,
+ { "BD_ADDR: ", "bthci_evt.bd_addr",
+ FT_NONE, BASE_NONE, NULL, 0x0,
"Bluetooth Device Address", HFILL}
},
+ { &hf_bthci_evt_class_of_device,
+ { "Class of Device", "bthci_evt.class_of_device",
+ FT_UINT24, BASE_HEX, NULL, 0x0,
+ "Class of Device", HFILL }
+ },
{ &hf_bthci_evt_link_type,
{ "Link Type", "bthci_evt.link_type",
FT_UINT8, BASE_HEX, VALS(evt_link_types), 0x0,
@@ -1680,14 +2641,9 @@ proto_register_bthci_evt(void)
FT_UINT8, BASE_HEX, VALS(evt_encryption_modes), 0x0,
"Encryption Mode", HFILL }
},
- { &hf_bthci_evt_class_of_device,
- { "Class of Device", "bthci_evt.class_of_device",
- FT_INT24, BASE_HEX, NULL, 0x0,
- "Class of Device for the Device, which requested the connection", HFILL}
- },
{ &hf_bthci_evt_reason,
{ "Reason", "bthci_evt.reason",
- FT_UINT8, BASE_HEX, VALS(evt_status_vals), 0x0,
+ FT_UINT8, BASE_HEX, VALS(bthci_cmd_status_vals), 0x0,
"Reason", HFILL }
},
{ &hf_bthci_evt_remote_name,
@@ -1717,7 +2673,7 @@ proto_register_bthci_evt(void)
},
{ &hf_bthci_evt_hci_revision,
{ "HCI Revision", "bthci_evt.hci_vers_nr",
- FT_UINT16, BASE_HEX, NULL, 0x0,
+ FT_UINT16, BASE_DEC, NULL, 0x0,
"Revision of the Current HCI", HFILL }
},
{ &hf_bthci_evt_comp_id,
@@ -1727,7 +2683,7 @@ proto_register_bthci_evt(void)
},
{ &hf_bthci_evt_sub_vers_nr,
{ "LMP Subversion", "bthci_evt.lmp_sub_vers_nr",
- FT_UINT16, BASE_HEX, NULL, 0x0,
+ FT_UINT16, BASE_DEC, NULL, 0x0,
"Subversion of the Current LMP", HFILL }
},
{ &hf_bthci_evt_flags,
@@ -1815,6 +2771,16 @@ proto_register_bthci_evt(void)
FT_UINT8, BASE_HEX, VALS(evt_page_scan_period_modes), 0x0,
"Page Scan Period Mode", HFILL }
},
+ { &hf_bthci_evt_link_type_2dh1,
+ { "ACL Link Type 2-DH1", "bthci_evt.link_type_2dh1",
+ FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0002,
+ "ACL Link Type 2-DH1", HFILL }
+ },
+ { &hf_bthci_evt_link_type_3dh1,
+ { "ACL Link Type 3-DH1", "bthci_evt.link_type_3dh1",
+ FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0004,
+ "ACL Link Type 3-DH1", HFILL }
+ },
{ &hf_bthci_evt_link_type_dm1,
{ "ACL Link Type DM1", "bthci_evt.link_type_dm1",
FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0008,
@@ -1825,6 +2791,16 @@ proto_register_bthci_evt(void)
FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0010,
"ACL Link Type DH1", HFILL }
},
+ { &hf_bthci_evt_link_type_2dh3,
+ { "ACL Link Type 2-DH3", "bthci_evt.link_type_2dh3",
+ FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0100,
+ "ACL Link Type 2-DH3", HFILL }
+ },
+ { &hf_bthci_evt_link_type_3dh3,
+ { "ACL Link Type 3-DH3", "bthci_evt.link_type_3dh3",
+ FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0200,
+ "ACL Link Type 3-DH3", HFILL }
+ },
{ &hf_bthci_evt_link_type_dm3,
{ "ACL Link Type DM3", "bthci_evt.link_type_dm3",
FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0400,
@@ -1835,6 +2811,16 @@ proto_register_bthci_evt(void)
FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x0800,
"ACL Link Type DH3", HFILL }
},
+ { &hf_bthci_evt_link_type_2dh5,
+ { "ACL Link Type 2-DH5", "bthci_evt.link_type_2dh5",
+ FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x1000,
+ "ACL Link Type 2-DH5", HFILL }
+ },
+ { &hf_bthci_evt_link_type_3dh5,
+ { "ACL Link Type 3-DH5", "bthci_evt.link_type_3dh5",
+ FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x2000,
+ "ACL Link Type 3-DH5", HFILL }
+ },
{ &hf_bthci_evt_link_type_dm5,
{ "ACL Link Type DM5", "bthci_evt.link_type_dm5",
FT_UINT16, BASE_DEC, VALS(evt_boolean), 0x4000,
@@ -1886,9 +2872,9 @@ proto_register_bthci_evt(void)
"timing accuracy", HFILL }
},
{ &hf_bthci_evt_lmp_feature_05,
- { "switch", "bthci_evt.lmp_feature",
+ { "master/slave switch", "bthci_evt.lmp_feature",
FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x20,
- "switch", HFILL }
+ "master/slave switch", HFILL }
},
{ &hf_bthci_evt_lmp_feature_06,
{ "hold mode", "bthci_evt.lmp_feature",
@@ -1962,9 +2948,154 @@ proto_register_bthci_evt(void)
},
{ &hf_bthci_evt_lmp_feature_24,
{ "Flow control lag", "bthci_evt.lmp_feature",
- FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x70,
+ FT_UINT8, BASE_DEC, NULL, 0x70,
"Flow control lag", HFILL }
},
+ { &hf_bthci_evt_lmp_feature_27,
+ { "broadband encryption", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x80,
+ "broadband encryption", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_31,
+ { "EDR ACL 2 Mbps mode", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x02,
+ "EDR ACL 2 Mbps mode", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_32,
+ { "EDR ACL 3 Mbps mode", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x04,
+ "EDR ACL 3 Mbps mode", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_33,
+ { "enhanced inquiry scan", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x08,
+ "enhanced inquiry scan", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_34,
+ { "interlaced inquiry scan", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x10,
+ "interlaced inquiry scan", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_35,
+ { "interlaced page scan", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x20,
+ "interlaced page scan", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_36,
+ { "RSSI with inquiry results", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x40,
+ "RSSI with inquiry results", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_37,
+ { "eSCO EV3 packets", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x80,
+ "eSCO EV3 packets", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_40,
+ { "eSCO EV4 packets", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x01,
+ "eSCO EV4 packets", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_41,
+ { "eSCO EV5 packets", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x02,
+ "eSCO EV5 packets", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_43,
+ { "AFH capable slave", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x08,
+ "AFH capable slave", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_44,
+ { "AFH classification slave", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x10,
+ "AFH classification slave", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_47,
+ { "3-slot EDR ACL packets", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x80,
+ "3-slot EDR ACL packets", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_50,
+ { "5-slot EDR ACL packets", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x01,
+ "5-slot EDR ACL packets", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_51,
+ { "sniff subrating", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x02,
+ "sniff subrating", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_52,
+ { "pause encryption", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x04,
+ "pause encryption", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_53,
+ { "AFH capable master", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x08,
+ "AFH capable master", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_54,
+ { "AFH classification master", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x10,
+ "AFH classification master", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_55,
+ { "EDR eSCO 2 Mbps mode", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x20,
+ "EDR eSCO 2 Mbps mode", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_56,
+ { "EDR eSCO 3 Mbps mode", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x40,
+ "EDR eSCO 3 Mbps mode", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_57,
+ { "3-slot EDR eSCO packets", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x80,
+ "", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_60,
+ { "extended inquiry response", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x01,
+ "extended inquiry response", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_63,
+ { "secure simple pairing", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x08,
+ "secure simple pairing", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_64,
+ { "encapsulated PDU", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x10,
+ "encapsulated PDU", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_65,
+ { "erroneous data reporting", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x20,
+ "erroneous data reporting", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_66,
+ { "non-flushable packet boundary flag", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x40,
+ "non-flushable packet boundary flag", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_70,
+ { "link supervision timeout changed event", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x01,
+ "link supervision timeout changed event", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_71,
+ { "inquiry response TX power level", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x02,
+ "inquiry response TX power level", HFILL }
+ },
+ { &hf_bthci_evt_lmp_feature_77,
+ { "extended features", "bthci_evt.lmp_feature",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x80,
+ "extended features", HFILL }
+ },
{ &hf_bthci_evt_num_keys,
{ "Number of Link Keys", "bthci_evt.num_keys",
FT_UINT8, BASE_DEC, NULL, 0x0,
@@ -2025,8 +3156,8 @@ proto_register_bthci_evt(void)
FT_UINT8, BASE_HEX, VALS(evt_pin_types), 0x0,
"PIN Types", HFILL }
},
- { &hf_bthci_evt_name,
- { "Name", "bthci_evt.local_name",
+ { &hf_bthci_evt_device_name,
+ { "Device Name", "bthci_evt.device_name",
FT_STRINGZ, BASE_NONE, NULL, 0x0,
"Userfriendly descriptive name for the device", HFILL }
},
@@ -2155,6 +3286,221 @@ proto_register_bthci_evt(void)
FT_UINT16, BASE_DEC, NULL, 0x0,
"Total Number of HCI SCO Data Packets that can be stored in the data buffers of the Host", HFILL }
},
+ { &hf_bthci_evt_page_number,
+ {"Page Number", "bthci_evt.page_number",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ "Page Number", HFILL}
+ },
+ { &hf_bthci_evt_max_page_number,
+ {"Max. Page Number", "bthci_evt.max_page_number",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ "Max. Page Number", HFILL}
+ },
+ { &hf_bthci_evt_local_supported_cmds,
+ { "Local Supported Commands", "bthci_evt.local_supported_cmds",
+ FT_BYTES, BASE_HEX, NULL, 0x0,
+ "Local Supported Commands", HFILL }
+ },
+ { &hf_bthci_evt_fec_required,
+ {"FEC Required", "bthci_evt.fec_required",
+ FT_UINT8, BASE_DEC, VALS(evt_boolean), 0x0,
+ "FEC Required", HFILL}
+ },
+ { &hf_bthci_evt_err_data_reporting,
+ {"Erroneous Data Reporting", "bthci_evt.err_data_reporting",
+ FT_UINT8, BASE_DEC, VALS(evt_enable_values), 0x0,
+ "Erroneous Data Reporting", HFILL}
+ },
+ { &hf_bthci_evt_scan_type,
+ {"Scan Type", "bthci_evt.inq_scan_type",
+ FT_UINT8, BASE_DEC, VALS(evt_scan_types), 0x0,
+ "Scan Type", HFILL}
+ },
+ { &hf_bthci_evt_inq_mode,
+ {"Inquiry Mode", "bthci_evt.inq_scan_type",
+ FT_UINT8, BASE_DEC, VALS(evt_inq_modes), 0x0,
+ "Inquiry Mode", HFILL}
+ },
+ { &hf_bthci_evt_power_level_type,
+ {"Type", "bthci_evt.power_level_type",
+ FT_UINT8, BASE_HEX, VALS(evt_power_level_types), 0x0,
+ "Type", HFILL}
+ },
+ { &hf_bthci_evt_ext_lmp_features,
+ {"Ext. LMP Features", "bthci_evt.page_number",
+ FT_UINT64, BASE_HEX, NULL, 0x0,
+ "Extended LMP Features", HFILL}
+ },
+ { &hf_bthci_evt_sync_link_type,
+ {"Link Type", "bthci_evt.sync_link_type",
+ FT_UINT8, BASE_HEX, VALS(evt_sync_link_types), 0x0,
+ "Link Type", HFILL}
+ },
+ { &hf_bthci_evt_sync_tx_interval,
+ {"Transmit Interval", "bthci_evt.sync_tx_interval",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ "Transmit Interval", HFILL}
+ },
+ { &hf_bthci_evt_sync_rtx_window,
+ {"Retransmit Window", "bthci_evt.sync_rtx_window",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ "Retransmit Window", HFILL}
+ },
+ { &hf_bthci_evt_sync_rx_packet_length,
+ {"Rx Packet Length", "bthci_evt.sync_rx_pkt_len",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Rx Packet Length", HFILL}
+ },
+ { &hf_bthci_evt_sync_tx_packet_length,
+ {"Tx Packet Length", "bthci_evt.sync_tx_pkt_len",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Tx Packet Length", HFILL}
+ },
+ { &hf_bthci_evt_air_mode,
+ {"Air Mode", "bthci_evt.air_mode",
+ FT_UINT8, BASE_DEC, VALS(evt_air_mode_values), 0x0,
+ "Air Mode", HFILL}
+ },
+ { &hf_bthci_evt_max_tx_latency,
+ {"Max. Tx Latency", "bthci_evt.max_tx_latency",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Max. Tx Latency", HFILL}
+ },
+ { &hf_bthci_evt_max_rx_latency,
+ {"Max. Rx Latency", "bthci_evt.max_rx_latency",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Max. Rx Latency", HFILL}
+ },
+ { &hf_bthci_evt_min_remote_timeout,
+ {"Min. Remote Timeout", "bthci_evt.min_remote_timeout",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Min. Remote Timeout", HFILL}
+ },
+ { &hf_bthci_evt_min_local_timeout,
+ {"Min. Local Timeout", "bthci_evt.min_local_timeout",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Min. Local Timeout", HFILL}
+ },
+ { &hf_bthci_evt_link_supervision_timeout,
+ {"Link Supervision Timeout", "bthci_evt.link_supervision_timeout",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Link Supervision Timeout", HFILL}
+ },
+ { &hf_bthci_evt_token_bucket_size,
+ { "Token Bucket Size", "bthci_evt.token_bucket_size",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Token Bucket Size (bytes)", HFILL }
+ },
+ { &hf_bthci_evt_flow_direction,
+ {"Flow Direction", "bthci_evt.flow_direction",
+ FT_UINT8, BASE_DEC, VALS(evt_flow_direction_values), 0x0,
+ "Flow Direction", HFILL}
+ },
+ { &hf_bthci_evt_afh_ch_assessment_mode,
+ {"AFH Channel Assessment Mode", "bthci_evt.afh_ch_assessment_mode",
+ FT_UINT8, BASE_DEC, VALS(evt_enable_values), 0x0,
+ "AFH Channel Assessment Mode", HFILL}
+ },
+ { &hf_bthci_evt_lmp_handle,
+ { "LMP Handle", "bthci_evt.lmp_handle",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "LMP Handle", HFILL }
+ },
+ { &hf_bthci_evt_clock,
+ { "Clock", "bthci_evt.clock",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "Clock", HFILL }
+ },
+ { &hf_bthci_evt_clock_accuracy,
+ { "Clock", "bthci_evt.clock_accuracy",
+ FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Clock", HFILL }
+ },
+ { &hf_bthci_evt_afh_mode,
+ {"AFH Mode", "bthci_evt.afh_mode",
+ FT_UINT8, BASE_DEC, VALS(evt_enable_values), 0x0,
+ "AFH Mode", HFILL}
+ },
+ { &hf_bthci_evt_afh_channel_map,
+ {"AFH Channel Map", "bthci_evt.afh_channel_map",
+ FT_UINT_BYTES, BASE_HEX, NULL, 0x0,
+ "AFH Channel Map", HFILL}
+ },
+ { &hf_bthci_evt_simple_pairing_mode,
+ {"Simple Pairing Mode", "bthci_evt.simple_pairing_mode",
+ FT_UINT8, BASE_DEC, VALS(evt_enable_values), 0x0,
+ "Simple Pairing Mode", HFILL}
+ },
+ { &hf_bthci_evt_hash_c,
+ {"Hash C", "bthci_evt.hash_c",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Hash C", HFILL}
+ },
+ { &hf_bthci_evt_randomizer_r,
+ {"Randomizer R", "bthci_evt.randomizer_r",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Randomizer R", HFILL}
+ },
+ { &hf_bthci_evt_io_capability,
+ {"IO Capability", "bthci_evt.io_capability",
+ FT_UINT8, BASE_HEX, VALS(bthci_cmd_io_capability_vals), 0x0,
+ "IO Capability", HFILL}
+ },
+ { &hf_bthci_evt_oob_data_present,
+ {"OOB Data Present", "bthci_evt.oob_data_present",
+ FT_UINT8, BASE_DEC, VALS(bthci_cmd_oob_data_present_vals), 0x0,
+ "OOB Data Present", HFILL}
+ },
+ { &hf_bthci_evt_auth_requirements,
+ {"Authentication Requirements", "bthci_evt.auth_requirements",
+ FT_UINT8, BASE_DEC, VALS(bthci_cmd_auth_req_vals), 0x0,
+ "Authentication Requirements", HFILL}
+ },
+ { &hf_bthci_evt_numeric_value,
+ {"Numeric Value", "bthci_evt.numeric_value",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Numeric Value", HFILL}
+ },
+ { &hf_bthci_evt_passkey,
+ {"Passkey", "bthci_evt.passkey",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ "Passkey", HFILL}
+ },
+ { &hf_bthci_evt_notification_type,
+ {"Notification Type", "bthci_evt.notification_type",
+ FT_UINT8, BASE_DEC, VALS(evt_notification_type_vals), 0x0,
+ "Notification Type", HFILL}
+ },
+ { &hf_bthci_evt_eir_data,
+ {"Data", "bthci_cmd.eir_data",
+ FT_BYTES, BASE_HEX, NULL, 0x0,
+ "EIR Data", HFILL}
+ },
+ { &hf_bthci_evt_eir_struct_length,
+ { "Length", "bthci_cmd.eir_struct_length",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ "Structure Length", HFILL }
+ },
+ { &hf_bthci_evt_eir_struct_type,
+ { "Type", "bthci_cmd.eir_data_type",
+ FT_UINT8, BASE_HEX, VALS(bthci_cmd_eir_data_type_vals), 0x0,
+ "Data Type", HFILL }
+ },
+ { &hf_bthci_evt_sc_uuid16,
+ { "UUID", "bthci_cmd.service_class_uuid16",
+ FT_UINT16, BASE_HEX, VALS(bthci_cmd_service_class_type_vals), 0x0,
+ "16-bit Service Class UUID", HFILL }
+ },
+ { &hf_bthci_evt_sc_uuid32,
+ { "UUID", "bthci_cmd.service_class_uuid32",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "32-bit Service Class UUID", HFILL }
+ },
+ { &hf_bthci_evt_sc_uuid128,
+ { "UUID", "bthci_cmd.service_class_uuid128",
+ FT_BYTES, BASE_HEX, NULL, 0x0,
+ "128-bit Service Class UUID", HFILL }
+ }
};
/* Setup protocol subtree array */
@@ -2163,6 +3509,8 @@ proto_register_bthci_evt(void)
&ett_opcode,
&ett_lmp_subtree,
&ett_ptype_subtree,
+ &ett_eir_subtree,
+ &ett_eir_struct_subtree
};
/* Register the protocol name and description */