File: usbmon.t

package info (click to toggle)
libnetpacket-perl 1.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 264 kB
  • ctags: 124
  • sloc: perl: 1,060; makefile: 2
file content (197 lines) | stat: -rw-r--r-- 6,476 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
use strict;
use warnings;

use Test::More tests => 103;

use NetPacket::USBMon qw/:ALL/;

my $frame;
my $usbmon;

# host -> device, GET DESCRIPTOR Request DEVICE
$frame = binarize( <<'END_DATAGRAM' );
40 21 9d fa 01 88 ff ff 53 02 80 0a 03 00 00 3c
48 e4 0c 52 00 00 00 00 2f d7 06 00 8d ff ff ff
28 00 00 00 00 00 00 00 80 06 00 01 00 00 28 00
00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );

#is $usbmon->{id} => 0xffff8801fa9d2140;
is $usbmon->{type} => 'S';
is $usbmon->{xfer_type} => USB_XFER_TYPE_CONTROL;
is $usbmon->{ep}{num} => 0;
is $usbmon->{ep}{dir} => 'IN';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_RELEVANT;
is $usbmon->{ts_sec} => 1376576584;
is $usbmon->{ts_usec} => 448303;
is $usbmon->{status} => -115;
is $usbmon->{length} => 40;
is $usbmon->{len_cap} => 0;
is $usbmon->{xfer_flags} => 0x200;
is $usbmon->{data} => '';

# device -> host, GET DESCRIPTOR Response DEVICE
$frame = binarize( <<'END_DATAGRAM' );
40 21 9d fa 01 88 ff ff 43 02 80 0a 03 00 2d 00
48 e4 0c 52 00 00 00 00 24 db 06 00 00 00 00 00
12 00 00 00 12 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00
12 01 00 02 00 00 00 40 71 1b 02 30 00 01 03 04
02 01
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );
is $usbmon->{type} => 'C';
is $usbmon->{xfer_type} => USB_XFER_TYPE_CONTROL;
is $usbmon->{ep}{num} => 0;
is $usbmon->{ep}{dir} => 'IN';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_IRRELEVANT;
is $usbmon->{ts_sec} => 1376576584;
is $usbmon->{ts_usec} => 449316;
is $usbmon->{status} => 0;
is $usbmon->{length} => 18;
is $usbmon->{len_cap} => 18;
is $usbmon->{xfer_flags} => 512;
is length $usbmon->{data} => $usbmon->{len_cap};

# host -> device, SET INTERFACE Request
$frame = binarize( <<'END_DATAGRAM' );
00 2b 9d fa 01 88 ff ff 53 02 00 0a 03 00 00 00
65 e4 0c 52 00 00 00 00 23 62 07 00 8d ff ff ff
00 00 00 00 00 00 00 00 40 0c 01 00 08 c0 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );
is $usbmon->{type} => 'S';
is $usbmon->{xfer_type} => USB_XFER_TYPE_CONTROL;
is $usbmon->{ep}{num} => 0;
is $usbmon->{ep}{dir} => 'OUT';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_RELEVANT;
is $usbmon->{ts_sec} => 1376576613;
is $usbmon->{ts_usec} => 483875;
is $usbmon->{status} => -115;
is $usbmon->{length} => 0;
is $usbmon->{len_cap} => 0;
is $usbmon->{xfer_flags} => 0;
is $usbmon->{data} => '';
is $usbmon->{setup}{bmRequestType} => USB_TYPE_VENDOR;
is $usbmon->{setup}{bRequest} => 12;
is $usbmon->{setup}{wIndex} => 49160;
is $usbmon->{setup}{wLength} => 0;
is $usbmon->{setup}{wValue} => 1;

