read(2) always returns 0 when reading from /dev/usb/n.m.k bulk
IN endpoint
Hans Petter Selasky
hselasky at freebsd.org
Mon Jul 12 18:23:00 UTC 2010
On Monday 12 July 2010 19:22:28 Peer Stritzinger wrote:
> 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
Hi,
Maybe you are missing to set the short transfer OK flag.
Else I recommend using LibUSB.
--HPS
More information about the freebsd-usb
mailing list