Only need setup on endpoint zero.
Make a struct private.
Move dtd to usb.h.
Pass length and buffer-remaining to the dtd callbacks.