diff options
Diffstat (limited to 'Documentation/usb/usbmon.txt')
-rw-r--r-- | Documentation/usb/usbmon.txt | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/Documentation/usb/usbmon.txt b/Documentation/usb/usbmon.txt index 2f8431f92b77..63cb7edd177e 100644 --- a/Documentation/usb/usbmon.txt +++ b/Documentation/usb/usbmon.txt | |||
@@ -101,6 +101,13 @@ Here is the list of words, from left to right: | |||
101 | or 3 and 2 positions, correspondingly. | 101 | or 3 and 2 positions, correspondingly. |
102 | - URB Status. This field makes no sense for submissions, but is present | 102 | - URB Status. This field makes no sense for submissions, but is present |
103 | to help scripts with parsing. In error case, it contains the error code. | 103 | to help scripts with parsing. In error case, it contains the error code. |
104 | In case of a setup packet, it contains a Setup Tag. If scripts read a number | ||
105 | in this field, they proceed to read Data Length. Otherwise, they read | ||
106 | the setup packet before reading the Data Length. | ||
107 | - Setup packet, if present, consists of 5 words: one of each for bmRequestType, | ||
108 | bRequest, wValue, wIndex, wLength, as specified by the USB Specification 2.0. | ||
109 | These words are safe to decode if Setup Tag was 's'. Otherwise, the setup | ||
110 | packet was present, but not captured, and the fields contain filler. | ||
104 | - Data Length. This is the actual length in the URB. | 111 | - Data Length. This is the actual length in the URB. |
105 | - Data tag. The usbmon may not always capture data, even if length is nonzero. | 112 | - Data tag. The usbmon may not always capture data, even if length is nonzero. |
106 | Only if tag is '=', the data words are present. | 113 | Only if tag is '=', the data words are present. |
@@ -125,25 +132,31 @@ class ParsedLine { | |||
125 | String data_str = st.nextToken(); | 132 | String data_str = st.nextToken(); |
126 | int len = data_str.length() / 2; | 133 | int len = data_str.length() / 2; |
127 | int i; | 134 | int i; |
135 | int b; // byte is signed, apparently?! XXX | ||
128 | for (i = 0; i < len; i++) { | 136 | for (i = 0; i < len; i++) { |
129 | data[data_len] = Byte.parseByte( | 137 | // data[data_len] = Byte.parseByte( |
130 | data_str.substring(i*2, i*2 + 2), | 138 | // data_str.substring(i*2, i*2 + 2), |
131 | 16); | 139 | // 16); |
140 | b = Integer.parseInt( | ||
141 | data_str.substring(i*2, i*2 + 2), | ||
142 | 16); | ||
143 | if (b >= 128) | ||
144 | b *= -1; | ||
145 | data[data_len] = (byte) b; | ||
132 | data_len++; | 146 | data_len++; |
133 | } | 147 | } |
134 | } | 148 | } |
135 | } | 149 | } |
136 | } | 150 | } |
137 | 151 | ||
138 | This format is obviously deficient. For example, the setup packet for control | 152 | This format may be changed in the future. |
139 | transfers is not delivered. This will change in the future. | ||
140 | 153 | ||
141 | Examples: | 154 | Examples: |
142 | 155 | ||
143 | An input control transfer to get a port status: | 156 | An input control transfer to get a port status. |
144 | 157 | ||
145 | d74ff9a0 2640288196 S Ci:001:00 -115 4 < | 158 | d5ea89a0 3575914555 S Ci:001:00 s a3 00 0000 0003 0004 4 < |
146 | d74ff9a0 2640288202 C Ci:001:00 0 4 = 01010100 | 159 | d5ea89a0 3575914560 C Ci:001:00 0 4 = 01050000 |
147 | 160 | ||
148 | An output bulk transfer to send a SCSI command 0x5E in a 31-byte Bulk wrapper | 161 | An output bulk transfer to send a SCSI command 0x5E in a 31-byte Bulk wrapper |
149 | to a storage device at address 5: | 162 | to a storage device at address 5: |