aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2015-01-28 17:14:48 +0100
committerMichal Labedzki <michal.labedzki@tieto.com>2015-02-03 12:05:43 +0000
commite9429732ff91cbbbaead63b643870da91ef415bd (patch)
treeef75688b5e8a1d30b6091f084747d7aa2807bbb2 /epan
parent8417fbf6f9fafb2482811f1c44001a4066cad009 (diff)
Bluetooth/USB HID: Move boot form of reports from bthid to usbhid
Then call it as new dissectors from bthid and btatt. In future they will be used in usbhid, because they are part of HID. Change-Id: I9cb545f3079c27945b17bf8791ba4e3736c29e7c Reviewed-on: https://code.wireshark.org/review/6912 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-btatt.c25
-rw-r--r--epan/dissectors/packet-bthid.c701
-rw-r--r--epan/dissectors/packet-usb-hid.c738
3 files changed, 768 insertions, 696 deletions
diff --git a/epan/dissectors/packet-btatt.c b/epan/dissectors/packet-btatt.c
index 39ba41b11f..7f24e4cbb9 100644
--- a/epan/dissectors/packet-btatt.c
+++ b/epan/dissectors/packet-btatt.c
@@ -523,6 +523,9 @@ static wmem_tree_t *fragments = NULL;
static wmem_tree_t *handle_to_uuid = NULL;
static dissector_handle_t btatt_handle;
+static dissector_handle_t usb_hid_boot_keyboard_input_report_handle;
+static dissector_handle_t usb_hid_boot_keyboard_output_report_handle;
+static dissector_handle_t usb_hid_boot_mouse_input_report_handle;
static dissector_table_t att_handle_dissector_table;
static dissector_table_t att_uuid16_dissector_table;
@@ -2190,6 +2193,11 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info *
offset += 2;
break;
+ case 0x2A22: /* Boot Keyboard Input Report */
+ call_dissector_with_data(usb_hid_boot_keyboard_input_report_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree, NULL);
+ offset += length;
+
+ break;
case 0x2A23: /* System ID */
proto_tree_add_item(tree, hf_btatt_system_id_manufacturer_identifier, tvb, offset, 5, ENC_LITTLE_ENDIAN);
offset += 5;
@@ -2237,6 +2245,16 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info *
offset += 1;
break;
+ case 0x2A32: /* Boot Keyboard Output Report */
+ call_dissector_with_data(usb_hid_boot_keyboard_output_report_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree, NULL);
+ offset += length;
+
+ break;
+ case 0x2A33: /* Boot Mouse Input Report */
+ call_dissector_with_data(usb_hid_boot_mouse_input_report_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree, NULL);
+ offset += length;
+
+ break;
case 0x2A38: /* Body Sensor Location */
proto_tree_add_item(tree, hf_btatt_body_sensor_location, tvb, offset, 1, ENC_NA);
offset += 1;
@@ -2655,10 +2673,7 @@ dissect_attribute_value(proto_tree *tree, proto_item *patron_item, packet_info *
case 0x2A18: /* Glucose Measurement */
case 0x2A1C: /* Temperature Measurement */
case 0x2A1E: /* Intermediate Temperature */
- case 0x2A22: /* Boot Keyboard Input Report */
case 0x2A2A: /* IEEE 11073-20601 Regulatory Certification Data List */
- case 0x2A32: /* Boot Keyboard Output Report */
- case 0x2A33: /* Boot Mouse Input Report */
case 0x2A34: /* Glucose Measurement Context */
case 0x2A35: /* Blood Pressure Measurement */
case 0x2A36: /* Intermediate Cuff Pressure */
@@ -4887,6 +4902,10 @@ proto_reg_handoff_btatt(void)
{
gint i_array;
+ usb_hid_boot_keyboard_input_report_handle = find_dissector("usbhid.boot_report.keyboard.input");
+ usb_hid_boot_keyboard_output_report_handle = find_dissector("usbhid.boot_report.keyboard.output");
+ usb_hid_boot_mouse_input_report_handle = find_dissector("usbhid.boot_report.mouse.input");
+
dissector_add_uint("btl2cap.psm", BTL2CAP_PSM_ATT, btatt_handle);
dissector_add_uint("btl2cap.cid", BTL2CAP_FIXED_CID_ATT, btatt_handle);
diff --git a/epan/dissectors/packet-bthid.c b/epan/dissectors/packet-bthid.c
index 1019b554b0..d6667700dc 100644
--- a/epan/dissectors/packet-bthid.c
+++ b/epan/dissectors/packet-bthid.c
@@ -46,40 +46,6 @@ static int hf_bthid_parameter_report_type = -1;
static int hf_bthid_report_id = -1;
static int hf_bthid_buffer_size = -1;
static int hf_bthid_protocol_code = -1;
-static int hf_bthid_data_keyboard_modifier_right_gui = -1;
-static int hf_bthid_data_keyboard_modifier_right_alt = -1;
-static int hf_bthid_data_keyboard_modifier_right_shift = -1;
-static int hf_bthid_data_keyboard_modifier_right_ctrl = -1;
-static int hf_bthid_data_keyboard_modifier_left_gui = -1;
-static int hf_bthid_data_keyboard_modifier_left_alt = -1;
-static int hf_bthid_data_keyboard_modifier_left_shift = -1;
-static int hf_bthid_data_keyboard_modifier_left_ctrl = -1;
-static int hf_bthid_data_keyboard_reserved = -1;
-static int hf_bthid_data_keyboard_keycode_1 = -1;
-static int hf_bthid_data_keyboard_keycode_2 = -1;
-static int hf_bthid_data_keyboard_keycode_3 = -1;
-static int hf_bthid_data_keyboard_keycode_4 = -1;
-static int hf_bthid_data_keyboard_keycode_5 = -1;
-static int hf_bthid_data_keyboard_keycode_6 = -1;
-static int hf_bthid_data_keyboard_leds_constants = -1;
-static int hf_bthid_data_keyboard_leds_kana = -1;
-static int hf_bthid_data_keyboard_leds_compose = -1;
-static int hf_bthid_data_keyboard_leds_scroll_lock = -1;
-static int hf_bthid_data_keyboard_leds_caps_lock = -1;
-static int hf_bthid_data_keyboard_leds_num_lock = -1;
-static int hf_bthid_data_mouse_button_8 = -1;
-static int hf_bthid_data_mouse_button_7 = -1;
-static int hf_bthid_data_mouse_button_6 = -1;
-static int hf_bthid_data_mouse_button_5 = -1;
-static int hf_bthid_data_mouse_button_4 = -1;
-static int hf_bthid_data_mouse_button_middle = -1;
-static int hf_bthid_data_mouse_button_right = -1;
-static int hf_bthid_data_mouse_button_left = -1;
-static int hf_bthid_data_mouse_x_displacement = -1;
-static int hf_bthid_data_mouse_y_displacement = -1;
-static int hf_bthid_data_mouse_horizontal_scroll_wheel = -1;
-static int hf_bthid_data_mouse_vertical_scroll_wheel = -1;
-
static int hf_bthid_data = -1;
static gint ett_bthid = -1;
@@ -88,7 +54,9 @@ static expert_field ei_bthid_parameter_control_operation_deprecated = EI_INIT;
static expert_field ei_bthid_transaction_type_deprecated = EI_INIT;
static dissector_handle_t bthid_handle;
-
+static dissector_handle_t usb_hid_boot_keyboard_input_report_handle;
+static dissector_handle_t usb_hid_boot_keyboard_output_report_handle;
+static dissector_handle_t usb_hid_boot_mouse_input_report_handle;
static gboolean show_deprecated = FALSE;
@@ -160,248 +128,6 @@ static const value_string protocol_code_vals[] = {
{ 0, NULL }
};
-static const value_string keycode_vals[] = {
- { 0x00, "<ACTION KEY UP>" },
- { 0x01, "ErrorRollOver" },
- { 0x02, "POSTFail" },
- { 0x03, "ErrorUndefined" },
-
- { 0x04, "a" },
- { 0x05, "b" },
- { 0x06, "c" },
- { 0x07, "d" },
- { 0x08, "e" },
- { 0x09, "f" },
- { 0x0A, "g" },
- { 0x0B, "h" },
- { 0x0C, "i" },
- { 0x0D, "j" },
- { 0x0E, "k" },
- { 0x0F, "l" },
- { 0x10, "m" },
- { 0x11, "n" },
- { 0x12, "o" },
- { 0x13, "p" },
- { 0x14, "q" },
- { 0x15, "r" },
- { 0x16, "s" },
- { 0x17, "t" },
- { 0x18, "u" },
- { 0x19, "v" },
- { 0x1A, "w" },
- { 0x1B, "x" },
- { 0x1C, "y" },
- { 0x1D, "z" },
-
- { 0x1E, "1" },
- { 0x1F, "2" },
- { 0x20, "3" },
- { 0x21, "4" },
- { 0x22, "5" },
- { 0x23, "6" },
- { 0x24, "7" },
- { 0x25, "8" },
- { 0x26, "9" },
- { 0x27, "0" },
-
- { 0x28, "ENTER" },
- { 0x29, "Escape" },
- { 0x2A, "Backspace" },
- { 0x2B, "Tab" },
- { 0x2C, "Spacebar" },
-
- { 0x2D, "-" },
- { 0x2E, "=" },
- { 0x2F, "[" },
- { 0x30, "]" },
- { 0x31, "\\" },
- { 0x32, "NonUS #/~" },
- { 0x33, ";" },
- { 0x34, "'" },
- { 0x35, "`" },
- { 0x36, "," },
- { 0x37, "." },
- { 0x38, "/" },
- { 0x39, "CapsLock" },
- { 0x3A, "F1" },
- { 0x3B, "F2" },
- { 0x3C, "F3" },
- { 0x3D, "F4" },
- { 0x3E, "F5" },
- { 0x3F, "F6" },
- { 0x40, "F7" },
- { 0x41, "F8" },
- { 0x42, "F9" },
- { 0x43, "F10" },
- { 0x44, "F11" },
- { 0x45, "F12" },
- { 0x46, "PrintScreen" },
- { 0x47, "ScrollLock" },
- { 0x48, "Pause" },
- { 0x49, "Insert" },
- { 0x4A, "Home" },
- { 0x4B, "PageUp" },
- { 0x4C, "DeleteForward" },
- { 0x4D, "End" },
- { 0x4E, "PageDown" },
- { 0x4F, "RightArrow" },
- { 0x50, "LeftArrow" },
- { 0x51, "DownArrow" },
- { 0x52, "UpArrow" },
- { 0x53, "NumLock" },
-
- /* Keypad */
- { 0x54, "Keypad /" },
- { 0x55, "Keypad *" },
- { 0x56, "Keypad -" },
- { 0x57, "Keypad +" },
- { 0x58, "Keypad ENTER" },
- { 0x59, "Keypad 1" },
- { 0x5A, "Keypad 2" },
- { 0x5B, "Keypad 3" },
- { 0x5C, "Keypad 4" },
- { 0x5D, "Keypad 5" },
- { 0x5E, "Keypad 6" },
- { 0x5F, "Keypad 7" },
- { 0x60, "Keypad 8" },
- { 0x61, "Keypad 9" },
- { 0x62, "Keypad 0" },
- { 0x63, "Keypad ." },
-
- /* non PC AT */
- { 0x64, "NonUS \\/|" },
- { 0x65, "Application" },
- { 0x66, "Power" },
- { 0x67, "Keypad =" },
- { 0x68, "F13" },
- { 0x69, "F14" },
- { 0x6A, "F15" },
- { 0x6B, "F16" },
- { 0x6C, "F17" },
- { 0x6D, "F18" },
- { 0x6E, "F19" },
- { 0x6F, "F20" },
-
- { 0x70, "F21" },
- { 0x71, "F22" },
- { 0x72, "F23" },
- { 0x73, "F24" },
- { 0x74, "Execute" },
- { 0x75, "Help" },
- { 0x76, "Menu" },
- { 0x77, "Select" },
- { 0x78, "Stop" },
- { 0x79, "Again" },
- { 0x7A, "Undo" },
- { 0x7B, "Cut" },
- { 0x7C, "Copy" },
- { 0x7D, "Paste" },
- { 0x7E, "Find" },
- { 0x7F, "Mute" },
-
- { 0x80, "VolumeUp" },
- { 0x81, "VolumeDown" },
- { 0x82, "Locking CapsLock" },
- { 0x83, "Locking NumLock" },
- { 0x84, "Locking ScrollLock" },
- { 0x85, "Keypad Comma" },
- { 0x86, "Keypad EqualSign" },
- { 0x87, "International1" },
- { 0x88, "International2" },
- { 0x89, "International3" },
- { 0x8A, "International4" },
- { 0x8B, "International5" },
- { 0x8C, "International6" },
- { 0x8D, "International7" },
- { 0x8E, "International8" },
- { 0x8F, "International9" },
-
- { 0x90, "LANG1" },
- { 0x91, "LANG2" },
- { 0x92, "LANG3" },
- { 0x93, "LANG4" },
- { 0x94, "LANG5" },
- { 0x95, "LANG6" },
- { 0x96, "LANG7" },
- { 0x97, "LANG8" },
- { 0x98, "LANG9" },
- { 0x99, "AlternateErase" },
- { 0x9A, "SysReq/Attention" },
- { 0x9B, "Cancel" },
- { 0x9C, "Clear" },
- { 0x9D, "Prior" },
- { 0x9E, "Return" },
- { 0x9F, "Separator" },
-
- { 0xA0, "Out" },
- { 0xA1, "Oper" },
- { 0xA2, "Clear/Again" },
- { 0xA3, "CrSel/Props" },
- { 0xA4, "ExSel" },
- /* 0xA5..0xAF - reserved */
- { 0xB0, "Keypad 00" },
- { 0xB1, "Keypad 000" },
- { 0xB2, "ThousandsSeparator" },
- { 0xB3, "DecimalSeparator" },
- { 0xB4, "CurrencyUnit" },
- { 0xB5, "CurrencySubunit" },
- { 0xB6, "Keypad (" },
- { 0xB7, "Keypad )" },
- { 0xB8, "Keypad {" },
- { 0xB9, "Keypad }" },
- { 0xBA, "Keypad Tab" },
- { 0xBB, "Keypad Backspace" },
- { 0xBC, "Keypad A" },
- { 0xBD, "Keypad B" },
- { 0xBE, "Keypad C" },
- { 0xBF, "Keypad D" },
-
- { 0xC0, "Keypad E" },
- { 0xC1, "Keypad F" },
- { 0xC2, "Keypad XOR" },
- { 0xC3, "Keypad ^" },
- { 0xC4, "Keypad %" },
- { 0xC5, "Keypad <" },
- { 0xC6, "Keypad >" },
- { 0xC7, "Keypad &" },
- { 0xC8, "Keypad &&" },
- { 0xC9, "Keypad |" },
- { 0xCA, "Keypad ||" },
- { 0xCB, "Keypad :" },
- { 0xCC, "Keypad #" },
- { 0xCD, "Keypad Space" },
- { 0xCE, "Keypad @" },
- { 0xCF, "Keypad !" },
-
- { 0xD0, "Keypad Memory Store" },
- { 0xD1, "Keypad Memory Recall" },
- { 0xD2, "Keypad Memory Clear" },
- { 0xD3, "Keypad Memory Add" },
- { 0xD4, "Keypad Memory Subtract" },
- { 0xD5, "Keypad Memory Multiply" },
- { 0xD6, "Keypad Memory Divide" },
- { 0xD7, "Keypad +/-" },
- { 0xD8, "Keypad Clear" },
- { 0xD9, "Keypad Clear Entry" },
- { 0xDA, "Keypad Binary" },
- { 0xDB, "Keypad Octal" },
- { 0xDC, "Keypad Decimal" },
- { 0xDD, "Keypad Hexadecimal" },
- /* 0xDE..0xDF - reserved, */
- { 0xE0, "LeftControl" },
- { 0xE1, "LeftShift" },
- { 0xE2, "LeftAlt" },
- { 0xE3, "LeftGUI" },
- { 0xE4, "RightControl" },
- { 0xE5, "RightShift" },
- { 0xE6, "RightAlt" },
- { 0xE7, "RightGUI" },
-
- { 0, NULL }
-};
-
-value_string_ext keycode_vals_ext = VALUE_STRING_EXT_INIT(keycode_vals);
-
void proto_register_bthid(void);
void proto_reg_handoff_bthid(void);
@@ -409,12 +135,7 @@ static gint
dissect_hid_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gint offset, guint report_type)
{
- gboolean shortcut_helper = FALSE;
unsigned int protocol_code;
- unsigned int modifier;
- unsigned int keycode;
- unsigned int leds;
- unsigned int buttons;
proto_tree_add_item(tree, hf_bthid_protocol_code, tvb, offset, 1, ENC_BIG_ENDIAN);
protocol_code = tvb_get_guint8(tvb, offset);
@@ -424,260 +145,19 @@ dissect_hid_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
switch (protocol_code) {
case 0x01: /* Keyboard */
if (report_type == 0x02) { /* Output - LEDs */
- proto_tree_add_item(tree, hf_bthid_data_keyboard_leds_constants, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_leds_kana, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_leds_compose, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_leds_scroll_lock, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_leds_caps_lock, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_leds_num_lock, tvb, offset, 1, ENC_BIG_ENDIAN);
- leds = tvb_get_guint8(tvb, offset);
+ offset += call_dissector_with_data(usb_hid_boot_keyboard_output_report_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree, NULL);
- col_append_str(pinfo->cinfo, COL_INFO, " - LEDs: ");
- if (leds & 0x01) {
- col_append_str(pinfo->cinfo, COL_INFO, "NumLock");
- shortcut_helper = TRUE;
- }
- if (leds & 0x02) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "CapsLock");
- shortcut_helper = TRUE;
- }
- if (leds & 0x04) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "ScrollLock");
- shortcut_helper = TRUE;
- }
- if (leds & 0x08) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "Compose");
- shortcut_helper = TRUE;
- }
- if (leds & 0x10) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "Kana");
- shortcut_helper = TRUE;
- }
- if (leds & 0x20) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "Constant1");
- shortcut_helper = TRUE;
- }
- if (leds & 0x40) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "Constant2");
- shortcut_helper = TRUE;
- }
- if (leds & 0x80) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
- col_append_str(pinfo->cinfo, COL_INFO, "Constant3");
- /*shortcut_helper = TRUE;*/
- }
- if (!leds) {
- col_append_str(pinfo->cinfo, COL_INFO, "none");
- }
-
- offset += 1;
break;
} else if (report_type != 0x01) {/* is not Input (Keys) */
break;
}
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_right_gui, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_right_alt, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_right_shift, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_right_ctrl, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_left_gui, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_left_alt, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_left_shift, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_keyboard_modifier_left_ctrl, tvb, offset, 1, ENC_BIG_ENDIAN);
- modifier = tvb_get_guint8(tvb, offset);
-
- col_append_str(pinfo->cinfo, COL_INFO, " - ");
- if (modifier & 0x80) {
- col_append_str(pinfo->cinfo, COL_INFO, "RIGHT GUI");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x40) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "RIGHT ALT");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x20) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "RIGHT SHIFT");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x10) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "RIGHT CTRL");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x08) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "LEFT GUI");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x04) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "LEFT ALT");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x02) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "LEFT SHIFT");
- shortcut_helper = TRUE;
- }
- if (modifier & 0x01) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "LEFT CTRL");
- shortcut_helper = TRUE;
- }
- offset += 1;
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset += 1;
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_keycode_1, tvb, offset, 1, ENC_BIG_ENDIAN);
- keycode = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (keycode) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
- shortcut_helper = TRUE;
- }
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_keycode_2, tvb, offset, 1, ENC_BIG_ENDIAN);
- keycode = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (keycode) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
- shortcut_helper = TRUE;
- }
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_keycode_3, tvb, offset, 1, ENC_BIG_ENDIAN);
- keycode = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (keycode) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
- shortcut_helper = TRUE;
- }
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_keycode_4, tvb, offset, 1, ENC_BIG_ENDIAN);
- keycode = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (keycode) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
- shortcut_helper = TRUE;
- }
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_keycode_5, tvb, offset, 1, ENC_BIG_ENDIAN);
- keycode = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (keycode) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
- shortcut_helper = TRUE;
- }
-
- proto_tree_add_item(tree, hf_bthid_data_keyboard_keycode_6, tvb, offset, 1, ENC_BIG_ENDIAN);
- keycode = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (keycode) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
- shortcut_helper = TRUE;
- }
-
- if (shortcut_helper == FALSE) {
- col_append_str(pinfo->cinfo, COL_INFO, "<action key up>");
- }
+ offset += call_dissector_with_data(usb_hid_boot_keyboard_input_report_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree, NULL);
break;
case 0x02: /* Mouse */
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_8, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_7, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_6, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_5, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_4, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_middle, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_right, tvb, offset, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(tree, hf_bthid_data_mouse_button_left, tvb, offset, 1, ENC_BIG_ENDIAN);
- buttons = tvb_get_guint8(tvb, offset);
- offset += 1;
-
- if (buttons) col_append_str(pinfo->cinfo, COL_INFO, " - ");
- if (buttons & 0x01) {
- col_append_str(pinfo->cinfo, COL_INFO, "Button LEFT");
- shortcut_helper = TRUE;
- }
- if (buttons & 0x02) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button RIGHT");
- shortcut_helper = TRUE;
- }
- if (buttons & 0x04) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button MIDDLE");
- }
- if (buttons & 0x08) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button 4");
- shortcut_helper = TRUE;
- }
- if (buttons & 0x10) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button 5");
- shortcut_helper = TRUE;
- }
- if (buttons & 0x20) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button 6");
- shortcut_helper = TRUE;
- }
- if (buttons & 0x40) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button 7");
- shortcut_helper = TRUE;
- }
- if (buttons & 0x80) {
- if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
- col_append_str(pinfo->cinfo, COL_INFO, "Button 8");
- /* Not necessary, this is the last case where it is used
- * shortcut_helper = TRUE;
- */
- }
+ offset += call_dissector_with_data(usb_hid_boot_mouse_input_report_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree, NULL);
- proto_tree_add_item(tree, hf_bthid_data_mouse_x_displacement, tvb, offset, 1, ENC_LITTLE_ENDIAN);
- offset += 1;
-
- proto_tree_add_item(tree, hf_bthid_data_mouse_y_displacement, tvb, offset, 1, ENC_LITTLE_ENDIAN);
- offset += 1;
-
- /* not really in HID Specification */
- if (tvb_length_remaining(tvb, offset)) {
- proto_tree_add_item(tree, hf_bthid_data_mouse_horizontal_scroll_wheel, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset += 1;
- }
-
- /* not really in HID Specification */
- if (tvb_length_remaining(tvb, offset)) {
- proto_tree_add_item(tree, hf_bthid_data_mouse_vertical_scroll_wheel, tvb, offset, 1, ENC_BIG_ENDIAN);
- offset += 1;
- }
-
- if (tvb_length_remaining(tvb, offset)) {
- proto_tree_add_item(tree, hf_bthid_data, tvb, offset, -1, ENC_NA);
- offset += tvb_length_remaining(tvb, offset);
- }
break;
}
@@ -902,171 +382,6 @@ proto_register_bthid(void)
FT_UINT8, BASE_HEX, VALS(protocol_code_vals), 0x00,
NULL, HFILL }
},
- { &hf_bthid_data_keyboard_reserved,
- { "Reserved", "bthid.data.keyboard.reserved",
- FT_UINT8, BASE_HEX, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_keycode_1,
- { "Keycode 1", "bthid.data.keyboard.keycode_1",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_keycode_2,
- { "Keycode 2", "bthid.data.keyboard.keycode_2",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_keycode_3,
- { "Keycode 3", "bthid.data.keyboard.keycode_3",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_keycode_4,
- { "Keycode 4", "bthid.data.keyboard.keycode_4",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_keycode_5,
- { "Keycode 5", "bthid.data.keyboard.keycode_5",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_keycode_6,
- { "Keycode 6", "bthid.data.keyboard.keycode_6",
- FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_right_gui,
- { "Modifier: RIGHT GUI", "bthid.data.keyboard.modifier.right_gui",
- FT_BOOLEAN, 8, NULL, 0x80,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_right_alt,
- { "Modifier: RIGHT ALT", "bthid.data.keyboard.modifier.right_alt",
- FT_BOOLEAN, 8, NULL, 0x40,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_right_shift,
- { "Modifier: RIGHT SHIFT", "bthid.data.keyboard.modifier.right_shift",
- FT_BOOLEAN, 8, NULL, 0x20,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_right_ctrl,
- { "Modifier: RIGHT CTRL", "bthid.data.keyboard.modifier.right_ctrl",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_left_gui,
- { "Modifier: LEFT GUI", "bthid.data.keyboard.modifier.left_gui",
- FT_BOOLEAN, 8, NULL, 0x08,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_left_alt,
- { "Modifier: LEFT ALT", "bthid.data.keyboard.modifier.left_alt",
- FT_BOOLEAN, 8, NULL, 0x04,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_left_shift,
- { "Modifier: LEFT SHIFT", "bthid.data.keyboard.modifier.left_shift",
- FT_BOOLEAN, 8, NULL, 0x02,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_modifier_left_ctrl,
- { "Modifier: LEFT CTRL", "bthid.data.keyboard.modifier.left_ctrl",
- FT_BOOLEAN, 8, NULL, 0x01,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_leds_constants,
- { "Constants", "bthid.data.keyboard.leds.constants",
- FT_UINT8, BASE_HEX, NULL, 0xE0,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_leds_kana,
- { "KANA", "bthid.data.keyboard.leds.kana",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_leds_compose,
- { "COMPOSE", "bthid.data.keyboard.leds.compose",
- FT_BOOLEAN, 8, NULL, 0x08,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_leds_scroll_lock,
- { "SCROLL LOCK", "bthid.data.keyboard.leds.scroll_lock",
- FT_BOOLEAN, 8, NULL, 0x04,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_leds_caps_lock,
- { "CAPS LOCK", "bthid.data.keyboard.leds.caps_lock",
- FT_BOOLEAN, 8, NULL, 0x02,
- NULL, HFILL }
- },
- { &hf_bthid_data_keyboard_leds_num_lock,
- { "NUM LOCK", "bthid.data.keyboard.leds.num_lock",
- FT_BOOLEAN, 8, NULL, 0x01,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_8,
- { "Button 8", "bthid.data.mouse.button.8",
- FT_BOOLEAN, 8, NULL, 0x80,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_7,
- { "Button 7", "bthid.data.mouse.button.7",
- FT_BOOLEAN, 8, NULL, 0x40,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_6,
- { "Button 6", "bthid.data.mouse.button.6",
- FT_BOOLEAN, 8, NULL, 0x20,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_5,
- { "Button 5", "bthid.data.mouse.button.5",
- FT_BOOLEAN, 8, NULL, 0x10,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_4,
- { "Button 4", "bthid.data.mouse.button.4",
- FT_BOOLEAN, 8, NULL, 0x08,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_middle,
- { "Button Middle", "bthid.data.mouse.button.middle",
- FT_BOOLEAN, 8, NULL, 0x04,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_right,
- { "Button Right", "bthid.data.mouse.button.right",
- FT_BOOLEAN, 8, NULL, 0x02,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_button_left,
- { "Button Left", "bthid.data.mouse.button.left",
- FT_BOOLEAN, 8, NULL, 0x01,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_x_displacement,
- { "X Displacement", "bthid.data.mouse.x_displacement",
- FT_INT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_y_displacement,
- { "Y Displacement", "bthid.data.mouse.y_displacement",
- FT_INT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_horizontal_scroll_wheel,
- { "Horizontal Scroll Wheel", "bthid.data.mouse.scroll_wheel.horizontal",
- FT_INT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL }
- },
- { &hf_bthid_data_mouse_vertical_scroll_wheel,
- { "Vertical Scroll Wheel", "bthid.data.mouse.scroll_wheel.vertical",
- FT_INT8, BASE_DEC, NULL, 0x00,
- NULL, HFILL }
- },
{ &hf_bthid_data,
{ "Data", "bthid.data",
FT_NONE, BASE_NONE, NULL, 0x00,
@@ -1106,6 +421,10 @@ proto_register_bthid(void)
void
proto_reg_handoff_bthid(void)
{
+ usb_hid_boot_keyboard_input_report_handle = find_dissector("usbhid.boot_report.keyboard.input");
+ usb_hid_boot_keyboard_output_report_handle = find_dissector("usbhid.boot_report.keyboard.output");
+ usb_hid_boot_mouse_input_report_handle = find_dissector("usbhid.boot_report.mouse.input");
+
dissector_add_uint("btl2cap.service", BTSDP_HID_SERVICE_UUID, bthid_handle);
dissector_add_uint("btl2cap.service", BTSDP_HIDP_PROTOCOL_UUID, bthid_handle);
diff --git a/epan/dissectors/packet-usb-hid.c b/epan/dissectors/packet-usb-hid.c
index 9887273741..42a8904994 100644
--- a/epan/dissectors/packet-usb-hid.c
+++ b/epan/dissectors/packet-usb-hid.c
@@ -105,6 +105,41 @@ static int hf_usb_hid_bNumDescriptors = -1;
static int hf_usb_hid_bDescriptorType = -1;
static int hf_usb_hid_wDescriptorLength = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_right_gui = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_right_alt = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_right_shift = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_right_ctrl = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_left_gui = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_left_alt = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_left_shift = -1;
+static int hf_usbhid_boot_report_keyboard_modifier_left_ctrl = -1;
+static int hf_usbhid_boot_report_keyboard_reserved = -1;
+static int hf_usbhid_boot_report_keyboard_keycode_1 = -1;
+static int hf_usbhid_boot_report_keyboard_keycode_2 = -1;
+static int hf_usbhid_boot_report_keyboard_keycode_3 = -1;
+static int hf_usbhid_boot_report_keyboard_keycode_4 = -1;
+static int hf_usbhid_boot_report_keyboard_keycode_5 = -1;
+static int hf_usbhid_boot_report_keyboard_keycode_6 = -1;
+static int hf_usbhid_boot_report_keyboard_leds_constants = -1;
+static int hf_usbhid_boot_report_keyboard_leds_kana = -1;
+static int hf_usbhid_boot_report_keyboard_leds_compose = -1;
+static int hf_usbhid_boot_report_keyboard_leds_scroll_lock = -1;
+static int hf_usbhid_boot_report_keyboard_leds_caps_lock = -1;
+static int hf_usbhid_boot_report_keyboard_leds_num_lock = -1;
+static int hf_usbhid_boot_report_mouse_button_8 = -1;
+static int hf_usbhid_boot_report_mouse_button_7 = -1;
+static int hf_usbhid_boot_report_mouse_button_6 = -1;
+static int hf_usbhid_boot_report_mouse_button_5 = -1;
+static int hf_usbhid_boot_report_mouse_button_4 = -1;
+static int hf_usbhid_boot_report_mouse_button_middle = -1;
+static int hf_usbhid_boot_report_mouse_button_right = -1;
+static int hf_usbhid_boot_report_mouse_button_left = -1;
+static int hf_usbhid_boot_report_mouse_x_displacement = -1;
+static int hf_usbhid_boot_report_mouse_y_displacement = -1;
+static int hf_usbhid_boot_report_mouse_horizontal_scroll_wheel = -1;
+static int hf_usbhid_boot_report_mouse_vertical_scroll_wheel = -1;
+static int hf_usbhid_data = -1;
+
static const true_false_string tfs_mainitem_bit0 = {"Constant", "Data"};
static const true_false_string tfs_mainitem_bit1 = {"Variable", "Array"};
static const true_false_string tfs_mainitem_bit2 = {"Relative", "Absolute"};
@@ -302,6 +337,247 @@ static const range_string usb_hid_item_usage_vals[] = {
{0, 0, NULL}
};
+static const value_string keycode_vals[] = {
+ { 0x00, "<ACTION KEY UP>" },
+ { 0x01, "ErrorRollOver" },
+ { 0x02, "POSTFail" },
+ { 0x03, "ErrorUndefined" },
+
+ { 0x04, "a" },
+ { 0x05, "b" },
+ { 0x06, "c" },
+ { 0x07, "d" },
+ { 0x08, "e" },
+ { 0x09, "f" },
+ { 0x0A, "g" },
+ { 0x0B, "h" },
+ { 0x0C, "i" },
+ { 0x0D, "j" },
+ { 0x0E, "k" },
+ { 0x0F, "l" },
+ { 0x10, "m" },
+ { 0x11, "n" },
+ { 0x12, "o" },
+ { 0x13, "p" },
+ { 0x14, "q" },
+ { 0x15, "r" },
+ { 0x16, "s" },
+ { 0x17, "t" },
+ { 0x18, "u" },
+ { 0x19, "v" },
+ { 0x1A, "w" },
+ { 0x1B, "x" },
+ { 0x1C, "y" },
+ { 0x1D, "z" },
+
+ { 0x1E, "1" },
+ { 0x1F, "2" },
+ { 0x20, "3" },
+ { 0x21, "4" },
+ { 0x22, "5" },
+ { 0x23, "6" },
+ { 0x24, "7" },
+ { 0x25, "8" },
+ { 0x26, "9" },
+ { 0x27, "0" },
+
+ { 0x28, "ENTER" },
+ { 0x29, "Escape" },
+ { 0x2A, "Backspace" },
+ { 0x2B, "Tab" },
+ { 0x2C, "Spacebar" },
+
+ { 0x2D, "-" },
+ { 0x2E, "=" },
+ { 0x2F, "[" },
+ { 0x30, "]" },
+ { 0x31, "\\" },
+ { 0x32, "NonUS #/~" },
+ { 0x33, ";" },
+ { 0x34, "'" },
+ { 0x35, "`" },
+ { 0x36, "," },
+ { 0x37, "." },
+ { 0x38, "/" },
+ { 0x39, "CapsLock" },
+ { 0x3A, "F1" },
+ { 0x3B, "F2" },
+ { 0x3C, "F3" },
+ { 0x3D, "F4" },
+ { 0x3E, "F5" },
+ { 0x3F, "F6" },
+ { 0x40, "F7" },
+ { 0x41, "F8" },
+ { 0x42, "F9" },
+ { 0x43, "F10" },
+ { 0x44, "F11" },
+ { 0x45, "F12" },
+ { 0x46, "PrintScreen" },
+ { 0x47, "ScrollLock" },
+ { 0x48, "Pause" },
+ { 0x49, "Insert" },
+ { 0x4A, "Home" },
+ { 0x4B, "PageUp" },
+ { 0x4C, "DeleteForward" },
+ { 0x4D, "End" },
+ { 0x4E, "PageDown" },
+ { 0x4F, "RightArrow" },
+ { 0x50, "LeftArrow" },
+ { 0x51, "DownArrow" },
+ { 0x52, "UpArrow" },
+ { 0x53, "NumLock" },
+
+ /* Keypad */
+ { 0x54, "Keypad /" },
+ { 0x55, "Keypad *" },
+ { 0x56, "Keypad -" },
+ { 0x57, "Keypad +" },
+ { 0x58, "Keypad ENTER" },
+ { 0x59, "Keypad 1" },
+ { 0x5A, "Keypad 2" },
+ { 0x5B, "Keypad 3" },
+ { 0x5C, "Keypad 4" },
+ { 0x5D, "Keypad 5" },
+ { 0x5E, "Keypad 6" },
+ { 0x5F, "Keypad 7" },
+ { 0x60, "Keypad 8" },
+ { 0x61, "Keypad 9" },
+ { 0x62, "Keypad 0" },
+ { 0x63, "Keypad ." },
+
+ /* non PC AT */
+ { 0x64, "NonUS \\/|" },
+ { 0x65, "Application" },
+ { 0x66, "Power" },
+ { 0x67, "Keypad =" },
+ { 0x68, "F13" },
+ { 0x69, "F14" },
+ { 0x6A, "F15" },
+ { 0x6B, "F16" },
+ { 0x6C, "F17" },
+ { 0x6D, "F18" },
+ { 0x6E, "F19" },
+ { 0x6F, "F20" },
+
+ { 0x70, "F21" },
+ { 0x71, "F22" },
+ { 0x72, "F23" },
+ { 0x73, "F24" },
+ { 0x74, "Execute" },
+ { 0x75, "Help" },
+ { 0x76, "Menu" },
+ { 0x77, "Select" },
+ { 0x78, "Stop" },
+ { 0x79, "Again" },
+ { 0x7A, "Undo" },
+ { 0x7B, "Cut" },
+ { 0x7C, "Copy" },
+ { 0x7D, "Paste" },
+ { 0x7E, "Find" },
+ { 0x7F, "Mute" },
+
+ { 0x80, "VolumeUp" },
+ { 0x81, "VolumeDown" },
+ { 0x82, "Locking CapsLock" },
+ { 0x83, "Locking NumLock" },
+ { 0x84, "Locking ScrollLock" },
+ { 0x85, "Keypad Comma" },
+ { 0x86, "Keypad EqualSign" },
+ { 0x87, "International1" },
+ { 0x88, "International2" },
+ { 0x89, "International3" },
+ { 0x8A, "International4" },
+ { 0x8B, "International5" },
+ { 0x8C, "International6" },
+ { 0x8D, "International7" },
+ { 0x8E, "International8" },
+ { 0x8F, "International9" },
+
+ { 0x90, "LANG1" },
+ { 0x91, "LANG2" },
+ { 0x92, "LANG3" },
+ { 0x93, "LANG4" },
+ { 0x94, "LANG5" },
+ { 0x95, "LANG6" },
+ { 0x96, "LANG7" },
+ { 0x97, "LANG8" },
+ { 0x98, "LANG9" },
+ { 0x99, "AlternateErase" },
+ { 0x9A, "SysReq/Attention" },
+ { 0x9B, "Cancel" },
+ { 0x9C, "Clear" },
+ { 0x9D, "Prior" },
+ { 0x9E, "Return" },
+ { 0x9F, "Separator" },
+
+ { 0xA0, "Out" },
+ { 0xA1, "Oper" },
+ { 0xA2, "Clear/Again" },
+ { 0xA3, "CrSel/Props" },
+ { 0xA4, "ExSel" },
+ /* 0xA5..0xAF - reserved */
+ { 0xB0, "Keypad 00" },
+ { 0xB1, "Keypad 000" },
+ { 0xB2, "ThousandsSeparator" },
+ { 0xB3, "DecimalSeparator" },
+ { 0xB4, "CurrencyUnit" },
+ { 0xB5, "CurrencySubunit" },
+ { 0xB6, "Keypad (" },
+ { 0xB7, "Keypad )" },
+ { 0xB8, "Keypad {" },
+ { 0xB9, "Keypad }" },
+ { 0xBA, "Keypad Tab" },
+ { 0xBB, "Keypad Backspace" },
+ { 0xBC, "Keypad A" },
+ { 0xBD, "Keypad B" },
+ { 0xBE, "Keypad C" },
+ { 0xBF, "Keypad D" },
+
+ { 0xC0, "Keypad E" },
+ { 0xC1, "Keypad F" },
+ { 0xC2, "Keypad XOR" },
+ { 0xC3, "Keypad ^" },
+ { 0xC4, "Keypad %" },
+ { 0xC5, "Keypad <" },
+ { 0xC6, "Keypad >" },
+ { 0xC7, "Keypad &" },
+ { 0xC8, "Keypad &&" },
+ { 0xC9, "Keypad |" },
+ { 0xCA, "Keypad ||" },
+ { 0xCB, "Keypad :" },
+ { 0xCC, "Keypad #" },
+ { 0xCD, "Keypad Space" },
+ { 0xCE, "Keypad @" },
+ { 0xCF, "Keypad !" },
+
+ { 0xD0, "Keypad Memory Store" },
+ { 0xD1, "Keypad Memory Recall" },
+ { 0xD2, "Keypad Memory Clear" },
+ { 0xD3, "Keypad Memory Add" },
+ { 0xD4, "Keypad Memory Subtract" },
+ { 0xD5, "Keypad Memory Multiply" },
+ { 0xD6, "Keypad Memory Divide" },
+ { 0xD7, "Keypad +/-" },
+ { 0xD8, "Keypad Clear" },
+ { 0xD9, "Keypad Clear Entry" },
+ { 0xDA, "Keypad Binary" },
+ { 0xDB, "Keypad Octal" },
+ { 0xDC, "Keypad Decimal" },
+ { 0xDD, "Keypad Hexadecimal" },
+ /* 0xDE..0xDF - reserved, */
+ { 0xE0, "LeftControl" },
+ { 0xE1, "LeftShift" },
+ { 0xE2, "LeftAlt" },
+ { 0xE3, "LeftGUI" },
+ { 0xE4, "RightControl" },
+ { 0xE5, "RightShift" },
+ { 0xE6, "RightAlt" },
+ { 0xE7, "RightGUI" },
+
+ { 0, NULL }
+};
+value_string_ext keycode_vals_ext = VALUE_STRING_EXT_INIT(keycode_vals);
+
/* Dissector for the data in a HID main report. */
static int
dissect_usb_hid_report_mainitem_data(packet_info *pinfo _U_, proto_tree *tree, tvbuff_t *tvb, int offset, unsigned int bSize, unsigned int bTag)
@@ -758,6 +1034,287 @@ static const value_string usb_hid_report_type_vals[] = {
{ 0, NULL }
};
+static gint
+dissect_usb_hid_boot_keyboard_input_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ gint offset = 0;
+ gboolean shortcut_helper = FALSE;
+ guint modifier;
+ guint keycode;
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_right_gui, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_right_alt, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_right_shift, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_right_ctrl, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_left_gui, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_left_alt, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_left_shift, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_modifier_left_ctrl, tvb, offset, 1, ENC_BIG_ENDIAN);
+ modifier = tvb_get_guint8(tvb, offset);
+
+ col_append_str(pinfo->cinfo, COL_INFO, " - ");
+ if (modifier & 0x80) {
+ col_append_str(pinfo->cinfo, COL_INFO, "RIGHT GUI");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x40) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "RIGHT ALT");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x20) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "RIGHT SHIFT");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x10) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "RIGHT CTRL");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x08) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "LEFT GUI");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x04) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "LEFT ALT");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x02) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "LEFT SHIFT");
+ shortcut_helper = TRUE;
+ }
+ if (modifier & 0x01) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "LEFT CTRL");
+ shortcut_helper = TRUE;
+ }
+ offset += 1;
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset += 1;
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_keycode_1, tvb, offset, 1, ENC_BIG_ENDIAN);
+ keycode = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (keycode) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
+ shortcut_helper = TRUE;
+ }
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_keycode_2, tvb, offset, 1, ENC_BIG_ENDIAN);
+ keycode = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (keycode) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
+ shortcut_helper = TRUE;
+ }
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_keycode_3, tvb, offset, 1, ENC_BIG_ENDIAN);
+ keycode = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (keycode) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
+ shortcut_helper = TRUE;
+ }
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_keycode_4, tvb, offset, 1, ENC_BIG_ENDIAN);
+ keycode = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (keycode) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
+ shortcut_helper = TRUE;
+ }
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_keycode_5, tvb, offset, 1, ENC_BIG_ENDIAN);
+ keycode = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (keycode) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
+ shortcut_helper = TRUE;
+ }
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_keycode_6, tvb, offset, 1, ENC_BIG_ENDIAN);
+ keycode = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (keycode) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s", val_to_str_ext(keycode, &keycode_vals_ext, "Unknown"));
+ shortcut_helper = TRUE;
+ }
+
+ if (shortcut_helper == FALSE) {
+ col_append_str(pinfo->cinfo, COL_INFO, "<action key up>");
+ }
+
+ return offset;
+}
+
+static gint
+dissect_usb_hid_boot_keyboard_output_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ gint offset = 0;
+ gboolean shortcut_helper = FALSE;
+ guint leds;
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_leds_constants, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_leds_kana, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_leds_compose, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_leds_scroll_lock, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_leds_caps_lock, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_keyboard_leds_num_lock, tvb, offset, 1, ENC_BIG_ENDIAN);
+ leds = tvb_get_guint8(tvb, offset);
+
+ col_append_str(pinfo->cinfo, COL_INFO, " - LEDs: ");
+ if (leds & 0x01) {
+ col_append_str(pinfo->cinfo, COL_INFO, "NumLock");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x02) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "CapsLock");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x04) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "ScrollLock");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x08) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Compose");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x10) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Kana");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x20) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Constant1");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x40) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Constant2");
+ shortcut_helper = TRUE;
+ }
+ if (leds & 0x80) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, ", ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Constant3");
+ /*shortcut_helper = TRUE;*/
+ }
+ if (!leds) {
+ col_append_str(pinfo->cinfo, COL_INFO, "none");
+ }
+
+ offset += 1;
+
+ return offset;
+}
+
+static gint
+dissect_usb_hid_boot_mouse_input_report(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
+{
+ gint offset = 0;
+ gboolean shortcut_helper = FALSE;
+ guint buttons;
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_8, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_7, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_6, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_5, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_4, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_middle, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_right, tvb, offset, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_button_left, tvb, offset, 1, ENC_BIG_ENDIAN);
+ buttons = tvb_get_guint8(tvb, offset);
+ offset += 1;
+
+ if (buttons) col_append_str(pinfo->cinfo, COL_INFO, " - ");
+ if (buttons & 0x01) {
+ col_append_str(pinfo->cinfo, COL_INFO, "Button LEFT");
+ shortcut_helper = TRUE;
+ }
+ if (buttons & 0x02) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button RIGHT");
+ shortcut_helper = TRUE;
+ }
+ if (buttons & 0x04) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button MIDDLE");
+ }
+ if (buttons & 0x08) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button 4");
+ shortcut_helper = TRUE;
+ }
+ if (buttons & 0x10) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button 5");
+ shortcut_helper = TRUE;
+ }
+ if (buttons & 0x20) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button 6");
+ shortcut_helper = TRUE;
+ }
+ if (buttons & 0x40) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button 7");
+ shortcut_helper = TRUE;
+ }
+ if (buttons & 0x80) {
+ if (shortcut_helper) col_append_str(pinfo->cinfo, COL_INFO, " + ");
+ col_append_str(pinfo->cinfo, COL_INFO, "Button 8");
+ /* Not necessary, this is the last case where it is used
+ * shortcut_helper = TRUE;
+ */
+ }
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_x_displacement, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_y_displacement, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ offset += 1;
+
+ /* not really in HID Specification */
+ if (tvb_length_remaining(tvb, offset)) {
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_horizontal_scroll_wheel, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset += 1;
+ }
+
+ /* not really in HID Specification */
+ if (tvb_length_remaining(tvb, offset)) {
+ proto_tree_add_item(tree, hf_usbhid_boot_report_mouse_vertical_scroll_wheel, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset += 1;
+ }
+
+ if (tvb_length_remaining(tvb, offset)) {
+ proto_tree_add_item(tree, hf_usbhid_data, tvb, offset, -1, ENC_NA);
+ offset += tvb_length_remaining(tvb, offset);
+ }
+
+ return offset;
+}
+
+
/* Dissector for HID class-specific control request as defined in
* USBHID 1.11, Chapter 7.2.
* Returns tvb_length(tvb) if a class specific dissector was found
@@ -1122,7 +1679,178 @@ proto_register_usb_hid(void)
{ &hf_usb_hid_wDescriptorLength,
{ "wDescriptorLength", "usbhid.descriptor.hid.wDescriptorLength", FT_UINT16,
- BASE_DEC, NULL, 0x0, NULL, HFILL }}
+ BASE_DEC, NULL, 0x0, NULL, HFILL }},
+
+ { &hf_usbhid_boot_report_keyboard_reserved,
+ { "Reserved", "usbhid.boot_report.keyboard.reserved",
+ FT_UINT8, BASE_HEX, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_keycode_1,
+ { "Keycode 1", "usbhid.boot_report.keyboard.keycode_1",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_keycode_2,
+ { "Keycode 2", "usbhid.boot_report.keyboard.keycode_2",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_keycode_3,
+ { "Keycode 3", "usbhid.boot_report.keyboard.keycode_3",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_keycode_4,
+ { "Keycode 4", "usbhid.boot_report.keyboard.keycode_4",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_keycode_5,
+ { "Keycode 5", "usbhid.boot_report.keyboard.keycode_5",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_keycode_6,
+ { "Keycode 6", "usbhid.boot_report.keyboard.keycode_6",
+ FT_UINT8, BASE_HEX|BASE_EXT_STRING, &keycode_vals_ext, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_right_gui,
+ { "Modifier: RIGHT GUI", "usbhid.boot_report.keyboard.modifier.right_gui",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_right_alt,
+ { "Modifier: RIGHT ALT", "usbhid.boot_report.keyboard.modifier.right_alt",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_right_shift,
+ { "Modifier: RIGHT SHIFT", "usbhid.boot_report.keyboard.modifier.right_shift",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_right_ctrl,
+ { "Modifier: RIGHT CTRL", "usbhid.boot_report.keyboard.modifier.right_ctrl",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_left_gui,
+ { "Modifier: LEFT GUI", "usbhid.boot_report.keyboard.modifier.left_gui",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_left_alt,
+ { "Modifier: LEFT ALT", "usbhid.boot_report.keyboard.modifier.left_alt",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_left_shift,
+ { "Modifier: LEFT SHIFT", "usbhid.boot_report.keyboard.modifier.left_shift",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_modifier_left_ctrl,
+ { "Modifier: LEFT CTRL", "usbhid.boot_report.keyboard.modifier.left_ctrl",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_leds_constants,
+ { "Constants", "usbhid.boot_report.keyboard.leds.constants",
+ FT_UINT8, BASE_HEX, NULL, 0xE0,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_leds_kana,
+ { "KANA", "usbhid.boot_report.keyboard.leds.kana",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_leds_compose,
+ { "COMPOSE", "usbhid.boot_report.keyboard.leds.compose",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_leds_scroll_lock,
+ { "SCROLL LOCK", "usbhid.boot_report.keyboard.leds.scroll_lock",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_leds_caps_lock,
+ { "CAPS LOCK", "usbhid.boot_report.keyboard.leds.caps_lock",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_keyboard_leds_num_lock,
+ { "NUM LOCK", "usbhid.boot_report.keyboard.leds.num_lock",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_8,
+ { "Button 8", "usbhid.boot_report.mouse.button.8",
+ FT_BOOLEAN, 8, NULL, 0x80,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_7,
+ { "Button 7", "usbhid.boot_report.mouse.button.7",
+ FT_BOOLEAN, 8, NULL, 0x40,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_6,
+ { "Button 6", "usbhid.boot_report.mouse.button.6",
+ FT_BOOLEAN, 8, NULL, 0x20,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_5,
+ { "Button 5", "usbhid.boot_report.mouse.button.5",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_4,
+ { "Button 4", "usbhid.boot_report.mouse.button.4",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_middle,
+ { "Button Middle", "usbhid.boot_report.mouse.button.middle",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_right,
+ { "Button Right", "usbhid.boot_report.mouse.button.right",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_button_left,
+ { "Button Left", "usbhid.boot_report.mouse.button.left",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_x_displacement,
+ { "X Displacement", "usbhid.boot_report.mouse.x_displacement",
+ FT_INT8, BASE_DEC, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_y_displacement,
+ { "Y Displacement", "usbhid.boot_report.mouse.y_displacement",
+ FT_INT8, BASE_DEC, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_horizontal_scroll_wheel,
+ { "Horizontal Scroll Wheel", "usbhid.boot_report.mouse.scroll_wheel.horizontal",
+ FT_INT8, BASE_DEC, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_boot_report_mouse_vertical_scroll_wheel,
+ { "Vertical Scroll Wheel", "usbhid.boot_report.mouse.scroll_wheel.vertical",
+ FT_INT8, BASE_DEC, NULL, 0x00,
+ NULL, HFILL }
+ },
+ { &hf_usbhid_data,
+ { "Data", "usbhid.data",
+ FT_NONE, BASE_NONE, NULL, 0x00,
+ NULL, HFILL }
+ },
};
static gint *usb_hid_subtrees[] = {
@@ -1135,6 +1863,11 @@ proto_register_usb_hid(void)
proto_usb_hid = proto_register_protocol("USB HID", "USBHID", "usbhid");
proto_register_field_array(proto_usb_hid, hf, array_length(hf));
proto_register_subtree_array(usb_hid_subtrees, array_length(usb_hid_subtrees));
+
+ /*usb_hid_boot_keyboard_input_report_handle =*/ new_register_dissector("usbhid.boot_report.keyboard.input", dissect_usb_hid_boot_keyboard_input_report, proto_usb_hid);
+ /*usb_hid_boot_keyboard_output_report_handle =*/ new_register_dissector("usbhid.boot_report.keyboard.output", dissect_usb_hid_boot_keyboard_output_report, proto_usb_hid);
+ /*usb_hid_boot_mouse_input_report_handle =*/ new_register_dissector("usbhid.boot_report.mouse.input", dissect_usb_hid_boot_mouse_input_report, proto_usb_hid);
+
}
void
@@ -1142,7 +1875,8 @@ proto_reg_handoff_usb_hid(void)
{
dissector_handle_t usb_hid_control_handle, usb_hid_descr_handle;
- usb_hid_control_handle = new_create_dissector_handle(dissect_usb_hid_control, proto_usb_hid);
+ usb_hid_control_handle = new_create_dissector_handle(
+ dissect_usb_hid_control, proto_usb_hid);
dissector_add_uint("usb.control", IF_CLASS_HID, usb_hid_control_handle);
usb_hid_descr_handle = new_create_dissector_handle(