Hi, I'm working on getting my USB audio DAC to work in 9front. The device implements USB audio 2.0 which is a bit different than the 1.0 supported by nusb/audio, but I made some local changes to deal with that (still WIP though). The main difference is that sampling rate is controlled through a clock source entity connected to the terminal associated with the AS interface rather than being selected through an alternate setting of the AS interface and sampling rate endpoint control. The issue I'm encountering is that the output iso endpoint is asynchronous, and this is not supported by usb(3) or nusb(2). An async iso endpoint is not synchronized to USB (μ)frames, but to some other clock. Instead, sinks use an associated feedback endpoint which provides a fixed-point number of samples to write each frame. This is updated by the device to maintain an optimal buffer level. Luckily, it seems that if I just ignore the feedback endpoint and use the existing pollival/hz/samplesz mechanism, it works well enough. However, the existence of the feedback endpoint breaks several assumptions made in nusb(2). The feedback endpoint has the same number as the data endpoint, which causes usbd to create an unusable rw iso endpoint. Attached patch 1 prevents usbd from creating rw iso endpoints (the feedback endpoint gets mapped to the 0x10|* range, just as for endpoints with different types). The other problem is that nusb(2) assumes that there is a single endpoint per Altc; the settings for the last endpoint in the alt setting take precedence. There is a bit of overlap between fields in Ep and Altc. Both have maxpkt and ntds, but only Altc has pollival. Altc contains the settings of the last endpoint in the alternate setting, and Ep contains the last alt setting of the endpoint, but neither of these is what I want (which is the alt settings of the data endpoint). nusb/audio uses the Altc to prepare the endpoint, so it ends up using the settings for the feedback endpoint to configure the data endpoint. It seems to me that the hierarchy of structures in nusb(2) is not quite right. My best idea about how to fix it is to move Altc from Iface to Ep, since it only seems to be used for endpoint settings. That way, alternate settings for *each* endpoint in the interface are available. We could then drop the maxpkt and ntds fields from Ep, using the ones from altc[0] instead. This would probably be a fairly involved change, and isn't something I want to tackle right now. My current solution is attached patch 2 to keep track of the iso usage in the Ep, and patch 3 to only update the fields in the Altc for *data* endpoints. I believe this should be sufficient for USB audio devices. Anyway, sorry for the long email. Any advice or comments on my patches would be appreciated! -Michael