ulpt problem (USB_ERR_IOERROR)

Patrick Lamaiziere patfbsd at davenulle.org
Thu Jul 16 22:50:07 UTC 2009


Le Thu, 16 Jul 2009 22:22:10 +0200,
Hans Petter Selasky <hselasky at c2i.net> a écrit :

> Could you try to add an "if (sc->sc_fflags == 0)" in front, like this:
> 
> 	/* 
> 	 * Only read status while the device is not opened, due to
> 	 * possible hardware or firmware bug in some printers.
> 	 */
> 	if (sc->sc_fflags == 0)
> 		usbd_transfer_start(sc->sc_xfer[ULPT_INTR_DT_RD]);

It works fine with this check. Cool!

But why, that is not clear. FreeBSD 7.2 checks the status of the
printer only when the device is opened and before each write.
http://fxr.watson.org/fxr/source/dev/usb/ulpt.c?v=FREEBSD7#L637

> > Not related but I noticed that usb_write() in usb_dev.c returns -1
> > if I hit Ctrl-C when doing a "cat file > /dev/unlpt0". Because
> > usb_fifo_wait(f) returns -1 (should be EINTR?).
> 
> If cv_wait_sig() returns -1, then they do not behave like in the
> manual page:

Yes I saw, I will try to dig more into the code.
(will open a new thread for this)

Thank you very much, regards.


More information about the freebsd-current mailing list