USB Mass Storage: Designing and Programming Devices and Embedded Hosts