hello greg. I've been trying to keep the noise on this thread to a minimum, but it appears I mis-wrote about what happens when trying to generate zero-length packets. The state of my re-worked ugen(4) is much more stable and I have installed some additional diagnostics to determine what is going on with this issue. With that in mind, here is where things stand:
With ehci(4), when I try to send a zero-length packet, I get the error: USBD_NOMEM back from the usbd_transfer() call. with uhci(4), all now works as expected. I get the call to the callback function and data moves up and down the USB stack as expected. To answer your question about whether there is a standard for generating these packets, it seems there is not. Linux expects you to use an ioctl() to generate the packet while FreeBSD expects you to send a write request with 0 bytes, as we do with the ugen(4) changes I'm making. -thanks -Brian