On Tue, Sep 02, 2003 at 10:48:18AM -0400, Joe Philipps wrote:
> The first one (of \r) goes through just fine.  The second
> one (of \n) however sees the INPROGRESS flag, and dutifully reports
> back to its caller that the char has not been written (returns written
> count != requested count, basically).  The routine that called it,
> serial_write(), also dutifully returns the count written.  But the
> problem is that particular return value is discarded because the
> funtion that called it returns void.  There's no "retry loop" or
> anything.

Yup, that's a real problem and has been documented as such for quite
some time now :(

> So what's the most practical solution?  Can serial_write() pause until
> INPROGRESS clears?

That wouldn't be the nicest, but could work.

> Should a put_char() be added, and how should it be implemented?

It had better not fail either.

> Should serial_write() just accept the charater and buffer it somehow,
> and write it onto the USB at some future time (such as in the callback
> routines)?

Some individual usb-serial drivers work this way.  So for now, this is
the easiest solution for this problem.

But for the "proper" solution, the usb-serial core should probably be
changed over to use the serial core.  That would help out with this
problem, and others.  But that's a 2.7 issue at the earliest.  For now,
you might just want to tweak the keyspan driver to work with your setup.


greg k-h

This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
To unsubscribe, use the last form field at:

Reply via email to