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>