0
votes

I'm writing a usb device driver for a data acquisition device in Ubuntu 16.04. The data acquisition device is currently working in Windows and the manufacturer only provides the driver for Windows and I need it to be working in Linux.

So, to do the reverse engineering, I captured the data with Wireshark in Windows. I figured out all the setup urbs and I can send data to the data acquisition device and works well but the problem is to receive the data. It seems that there are continuous(periodic) data coming from endpoints 1 and 3(which are the bulk in endpoints). In Windows, there doesn't seem to be any request packet going to the usb device to receive the data from endpoints 1 and 3 but in Linux, the data is received only when I send some kind of request(for example, read file operation).

I've found that there is something called "Continuous Reader" in Windows, but I can't find any hint in Linux for reading continuous data from usb device. https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/how-to-use-the-continous-reader-for-getting-data-from-a-usb-endpoint--umdf-

I would really appreciate your help, Thank you!

1

1 Answers

0
votes

Are you sure the device doesn't have an intr-IN endpoint to announce availability of data, which is then fetched using bulk IN transfers? How does it configure EP2, which I assume is interrupt? If you use something like libusb you may need to set up an interrupt poller based on the intr-EP description.