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