aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb-audio.c
diff options
context:
space:
mode:
authorTomasz Moń <desowin@gmail.com>2019-05-03 14:29:28 +0200
committerAnders Broman <a.broman58@gmail.com>2019-05-05 05:07:05 +0000
commit57403dbfd19d78fff4a359500281bb1bb7ca8172 (patch)
tree0df18cc7e5933038550687888a5eaac2d625ae61 /epan/dissectors/packet-usb-audio.c
parent2a76dc638542413d8dda3375aa7e92f9b8db801c (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.c60
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 }},