USB Design by Example: A Practical Guide to Building I/O Devices, Second Edition

In designing a real BlockIO device, you would spend a great deal of time in this step. A printer, for example, would receive a page of data from the USB, then would have to drive motors to move paper and a print head, and would have to put ink onto the paper. This book assumes that you already know how to do this you design I/O equipment for a living, but need to understand how to add the USB ingredient.
The focus of this design is moving a lot of data, so this example receives blocks of data as fast as possible and stores it in its local memory. Once all of the blocks are received (up to 32 K bytes in this design example), an operation is performed to change the data in some way, and it is then made available for a bulk read.
This example will use the same hardware as the buttons-and-lights example, since the USBSIMM contains a convenient 32 K buffer.
Adding bulk in and bulk out endpoints represents a small change to the descriptor defined in Chapter 7. Figure 11-3 shows the descriptor set for our BlockIO example.
; This example has one Device Descriptor with One Configuration and Two Interfaces:; HID: One HID Descriptor - to make PC host software simpler; ...