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>