# device -> host, SET INTERFACE Response
$frame = binarize( <<'END_DATAGRAM' );
00 2b 9d fa 01 88 ff ff 43 02 00 0a 03 00 2d 3e
65 e4 0c 52 00 00 00 00 ae 61 07 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );
is $usbmon->{type} => 'C';
is $usbmon->{xfer_type} => USB_XFER_TYPE_CONTROL;
is $usbmon->{ep}{num} => 0;
is $usbmon->{ep}{dir} => 'OUT';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_IRRELEVANT;
is $usbmon->{ts_sec} => 1376576613;
is $usbmon->{ts_usec} => 483758;
is $usbmon->{status} => 0;
is $usbmon->{length} => 0;
is $usbmon->{len_cap} => 0;
is $usbmon->{xfer_flags} => 0;
is $usbmon->{data} => '';

# host -> device, URB_CONTROL out
$frame = binarize( <<'END_DATAGRAM' );
00 2b 9d fa 01 88 ff ff 53 02 00 0a 03 00 00 00
65 e4 0c 52 00 00 00 00 23 62 07 00 8d ff ff ff
00 00 00 00 00 00 00 00 40 0c 01 00 08 c0 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );
is $usbmon->{type} => 'S';
is $usbmon->{xfer_type} => USB_XFER_TYPE_CONTROL;
is $usbmon->{ep}{num} => 0;
is $usbmon->{ep}{dir} => 'OUT';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_RELEVANT;
is $usbmon->{ts_sec} => 1376576613;
is $usbmon->{ts_usec} => 483875;
is $usbmon->{status} => -115;
is $usbmon->{length} => 0;
is $usbmon->{len_cap} => 0;
is $usbmon->{xfer_flags} => 0;
is $usbmon->{data} => '';

# device -> host, URB_CONTROL out
$frame = binarize( <<'END_DATAGRAM' );
00 2b 9d fa 01 88 ff ff 43 02 00 0a 03 00 2d 3e
65 e4 0c 52 00 00 00 00 1e 64 07 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );
is $usbmon->{type} => 'C';
is $usbmon->{xfer_type} => USB_XFER_TYPE_CONTROL;
is $usbmon->{ep}{num} => 0;
is $usbmon->{ep}{dir} => 'OUT';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_IRRELEVANT;
is $usbmon->{ts_sec} => 1376576613;
is $usbmon->{ts_usec} => 484382;
is $usbmon->{status} => 0;
is $usbmon->{length} => 0;
is $usbmon->{len_cap} => 0;
is $usbmon->{xfer_flags} => 0;
is $usbmon->{data} => '';

# host -> device, URB_ISOCHRONOUS in
$frame = binarize( <<'END_DATAGRAM' );
00 ce 6b 19 01 88 ff ff 53 00 81 0a 03 00 2d 3c
65 e4 0c 52 00 00 00 00 be 16 08 00 8d ff ff ff
00 60 00 00 80 00 00 00 00 00 00 00 08 00 00 00
01 00 00 00 00 00 00 00 02 02 00 00 08 00 00 00
ee ff ff ff 00 00 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 0c 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 18 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 24 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 30 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 3c 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 48 00 00 00 0c 00 00 00 00 00 00
ee ff ff ff 00 54 00 00 00 0c 00 00 00 00 00 00
END_DATAGRAM

$usbmon = NetPacket::USBMon->decode( $frame );
is $usbmon->{type} => 'S';
is $usbmon->{xfer_type} => USB_XFER_TYPE_ISO;
is $usbmon->{ep}{num} => 1;
is $usbmon->{ep}{dir} => 'IN';
is $usbmon->{devnum} => 10;
is $usbmon->{busnum} => 3;
is $usbmon->{flag_setup} => USB_FLAG_SETUP_IRRELEVANT;
is $usbmon->{ts_sec} => 1376576613;
is $usbmon->{ts_usec} => 530110;
is $usbmon->{status} => -115;
is $usbmon->{length} => 24576;
is $usbmon->{len_cap} => 128;
is $usbmon->{xfer_flags} => 514;
is length $usbmon->{data} => $usbmon->{len_cap};

# Copied from t/tcp.t, uglified.
sub binarize { return join '' => map { chr hex } split ' ', shift; }