diff options
author | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2016-05-05 12:28:27 +0200 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2016-05-05 20:49:32 +0000 |
commit | 63b02d35e7f7146e6cea99af0e8d43278927db26 (patch) | |
tree | 665c0f04b7e773c11501c4ea7178d25b23b082f6 | |
parent | a68e178b2e43785716aec97c4b59b99f48bae75d (diff) |
USB Audio: add dissect of ChannelConfig bitmap
Bug: 11858
Change-Id: I4a4a557f4f217c3dec5285fbc9d152c9df52ccb0
Reviewed-on: https://code.wireshark.org/review/15267
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
-rw-r--r-- | epan/dissectors/packet-usb-audio.c | 154 |
1 files changed, 150 insertions, 4 deletions
diff --git a/epan/dissectors/packet-usb-audio.c b/epan/dissectors/packet-usb-audio.c index 0981d7fef9..f66991e6e3 100644 --- a/epan/dissectors/packet-usb-audio.c +++ b/epan/dissectors/packet-usb-audio.c @@ -51,6 +51,19 @@ static int hf_ac_if_input_terminaltype = -1; static int hf_ac_if_input_assocterminal = -1; static int hf_ac_if_input_nrchannels = -1; static int hf_ac_if_input_channelconfig = -1; +static int hf_ac_if_input_channelconfig_d0 = -1; +static int hf_ac_if_input_channelconfig_d1 = -1; +static int hf_ac_if_input_channelconfig_d2 = -1; +static int hf_ac_if_input_channelconfig_d3 = -1; +static int hf_ac_if_input_channelconfig_d4 = -1; +static int hf_ac_if_input_channelconfig_d5 = -1; +static int hf_ac_if_input_channelconfig_d6 = -1; +static int hf_ac_if_input_channelconfig_d7 = -1; +static int hf_ac_if_input_channelconfig_d8 = -1; +static int hf_ac_if_input_channelconfig_d9 = -1; +static int hf_ac_if_input_channelconfig_d10 = -1; +static int hf_ac_if_input_channelconfig_d11 = -1; +static int hf_ac_if_input_channelconfig_rsv = -1; static int hf_ac_if_input_channelnames = -1; static int hf_ac_if_input_terminal = -1; static int hf_ac_if_output_terminalid = -1; @@ -80,6 +93,19 @@ static int hf_ac_if_mu_nrinpins = -1; static int hf_ac_if_mu_sourceid = -1; static int hf_ac_if_mu_nrchannels = -1; static int hf_ac_if_mu_channelconfig = -1; +static int hf_ac_if_mu_channelconfig_d0 = -1; +static int hf_ac_if_mu_channelconfig_d1 = -1; +static int hf_ac_if_mu_channelconfig_d2 = -1; +static int hf_ac_if_mu_channelconfig_d3 = -1; +static int hf_ac_if_mu_channelconfig_d4 = -1; +static int hf_ac_if_mu_channelconfig_d5 = -1; +static int hf_ac_if_mu_channelconfig_d6 = -1; +static int hf_ac_if_mu_channelconfig_d7 = -1; +static int hf_ac_if_mu_channelconfig_d8 = -1; +static int hf_ac_if_mu_channelconfig_d9 = -1; +static int hf_ac_if_mu_channelconfig_d10 = -1; +static int hf_ac_if_mu_channelconfig_d11 = -1; +static int hf_ac_if_mu_channelconfig_rsv = -1; static int hf_ac_if_mu_channelnames = -1; static int hf_ac_if_mu_controls = -1; static int hf_ac_if_mu_imixer = -1; @@ -107,6 +133,8 @@ static gint ett_usb_audio_desc = -1; static gint ett_ac_if_fu_controls = -1; static gint ett_ac_if_fu_controls0 = -1; static gint ett_ac_if_fu_controls1 = -1; +static gint ett_ac_if_input_channelconfig = -1; +static gint ett_ac_if_mu_channelconfig = -1; static dissector_handle_t sysex_handle; @@ -479,8 +507,28 @@ dissect_ac_if_input_terminal(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree *tree, usb_conv_info_t *usb_conv_info _U_) { gint offset_start; + + static const int *input_channelconfig[] = { + &hf_ac_if_input_channelconfig_d0, + &hf_ac_if_input_channelconfig_d1, + &hf_ac_if_input_channelconfig_d2, + &hf_ac_if_input_channelconfig_d3, + &hf_ac_if_input_channelconfig_d4, + &hf_ac_if_input_channelconfig_d5, + &hf_ac_if_input_channelconfig_d6, + &hf_ac_if_input_channelconfig_d7, + &hf_ac_if_input_channelconfig_d8, + &hf_ac_if_input_channelconfig_d9, + &hf_ac_if_input_channelconfig_d10, + &hf_ac_if_input_channelconfig_d11, + &hf_ac_if_input_channelconfig_rsv, + NULL + }; + offset_start = offset; + + proto_tree_add_item(tree, hf_ac_if_input_terminalid, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; @@ -493,7 +541,7 @@ dissect_ac_if_input_terminal(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree_add_item(tree, hf_ac_if_input_nrchannels, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; - proto_tree_add_item(tree, hf_ac_if_input_channelconfig, tvb, offset, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_bitmask(tree, tvb, offset, hf_ac_if_input_channelconfig, ett_ac_if_input_channelconfig, input_channelconfig, ENC_LITTLE_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_ac_if_input_channelnames, tvb, offset, 1, ENC_LITTLE_ENDIAN); @@ -591,6 +639,24 @@ dissect_ac_if_mixed_unit(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, { gint offset_start; guint8 nrinpins; + + static const int *mu_channelconfig[] = { + &hf_ac_if_mu_channelconfig_d0, + &hf_ac_if_mu_channelconfig_d1, + &hf_ac_if_mu_channelconfig_d2, + &hf_ac_if_mu_channelconfig_d3, + &hf_ac_if_mu_channelconfig_d4, + &hf_ac_if_mu_channelconfig_d5, + &hf_ac_if_mu_channelconfig_d6, + &hf_ac_if_mu_channelconfig_d7, + &hf_ac_if_mu_channelconfig_d8, + &hf_ac_if_mu_channelconfig_d9, + &hf_ac_if_mu_channelconfig_d10, + &hf_ac_if_mu_channelconfig_d11, + &hf_ac_if_mu_channelconfig_rsv, + NULL + }; + offset_start = offset; proto_tree_add_item(tree, hf_ac_if_mu_unitid, tvb, offset, 1, ENC_LITTLE_ENDIAN); @@ -609,7 +675,7 @@ dissect_ac_if_mixed_unit(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, proto_tree_add_item(tree, hf_ac_if_mu_nrchannels, tvb, offset, 1, ENC_LITTLE_ENDIAN); offset += 1; - proto_tree_add_item(tree, hf_ac_if_mu_channelconfig, tvb, offset, 2, ENC_LITTLE_ENDIAN); + proto_tree_add_bitmask(tree, tvb, offset, hf_ac_if_mu_channelconfig, ett_ac_if_mu_channelconfig, mu_channelconfig, ENC_LITTLE_ENDIAN); offset += 2; proto_tree_add_item(tree, hf_ac_if_mu_channelnames, tvb, offset, 1, ENC_LITTLE_ENDIAN); @@ -951,6 +1017,45 @@ proto_register_usb_audio(void) { &hf_ac_if_input_channelconfig, { "Channel Config", "usbaudio.ac_if_input.wChannelConfig", FT_UINT16, BASE_HEX, NULL, 0x00, "wChannelConfig", HFILL }}, + { &hf_ac_if_input_channelconfig_d0, + { "Left Front", "usbaudio.ac_if_input.wChannelConfig.d0", + FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d1, + { "Right Front", "usbaudio.ac_if_input.wChannelConfig.d1", + FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d2, + { "Center Front", "usbaudio.ac_if_input.wChannelConfig.d2", + FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d3, + { "Low Frequency Enhancement", "usbaudio.ac_if_input.wChannelConfig.d3", + FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d4, + { "Left Surround", "usbaudio.ac_if_input.wChannelConfig.d4", + FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d5, + { "Right Surround", "usbaudio.ac_if_input.wChannelConfig.d5", + FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d6, + { "Left of Center", "usbaudio.ac_if_input.wChannelConfig.d6", + FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d7, + { "Right of Center", "usbaudio.ac_if_input.wChannelConfig.d7", + FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d8, + { "Surround", "usbaudio.ac_if_input.wChannelConfig.d8", + FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d9, + { "Side Left", "usbaudio.ac_if_input.wChannelConfig.d9", + FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d10, + { "Side Right", "usbaudio.ac_if_input.wChannelConfig.d10", + FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_d11, + { "Top", "usbaudio.ac_if_input.wChannelConfig.d11", + FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL }}, + { &hf_ac_if_input_channelconfig_rsv, + { "Reserved", "usbaudio.ac_if_input.wChannelConfig.rsv", + FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL }}, { &hf_ac_if_input_channelnames, { "Channel Names", "usbaudio.ac_if_input.iChannelNames", FT_UINT8, BASE_DEC, NULL, 0x00, "iChannelNames", HFILL }}, @@ -1037,7 +1142,46 @@ proto_register_usb_audio(void) FT_UINT8, BASE_DEC, NULL, 0x00, "bNrChannels", HFILL }}, { &hf_ac_if_mu_channelconfig, { "Channel Config", "usbaudio.ac_if_mu.wChannelConfig", - FT_UINT8, BASE_HEX, NULL, 0x00, "wChannelConfig", HFILL }}, + FT_UINT16, BASE_HEX, NULL, 0x00, "wChannelConfig", HFILL }}, + { &hf_ac_if_mu_channelconfig_d0, + { "Left Front", "usbaudio.ac_if_mu.wChannelConfig.d0", + FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d1, + { "Right Front", "usbaudio.ac_if_mu.wChannelConfig.d1", + FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d2, + { "Center Front", "usbaudio.ac_if_mu.wChannelConfig.d2", + FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d3, + { "Low Frequency Enhancement", "usbaudio.ac_if_mu.wChannelConfig.d3", + FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d4, + { "Left Surround", "usbaudio.ac_if_mu.wChannelConfig.d4", + FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d5, + { "Right Surround", "usbaudio.ac_if_mu.wChannelConfig.d5", + FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d6, + { "Left of Center", "usbaudio.ac_if_mu.wChannelConfig.d6", + FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d7, + { "Right of Center", "usbaudio.ac_if_mu.wChannelConfig.d7", + FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d8, + { "Surround", "usbaudio.ac_if_mu.wChannelConfig.d8", + FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d9, + { "Side Left", "usbaudio.ac_if_mu.wChannelConfig.d9", + FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d10, + { "Side Right", "usbaudio.ac_if_mu.wChannelConfig.d10", + FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_d11, + { "Top", "usbaudio.ac_if_mu.wChannelConfig.d11", + FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL }}, + { &hf_ac_if_mu_channelconfig_rsv, + { "Reserved", "usbaudio.ac_if_mu.wChannelConfig.rsv", + FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL }}, { &hf_ac_if_mu_channelnames, { "Channel Names", "usbaudio.ac_if_mu.iChannelNames", FT_UINT8, BASE_DEC, NULL, 0x00, "iChannelNames", HFILL }}, @@ -1137,7 +1281,9 @@ proto_register_usb_audio(void) &ett_sysex_msg_fragments, &ett_ac_if_fu_controls, &ett_ac_if_fu_controls0, - &ett_ac_if_fu_controls1 + &ett_ac_if_fu_controls1, + &ett_ac_if_input_channelconfig, + &ett_ac_if_mu_channelconfig }; static ei_register_info ei[] = { |