A guide for designing and programming small, embedded systems that access USB devices, this book includes topics such as how embedded USB hosts differ from USB hosts in PCs, choosing a hardware and programming platform for a project, understanding USB host programming in embedded Linux systems, how host applications can access USB devices of all types, and designing a system that can communicate with both USB hosts and USB devices. Example code explains how to read and write to files on drives, get user input from keyboards, communicate over virtual serial ports and Ethernet bridges, record and play audio and video, print documents, use a USB display monitor, and access vendor-defined devices of any type. The example code runs on embedded Linux systems, including the popular BeagleBoard-xM open development board. This book is a companion to USB Complete.