On Mon, Apr 27, 2020 at 9:51 PM Andrey Konovalov <andreyknvl@xxxxxxxxxx> wrote: > > On Fri, Apr 24, 2020 at 9:36 PM Andrey Konovalov <andreyknvl@xxxxxxxxxx> wrote: > > > > On Fri, Apr 10, 2020 at 2:29 AM Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > > > > > > On Thu, 9 Apr 2020, Andrey Konovalov wrote: > > > > > > > Hi Alan and Greg, > > > > > > > > I've been thinking about what kind of features raw-gadget might be > > > > missing, that would allow more flexibility in emulating USB devices. > > > > One of the things that is currently missing is halting endpoints. > > > > Adding this functionality seems to be fairly easy, but it's unclear to > > > > me how to test it. Any suggestions? > > > > > > You should use the usbtest driver along with the testusb program in > > > tools/usb. Of course, to do it you will need a userspace driver for > > > raw-gadget. usbtest works best with gadget-zero, but it can be used > > > (in degraded form) with any USB device. > > > > Hi Alan, > > > > I've started working on a test suite for raw-gadget based on the > > usbtest module as you suggested and have a few questions: > > Another question, which actually seems to be a major problem. > > It looks like automatic endpoint selection based on required features > doesn't work in raw-gadget. The way it tries to do that is iterating > over the list of available endpoints and finding one that has the > right direction and transfer type. But it seems that the right way to > do that (like it's done in usb_ep_autoconfig()) is to also patch the > bEndpointAddress field of the endpoint descriptor. > > Currently with raw-gadget the endpoints are supposed to be enabled > after a set_configuration/set_interface request from the host, so it's > too late to patch the endpoint descriptor (the one that was sent to > the host during enumeration). I'm guessing that sending one endpoint > descriptor during enumeration and then using a different one (with > patched bEndpointAddress) to set ep->desc before doing usb_ep_enable() > won't work (as there's going to be mismatch in endpoint addresses > between the host and the UDC), right? > > I wonder what we can do about that. It seems that we actually need to > parse the descriptors and figure out the right endpoints before the > enumeration starts. Or maybe somehow expose all endpoints and their features (like GadgetFS) and let userspace put proper addresses into endpoint descriptors before enumeration starts.