read(2) always returns 0 when reading from /dev/usb/n.m.k bulk IN endpoint

Peer Stritzinger peerst at gmail.com
Mon Jul 12 17:48:17 UTC 2010


Hi,

on FreeBSD 8.0-RELEASE I try to read from a bulk IN endpoint device node
with read(2).

The USB client it is talking to is a embedded controller with Cypress SX2
USB client chip, enumeration goes quite well (SX2 does it itself) and its
reported correctly on console.  The device nodes in /dev/usv/n.m.k appear
for the control endpoint and two OUT and IN endpoints each.

I can write to one of the OUT endpoints with e.g. dd and what I read on the
device is correct.

However I can't read any data from a corresponding IN endpoint:  What I
doing is in a loop:

      n = read(in, buf, NBUF);
      printf ("read-test: read %ld bytes\n", n);

this is run as root.

I'm watching the USB with a USB protocol analyzer, BTW its running in
High-Speed.

As soon as the first read is done (and blocks) I see IN->NAK (device did not
write to the IN endpoint) polling on the USB.

When the device writes to the endpoint buffer I see a correct bulk IN
transfer that is ACKed by the host with the analyzer.

However the read always returns 0.

Tried different buffer sizes etc.

Is this supposed to work as I'm using it.  I'm planning to go to libusb-1.0
later, should I debug this with the /dev/usb/n.m.k node reading or proceed
to libusb because my approach can't work anyway?

Best regards,
Peer Stritzinger


More information about the freebsd-usb mailing list