1 - handle error conditions
2 - handle disconnect more gracefully (ie. make calling layer aware that the device doesn't exist somehow)
4 - proper client enumeration (esp. detach)
7 - handle interrupts more cleverly:
8 create a new queue for the interrupt with a couple of TD sequences,
9 - each ending with "breadth first" flag
11 add that queue at the appropriate times in front of the default structure so the max latency is honored
12 - only one intr chain per framelist item, so it must be arranged appropriately
13 reads from usb device just look at "invalidated" tds and the results they got
14 handled tds get reactivated as a ring structure
15 - added as child of the oldest td
16 - queue header already dropped the td, so no issue there
18 this setup ensures that:
19 - the max latency of the device is honored
20 - the client knows the right order of the data
21 - there is no need for an interrupt handler
22 - but must be polled at least max latency * num tds times -> more tds = less time pressure