USB mass storage : designing and programming devices and embedded hosts