This book explains, from the beginning, how to write code to communicate with the USB, to be able to write a driver for the four major types of USB controllers; the UHCI, OHCI, EHCI, and the new xHCI. It explains how to send requests to the devices attached, to return the device's descriptors to be able to configure and use the devices. Some examples include drives, mice, keyboards, printers, and external hubs. This is all done without any outside help. In other words, you are communicating directly with the hardware. You are not relying on an existing operating system's function calls. This book also contains example descriptions of why your driver may not be working and then gives details on how to fix it. If you are an operating system development enthusiast, a beginner or a more advanced developer, this is a book for your desk.
The author fully supports this book and upon request and receipt of purchase, will send you an .ISO image with example source code to retrieve a device's Device Descriptor, plugged in to one of the four controller types, along with other source code described within the book.