we are using a FX2 controller with a CMOS attached in bulk mode on Windows, mac and linux. In one application we have to use some kind of USB hub between our device and the PC. Due to some noise or other reasons this hub is creating occasionally USB stalls on the bulk endpoint. We can clear the stall condition via the `Reset()` function of the CyAPI.h on Windows. But this seems to re-enumerate the USB device on this port and the application needs to reconnect, which is very inconvenient and takes time. Is there a cleaner way to clear the stall/halt on a bulk endpoint without re-enumerating the devices?
Would appreciate any help on this. Couldn't find much Cypress documentation on USB stall matters.
The re-enumeration should not happen. It is probably due to the USB Hub. After a stall, call Endpoint->Abort(), then remove all IOCTL calls by calling FinishDataXfer() for every queued up transfer. Finally call Endpoint->Reset() to clear the stall and continue with the transfers.