Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 May 2016 11:53:54 -0500
From:      Karl Denninger <karl@denninger.net>
To:        freebsd-usb@freebsd.org
Subject:   Oddity with ugen
Message-ID:  <b24c5a9a-cb18-c014-75ab-9b923853a70c@denninger.net>

next in thread | raw e-mail | index | archive | help
This is a cryptographically signed message in MIME format.

--------------ms030000040809030000090108
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Consider the following snippet of code....

                sprintf(tmp, "/dev/usb/0.%d.1", x); /* Get input handle *=
/
                _i =3D open(tmp, O_RDONLY|O_NDELAY);  /* Open it */
                if (_i < 0) {
                    syslog(LOG_WARNING, "Error opening USB input channel
(%d)", errno);
                } else {
                    y =3D 8;  /* Set buffer size */
                    if (ioctl(_i, USB_SET_RX_BUFFER_SIZE, &y) < 0) {
                        syslog(LOG_WARNING, "Error setting USB buffer");
                    }
                    y =3D 0;  /* Set timeout */
                    if (ioctl(_i, USB_SET_RX_TIMEOUT, &y) < 0) {
                        syslog(LOG_WARNING, "Error setting USB timeout
to zero")
;
                    }
                    y =3D 1;  /* Set short xfer ok */
                    if (ioctl(_i, USB_SET_RX_SHORT_XFER, &y) < 0) {
                        syslog(LOG_WARNING, "Error setting USB short XFER=
");
                    }
                }
                sprintf(tmp, "/dev/usb/0.%d.2", x); /* Get output handle =
*/
                _o =3D open(tmp, O_WRONLY);   /* Open it */
                if (_o < 0) {
                    syslog(LOG_WARNING, "Error opening USB output
channel (%d)", errno);
                } else {
                    y =3D 8;  /* Set buffer size; low-speed device */
                    if (ioctl(_o, USB_SET_TX_BUFFER_SIZE, &y) < 0) {
                        syslog(LOG_WARNING, "Error setting USB TX buffer"=
);
                    }
                    y =3D 0;  /* Set timeout */
                    if (ioctl(_o, USB_SET_TX_TIMEOUT, &y) < 0) {
                        syslog(LOG_WARNING, "Error setting USB TX timeout=
");
                    }
                }
             =20

Ok, we now have two open handles (we have previously ascertained that
the correct device is at the instance in question ("x") by checking its
vendor number, and we know it has two endpoints, one for input and one
for output.  We also know it is a low-speed device and thus
theoretically is limited to 8-character buffering.

So we start reading and writing and it mostly works. select() works on
the filehandles to know if we can read or write as expected, etc.

The format from the device is in the general form of a preamble byte
that is a flag, a length byte (for most of the preambles) and then up to
six bytes of data.  I read the data into a buffer (so if I get more than
one packet, or a packet and a part of a second one I'm ok) and then
whenever a read succeeds I parse through the buffer and empty it of
anything that's complete.

This is working reasonable well...... except for one problem.

Sometimes, without warning, select() will return a ready on the input
file handle and when you read you get the *last* packet of data you read
back.  You read it, you select() again, you get the same packet of data
again and again.  This can and does go on for a *long* time (sometimes
minutes!) but it does eventually clear on its own.  I *suspect* the
device itself is not actually re-sending the data, but it might be -- I
have no good way to be sure that I'm aware of.

In other words I get something like this:

select() returns ready on _i
bytes =3D read(_i, buffer, 8);

Buffer contains 4 bytes (and bytes =3D 4):  0x50, 0x02, 0x01, 0x04

select() once again returns ready on _i immediately (no delay)
bytes =3D read(_i, buffer, 8);

Buffer contains the same four bytes and bytes =3D 4 again, as if the
read() did not empty the buffer but read it and left the buffer contents
*and count* alone.

If this is a condition of some sort in the device or driver I've not
been able to figure out what it is, or how to force it to clear -- or to
prove whether it's in the device or the ugen driver.

Any ideas?

--=20
Karl Denninger
karl@denninger.net <mailto:karl@denninger.net>
/The Market Ticker/
/[S/MIME encrypted email preferred]/

--------------ms030000040809030000090108
Content-Type: application/pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

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
V7i8rxuycRnUcW51zWDA6UKt3BkAAAAAAAA=
--------------ms030000040809030000090108--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?b24c5a9a-cb18-c014-75ab-9b923853a70c>