This page was written by Frank Zhao in July of 2013. Now it is hosted on Frank's new site.
The reason why I made this tool is because some USB traffic sniffers do not perform parsing on USB packets (especially the freeware ones), but the binary data can still be obtained. This tool will traverse through the binary data, and translate it into something human-readable, using the official documents from USB.org. The three types of data this tool can handle are "USB Standard Descriptors", "USB Standard Requests", and "USB HID Report Descriptors".
The "parse USB HID report descriptor" function is the reverse of the (horrible) "HID Descriptor Tool" provided by USB.org, and the display format is very similar.
Because USB devices are generally embedded devices, this tool is designed with the C programming language in mind. The output can be imported as an array initializer.
I was frustrated when I couldn't find a tool for this, so I wrote it in hopes that it will become useful for everybody looking for such a tool.
If you don't understand this tool, here are some sample datasets I've taken from a Playstation 3 DualShock 3 controller:
This tool is a great companion to a USB traffic sniffer like the Beagle USB 12, available from Adafruit Industries. If you like reverse engineering, also check out the Saleae Logic and Saleae Logic 16.
If you have any comments, please post them here on this blog post.