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; }
|