aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb-audio.c
diff options
context:
space:
mode:
authorAlexis La Goutte <alexis.lagoutte@gmail.com>2016-05-05 12:28:27 +0200
committerMichael Mann <mmann78@netscape.net>2016-05-05 20:49:32 +0000
commit63b02d35e7f7146e6cea99af0e8d43278927db26 (patch)
tree665c0f04b7e773c11501c4ea7178d25b23b082f6 /epan/dissectors/packet-usb-audio.c
parenta68e178b2e43785716aec97c4b59b99f48bae75d (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>
Diffstat (limited to 'epan/dissectors/packet-usb-audio.c')
-rw-r--r--epan/dissectors/packet-usb-audio.c154
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[] = {