Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jul 2010 19:22:28 +0200
From:      Peer Stritzinger <peerst@gmail.com>
To:        freebsd-usb@freebsd.org
Subject:   read(2) always returns 0 when reading from /dev/usb/n.m.k bulk IN  endpoint
Message-ID:  <AANLkTikOoAnGG4TN-lZf8VC3bF48u-oEXoSR3E8TOyiH@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTikOoAnGG4TN-lZf8VC3bF48u-oEXoSR3E8TOyiH>