diff options
author | Tomasz Moń <desowin@gmail.com> | 2019-05-03 14:29:28 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2019-05-05 05:07:05 +0000 |
commit | 57403dbfd19d78fff4a359500281bb1bb7ca8172 (patch) | |
tree | 0df18cc7e5933038550687888a5eaac2d625ae61 /epan/dissectors/packet-usb-audio.c | |
parent | 2a76dc638542413d8dda3375aa7e92f9b8db801c (diff) |
USB Audio: Split AS format type dissection by version
Format types differ quite a lot between USB Audio version 1 and 2 thus
it is good to clearly separate the dissection into separate functions.
So far only the format type 1 of version 2 USB Audio Audio Streaming is
dissected.
Ping-Bug: 15503
Change-Id: I40544c7efb05810e2281248d1d1d33951b3b42a9
Reviewed-on: https://code.wireshark.org/review/33065
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-usb-audio.c')
-rw-r--r-- | epan/dissectors/packet-usb-audio.c | 60 |
1 files changed, 51 insertions, 9 deletions
diff --git a/epan/dissectors/packet-usb-audio.c b/epan/dissectors/packet-usb-audio.c index 4c270f7c0a..1469dc844e 100644 --- a/epan/dissectors/packet-usb-audio.c +++ b/epan/dissectors/packet-usb-audio.c @@ -262,6 +262,7 @@ static int hf_as_if_ft_formattype = -1; static int hf_as_if_ft_maxbitrate = -1; static int hf_as_if_ft_nrchannels = -1; static int hf_as_if_ft_subframesize = -1; +static int hf_as_if_ft_subslotsize = -1; static int hf_as_if_ft_bitresolution = -1; static int hf_as_if_ft_samplesperframe = -1; static int hf_as_if_ft_samfreqtype = -1; @@ -1304,19 +1305,13 @@ dissect_as_if_general_body(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, } static gint -dissect_as_if_format_type_body(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, - proto_tree *tree, usb_conv_info_t *usb_conv_info) +dissect_as_if_format_type_ver1_body(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, + proto_tree *tree, audio_conv_info_t *audio_conv_info _U_) { - audio_conv_info_t *audio_conv_info; - gint offset_start; + gint offset_start; guint8 SamFreqType; guint8 format_type; - /* the caller has already checked that usb_conv_info!=NULL */ - audio_conv_info = (audio_conv_info_t *)usb_conv_info->class_data; - if (!audio_conv_info) - return 0; - offset_start = offset; proto_tree_add_item(tree, hf_as_if_ft_formattype, tvb, offset, 1, ENC_LITTLE_ENDIAN); @@ -1384,6 +1379,50 @@ dissect_as_if_format_type_body(tvbuff_t *tvb, gint offset, packet_info *pinfo _U } static gint +dissect_as_if_format_type_ver2_body(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, + proto_tree *tree, audio_conv_info_t *audio_conv_info _U_) +{ + gint offset_start; + guint8 format_type; + + offset_start = offset; + + proto_tree_add_item(tree, hf_as_if_ft_formattype, tvb, offset, 1, ENC_LITTLE_ENDIAN); + format_type = tvb_get_guint8(tvb, offset); + offset++; + + if (format_type==1) { + proto_tree_add_item(tree, hf_as_if_ft_subslotsize, tvb, offset, 1, ENC_LITTLE_ENDIAN); + offset += 1; + + proto_tree_add_item(tree, hf_as_if_ft_bitresolution, tvb, offset, 1, ENC_LITTLE_ENDIAN); + offset += 1; + } + + return offset-offset_start; +} + +static gint +dissect_as_if_format_type_body(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, usb_conv_info_t *usb_conv_info) +{ + audio_conv_info_t *audio_conv_info; + + /* the caller has already checked that usb_conv_info!=NULL */ + audio_conv_info = (audio_conv_info_t *)usb_conv_info->class_data; + if (!audio_conv_info) + return 0; + + if (audio_conv_info->ver_major==1) { + return dissect_as_if_format_type_ver1_body(tvb, offset, pinfo, tree, audio_conv_info); + } else if (audio_conv_info->ver_major==2) { + return dissect_as_if_format_type_ver2_body(tvb, offset, pinfo, tree, audio_conv_info); + } + + return 0; +} + +static gint dissect_usb_audio_descriptor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { @@ -2275,6 +2314,9 @@ proto_register_usb_audio(void) { &hf_as_if_ft_subframesize, { "Subframe Size", "usbaudio.as_if_ft.bSubframeSize", FT_UINT8, BASE_DEC, NULL, 0x00, "bSubframeSize", HFILL }}, + { &hf_as_if_ft_subslotsize, + { "Subslot Size", "usbaudio.as_if_ft.bSubslotSize", + FT_UINT8, BASE_DEC, NULL, 0x00, "bSubslotSize", HFILL }}, { &hf_as_if_ft_bitresolution, { "Bit Resolution", "usbaudio.as_if_ft.bBitResolution", FT_UINT8, BASE_DEC, NULL, 0x00, "bBitResolution", HFILL }}, |